summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--JavaScriptCore/ChangeLog752
-rw-r--r--JavaScriptCore/Configurations/FeatureDefines.xcconfig5
-rw-r--r--JavaScriptCore/Configurations/Version.xcconfig2
-rw-r--r--JavaScriptCore/GNUmakefile.am1
-rw-r--r--JavaScriptCore/JavaScriptCore.gypi1
-rw-r--r--JavaScriptCore/JavaScriptCore.pri1
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def2
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj87
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/WTF/WTF.vcproj63
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/jsc/jsc.vcproj63
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/testapi/testapi.vcproj71
-rw-r--r--JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj5
-rw-r--r--JavaScriptCore/JavaScriptCorePrefix.h1
-rw-r--r--JavaScriptCore/assembler/AbstractMacroAssembler.h4
-rw-r--r--JavaScriptCore/assembler/CodeLocation.h3
-rw-r--r--JavaScriptCore/bytecode/CodeBlock.cpp51
-rw-r--r--JavaScriptCore/bytecode/CodeBlock.h13
-rw-r--r--JavaScriptCore/bytecode/Opcode.h4
-rw-r--r--JavaScriptCore/bytecompiler/BytecodeGenerator.cpp27
-rw-r--r--JavaScriptCore/bytecompiler/BytecodeGenerator.h20
-rw-r--r--JavaScriptCore/bytecompiler/NodesCodegen.cpp64
-rw-r--r--JavaScriptCore/interpreter/Interpreter.cpp169
-rw-r--r--JavaScriptCore/jit/JIT.cpp5
-rw-r--r--JavaScriptCore/jit/JIT.h7
-rw-r--r--JavaScriptCore/jit/JITInlineMethods.h11
-rw-r--r--JavaScriptCore/jit/JITOpcodes.cpp47
-rw-r--r--JavaScriptCore/jit/JITOpcodes32_64.cpp54
-rw-r--r--JavaScriptCore/jit/JITStubs.cpp80
-rw-r--r--JavaScriptCore/jit/JITStubs.h4
-rw-r--r--JavaScriptCore/parser/Nodes.h5
-rw-r--r--JavaScriptCore/runtime/Error.cpp34
-rw-r--r--JavaScriptCore/runtime/Error.h2
-rw-r--r--JavaScriptCore/runtime/ErrorInstance.cpp2
-rw-r--r--JavaScriptCore/runtime/ErrorInstance.h9
-rw-r--r--JavaScriptCore/runtime/ExceptionHelpers.cpp110
-rw-r--r--JavaScriptCore/runtime/ExceptionHelpers.h15
-rw-r--r--JavaScriptCore/runtime/JSFunction.cpp14
-rw-r--r--JavaScriptCore/runtime/JSGlobalData.cpp1
-rw-r--r--JavaScriptCore/runtime/JSGlobalData.h1
-rw-r--r--JavaScriptCore/runtime/JSNotAnObject.cpp39
-rw-r--r--JavaScriptCore/runtime/JSNotAnObject.h26
-rw-r--r--JavaScriptCore/runtime/JSObject.h2
-rw-r--r--JavaScriptCore/runtime/JSValue.cpp20
-rw-r--r--JavaScriptCore/wtf/Platform.h15
-rw-r--r--JavaScriptCore/wtf/text/CString.cpp25
-rw-r--r--JavaScriptCore/wtf/text/StringImpl.cpp81
-rw-r--r--JavaScriptCore/wtf/text/TextPosition.h141
-rw-r--r--JavaScriptCore/wtf/text/WTFString.cpp44
-rw-r--r--JavaScriptCore/wtf/wtf.pri8
-rw-r--r--JavaScriptCore/yarr/RegexCompiler.cpp253
-rw-r--r--JavaScriptCore/yarr/RegexInterpreter.cpp211
-rw-r--r--JavaScriptCore/yarr/RegexInterpreter.h22
-rw-r--r--JavaScriptCore/yarr/RegexJIT.h4
-rw-r--r--JavaScriptCore/yarr/RegexParser.h2
-rw-r--r--JavaScriptCore/yarr/RegexPattern.h30
-rw-r--r--JavaScriptGlue/Configurations/Version.xcconfig2
-rw-r--r--JavaScriptGlue/ForwardingHeaders/wtf/text/TextPosition.h1
-rw-r--r--LayoutTests/fast/dom/Attr/access-after-element-destruction-expected.txt2
-rw-r--r--LayoutTests/fast/dom/Attr/script-tests/access-after-element-destruction.js2
-rw-r--r--LayoutTests/fast/dom/Geolocation/script-tests/timestamp.js34
-rw-r--r--LayoutTests/fast/dom/Geolocation/timestamp-expected.txt14
-rw-r--r--LayoutTests/fast/dom/Geolocation/timestamp.html13
-rw-r--r--WebCore/Android.derived.jscbindings.mk2
-rw-r--r--WebCore/Android.derived.v8bindings.mk2
-rw-r--r--WebCore/Android.jscbindings.mk1
-rw-r--r--WebCore/Android.mk9
-rw-r--r--WebCore/Android.v8bindings.mk4
-rw-r--r--WebCore/CMakeLists.txt50
-rw-r--r--WebCore/CMakeListsEfl.txt37
-rw-r--r--WebCore/ChangeLog5770
-rw-r--r--WebCore/Configurations/FeatureDefines.xcconfig5
-rw-r--r--WebCore/Configurations/Version.xcconfig2
-rw-r--r--WebCore/DerivedSources.cpp7
-rw-r--r--WebCore/DerivedSources.make11
-rw-r--r--WebCore/English.lproj/localizedStrings.jsbin52034 -> 52406 bytes
-rw-r--r--WebCore/ForwardingHeaders/wtf/text/TextPosition.h4
-rw-r--r--WebCore/GNUmakefile.am115
-rw-r--r--WebCore/WebCore.exp.in23
-rw-r--r--WebCore/WebCore.gypi44
-rw-r--r--WebCore/WebCore.order4
-rw-r--r--WebCore/WebCore.pri6
-rw-r--r--WebCore/WebCore.pro102
-rw-r--r--WebCore/WebCore.vcproj/QTMovieWin.vcproj115
-rw-r--r--WebCore/WebCore.vcproj/QTMovieWinCommon.vsprops28
-rw-r--r--WebCore/WebCore.vcproj/WebCore.make6
-rw-r--r--WebCore/WebCore.vcproj/WebCore.sln7
-rw-r--r--WebCore/WebCore.vcproj/WebCore.vcproj8863
-rw-r--r--WebCore/WebCore.vcproj/WebCoreCairo.vsprops2
-rwxr-xr-xWebCore/WebCore.vcproj/copyForwardingHeaders.cmd1
-rw-r--r--WebCore/WebCore.xcodeproj/project.pbxproj254
-rw-r--r--WebCore/WebCorePrefix.h11
-rw-r--r--WebCore/accessibility/AccessibilityObject.cpp2
-rw-r--r--WebCore/accessibility/AccessibilityRenderObject.cpp8
-rw-r--r--WebCore/accessibility/gtk/AXObjectCacheAtk.cpp59
-rw-r--r--WebCore/accessibility/mac/AccessibilityObjectWrapper.mm2
-rw-r--r--WebCore/bindings/generic/RuntimeEnabledFeatures.h2
-rw-r--r--WebCore/bindings/gobject/GObjectEventListener.cpp7
-rw-r--r--WebCore/bindings/gobject/GObjectEventListener.h7
-rw-r--r--WebCore/bindings/js/JSAudioContextCustom.cpp57
-rw-r--r--WebCore/bindings/js/JSAudioNodeCustom.cpp75
-rw-r--r--WebCore/bindings/js/JSBindingsAllInOne.cpp1
-rw-r--r--WebCore/bindings/js/JSCSSRuleCustom.cpp5
-rw-r--r--WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp12
-rw-r--r--WebCore/bindings/js/JSDeviceMotionEventCustom.cpp2
-rw-r--r--WebCore/bindings/js/JSDeviceOrientationEventCustom.cpp6
-rw-r--r--WebCore/bindings/js/JSEventCustom.cpp9
-rw-r--r--WebCore/bindings/js/JSEventTarget.cpp10
-rw-r--r--WebCore/bindings/js/JSSVGMatrixCustom.cpp82
-rw-r--r--WebCore/bindings/js/JSStyleSheetCustom.cpp8
-rw-r--r--WebCore/bindings/js/ScriptSourceCode.h5
-rw-r--r--WebCore/bindings/objc/DOMCSS.mm3
-rw-r--r--WebCore/bindings/scripts/CodeGenerator.pm55
-rw-r--r--WebCore/bindings/scripts/CodeGeneratorJS.pm244
-rw-r--r--WebCore/bindings/scripts/CodeGeneratorObjC.pm173
-rw-r--r--WebCore/bindings/scripts/CodeGeneratorV8.pm480
-rw-r--r--WebCore/bindings/v8/ScheduledAction.cpp2
-rw-r--r--WebCore/bindings/v8/ScriptController.cpp14
-rw-r--r--WebCore/bindings/v8/ScriptController.h3
-rw-r--r--WebCore/bindings/v8/ScriptEventListener.cpp20
-rw-r--r--WebCore/bindings/v8/ScriptSourceCode.h12
-rw-r--r--WebCore/bindings/v8/V8DOMWrapper.cpp9
-rw-r--r--WebCore/bindings/v8/V8GCController.cpp23
-rw-r--r--WebCore/bindings/v8/V8LazyEventListener.cpp7
-rw-r--r--WebCore/bindings/v8/V8LazyEventListener.h10
-rw-r--r--WebCore/bindings/v8/V8Proxy.cpp13
-rw-r--r--WebCore/bindings/v8/V8Proxy.h2
-rw-r--r--WebCore/bindings/v8/WorkerContextExecutionProxy.cpp6
-rw-r--r--WebCore/bindings/v8/WorkerContextExecutionProxy.h3
-rw-r--r--WebCore/bindings/v8/WorkerScriptController.cpp2
-rw-r--r--WebCore/bindings/v8/custom/V8AudioContextCustom.cpp60
-rw-r--r--WebCore/bindings/v8/custom/V8AudioNodeCustom.cpp91
-rw-r--r--WebCore/bindings/v8/custom/V8CSSRuleCustom.cpp3
-rw-r--r--WebCore/bindings/v8/custom/V8EventCustom.cpp8
-rw-r--r--WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp27
-rw-r--r--WebCore/bindings/v8/custom/V8SVGMatrixCustom.cpp102
-rw-r--r--WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp55
-rw-r--r--WebCore/bridge/jni/jsc/JNIUtilityPrivate.cpp3
-rw-r--r--WebCore/config.h2
-rw-r--r--WebCore/css/CSSBorderImageValue.h1
-rw-r--r--WebCore/css/CSSComputedStyleDeclaration.cpp1
-rw-r--r--WebCore/css/CSSCursorImageValue.h1
-rw-r--r--WebCore/css/CSSFontFace.cpp11
-rw-r--r--WebCore/css/CSSFontFace.h12
-rw-r--r--WebCore/css/CSSFontFaceSource.cpp9
-rw-r--r--WebCore/css/CSSFontFaceSource.h1
-rw-r--r--WebCore/css/CSSFontSelector.cpp40
-rw-r--r--WebCore/css/CSSGrammar.y151
-rw-r--r--WebCore/css/CSSImageValue.h3
-rw-r--r--WebCore/css/CSSMutableStyleDeclaration.cpp17
-rw-r--r--WebCore/css/CSSMutableStyleDeclaration.h9
-rw-r--r--WebCore/css/CSSParser.cpp118
-rw-r--r--WebCore/css/CSSParser.h14
-rw-r--r--WebCore/css/CSSParserValues.cpp11
-rw-r--r--WebCore/css/CSSParserValues.h5
-rw-r--r--WebCore/css/CSSPrimitiveValue.cpp201
-rw-r--r--WebCore/css/CSSPrimitiveValue.h39
-rw-r--r--WebCore/css/CSSProperty.cpp2
-rw-r--r--WebCore/css/CSSPropertyNames.in1
-rw-r--r--WebCore/css/CSSReflectValue.h2
-rw-r--r--WebCore/css/CSSRule.h4
-rw-r--r--WebCore/css/CSSRule.idl1
-rw-r--r--WebCore/css/CSSSegmentedFontFace.cpp2
-rw-r--r--WebCore/css/CSSStyleDeclaration.cpp8
-rw-r--r--WebCore/css/CSSStyleSelector.cpp674
-rw-r--r--WebCore/css/CSSStyleSelector.h9
-rw-r--r--WebCore/css/CSSValue.h6
-rw-r--r--WebCore/css/CSSVariablesDeclaration.cpp175
-rw-r--r--WebCore/css/CSSVariablesDeclaration.h82
-rw-r--r--WebCore/css/CSSVariablesDeclaration.idl44
-rw-r--r--WebCore/css/CSSVariablesRule.h70
-rw-r--r--WebCore/css/FontFamilyValue.h1
-rw-r--r--WebCore/css/SVGCSSStyleSelector.cpp17
-rw-r--r--WebCore/css/ShadowValue.h2
-rw-r--r--WebCore/css/StyleBase.h1
-rw-r--r--WebCore/css/StyleSheet.cpp20
-rw-r--r--WebCore/css/StyleSheet.h1
-rw-r--r--WebCore/css/WebKitCSSMatrix.cpp17
-rw-r--r--WebCore/css/WebKitCSSMatrix.h16
-rw-r--r--WebCore/css/html.css19
-rw-r--r--WebCore/css/themeQtMobile.css9
-rw-r--r--WebCore/css/tokenizer.flex5
-rw-r--r--WebCore/dom/AsyncScriptRunner.cpp4
-rw-r--r--WebCore/dom/AsyncScriptRunner.h6
-rw-r--r--WebCore/dom/Attr.idl4
-rw-r--r--WebCore/dom/ContainerNode.cpp36
-rw-r--r--WebCore/dom/DOMAllInOne.cpp2
-rw-r--r--WebCore/dom/DOMTimeStamp.h50
-rw-r--r--WebCore/dom/Document.cpp63
-rw-r--r--WebCore/dom/Document.h12
-rw-r--r--WebCore/dom/Document.idl16
-rw-r--r--WebCore/dom/DocumentTiming.h6
-rw-r--r--WebCore/dom/DocumentType.cpp6
-rw-r--r--WebCore/dom/Element.cpp9
-rw-r--r--WebCore/dom/Element.h1
-rw-r--r--WebCore/dom/Event.cpp11
-rw-r--r--WebCore/dom/Event.h7
-rw-r--r--WebCore/dom/EventContext.cpp (renamed from WebCore/css/CSSVariableDependentValue.cpp)32
-rw-r--r--WebCore/dom/EventContext.h (renamed from WebCore/css/CSSVariablesRule.cpp)58
-rw-r--r--WebCore/dom/EventNames.h2
-rw-r--r--WebCore/dom/EventTarget.cpp7
-rw-r--r--WebCore/dom/EventTarget.h6
-rw-r--r--WebCore/dom/KeyboardEvent.h2
-rw-r--r--WebCore/dom/MouseRelatedEvent.cpp2
-rw-r--r--WebCore/dom/Node.cpp125
-rw-r--r--WebCore/dom/Node.h21
-rw-r--r--WebCore/dom/PendingScript.cpp2
-rw-r--r--WebCore/dom/PendingScript.h11
-rw-r--r--WebCore/dom/Position.cpp4
-rw-r--r--WebCore/dom/PositionIterator.cpp4
-rw-r--r--WebCore/dom/ProcessingInstruction.cpp14
-rw-r--r--WebCore/dom/ScriptElement.cpp132
-rw-r--r--WebCore/dom/ScriptElement.h81
-rw-r--r--WebCore/dom/ScriptableDocumentParser.h4
-rw-r--r--WebCore/dom/SelectElement.cpp49
-rw-r--r--WebCore/dom/StyleElement.cpp20
-rw-r--r--WebCore/dom/StyleElement.h2
-rw-r--r--WebCore/dom/StyledElement.cpp21
-rw-r--r--WebCore/dom/Text.cpp5
-rw-r--r--WebCore/dom/ViewportArguments.cpp2
-rw-r--r--WebCore/dom/WindowEventContext.cpp64
-rw-r--r--WebCore/dom/WindowEventContext.h (renamed from WebCore/css/CSSVariableDependentValue.h)52
-rw-r--r--WebCore/dom/XMLDocumentParser.h12
-rw-r--r--WebCore/dom/XMLDocumentParserLibxml2.cpp33
-rw-r--r--WebCore/dom/XMLDocumentParserQt.cpp25
-rw-r--r--WebCore/editing/AppendNodeCommand.cpp2
-rw-r--r--WebCore/editing/ApplyStyleCommand.cpp26
-rw-r--r--WebCore/editing/CompositeEditCommand.cpp10
-rw-r--r--WebCore/editing/DeleteSelectionCommand.cpp2
-rw-r--r--WebCore/editing/Editor.cpp73
-rw-r--r--WebCore/editing/MergeIdenticalElementsCommand.cpp2
-rw-r--r--WebCore/editing/SelectionController.cpp9
-rw-r--r--WebCore/editing/TextCheckingHelper.cpp181
-rw-r--r--WebCore/editing/TextCheckingHelper.h46
-rw-r--r--WebCore/editing/htmlediting.cpp2
-rw-r--r--WebCore/editing/markup.cpp2
-rw-r--r--WebCore/editing/visible_units.cpp8
-rw-r--r--WebCore/features.pri5
-rw-r--r--WebCore/fileapi/FileWriterSync.cpp85
-rw-r--r--WebCore/fileapi/FileWriterSync.h83
-rw-r--r--WebCore/fileapi/FileWriterSync.idl44
-rw-r--r--WebCore/html/BaseDateAndTimeInputType.cpp5
-rw-r--r--WebCore/html/BaseDateAndTimeInputType.h1
-rw-r--r--WebCore/html/EmailInputType.cpp6
-rw-r--r--WebCore/html/EmailInputType.h1
-rw-r--r--WebCore/html/FileInputType.cpp10
-rw-r--r--WebCore/html/FileInputType.h1
-rw-r--r--WebCore/html/HTMLAreaElement.cpp2
-rw-r--r--WebCore/html/HTMLAttributeNames.in5
-rw-r--r--WebCore/html/HTMLButtonElement.cpp5
-rw-r--r--WebCore/html/HTMLButtonElement.h1
-rw-r--r--WebCore/html/HTMLButtonElement.idl4
-rw-r--r--WebCore/html/HTMLElement.cpp8
-rw-r--r--WebCore/html/HTMLEmbedElement.cpp8
-rw-r--r--WebCore/html/HTMLFormControlElement.cpp57
-rw-r--r--WebCore/html/HTMLFormControlElement.h6
-rw-r--r--WebCore/html/HTMLFormElement.cpp66
-rw-r--r--WebCore/html/HTMLFormElement.h3
-rw-r--r--WebCore/html/HTMLFrameElementBase.cpp7
-rw-r--r--WebCore/html/HTMLFrameElementBase.h2
-rw-r--r--WebCore/html/HTMLFrameOwnerElement.h1
-rw-r--r--WebCore/html/HTMLInputElement.cpp198
-rw-r--r--WebCore/html/HTMLInputElement.h15
-rw-r--r--WebCore/html/HTMLInputElement.idl6
-rw-r--r--WebCore/html/HTMLLinkElement.cpp18
-rw-r--r--WebCore/html/HTMLMediaElement.cpp141
-rw-r--r--WebCore/html/HTMLMediaElement.h10
-rw-r--r--WebCore/html/HTMLObjectElement.cpp2
-rw-r--r--WebCore/html/HTMLOutputElement.cpp6
-rw-r--r--WebCore/html/HTMLOutputElement.h1
-rw-r--r--WebCore/html/HTMLScriptElement.cpp46
-rw-r--r--WebCore/html/HTMLScriptElement.h14
-rw-r--r--WebCore/html/HTMLStyleElement.cpp11
-rw-r--r--WebCore/html/HTMLStyleElement.h3
-rw-r--r--WebCore/html/HTMLTableElement.cpp2
-rw-r--r--WebCore/html/HTMLTableRowsCollection.cpp16
-rw-r--r--WebCore/html/HTMLTagNames.in6
-rw-r--r--WebCore/html/HTMLTextAreaElement.h4
-rw-r--r--WebCore/html/HTMLViewSourceDocument.cpp2
-rw-r--r--WebCore/html/ImageInputType.cpp22
-rw-r--r--WebCore/html/ImageInputType.h5
-rw-r--r--WebCore/html/InputType.cpp40
-rw-r--r--WebCore/html/InputType.h19
-rw-r--r--WebCore/html/MediaDocument.cpp2
-rw-r--r--WebCore/html/NumberInputType.cpp29
-rw-r--r--WebCore/html/NumberInputType.h4
-rw-r--r--WebCore/html/RadioInputType.cpp7
-rw-r--r--WebCore/html/RadioInputType.h1
-rw-r--r--WebCore/html/RangeInputType.cpp41
-rw-r--r--WebCore/html/RangeInputType.h1
-rw-r--r--WebCore/html/ResetInputType.cpp11
-rw-r--r--WebCore/html/ResetInputType.h1
-rw-r--r--WebCore/html/SubmitInputType.cpp13
-rw-r--r--WebCore/html/SubmitInputType.h1
-rw-r--r--WebCore/html/TextFieldInputType.cpp28
-rw-r--r--WebCore/html/TextFieldInputType.h2
-rw-r--r--WebCore/html/URLInputType.cpp6
-rw-r--r--WebCore/html/URLInputType.h1
-rw-r--r--WebCore/html/ValidityState.cpp47
-rw-r--r--WebCore/html/canvas/CanvasRenderingContext2D.cpp10
-rw-r--r--WebCore/html/canvas/WebGLRenderingContext.cpp83
-rw-r--r--WebCore/html/canvas/WebGLRenderingContext.h20
-rw-r--r--WebCore/html/canvas/WebGLRenderingContext.idl17
-rw-r--r--WebCore/html/parser/HTMLConstructionSite.cpp4
-rw-r--r--WebCore/html/parser/HTMLDocumentParser.cpp14
-rw-r--r--WebCore/html/parser/HTMLDocumentParser.h2
-rw-r--r--WebCore/html/parser/HTMLParserIdioms.cpp72
-rw-r--r--WebCore/html/parser/HTMLParserIdioms.h1
-rw-r--r--WebCore/html/parser/HTMLScriptRunner.cpp34
-rw-r--r--WebCore/html/parser/HTMLScriptRunner.h6
-rw-r--r--WebCore/html/parser/HTMLTreeBuilder.cpp32
-rw-r--r--WebCore/html/parser/HTMLTreeBuilder.h7
-rw-r--r--WebCore/inspector/CodeGeneratorInspector.pm5
-rw-r--r--WebCore/inspector/Inspector.idl14
-rw-r--r--WebCore/inspector/InspectorCSSAgent.cpp148
-rw-r--r--WebCore/inspector/InspectorCSSAgent.h20
-rw-r--r--WebCore/inspector/InspectorController.cpp41
-rw-r--r--WebCore/inspector/InspectorController.h3
-rw-r--r--WebCore/inspector/InspectorDOMAgent.cpp16
-rw-r--r--WebCore/inspector/InspectorDOMAgent.h1
-rw-r--r--WebCore/inspector/InspectorFileSystemAgent.cpp19
-rw-r--r--WebCore/inspector/InspectorInstrumentation.cpp8
-rw-r--r--WebCore/inspector/InspectorInstrumentation.h8
-rw-r--r--WebCore/inspector/InspectorStyleSheet.cpp164
-rw-r--r--WebCore/inspector/InspectorStyleSheet.h17
-rw-r--r--WebCore/inspector/front-end/AuditResultView.js3
-rw-r--r--WebCore/inspector/front-end/AuditRules.js50
-rw-r--r--WebCore/inspector/front-end/BreakpointManager.js18
-rw-r--r--WebCore/inspector/front-end/BreakpointsSidebarPane.js14
-rw-r--r--WebCore/inspector/front-end/CSSStyleModel.js411
-rw-r--r--WebCore/inspector/front-end/CallStackSidebarPane.js11
-rw-r--r--WebCore/inspector/front-end/DOMAgent.js290
-rw-r--r--WebCore/inspector/front-end/DatabaseQueryView.js4
-rw-r--r--WebCore/inspector/front-end/DatabaseTableView.js2
-rw-r--r--WebCore/inspector/front-end/ElementsTreeOutline.js93
-rw-r--r--WebCore/inspector/front-end/ExtensionAPI.js97
-rw-r--r--WebCore/inspector/front-end/ExtensionServer.js4
-rw-r--r--WebCore/inspector/front-end/Images/auditsIcon.pngbin3815 -> 3997 bytes
-rw-r--r--WebCore/inspector/front-end/Images/storageIcon.pngbin7148 -> 0 bytes
-rw-r--r--WebCore/inspector/front-end/NetworkPanel.js4
-rw-r--r--WebCore/inspector/front-end/ObjectPropertiesSection.js23
-rw-r--r--WebCore/inspector/front-end/ResourceManager.js16
-rw-r--r--WebCore/inspector/front-end/ResourceView.js85
-rw-r--r--WebCore/inspector/front-end/ResourcesPanel.js (renamed from WebCore/inspector/front-end/StoragePanel.js)23
-rw-r--r--WebCore/inspector/front-end/ScriptsPanel.js4
-rw-r--r--WebCore/inspector/front-end/Settings.js3
-rw-r--r--WebCore/inspector/front-end/StylesSidebarPane.js165
-rw-r--r--WebCore/inspector/front-end/TabbedPane.js68
-rw-r--r--WebCore/inspector/front-end/TextPrompt.js28
-rw-r--r--WebCore/inspector/front-end/WebKit.qrc3
-rw-r--r--WebCore/inspector/front-end/WorkersSidebarPane.js3
-rw-r--r--WebCore/inspector/front-end/inspector.css102
-rw-r--r--WebCore/inspector/front-end/inspector.html2
-rw-r--r--WebCore/inspector/front-end/inspector.js54
-rw-r--r--WebCore/inspector/front-end/networkPanel.css14
-rw-r--r--WebCore/inspector/front-end/textViewer.css2
-rw-r--r--WebCore/inspector/front-end/treeoutline.js18
-rw-r--r--WebCore/loader/DocumentLoader.cpp15
-rw-r--r--WebCore/loader/DocumentThreadableLoader.cpp3
-rw-r--r--WebCore/loader/FormSubmission.cpp46
-rw-r--r--WebCore/loader/FormSubmission.h2
-rw-r--r--WebCore/loader/FrameLoader.cpp35
-rw-r--r--WebCore/loader/FrameLoader.h19
-rw-r--r--WebCore/loader/MainResourceLoader.cpp2
-rw-r--r--WebCore/loader/NetscapePlugInStreamLoader.cpp8
-rw-r--r--WebCore/loader/NetscapePlugInStreamLoader.h2
-rw-r--r--WebCore/loader/ProgressTracker.cpp2
-rw-r--r--WebCore/loader/ResourceLoadNotifier.cpp8
-rw-r--r--WebCore/loader/ResourceLoadNotifier.h2
-rw-r--r--WebCore/loader/ResourceLoadScheduler.cpp282
-rw-r--r--WebCore/loader/ResourceLoadScheduler.h113
-rw-r--r--WebCore/loader/ResourceLoader.cpp53
-rw-r--r--WebCore/loader/ResourceLoader.h12
-rw-r--r--WebCore/loader/SubresourceLoader.cpp3
-rw-r--r--WebCore/loader/cache/CachedCSSStyleSheet.cpp5
-rw-r--r--WebCore/loader/cache/CachedCSSStyleSheet.h2
-rw-r--r--WebCore/loader/cache/CachedFont.cpp7
-rw-r--r--WebCore/loader/cache/CachedFont.h2
-rw-r--r--WebCore/loader/cache/CachedImage.cpp7
-rw-r--r--WebCore/loader/cache/CachedImage.h4
-rw-r--r--WebCore/loader/cache/CachedResource.cpp5
-rw-r--r--WebCore/loader/cache/CachedResource.h14
-rw-r--r--WebCore/loader/cache/CachedScript.cpp5
-rw-r--r--WebCore/loader/cache/CachedScript.h2
-rw-r--r--WebCore/loader/cache/CachedXSLStyleSheet.cpp5
-rw-r--r--WebCore/loader/cache/CachedXSLStyleSheet.h2
-rw-r--r--WebCore/loader/icon/IconLoader.cpp3
-rw-r--r--WebCore/loader/loader.cpp421
-rw-r--r--WebCore/loader/loader.h82
-rw-r--r--WebCore/manual-tests/compositing/caret-in-compositing-frame.html7
-rw-r--r--WebCore/manual-tests/compositing/resources/editable-compositing-subframe.html9
-rw-r--r--WebCore/manual-tests/display-none-option.html11
-rw-r--r--WebCore/manual-tests/print-onload-with-image.html13
-rw-r--r--WebCore/manual-tests/select-scroll.html34
-rw-r--r--WebCore/manual-tests/svg-deep-clone-to-new-doc.html56
-rw-r--r--WebCore/mathml/RenderMathMLFraction.cpp4
-rw-r--r--WebCore/mathml/RenderMathMLFraction.h2
-rw-r--r--WebCore/mathml/RenderMathMLOperator.cpp4
-rw-r--r--WebCore/mathml/RenderMathMLOperator.h2
-rw-r--r--WebCore/mathml/RenderMathMLRow.cpp6
-rw-r--r--WebCore/mathml/RenderMathMLRow.h2
-rw-r--r--WebCore/mathml/RenderMathMLSubSup.cpp6
-rw-r--r--WebCore/mathml/RenderMathMLSubSup.h2
-rw-r--r--WebCore/mathml/RenderMathMLUnderOver.cpp16
-rw-r--r--WebCore/mathml/RenderMathMLUnderOver.h2
-rw-r--r--WebCore/page/Console.cpp25
-rw-r--r--WebCore/page/DOMWindow.cpp18
-rw-r--r--WebCore/page/DOMWindow.h5
-rw-r--r--WebCore/page/DOMWindow.idl5
-rw-r--r--WebCore/page/DragController.cpp3
-rw-r--r--WebCore/page/EventHandler.cpp10
-rw-r--r--WebCore/page/EventSource.cpp6
-rw-r--r--WebCore/page/FocusController.cpp10
-rw-r--r--WebCore/page/Frame.cpp23
-rw-r--r--WebCore/page/Frame.h2
-rw-r--r--WebCore/page/FrameTree.cpp24
-rw-r--r--WebCore/page/FrameTree.h2
-rw-r--r--WebCore/page/FrameView.cpp3
-rw-r--r--WebCore/page/Geolocation.cpp44
-rw-r--r--WebCore/page/Geolocation.h15
-rw-r--r--WebCore/page/GeolocationClient.h (renamed from WebCore/page/GeolocationControllerClient.h)10
-rw-r--r--WebCore/page/GeolocationController.cpp4
-rw-r--r--WebCore/page/GeolocationController.h6
-rw-r--r--WebCore/page/Page.cpp4
-rw-r--r--WebCore/page/Page.h4
-rw-r--r--WebCore/page/Performance.cpp12
-rw-r--r--WebCore/page/Performance.h12
-rw-r--r--WebCore/page/Performance.idl4
-rw-r--r--WebCore/page/PerformanceNavigation.cpp (renamed from WebCore/page/Navigation.cpp)12
-rw-r--r--WebCore/page/PerformanceNavigation.h (renamed from WebCore/page/Navigation.h)14
-rw-r--r--WebCore/page/PerformanceNavigation.idl (renamed from WebCore/page/Navigation.idl)2
-rw-r--r--WebCore/page/PerformanceTiming.cpp (renamed from WebCore/page/Timing.cpp)70
-rw-r--r--WebCore/page/PerformanceTiming.h (renamed from WebCore/page/Timing.h)16
-rw-r--r--WebCore/page/PerformanceTiming.idl (renamed from WebCore/page/Timing.idl)6
-rw-r--r--WebCore/page/SecurityOrigin.cpp12
-rw-r--r--WebCore/page/SecurityOrigin.h5
-rw-r--r--WebCore/platform/ContextMenu.h1
-rw-r--r--WebCore/platform/ContextMenuItem.h4
-rw-r--r--WebCore/platform/CrossThreadCopier.h6
-rw-r--r--WebCore/platform/LocalizedStrings.cpp23
-rw-r--r--WebCore/platform/LocalizedStrings.h11
-rw-r--r--WebCore/platform/MIMETypeRegistry.cpp27
-rw-r--r--WebCore/platform/PopupMenuClient.h4
-rw-r--r--WebCore/platform/PopupMenuStyle.h5
-rw-r--r--WebCore/platform/ScrollView.cpp22
-rw-r--r--WebCore/platform/ScrollView.h5
-rw-r--r--WebCore/platform/android/FileSystemAndroid.cpp6
-rw-r--r--WebCore/platform/android/GeolocationServiceAndroid.cpp6
-rw-r--r--WebCore/platform/android/LocalizedStringsAndroid.cpp26
-rw-r--r--WebCore/platform/android/PlatformBridge.h5
-rw-r--r--WebCore/platform/audio/AudioBus.h2
-rw-r--r--WebCore/platform/audio/AudioChannel.h2
-rw-r--r--WebCore/platform/audio/HRTFElevation.cpp4
-rw-r--r--WebCore/platform/audio/Panner.cpp5
-rw-r--r--WebCore/platform/audio/Panner.h7
-rw-r--r--WebCore/platform/audio/VectorMath.cpp10
-rw-r--r--WebCore/platform/audio/mac/AudioBusMac.mm66
-rw-r--r--WebCore/platform/audio/mac/AudioFileReaderMac.cpp1
-rw-r--r--WebCore/platform/brew/LocalizedStringsBrew.cpp26
-rw-r--r--WebCore/platform/chromium/ChromiumBridge.h1
-rw-r--r--WebCore/platform/chromium/PopupMenuChromium.cpp53
-rw-r--r--WebCore/platform/chromium/PopupMenuChromium.h10
-rw-r--r--WebCore/platform/chromium/SearchPopupMenuChromium.cpp6
-rw-r--r--WebCore/platform/efl/LocalizedStringsEfl.cpp23
-rw-r--r--WebCore/platform/graphics/ContextShadow.h15
-rw-r--r--WebCore/platform/graphics/Extensions3D.h23
-rw-r--r--WebCore/platform/graphics/Font.cpp69
-rw-r--r--WebCore/platform/graphics/Font.h6
-rw-r--r--WebCore/platform/graphics/FontBaseline.h (renamed from WebCore/css/CSSVariablesRule.idl)20
-rw-r--r--WebCore/platform/graphics/FontFastPath.cpp17
-rw-r--r--WebCore/platform/graphics/GraphicsContext.h1
-rw-r--r--WebCore/platform/graphics/GraphicsContext3D.cpp3
-rw-r--r--WebCore/platform/graphics/GraphicsContext3D.h13
-rw-r--r--WebCore/platform/graphics/ImageSource.cpp5
-rw-r--r--WebCore/platform/graphics/ImageSource.h3
-rw-r--r--WebCore/platform/graphics/IntPoint.h5
-rw-r--r--WebCore/platform/graphics/IntRect.h2
-rw-r--r--WebCore/platform/graphics/IntSize.h5
-rw-r--r--WebCore/platform/graphics/MediaPlayer.cpp37
-rw-r--r--WebCore/platform/graphics/MediaPlayer.h2
-rw-r--r--WebCore/platform/graphics/MediaPlayerPrivate.h5
-rw-r--r--WebCore/platform/graphics/SimpleFontData.cpp31
-rw-r--r--WebCore/platform/graphics/SimpleFontData.h22
-rw-r--r--WebCore/platform/graphics/cairo/RefPtrCairo.cpp12
-rw-r--r--WebCore/platform/graphics/cairo/RefPtrCairo.h4
-rw-r--r--WebCore/platform/graphics/cg/FontPlatformData.h5
-rw-r--r--WebCore/platform/graphics/cg/GraphicsContext3DCG.cpp3
-rw-r--r--WebCore/platform/graphics/cg/ImageSourceCG.cpp3
-rw-r--r--WebCore/platform/graphics/chromium/ContentLayerChromium.cpp82
-rw-r--r--WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp27
-rw-r--r--WebCore/platform/graphics/chromium/Extensions3DChromium.h6
-rw-r--r--WebCore/platform/graphics/chromium/FontLinux.cpp118
-rw-r--r--WebCore/platform/graphics/chromium/FontPlatformDataChromiumWin.h3
-rw-r--r--WebCore/platform/graphics/chromium/FontPlatformDataLinux.h3
-rw-r--r--WebCore/platform/graphics/chromium/ImageLayerChromium.cpp2
-rw-r--r--WebCore/platform/graphics/chromium/LayerChromium.cpp50
-rw-r--r--WebCore/platform/graphics/chromium/LayerChromium.h39
-rw-r--r--WebCore/platform/graphics/chromium/LayerRendererChromium.cpp577
-rw-r--r--WebCore/platform/graphics/chromium/LayerRendererChromium.h39
-rw-r--r--WebCore/platform/graphics/chromium/RenderSurfaceChromium.cpp88
-rw-r--r--WebCore/platform/graphics/chromium/RenderSurfaceChromium.h71
-rw-r--r--WebCore/platform/graphics/chromium/SimpleFontDataChromiumWin.cpp5
-rw-r--r--WebCore/platform/graphics/chromium/SimpleFontDataLinux.cpp4
-rw-r--r--WebCore/platform/graphics/chromium/VideoLayerChromium.cpp1
-rw-r--r--WebCore/platform/graphics/cocoa/FontPlatformData.h2
-rw-r--r--WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm27
-rw-r--r--WebCore/platform/graphics/freetype/FontCacheFreeType.cpp (renamed from WebCore/platform/graphics/cairo/FontCacheFreeType.cpp)0
-rw-r--r--WebCore/platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp (renamed from WebCore/platform/graphics/cairo/FontCustomPlatformData.cpp)0
-rw-r--r--WebCore/platform/graphics/freetype/FontPlatformData.h (renamed from WebCore/platform/graphics/cairo/FontPlatformDataFreeType.h)3
-rw-r--r--WebCore/platform/graphics/freetype/FontPlatformDataFreeType.cpp (renamed from WebCore/platform/graphics/cairo/FontPlatformDataFreeType.cpp)0
-rw-r--r--WebCore/platform/graphics/freetype/GlyphPageTreeNodeFreeType.cpp (renamed from WebCore/platform/graphics/cairo/GlyphPageTreeNodeCairo.cpp)0
-rw-r--r--WebCore/platform/graphics/freetype/SimpleFontDataFreeType.cpp (renamed from WebCore/platform/graphics/cairo/SimpleFontDataCairo.cpp)5
-rw-r--r--WebCore/platform/graphics/gpu/DrawingBuffer.cpp181
-rw-r--r--WebCore/platform/graphics/gpu/DrawingBuffer.h20
-rw-r--r--WebCore/platform/graphics/gpu/mac/DrawingBufferMac.mm57
-rw-r--r--WebCore/platform/graphics/gstreamer/ImageGStreamer.h4
-rw-r--r--WebCore/platform/graphics/gstreamer/ImageGStreamerQt.cpp67
-rw-r--r--WebCore/platform/graphics/gstreamer/PlatformVideoWindowPrivate.h44
-rw-r--r--WebCore/platform/graphics/gstreamer/PlatformVideoWindowQt.cpp82
-rw-r--r--WebCore/platform/graphics/gtk/FontGtk.cpp159
-rw-r--r--WebCore/platform/graphics/gtk/GdkCairoUtilities.cpp63
-rw-r--r--WebCore/platform/graphics/haiku/SimpleFontDataHaiku.cpp4
-rw-r--r--WebCore/platform/graphics/mac/ComplexTextController.cpp4
-rw-r--r--WebCore/platform/graphics/mac/ComplexTextControllerATSUI.cpp2
-rw-r--r--WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp37
-rw-r--r--WebCore/platform/graphics/mac/FontCacheMac.mm4
-rw-r--r--WebCore/platform/graphics/mac/FontMac.mm2
-rw-r--r--WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp2
-rw-r--r--WebCore/platform/graphics/mac/GraphicsContext3DMac.mm11
-rw-r--r--WebCore/platform/graphics/mac/GraphicsLayerMac.h (renamed from WebCore/platform/graphics/mac/GraphicsLayerCA.h)12
-rw-r--r--WebCore/platform/graphics/mac/GraphicsLayerMac.mm (renamed from WebCore/platform/graphics/mac/GraphicsLayerCA.mm)268
-rw-r--r--WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.h12
-rw-r--r--WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm196
-rw-r--r--WebCore/platform/graphics/mac/SimpleFontDataCoreText.cpp6
-rw-r--r--WebCore/platform/graphics/mac/SimpleFontDataMac.mm31
-rw-r--r--WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp18
-rw-r--r--WebCore/platform/graphics/opengl/Extensions3DOpenGL.h2
-rw-r--r--WebCore/platform/graphics/pango/FontCachePango.cpp (renamed from WebCore/platform/graphics/gtk/FontCachePango.cpp)0
-rw-r--r--WebCore/platform/graphics/pango/FontCustomPlatformDataPango.cpp (renamed from WebCore/platform/graphics/gtk/FontCustomPlatformDataPango.cpp)0
-rw-r--r--WebCore/platform/graphics/pango/FontPlatformData.h (renamed from WebCore/platform/graphics/gtk/FontPlatformDataPango.h)3
-rw-r--r--WebCore/platform/graphics/pango/FontPlatformDataPango.cpp (renamed from WebCore/platform/graphics/gtk/FontPlatformDataPango.cpp)1
-rw-r--r--WebCore/platform/graphics/pango/GlyphPageTreeNodePango.cpp (renamed from WebCore/platform/graphics/gtk/GlyphPageTreeNodePango.cpp)0
-rw-r--r--WebCore/platform/graphics/pango/SimpleFontDataPango.cpp (renamed from WebCore/platform/graphics/gtk/SimpleFontDataPango.cpp)0
-rw-r--r--WebCore/platform/graphics/qt/FontPlatformData.h4
-rw-r--r--WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp2
-rw-r--r--WebCore/platform/graphics/qt/GraphicsContextQt.cpp16
-rw-r--r--WebCore/platform/graphics/qt/ImageDecoderQt.cpp8
-rw-r--r--WebCore/platform/graphics/qt/ImageDecoderQt.h2
-rw-r--r--WebCore/platform/graphics/qt/ImageQt.cpp21
-rw-r--r--WebCore/platform/graphics/qt/PathQt.cpp7
-rw-r--r--WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp7
-rw-r--r--WebCore/platform/graphics/skia/ImageBufferSkia.cpp21
-rw-r--r--WebCore/platform/graphics/transforms/TransformOperations.h5
-rw-r--r--WebCore/platform/graphics/win/SimpleFontDataWin.cpp19
-rw-r--r--WebCore/platform/graphics/win/UniscribeController.cpp14
-rw-r--r--WebCore/platform/graphics/win/cairo/FontPlatformData.h (renamed from WebCore/platform/graphics/win/FontPlatformDataCairoWin.h)0
-rw-r--r--WebCore/platform/graphics/wince/FontPlatformData.h3
-rw-r--r--WebCore/platform/graphics/wx/FontPlatformData.h3
-rw-r--r--WebCore/platform/graphics/wx/SimpleFontDataWx.cpp5
-rw-r--r--WebCore/platform/gtk/GtkVersioning.c2
-rw-r--r--WebCore/platform/gtk/LocalizedStringsGtk.cpp26
-rw-r--r--WebCore/platform/gtk/RenderThemeGtk.cpp137
-rw-r--r--WebCore/platform/gtk/RenderThemeGtk.h11
-rw-r--r--WebCore/platform/gtk/ScrollbarThemeGtk.cpp17
-rw-r--r--WebCore/platform/gtk/WidgetRenderingContext.h56
-rw-r--r--WebCore/platform/gtk/WidgetRenderingContextGtk2.cpp170
-rw-r--r--WebCore/platform/gtk/WidgetRenderingContextGtk3.cpp52
-rw-r--r--WebCore/platform/gtk/gtk3drawing.c8
-rw-r--r--WebCore/platform/haiku/LocalizedStringsHaiku.cpp26
-rw-r--r--WebCore/platform/image-decoders/ImageDecoder.cpp18
-rw-r--r--WebCore/platform/image-decoders/ImageDecoder.h8
-rw-r--r--WebCore/platform/image-decoders/bmp/BMPImageDecoder.cpp4
-rw-r--r--WebCore/platform/image-decoders/bmp/BMPImageDecoder.h2
-rw-r--r--WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp9
-rw-r--r--WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp4
-rw-r--r--WebCore/platform/image-decoders/gif/GIFImageDecoder.h2
-rw-r--r--WebCore/platform/image-decoders/ico/ICOImageDecoder.cpp6
-rw-r--r--WebCore/platform/image-decoders/ico/ICOImageDecoder.h2
-rw-r--r--WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp4
-rw-r--r--WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h2
-rw-r--r--WebCore/platform/image-decoders/png/PNGImageDecoder.cpp15
-rw-r--r--WebCore/platform/image-decoders/png/PNGImageDecoder.h2
-rw-r--r--WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp4
-rw-r--r--WebCore/platform/image-decoders/webp/WEBPImageDecoder.h2
-rw-r--r--WebCore/platform/mac/ContextMenuItemMac.mm44
-rw-r--r--WebCore/platform/mac/ContextMenuMac.mm12
-rw-r--r--WebCore/platform/mac/ScrollAnimatorMac.cpp60
-rw-r--r--WebCore/platform/mac/ScrollAnimatorMac.h49
-rw-r--r--WebCore/platform/mac/WebCoreSystemInterface.h5
-rw-r--r--WebCore/platform/mac/WebCoreSystemInterface.mm5
-rw-r--r--WebCore/platform/mock/DeviceOrientationClientMock.cpp1
-rw-r--r--WebCore/platform/mock/SpeechInputClientMock.cpp6
-rw-r--r--WebCore/platform/mock/SpeechInputClientMock.h1
-rw-r--r--WebCore/platform/network/chromium/ResourceRequest.cpp2
-rw-r--r--WebCore/platform/network/chromium/ResourceRequest.h10
-rw-r--r--WebCore/platform/qt/ContextMenuItemQt.cpp15
-rw-r--r--WebCore/platform/qt/ContextMenuQt.cpp6
-rw-r--r--WebCore/platform/qt/CookieJarQt.cpp1
-rw-r--r--WebCore/platform/qt/RenderThemeQt.cpp27
-rw-r--r--WebCore/platform/text/BidiResolver.h78
-rw-r--r--WebCore/platform/text/TextCodecUTF16.cpp12
-rw-r--r--WebCore/platform/text/TextStream.cpp6
-rw-r--r--WebCore/platform/text/cf/HyphenationCF.cpp34
-rw-r--r--WebCore/platform/text/mac/TextBreakIteratorInternalICUMac.mm14
-rw-r--r--WebCore/platform/win/ContextMenuItemWin.cpp15
-rw-r--r--WebCore/platform/win/ContextMenuWin.cpp6
-rw-r--r--WebCore/platform/win/EditorWin.cpp2
-rw-r--r--WebCore/platform/wince/EditorWinCE.cpp43
-rw-r--r--WebCore/platform/wx/LocalizedStringsWx.cpp26
-rw-r--r--WebCore/plugins/PluginStream.cpp8
-rw-r--r--WebCore/rendering/InlineBox.cpp14
-rw-r--r--WebCore/rendering/InlineBox.h9
-rw-r--r--WebCore/rendering/InlineFlowBox.cpp230
-rw-r--r--WebCore/rendering/InlineFlowBox.h9
-rw-r--r--WebCore/rendering/InlineTextBox.cpp8
-rw-r--r--WebCore/rendering/InlineTextBox.h2
-rw-r--r--WebCore/rendering/MediaControlElements.cpp16
-rw-r--r--WebCore/rendering/RenderBlock.cpp88
-rw-r--r--WebCore/rendering/RenderBlock.h4
-rw-r--r--WebCore/rendering/RenderBlockLineLayout.cpp76
-rw-r--r--WebCore/rendering/RenderBox.cpp71
-rw-r--r--WebCore/rendering/RenderBox.h14
-rw-r--r--WebCore/rendering/RenderBoxModelObject.cpp47
-rw-r--r--WebCore/rendering/RenderBoxModelObject.h10
-rw-r--r--WebCore/rendering/RenderFileUploadControl.cpp2
-rw-r--r--WebCore/rendering/RenderFlexibleBox.cpp2
-rw-r--r--WebCore/rendering/RenderImage.cpp67
-rw-r--r--WebCore/rendering/RenderImage.h7
-rw-r--r--WebCore/rendering/RenderInline.cpp19
-rw-r--r--WebCore/rendering/RenderInline.h6
-rw-r--r--WebCore/rendering/RenderLayer.cpp9
-rw-r--r--WebCore/rendering/RenderLayer.h3
-rw-r--r--WebCore/rendering/RenderLayerBacking.cpp2
-rw-r--r--WebCore/rendering/RenderListBox.cpp4
-rw-r--r--WebCore/rendering/RenderListBox.h2
-rw-r--r--WebCore/rendering/RenderListItem.cpp40
-rw-r--r--WebCore/rendering/RenderListMarker.cpp206
-rw-r--r--WebCore/rendering/RenderListMarker.h2
-rw-r--r--WebCore/rendering/RenderMenuList.cpp4
-rw-r--r--WebCore/rendering/RenderMenuList.h2
-rw-r--r--WebCore/rendering/RenderObject.cpp11
-rw-r--r--WebCore/rendering/RenderObject.h6
-rw-r--r--WebCore/rendering/RenderReplaced.cpp26
-rw-r--r--WebCore/rendering/RenderReplaced.h2
-rw-r--r--WebCore/rendering/RenderRuby.cpp3
-rw-r--r--WebCore/rendering/RenderRuby.h4
-rw-r--r--WebCore/rendering/RenderRubyBase.cpp3
-rw-r--r--WebCore/rendering/RenderRubyBase.h4
-rw-r--r--WebCore/rendering/RenderRubyRun.cpp12
-rw-r--r--WebCore/rendering/RenderRubyRun.h4
-rw-r--r--WebCore/rendering/RenderRubyText.cpp3
-rw-r--r--WebCore/rendering/RenderRubyText.h4
-rw-r--r--WebCore/rendering/RenderSVGGradientStop.cpp2
-rw-r--r--WebCore/rendering/RenderSVGViewportContainer.h1
-rw-r--r--WebCore/rendering/RenderSlider.cpp5
-rw-r--r--WebCore/rendering/RenderSlider.h2
-rw-r--r--WebCore/rendering/RenderTable.cpp14
-rw-r--r--WebCore/rendering/RenderTableCell.cpp8
-rw-r--r--WebCore/rendering/RenderTableCell.h2
-rw-r--r--WebCore/rendering/RenderTableRow.cpp11
-rw-r--r--WebCore/rendering/RenderTableSection.cpp55
-rw-r--r--WebCore/rendering/RenderText.cpp18
-rw-r--r--WebCore/rendering/RenderTextControl.cpp69
-rw-r--r--WebCore/rendering/RenderTextControl.h7
-rw-r--r--WebCore/rendering/RenderTextControlMultiLine.cpp49
-rw-r--r--WebCore/rendering/RenderTextControlMultiLine.h4
-rw-r--r--WebCore/rendering/RenderTextControlSingleLine.cpp70
-rw-r--r--WebCore/rendering/RenderTextControlSingleLine.h5
-rw-r--r--WebCore/rendering/RenderTreeAsText.cpp38
-rw-r--r--WebCore/rendering/RenderTreeAsText.h4
-rw-r--r--WebCore/rendering/RenderView.cpp17
-rw-r--r--WebCore/rendering/RootInlineBox.cpp24
-rw-r--r--WebCore/rendering/RootInlineBox.h11
-rw-r--r--WebCore/rendering/SVGImageBufferTools.cpp4
-rw-r--r--WebCore/rendering/ShadowElement.cpp2
-rw-r--r--WebCore/rendering/ShadowElement.h6
-rw-r--r--WebCore/rendering/TextControlInnerElements.cpp14
-rw-r--r--WebCore/rendering/TextControlInnerElements.h6
-rw-r--r--WebCore/rendering/VerticalPositionCache.h70
-rw-r--r--WebCore/rendering/style/RenderStyle.cpp30
-rw-r--r--WebCore/rendering/style/RenderStyle.h2
-rw-r--r--WebCore/rendering/svg/SVGInlineTextBox.cpp2
-rw-r--r--WebCore/storage/IDBFactoryBackendInterface.cpp5
-rw-r--r--WebCore/storage/IDBFactoryBackendInterface.h3
-rw-r--r--WebCore/storage/IDBKey.cpp4
-rw-r--r--WebCore/storage/chromium/IDBFactoryBackendInterface.cpp6
-rw-r--r--WebCore/svg/DeprecatedSVGAnimatedPropertyTraits.h15
-rw-r--r--WebCore/svg/DeprecatedSVGAnimatedTemplate.h5
-rw-r--r--WebCore/svg/SVGAElement.cpp6
-rw-r--r--WebCore/svg/SVGAnimateTransformElement.cpp35
-rw-r--r--WebCore/svg/SVGAnimatedTransformList.h (renamed from WebCore/platform/graphics/cairo/FontPlatformData.h)26
-rw-r--r--WebCore/svg/SVGAnimationElement.cpp48
-rw-r--r--WebCore/svg/SVGAnimationElement.h1
-rw-r--r--WebCore/svg/SVGCircleElement.cpp6
-rw-r--r--WebCore/svg/SVGElement.cpp7
-rw-r--r--WebCore/svg/SVGElement.h2
-rw-r--r--WebCore/svg/SVGEllipseElement.cpp6
-rw-r--r--WebCore/svg/SVGFEDisplacementMapElement.cpp12
-rw-r--r--WebCore/svg/SVGFEDisplacementMapElement.h1
-rw-r--r--WebCore/svg/SVGFEImageElement.cpp8
-rw-r--r--WebCore/svg/SVGFEImageElement.h1
-rw-r--r--WebCore/svg/SVGFELightElement.cpp8
-rw-r--r--WebCore/svg/SVGFEMergeNodeElement.cpp6
-rw-r--r--WebCore/svg/SVGFETileElement.cpp8
-rw-r--r--WebCore/svg/SVGFETileElement.h1
-rw-r--r--WebCore/svg/SVGForeignObjectElement.cpp4
-rw-r--r--WebCore/svg/SVGGElement.cpp6
-rw-r--r--WebCore/svg/SVGGradientElement.cpp12
-rw-r--r--WebCore/svg/SVGGradientElement.h3
-rw-r--r--WebCore/svg/SVGImageElement.cpp4
-rw-r--r--WebCore/svg/SVGLength.cpp2
-rw-r--r--WebCore/svg/SVGLineElement.cpp6
-rw-r--r--WebCore/svg/SVGLinearGradientElement.cpp7
-rw-r--r--WebCore/svg/SVGMatrix.h131
-rw-r--r--WebCore/svg/SVGMatrix.idl32
-rw-r--r--WebCore/svg/SVGPathElement.cpp4
-rw-r--r--WebCore/svg/SVGPatternElement.cpp19
-rw-r--r--WebCore/svg/SVGPatternElement.h3
-rw-r--r--WebCore/svg/SVGPoint.idl2
-rw-r--r--WebCore/svg/SVGPolyElement.cpp6
-rw-r--r--WebCore/svg/SVGRadialGradientElement.cpp7
-rw-r--r--WebCore/svg/SVGRectElement.cpp6
-rw-r--r--WebCore/svg/SVGSVGElement.cpp33
-rw-r--r--WebCore/svg/SVGSVGElement.h9
-rw-r--r--WebCore/svg/SVGScriptElement.cpp53
-rw-r--r--WebCore/svg/SVGScriptElement.h11
-rw-r--r--WebCore/svg/SVGStyleElement.cpp11
-rw-r--r--WebCore/svg/SVGStyleElement.h3
-rw-r--r--WebCore/svg/SVGStyledElement.cpp4
-rw-r--r--WebCore/svg/SVGStyledTransformableElement.cpp17
-rw-r--r--WebCore/svg/SVGStyledTransformableElement.h2
-rw-r--r--WebCore/svg/SVGTests.cpp24
-rw-r--r--WebCore/svg/SVGTests.h5
-rw-r--r--WebCore/svg/SVGTextContentElement.cpp11
-rw-r--r--WebCore/svg/SVGTextContentElement.h1
-rw-r--r--WebCore/svg/SVGTextElement.cpp16
-rw-r--r--WebCore/svg/SVGTextElement.h3
-rw-r--r--WebCore/svg/SVGTransform.cpp44
-rw-r--r--WebCore/svg/SVGTransform.h109
-rw-r--r--WebCore/svg/SVGTransform.idl26
-rw-r--r--WebCore/svg/SVGTransformList.cpp57
-rw-r--r--WebCore/svg/SVGTransformList.h27
-rw-r--r--WebCore/svg/SVGTransformList.idl18
-rw-r--r--WebCore/svg/SVGTransformable.cpp73
-rw-r--r--WebCore/svg/SVGTransformable.h4
-rw-r--r--WebCore/svg/SVGUseElement.cpp8
-rw-r--r--WebCore/svg/SVGViewSpec.cpp5
-rw-r--r--WebCore/svg/SVGViewSpec.h4
-rw-r--r--WebCore/svg/animation/SMILTimeContainer.cpp6
-rw-r--r--WebCore/svg/animation/SVGSMILElement.cpp2
-rw-r--r--WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h2
-rw-r--r--WebCore/svg/properties/SVGAnimatedPropertyMacros.h14
-rw-r--r--WebCore/svg/properties/SVGAnimatedTransformListPropertyTearOff.h64
-rw-r--r--WebCore/svg/properties/SVGListProperty.h4
-rw-r--r--WebCore/svg/properties/SVGListPropertyTearOff.h3
-rw-r--r--WebCore/svg/properties/SVGProperty.h2
-rw-r--r--WebCore/svg/properties/SVGPropertyTearOff.h4
-rw-r--r--WebCore/svg/properties/SVGPropertyTraits.h8
-rw-r--r--WebCore/svg/properties/SVGStaticPropertyWithParentTearOff.h72
-rw-r--r--WebCore/svg/properties/SVGTransformListPropertyTearOff.h75
-rw-r--r--WebCore/webaudio/AudioNode.idl7
-rw-r--r--WebCore/webaudio/AudioPannerNode.h9
-rw-r--r--WebCore/webaudio/AudioPannerNode.idl7
-rw-r--r--WebCore/webaudio/JavaScriptAudioNode.cpp272
-rw-r--r--WebCore/webaudio/JavaScriptAudioNode.h104
-rw-r--r--WebCore/webaudio/JavaScriptAudioNode.idl40
-rw-r--r--WebCore/wml/WMLDoElement.cpp1
-rw-r--r--WebCore/wml/WMLDocument.cpp1
-rw-r--r--WebCore/wml/WMLInputElement.cpp2
-rw-r--r--WebCore/wml/WMLPageState.cpp1
-rw-r--r--WebCore/wml/WMLPrevElement.cpp1
-rw-r--r--WebCore/xml/XMLHttpRequest.cpp24
-rw-r--r--WebCore/xml/XMLHttpRequest.h1
-rw-r--r--WebCore/xml/XPathNodeSet.cpp2
-rw-r--r--WebCore/xml/XPathStep.cpp2
-rw-r--r--WebCore/xml/XSLTProcessor.cpp6
-rw-r--r--WebCore/xml/XSLTProcessor.h1
-rw-r--r--WebCore/xml/XSLTProcessorLibxslt.cpp2
-rw-r--r--WebKit/CMakeLists.txt1
-rw-r--r--WebKit/ChangeLog18
-rw-r--r--WebKit/WebKit.xcodeproj/project.pbxproj16
-rw-r--r--WebKit/chromium/ChangeLog527
-rw-r--r--WebKit/chromium/DEPS4
-rw-r--r--WebKit/chromium/WebKit.gyp45
-rw-r--r--WebKit/chromium/features.gypi1
-rw-r--r--WebKit/chromium/public/WebBindings.h2
-rw-r--r--WebKit/chromium/public/WebGraphicsContext3D.h5
-rw-r--r--WebKit/chromium/public/WebInputEvent.h2
-rw-r--r--WebKit/chromium/public/WebKitClient.h1
-rw-r--r--WebKit/chromium/public/WebLocalizedString.h10
-rw-r--r--WebKit/chromium/public/WebPerformance.h1
-rw-r--r--WebKit/chromium/public/WebSettings.h1
-rw-r--r--WebKit/chromium/public/WebSpeechInputControllerMock.h2
-rw-r--r--WebKit/chromium/public/WebURLRequest.h4
-rw-r--r--WebKit/chromium/public/WebView.h6
-rw-r--r--WebKit/chromium/public/WebViewClient.h14
-rw-r--r--WebKit/chromium/public/WebWidgetClient.h3
-rw-r--r--WebKit/chromium/scripts/concatenate_css_files.py117
-rw-r--r--WebKit/chromium/scripts/concatenate_js_files.py115
-rw-r--r--WebKit/chromium/scripts/generate_devtools_html.py86
-rw-r--r--WebKit/chromium/src/AutoFillPopupMenuClient.cpp53
-rw-r--r--WebKit/chromium/src/AutoFillPopupMenuClient.h7
-rw-r--r--WebKit/chromium/src/ChromeClientImpl.cpp2
-rw-r--r--WebKit/chromium/src/ChromiumBridge.cpp6
-rw-r--r--WebKit/chromium/src/FrameLoaderClientImpl.cpp8
-rw-r--r--WebKit/chromium/src/GraphicsContext3DChromium.cpp20
-rw-r--r--WebKit/chromium/src/GraphicsContext3DInternal.h2
-rw-r--r--WebKit/chromium/src/LocalizedStrings.cpp48
-rw-r--r--WebKit/chromium/src/WebBindings.cpp21
-rw-r--r--WebKit/chromium/src/WebDataSourceImpl.cpp2
-rw-r--r--WebKit/chromium/src/WebFrameImpl.cpp19
-rw-r--r--WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp117
-rw-r--r--WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.h6
-rw-r--r--WebKit/chromium/src/WebImageDecoder.cpp4
-rw-r--r--WebKit/chromium/src/WebPerformance.cpp44
-rw-r--r--WebKit/chromium/src/WebSettingsImpl.cpp5
-rw-r--r--WebKit/chromium/src/WebSettingsImpl.h1
-rw-r--r--WebKit/chromium/src/WebSpeechInputControllerMockImpl.cpp5
-rw-r--r--WebKit/chromium/src/WebSpeechInputControllerMockImpl.h1
-rw-r--r--WebKit/chromium/src/WebURLRequest.cpp10
-rw-r--r--WebKit/chromium/src/WebViewImpl.cpp55
-rw-r--r--WebKit/chromium/src/WorkerAsyncFileSystemChromium.cpp74
-rw-r--r--WebKit/chromium/src/WorkerAsyncFileWriterChromium.cpp84
-rw-r--r--WebKit/chromium/src/WorkerAsyncFileWriterChromium.h86
-rw-r--r--WebKit/chromium/src/WorkerFileWriterCallbacksBridge.cpp193
-rw-r--r--WebKit/chromium/src/WorkerFileWriterCallbacksBridge.h156
-rw-r--r--WebKit/chromium/src/mac/WebInputEventFactory.mm3
-rw-r--r--WebKit/chromium/tests/PopupMenuTest.cpp2
-rw-r--r--WebKit/efl/CMakeListsEfl.txt18
-rw-r--r--WebKit/efl/ChangeLog53
-rw-r--r--WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.h1
-rw-r--r--WebKit/efl/ewk/ewk_view_single.c8
-rw-r--r--WebKit/gtk/ChangeLog87
-rw-r--r--WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp4
-rw-r--r--WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp25
-rw-r--r--WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.h3
-rw-r--r--WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp23
-rw-r--r--WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp5
-rw-r--r--WebKit/gtk/webkit/webkitprivate.h3
-rw-r--r--WebKit/gtk/webkit/webkitwebview.cpp38
-rw-r--r--WebKit/mac/ChangeLog141
-rw-r--r--WebKit/mac/Configurations/FeatureDefines.xcconfig5
-rw-r--r--WebKit/mac/Configurations/Version.xcconfig2
-rw-r--r--WebKit/mac/Misc/WebKitNSStringExtras.mm4
-rw-r--r--WebKit/mac/Misc/WebStringTruncator.mm2
-rw-r--r--WebKit/mac/Plugins/Hosted/HostedNetscapePluginStream.mm7
-rw-r--r--WebKit/mac/Plugins/WebNetscapePluginStream.mm7
-rw-r--r--WebKit/mac/WebCoreSupport/WebEditorClient.mm2
-rw-r--r--WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm2
-rw-r--r--WebKit/mac/WebCoreSupport/WebGeolocationClient.h (renamed from WebKit/mac/WebCoreSupport/WebGeolocationControllerClient.h)6
-rw-r--r--WebKit/mac/WebCoreSupport/WebGeolocationClient.mm (renamed from WebKit/mac/WebCoreSupport/WebGeolocationControllerClient.mm)12
-rw-r--r--WebKit/mac/WebCoreSupport/WebSystemInterface.mm5
-rw-r--r--WebKit/mac/WebKit.order8
-rw-r--r--WebKit/mac/WebView/WebDeviceOrientationProviderMock.h2
-rw-r--r--WebKit/mac/WebView/WebDeviceOrientationProviderMock.mm6
-rw-r--r--WebKit/mac/WebView/WebPreferences.mm2
-rw-r--r--WebKit/mac/WebView/WebView.mm11
-rw-r--r--WebKit/mac/WebView/WebViewPrivate.h2
-rw-r--r--WebKit/qt/Api/qgraphicswebview.cpp1
-rw-r--r--WebKit/qt/Api/qwebelement.cpp36
-rw-r--r--WebKit/qt/Api/qwebframe.cpp6
-rw-r--r--WebKit/qt/Api/qwebframe_p.h2
-rw-r--r--WebKit/qt/Api/qwebpage.cpp27
-rw-r--r--WebKit/qt/Api/qwebpage.h2
-rw-r--r--WebKit/qt/Api/qwebscriptworld.cpp2
-rw-r--r--WebKit/qt/ChangeLog172
-rw-r--r--WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp11
-rw-r--r--WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp23
-rw-r--r--WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h4
-rw-r--r--WebKit/qt/symbian/eabi/QtWebKitu.def5
-rw-r--r--WebKit/qt/tests/qwebframe/tst_qwebframe.cpp12
-rw-r--r--WebKit/win/ChangeLog90
-rw-r--r--WebKit/win/WebCoreSupport/WebGeolocationClient.cpp (renamed from WebKit/win/WebCoreSupport/WebGeolocationControllerClient.cpp)12
-rw-r--r--WebKit/win/WebCoreSupport/WebGeolocationClient.h (renamed from WebKit/win/WebCoreSupport/WebGeolocationControllerClient.h)12
-rw-r--r--WebKit/win/WebKit.vcproj/Interfaces.vcproj728
-rwxr-xr-xWebKit/win/WebKit.vcproj/WebKit.make6
-rw-r--r--WebKit/win/WebKit.vcproj/WebKit.sln171
-rw-r--r--WebKit/win/WebKit.vcproj/WebKit.submit.sln9
-rw-r--r--WebKit/win/WebKit.vcproj/WebKit.vcproj185
-rw-r--r--WebKit/win/WebKit.vcproj/WebKitGUID.vcproj91
-rw-r--r--WebKit/win/WebKit.vcproj/WebKitGUIDCommon.vsprops27
-rw-r--r--WebKit/win/WebKit.vcproj/WebKitLibCommon.vsprops30
-rw-r--r--WebKit/win/WebKit.vcproj/WebKit_debug.def136
-rw-r--r--WebKit/win/WebKitPrefix.h3
-rw-r--r--WebKit/win/WebPreferences.cpp2
-rw-r--r--WebKit/win/WebView.cpp4
-rw-r--r--WebKit/wince/ChangeLog6
-rw-r--r--WebKit/wince/WebCoreSupport/ChromeClientWinCE.h2
-rw-r--r--WebKitLibraries/ChangeLog30
-rw-r--r--WebKitLibraries/win/lib/WebKitSystemInterface.libbin1246502 -> 469556 bytes
-rw-r--r--WebKitLibraries/win/lib/WebKitSystemInterface_debug.libbin484884 -> 482276 bytes
-rw-r--r--WebKitLibraries/win/tools/vsprops/FeatureDefines.vsprops7
-rw-r--r--WebKitLibraries/win/tools/vsprops/FeatureDefinesCairo.vsprops7
-rw-r--r--WebKitTools/BuildSlaveSupport/build.webkit.org-config/config.json20
-rw-r--r--WebKitTools/BuildSlaveSupport/build.webkit.org-config/master.cfg10
-rw-r--r--WebKitTools/ChangeLog1199
-rw-r--r--WebKitTools/DumpRenderTree/AccessibilityUIElement.cpp7
-rw-r--r--WebKitTools/DumpRenderTree/AccessibilityUIElement.h4
-rw-r--r--WebKitTools/DumpRenderTree/ForwardingHeaders/wtf/CurrentTime.h1
-rw-r--r--WebKitTools/DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp97
-rw-r--r--WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj166
-rw-r--r--WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginCommon.vsprops27
-rw-r--r--WebKitTools/DumpRenderTree/chromium/EventSender.cpp50
-rw-r--r--WebKitTools/DumpRenderTree/chromium/LayoutTestController.cpp23
-rw-r--r--WebKitTools/DumpRenderTree/chromium/LayoutTestController.h5
-rw-r--r--WebKitTools/DumpRenderTree/chromium/MockSpellCheck.cpp7
-rw-r--r--WebKitTools/DumpRenderTree/chromium/MockSpellCheck.h1
-rw-r--r--WebKitTools/DumpRenderTree/chromium/TestShell.cpp20
-rw-r--r--WebKitTools/DumpRenderTree/chromium/WebPreferences.cpp2
-rw-r--r--WebKitTools/DumpRenderTree/chromium/WebViewHost.cpp137
-rw-r--r--WebKitTools/DumpRenderTree/chromium/WebViewHost.h16
-rw-r--r--WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp5
-rw-r--r--WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp3
-rw-r--r--WebKitTools/DumpRenderTree/mac/DumpRenderTree.mm5
-rw-r--r--WebKitTools/DumpRenderTree/mac/LayoutTestControllerMac.mm4
-rw-r--r--WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.cpp15
-rw-r--r--WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.h1
-rw-r--r--WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp3
-rw-r--r--WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.h3
-rw-r--r--WebKitTools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp1
-rw-r--r--WebKitTools/DumpRenderTree/win/AccessibilityUIElementWin.cpp22
-rw-r--r--WebKitTools/DumpRenderTree/win/DumpRenderTree.cpp2
-rw-r--r--WebKitTools/DumpRenderTree/win/DumpRenderTree.vcproj161
-rw-r--r--WebKitTools/DumpRenderTree/win/DumpRenderTreeApple.vsprops15
-rw-r--r--WebKitTools/DumpRenderTree/win/DumpRenderTreeCFLite.vsprops11
-rw-r--r--WebKitTools/DumpRenderTree/win/DumpRenderTreeCairo.vsprops11
-rw-r--r--WebKitTools/DumpRenderTree/win/DumpRenderTreeCommon.vsprops28
-rw-r--r--WebKitTools/DumpRenderTree/win/ImageDiff.vcproj110
-rw-r--r--WebKitTools/DumpRenderTree/win/ImageDiffCommon.vsprops25
-rw-r--r--WebKitTools/FindSafari/FindSafari.vcproj5
-rw-r--r--WebKitTools/FindSafari/FindSafariCommon.vsprops13
-rw-r--r--WebKitTools/MiniBrowser/MiniBrowser.qrc5
-rw-r--r--WebKitTools/MiniBrowser/MiniBrowser.vcproj72
-rw-r--r--WebKitTools/MiniBrowser/qt/BrowserView.cpp4
-rw-r--r--WebKitTools/MiniBrowser/qt/BrowserView.h2
-rw-r--r--WebKitTools/MiniBrowser/qt/BrowserWindow.cpp66
-rw-r--r--WebKitTools/MiniBrowser/qt/BrowserWindow.h12
-rw-r--r--WebKitTools/MiniBrowser/qt/MiniBrowser.pro7
-rw-r--r--WebKitTools/MiniBrowser/qt/main.cpp27
-rw-r--r--WebKitTools/MiniBrowser/win/stdafx.h1
-rw-r--r--WebKitTools/QtTestBrowser/mainwindow.cpp5
-rw-r--r--WebKitTools/QtTestBrowser/webpage.cpp12
-rw-r--r--WebKitTools/QtTestBrowser/webpage.h1
-rwxr-xr-xWebKitTools/Scripts/build-webkit4
-rwxr-xr-xWebKitTools/Scripts/do-file-rename1
-rwxr-xr-xWebKitTools/Scripts/old-run-webkit-tests19
-rwxr-xr-xWebKitTools/Scripts/print-vse-failure-logs51
-rw-r--r--WebKitTools/Scripts/webkitpy/common/checkout/scm.py3
-rw-r--r--WebKitTools/Scripts/webkitpy/common/config/build.py138
-rw-r--r--WebKitTools/Scripts/webkitpy/common/config/build_unittest.py64
-rw-r--r--WebKitTools/Scripts/webkitpy/common/config/committers.py2
-rw-r--r--WebKitTools/Scripts/webkitpy/common/config/committervalidator.py120
-rw-r--r--WebKitTools/Scripts/webkitpy/common/config/committervalidator_unittest.py43
-rw-r--r--WebKitTools/Scripts/webkitpy/common/net/bugzilla/__init__.py8
-rw-r--r--WebKitTools/Scripts/webkitpy/common/net/bugzilla/attachment.py114
-rw-r--r--WebKitTools/Scripts/webkitpy/common/net/bugzilla/bug.py105
-rw-r--r--WebKitTools/Scripts/webkitpy/common/net/bugzilla/bug_unittest.py40
-rw-r--r--WebKitTools/Scripts/webkitpy/common/net/bugzilla/bugzilla.py (renamed from WebKitTools/Scripts/webkitpy/common/net/bugzilla.py)250
-rw-r--r--WebKitTools/Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py (renamed from WebKitTools/Scripts/webkitpy/common/net/bugzilla_unittest.py)26
-rw-r--r--WebKitTools/Scripts/webkitpy/common/net/buildbot.py1
-rw-r--r--WebKitTools/Scripts/webkitpy/common/net/buildbot_unittest.py8
-rw-r--r--WebKitTools/Scripts/webkitpy/common/net/layouttestresults.py2
-rw-r--r--WebKitTools/Scripts/webkitpy/common/net/layouttestresults_unittest.py1
-rw-r--r--WebKitTools/Scripts/webkitpy/common/newstringio.py40
-rw-r--r--WebKitTools/Scripts/webkitpy/common/newstringio_unittest.py46
-rw-r--r--WebKitTools/Scripts/webkitpy/common/system/executive.py4
-rw-r--r--WebKitTools/Scripts/webkitpy/common/system/executive_mock.py55
-rw-r--r--WebKitTools/Scripts/webkitpy/common/system/file_lock.py83
-rw-r--r--WebKitTools/Scripts/webkitpy/common/system/file_lock_unittest.py61
-rw-r--r--WebKitTools/Scripts/webkitpy/common/system/filesystem_mock.py75
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py147
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_layout_results_generator.py8
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py122
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py135
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py4
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_output.py56
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/port/base.py197
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/port/base_unittest.py66
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/port/chromium.py18
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/port/chromium_gpu.py7
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/port/config.py68
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/port/config_mock.py50
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/port/config_standalone.py70
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/port/config_unittest.py167
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/port/dryrun.py11
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py5
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/port/http_lock.py40
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/port/test.py14
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/port/webkit.py30
-rwxr-xr-xWebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py95
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py50
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/test_types/image_diff.py123
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/test_types/test_type_base.py10
-rw-r--r--WebKitTools/Scripts/webkitpy/layout_tests/test_types/text_diff.py22
-rw-r--r--WebKitTools/Scripts/webkitpy/style/checker.py16
-rwxr-xr-xWebKitTools/Scripts/webkitpy/style/checker_unittest.py27
-rw-r--r--WebKitTools/Scripts/webkitpy/style/checkers/cpp.py205
-rw-r--r--WebKitTools/Scripts/webkitpy/style/checkers/cpp_unittest.py98
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/bot/feeders.py2
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/commands/__init__.py8
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html105
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/loupe.js144
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css159
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js363
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/util.js57
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/commands/download.py2
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/commands/download_unittest.py9
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/commands/queues.py7
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py49
-rwxr-xr-xWebKitTools/Scripts/webkitpy/tool/main.py13
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/mocktool.py1
-rw-r--r--WebKitTools/Scripts/webkitpy/tool/steps/commit.py8
-rw-r--r--WebKitTools/TestWebKitAPI/win/TestWebKitAPI.vcproj67
-rw-r--r--WebKitTools/WebKitLauncherWin/WebKitLauncherWin.vcproj65
-rw-r--r--WebKitTools/WebKitLauncherWin/WebKitLauncherWinCommon.vsprops12
-rw-r--r--WebKitTools/WebKitTestRunner/TestController.cpp1
-rw-r--r--WebKitTools/WebKitTestRunner/TestController.h1
-rw-r--r--WebKitTools/WebKitTestRunner/TestInvocation.cpp3
-rw-r--r--WebKitTools/WebKitTestRunner/mac/TestControllerMac.mm4
-rw-r--r--WebKitTools/WebKitTestRunner/qt/TestControllerQt.cpp48
-rw-r--r--WebKitTools/WebKitTestRunner/win/InjectedBundle.vcproj63
-rw-r--r--WebKitTools/WebKitTestRunner/win/TestControllerWin.cpp4
-rw-r--r--WebKitTools/WebKitTestRunner/win/WebKitTestRunner.vcproj73
-rw-r--r--WebKitTools/WinLauncher/WinLauncher.cpp7
-rw-r--r--WebKitTools/WinLauncher/WinLauncher.vcproj159
-rw-r--r--WebKitTools/WinLauncher/WinLauncherCommon.vsprops24
-rw-r--r--WebKitTools/record-memory-win/record-memory-win.vcproj76
1026 files changed, 37203 insertions, 10723 deletions
diff --git a/JavaScriptCore/ChangeLog b/JavaScriptCore/ChangeLog
index 8f663ff..bf45cd8 100644
--- a/JavaScriptCore/ChangeLog
+++ b/JavaScriptCore/ChangeLog
@@ -1,3 +1,755 @@
+2010-11-17 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Add stubbed out ScrollAnimator for the Mac
+ https://bugs.webkit.org/show_bug.cgi?id=49678
+
+ * wtf/Platform.h: Enable SMOOTH_SCROLLING on the Mac, this has no
+ change in behavior at the moment.
+
+2010-11-17 David Kilzer <ddkilzer@apple.com>
+
+ <http://webkit.org/b/49634> Make overflow guards in WTF::String::utf8 explicit
+
+ Reviewed by Darin Adler.
+
+ Add an explicit overflow check prior to allocating our buffer,
+ rather than implicitly relying on the guard in convertUTF16ToUTF8.
+
+ * wtf/text/WTFString.cpp:
+ (WTF::String::utf8):
+
+2010-11-17 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r72197.
+ http://trac.webkit.org/changeset/72197
+ https://bugs.webkit.org/show_bug.cgi?id=49661
+
+ broke fast/regex/test1.html (Requested by stampho on #webkit).
+
+ * runtime/JSGlobalData.h:
+ * runtime/RegExp.cpp:
+ (JSC::RegExpRepresentation::~RegExpRepresentation):
+ (JSC::RegExp::compile):
+ (JSC::RegExp::match):
+ * tests/mozilla/expected.html:
+ * wtf/Platform.h:
+ * yarr/RegexCompiler.cpp:
+ * yarr/RegexCompiler.h:
+ * yarr/RegexInterpreter.cpp:
+ * yarr/RegexInterpreter.h:
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::jitCompileRegex):
+ * yarr/RegexJIT.h:
+ (JSC::Yarr::RegexCodeBlock::RegexCodeBlock):
+ (JSC::Yarr::RegexCodeBlock::~RegexCodeBlock):
+ (JSC::Yarr::RegexCodeBlock::getFallback):
+ (JSC::Yarr::RegexCodeBlock::setFallback):
+ (JSC::Yarr::executeRegex):
+ * yarr/RegexParser.h:
+ * yarr/RegexPattern.h:
+
+2010-11-17 Peter Varga <pvarga@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ YARR JIT should fallback to YARR Interpreter instead of PCRE.
+ https://bugs.webkit.org/show_bug.cgi?id=46719
+
+ Remove the ENABLE_YARR macro and the option of matching regular
+ expressions with PCRE from JavaScriptCore.
+
+ * runtime/JSGlobalData.h:
+ * runtime/RegExp.cpp:
+ (JSC::RegExp::compile):
+ (JSC::RegExp::match):
+ * tests/mozilla/expected.html:
+ * wtf/Platform.h:
+ * yarr/RegexCompiler.cpp:
+ * yarr/RegexCompiler.h:
+ * yarr/RegexInterpreter.cpp:
+ (JSC::Yarr::byteCompileRegex):
+ * yarr/RegexInterpreter.h:
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::jitCompileRegex):
+ * yarr/RegexJIT.h:
+ (JSC::Yarr::RegexCodeBlock::RegexCodeBlock):
+ (JSC::Yarr::RegexCodeBlock::~RegexCodeBlock):
+ (JSC::Yarr::RegexCodeBlock::getFallback):
+ (JSC::Yarr::RegexCodeBlock::isFallback):
+ (JSC::Yarr::RegexCodeBlock::setFallback):
+ (JSC::Yarr::executeRegex):
+ * yarr/RegexParser.h:
+ * yarr/RegexPattern.h:
+
+2010-11-17 Peter Varga <pvarga@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Extend YARR Interpreter with beginning character look-up optimization
+ https://bugs.webkit.org/show_bug.cgi?id=45751
+
+ Add beginning character look-up optimization which sets the start
+ index to the first possible successful pattern match.
+ Extend YARR Interpreter with lookupForBeginChars function which
+ implements the beginning character look-up optimization.
+
+ * yarr/RegexInterpreter.cpp:
+ (JSC::Yarr::Interpreter::InputStream::readPair):
+ (JSC::Yarr::Interpreter::InputStream::isNotAvailableInput):
+ (JSC::Yarr::Interpreter::lookupForBeginChars):
+ (JSC::Yarr::Interpreter::matchDisjunction):
+ (JSC::Yarr::Interpreter::interpret):
+ * yarr/RegexInterpreter.h:
+ (JSC::Yarr::BytecodePattern::BytecodePattern):
+
+2010-11-17 Alexis Menard <alexis.menard@nokia.com>, Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Kenneth Christiansen, Tor Arne Vestbø.
+
+ [Qt] Add support for use GStreamer with the Qt build
+
+ Enable the build/inclusion of the wtf/QObject convenience classes.
+
+ * JavaScriptCore.pri:
+ * wtf/wtf.pri:
+
+2010-11-17 Peter Varga <pvarga@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Collect the beginning characters in a RegExp pattern for look-up
+ optimization
+ https://bugs.webkit.org/show_bug.cgi?id=45748
+
+ Extend the YARR's parser with an algorithm which collects the potential
+ beginning characters from a RegExp pattern for later look-up optimization.
+
+ * yarr/RegexCompiler.cpp:
+ (JSC::Yarr::BeginCharHelper::BeginCharHelper):
+ (JSC::Yarr::BeginCharHelper::addBeginChar):
+ (JSC::Yarr::BeginCharHelper::merge):
+ (JSC::Yarr::BeginCharHelper::addCharacter):
+ (JSC::Yarr::BeginCharHelper::linkHotTerms):
+ (JSC::Yarr::RegexPatternConstructor::RegexPatternConstructor):
+ (JSC::Yarr::RegexPatternConstructor::addBeginTerm):
+ (JSC::Yarr::RegexPatternConstructor::setupDisjunctionBeginTerms):
+ (JSC::Yarr::RegexPatternConstructor::setupAlternativeBeginTerms):
+ (JSC::Yarr::RegexPatternConstructor::setupBeginChars):
+ (JSC::Yarr::compileRegex):
+ * yarr/RegexPattern.h:
+ (JSC::Yarr::TermChain::TermChain):
+ (JSC::Yarr::BeginChar::BeginChar):
+ (JSC::Yarr::RegexPattern::RegexPattern):
+ (JSC::Yarr::RegexPattern::reset):
+
+2010-11-17 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r72160.
+ http://trac.webkit.org/changeset/72160
+ https://bugs.webkit.org/show_bug.cgi?id=49646
+
+ Broke lots of fast/profiler tests, among others (Requested by
+ aroben on #webkit).
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ (JSC::CodeBlock::functionRegisterForBytecodeOffset):
+ (JSC::CodeBlock::shrinkToFit):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::addFunctionRegisterInfo):
+ * bytecode/Opcode.h:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::emitCall):
+ (JSC::BytecodeGenerator::emitCallVarargs):
+ (JSC::BytecodeGenerator::emitReturn):
+ (JSC::BytecodeGenerator::emitConstruct):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::CallArguments::profileHookRegister):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::CallArguments::CallArguments):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::unwindCallFrame):
+ (JSC::Interpreter::throwException):
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::executeCall):
+ (JSC::Interpreter::executeConstruct):
+ (JSC::Interpreter::privateExecute):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ * jit/JIT.h:
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_profile_will_call):
+ (JSC::JIT::emit_op_profile_did_call):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_profile_will_call):
+ (JSC::JIT::emit_op_profile_did_call):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jit/JITStubs.h:
+ * profiler/Profile.cpp:
+ (JSC::Profile::Profile):
+ * profiler/ProfileGenerator.cpp:
+ (JSC::ProfileGenerator::addParentForConsoleStart):
+ (JSC::ProfileGenerator::willExecute):
+ (JSC::ProfileGenerator::didExecute):
+ (JSC::ProfileGenerator::stopProfiling):
+ * profiler/ProfileGenerator.h:
+ * profiler/ProfileNode.cpp:
+ (JSC::ProfileNode::ProfileNode):
+ (JSC::ProfileNode::willExecute):
+ * profiler/ProfileNode.h:
+ (JSC::ProfileNode::create):
+ (JSC::ProfileNode::operator==):
+ * profiler/Profiler.cpp:
+ (JSC::dispatchFunctionToProfiles):
+ (JSC::Profiler::willExecute):
+ (JSC::Profiler::didExecute):
+ * profiler/Profiler.h:
+
+2010-11-16 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Bug 49635 - Profiler implementation is fragile
+
+ The profile presently requires the exception handling mechanism to explicitly
+ remove all stack frames that are exited during the exception unwind mechanism.
+ This is fragile in a number of ways:
+ * We have to change bytecode register allocation when compiling code to run
+ when profiling, to preserve the callee function (this is also required to
+ call did_call after the call has returned).
+ * In the JIT we have to maintain additional data structures
+ (CodeBlock::RareData::m_functionRegisterInfos) to map back to the register
+ containing the callee.
+ * In the interpreter we use 'magic values' to offset into the instruction
+ stream to rediscover the register containing the function.
+
+ Instead, move profiling into the head and tail of functions.
+ * This correctly accounts the cost of the call itself to the caller.
+ * This allows us to access the callee function object from the callframe.
+ * This means that at the point a call is made we can track the stack depth
+ on the ProfileNode.
+ * When unwinding we can simply report the depth at which the exception is
+ being handled - all call frames above this level are freed.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ (JSC::CodeBlock::shrinkToFit):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::bytecodeOffset):
+ (JSC::CodeBlock::methodCallLinkInfo):
+ * bytecode/Opcode.h:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::emitCall):
+ (JSC::BytecodeGenerator::emitCallVarargs):
+ (JSC::BytecodeGenerator::emitReturn):
+ (JSC::BytecodeGenerator::emitConstruct):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::CallArguments::count):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::CallArguments::CallArguments):
+ * interpreter/Interpreter.cpp:
+ (JSC::ProfileHostCall::ProfileHostCall):
+ (JSC::ProfileHostCall::~ProfileHostCall):
+ (JSC::Interpreter::unwindCallFrame):
+ (JSC::Interpreter::throwException):
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::executeCall):
+ (JSC::Interpreter::executeConstruct):
+ (JSC::Interpreter::privateExecute):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ * jit/JIT.h:
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_profile_has_called):
+ (JSC::JIT::emit_op_profile_will_return):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_profile_has_called):
+ (JSC::JIT::emit_op_profile_will_return):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jit/JITStubs.h:
+ * profiler/Profile.cpp:
+ (JSC::Profile::Profile):
+ * profiler/ProfileGenerator.cpp:
+ (JSC::ProfileGenerator::addParentForConsoleStart):
+ (JSC::ProfileGenerator::willExecute):
+ (JSC::ProfileGenerator::didExecute):
+ (JSC::ProfileGenerator::exceptionUnwind):
+ (JSC::ProfileGenerator::stopProfiling):
+ * profiler/ProfileGenerator.h:
+ * profiler/ProfileNode.cpp:
+ (JSC::ProfileNode::ProfileNode):
+ (JSC::ProfileNode::willExecute):
+ * profiler/ProfileNode.h:
+ (JSC::ProfileNode::create):
+ (JSC::ProfileNode::operator==):
+ (JSC::ProfileNode::exec):
+ * profiler/Profiler.cpp:
+ (JSC::dispatchFunctionToProfiles):
+ (JSC::Profiler::hasCalled):
+ (JSC::Profiler::willEvaluate):
+ (JSC::Profiler::willReturn):
+ (JSC::Profiler::didEvaluate):
+ (JSC::Profiler::exceptionUnwind):
+ * profiler/Profiler.h:
+
+2010-11-16 Brian Weinstein <bweinstein@apple.com>
+
+ Reviewed by Adam Roben and Steve Falkenburg.
+
+ Touch Platform.h to force a rebuild for Windows.
+
+ * wtf/Platform.h:
+
+2010-11-16 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Disable LTCG for Windows Release builds. Add new Release_LTCG configuration.
+ https://bugs.webkit.org/show_bug.cgi?id=49632
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+ * JavaScriptCore.vcproj/jsc/jsc.vcproj:
+ * JavaScriptCore.vcproj/testapi/testapi.vcproj:
+
+2010-11-16 Peter Varga <pvarga@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ The number of recursive match calls isn't limited in YARR Interpreter
+ https://bugs.webkit.org/show_bug.cgi?id=47906
+
+ Check the number of the matchDisjunction recursive calls to avoid unbounded
+ recursion.
+ Now the matchDisjunction function returns JSRegExpResult instead of bool.
+ The JSRegExpResult enum contains the result of matching or the error code
+ of the failure (like HitLimit) which terminates the matching.
+ The error codes are based on pcre's jsRegExpExecute error codes.
+
+ * yarr/RegexInterpreter.cpp:
+ (JSC::Yarr::Interpreter::parenthesesDoBacktrack):
+ (JSC::Yarr::Interpreter::matchParentheses):
+ (JSC::Yarr::Interpreter::backtrackParentheses):
+ (JSC::Yarr::Interpreter::matchDisjunction):
+ (JSC::Yarr::Interpreter::matchNonZeroDisjunction):
+ (JSC::Yarr::Interpreter::interpret):
+ (JSC::Yarr::Interpreter::Interpreter):
+ * yarr/RegexInterpreter.h:
+
+2010-11-16 Brian Weinstein <bweinstein@apple.com>
+
+ Rest of the Windows build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-11-16 Gavin Barraclough <barraclough@apple.com>
+
+ Windows build fix pt 1.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-11-16 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49606
+
+ The bug here is that we read the prototype from the RHS argument using a regular
+ op_get_by_id before op_instanceof has checked that this is an object implementing
+ HasInstance. This incorrect behaviour gives rise to further unnecessary complexity
+ in the code base, since we have additional logic (implemented using the
+ GetByIdExceptionInfo data structures on CodeBlock) to convert not an object errors
+ from the get_by_id into invalid parameter errors. Having fixed this bug this code
+ is all redundant, since in these cases the get_by_id will never have been reached.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ (JSC::CodeBlock::shrinkToFit):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::addExpressionInfo):
+ * bytecode/Opcode.h:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::emitCheckHasInstance):
+ * bytecompiler/BytecodeGenerator.h:
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::InstanceOfNode::emitBytecode):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::throwException):
+ (JSC::Interpreter::privateExecute):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileSlowCases):
+ * jit/JIT.h:
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_check_has_instance):
+ (JSC::JIT::emit_op_instanceof):
+ (JSC::JIT::emitSlow_op_check_has_instance):
+ (JSC::JIT::emitSlow_op_instanceof):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_check_has_instance):
+ (JSC::JIT::emit_op_instanceof):
+ (JSC::JIT::emitSlow_op_check_has_instance):
+ (JSC::JIT::emitSlow_op_instanceof):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jit/JITStubs.h:
+ * runtime/ExceptionHelpers.cpp:
+ (JSC::createInterruptedExecutionException):
+ (JSC::createTerminatedExecutionException):
+ (JSC::createUndefinedVariableError):
+ (JSC::createNotAFunctionError):
+ (JSC::createNotAnObjectError):
+ * runtime/ExceptionHelpers.h:
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ * runtime/JSNotAnObject.cpp:
+ (JSC::JSNotAnObject::toPrimitive):
+ (JSC::JSNotAnObject::getPrimitiveNumber):
+ (JSC::JSNotAnObject::toBoolean):
+ (JSC::JSNotAnObject::toNumber):
+ (JSC::JSNotAnObject::toString):
+ (JSC::JSNotAnObject::toObject):
+ (JSC::JSNotAnObject::getOwnPropertySlot):
+ (JSC::JSNotAnObject::getOwnPropertyDescriptor):
+ (JSC::JSNotAnObject::put):
+ (JSC::JSNotAnObject::deleteProperty):
+ (JSC::JSNotAnObject::getOwnPropertyNames):
+ * runtime/JSNotAnObject.h:
+ (JSC::JSNotAnObject::JSNotAnObject):
+ * runtime/JSObject.h:
+ (JSC::JSObject::isActivationObject):
+ * runtime/JSValue.cpp:
+ (JSC::JSValue::toObjectSlowCase):
+ (JSC::JSValue::synthesizeObject):
+ (JSC::JSValue::synthesizePrototype):
+
+2010-11-15 Darin Adler <darin@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Harden additional string functions against large lengths
+ https://bugs.webkit.org/show_bug.cgi?id=49574
+
+ * wtf/text/CString.cpp:
+ (WTF::CString::init): Check for length that is too large for CString.
+ (WTF::CString::newUninitialized): Ditto.
+ (WTF::CString::copyBufferIfNeeded): Fix types so the length stays
+ in a size_t.
+
+ * wtf/text/WTFString.cpp:
+ (WTF::String::append): Check for length that is too large.
+
+2010-11-15 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Bug 49577 - Function.prototype should be non-configurable
+
+ JSC lazily allocates the prototype property of Function objects.
+
+ We check the prototype exists on 'get', but not on 'put'.
+ If you 'put' without having first done a 'get' you can end up with a configurable
+ prototype (prototype should only ever be non-configurable).
+
+ This is visible in a couple of ways:
+ * 'delete' on the property may succeed. (the next access will result in a new,
+ reset prototype object).
+ * the prototype may be set to a getter.
+
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::getOwnPropertyNames):
+ Reify the prototype property before allowing an enumerate including don't enum properties.
+ (JSC::JSFunction::put):
+ Reify the prototype property before any put to it.
+
+2010-11-15 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Bug 49488 - Only add source specific information to exceptions in Interpreter::throwException
+
+ Three types of source location information are added to errors.
+
+ (1) Divot information.
+
+ This was added with the intention of using it to provide better source highlighting in the inspector.
+ We may still want to do so, but we probably should not be exposing these values in a manner visible to
+ user scripts – only through an internal C++ interface. The code adding divot properties to objects has
+ been removed.
+
+ (2) Line number information.
+
+ Line number information is presently sometimes added at the point the exception is created, and sometimes
+ added at the point the exception passes through throwException. Change this so that throwException has
+ the sole responsibility for adding line number and source file information.
+
+ (3) Source snippets in the message of certain type errors (e.g. 'doc' in `Result of expression 'doc' [undefined] is not an object.`).
+
+ These messages are currently created at the point the exceptions is raised. Instead reformat the message
+ such that the source snippet is located at the end (`Result of expression 'b1' [undefined] is not an object.`
+ becomes `'undefined' is not an object (evaluating 'b1.property')`), and append these to the message at
+ the in throw Exception. This presents a number of advantages:
+ * we no longer need to have source location information to create these TypeErrors.
+ * we can chose to append source location information in other error messages, including those where
+ passing source location to the point of construction would be inconvenient.
+ * we can chose in future to omit to append source location information when running in a non-debug mode.
+
+ This also cleans up some error output, e.g. removing double brackets ('[[]]') around objects in output,
+ removing double periods (..) at end of lines, and adding slightly more context to some errors.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::expressionRangeForBytecodeOffset):
+ - Separated called to access line and range information.
+
+ * bytecode/CodeBlock.h:
+ - Separated called to access line and range information.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::resolve):
+ (JSC::Interpreter::resolveSkip):
+ (JSC::Interpreter::resolveGlobal):
+ (JSC::Interpreter::resolveGlobalDynamic):
+ (JSC::Interpreter::resolveBaseAndProperty):
+ (JSC::isInvalidParamForIn):
+ (JSC::isInvalidParamForInstanceOf):
+ - Update parameters passed to error constructors.
+ (JSC::appendSourceToError):
+ - Update message property to add location information (previously added in createErrorMessage, in ExceptionHelpers)
+ (JSC::Interpreter::throwException):
+ - Updated to call appendSourceToError.
+ (JSC::Interpreter::privateExecute):
+ - Update parameters passed to error constructors.
+
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ - Update parameters passed to error constructors.
+
+ * runtime/Error.cpp:
+ (JSC::addErrorInfo):
+ (JSC::hasErrorInfo):
+ - Removed divot properties.
+
+ * runtime/Error.h:
+ - Removed divot properties.
+
+ * runtime/ErrorInstance.cpp:
+ (JSC::ErrorInstance::ErrorInstance):
+ - Initialize new property.
+
+ * runtime/ErrorInstance.h:
+ (JSC::ErrorInstance::appendSourceToMessage):
+ (JSC::ErrorInstance::setAppendSourceToMessage):
+ (JSC::ErrorInstance::clearAppendSourceToMessage):
+ - Added flag to check for errors needing location information appending.
+ (JSC::ErrorInstance::isErrorInstance):
+ - Added virtual method to check for ErrorInstances.
+
+ * runtime/ExceptionHelpers.cpp:
+ (JSC::createUndefinedVariableError):
+ (JSC::createInvalidParamError):
+ (JSC::createNotAConstructorError):
+ (JSC::createNotAFunctionError):
+ (JSC::createNotAnObjectError):
+ - Update parameters passed to error constructors, stopped adding line number information early, changed TypeError messages.
+
+ * runtime/ExceptionHelpers.h:
+ - Updated function signatures.
+
+ * runtime/JSFunction.cpp:
+ (JSC::callHostFunctionAsConstructor):
+ - Update parameters passed to error constructors.
+
+ * runtime/JSObject.h:
+ (JSC::JSObject::isErrorInstance):
+ - Added virtual method to check for ErrorInstances.
+
+2010-11-12 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Adam Roben.
+
+ CString(const char*) crashes when passed a null pointer
+ https://bugs.webkit.org/show_bug.cgi?id=49450
+
+ * wtf/text/CString.cpp:
+ (WTF::CString::CString):
+ Return early if str is null.
+
+2010-11-11 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Bug 49420 - Clean up syntax/reference error throw.
+
+ Some errors detected at compile time are thrown at runtime. We currently do so using a op_new_error/op_throw bytecode pair.
+ This is not ideal. op_throw is used for explicit user throw statements, and has different requirements in terms or meta data
+ attached to the exception (controlled by the explicitThrow parameter passed to Interpreter::throwException). To work around
+ this, op_new_error has to add the meta data at an early stage, which is unlike other VM exceptions being raised.
+
+ We can simplify this and bring into line with other exception behaviour by changing new_error from just allocating an
+ Exception instance to also throwing it – but as a regular VM throw, correctly passing explicitThrow as false.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ (JSC::CodeBlock::expressionRangeForBytecodeOffset):
+ * bytecode/Opcode.h:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitThrowReferenceError):
+ (JSC::BytecodeGenerator::emitThrowSyntaxError):
+ (JSC::BytecodeGenerator::emitThrowExpressionTooDeepException):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::BytecodeGenerator::emitNodeInConditionContext):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::ThrowableExpressionData::emitThrowReferenceError):
+ (JSC::ThrowableExpressionData::emitThrowSyntaxError):
+ (JSC::RegExpNode::emitBytecode):
+ (JSC::PostfixErrorNode::emitBytecode):
+ (JSC::PrefixErrorNode::emitBytecode):
+ (JSC::AssignErrorNode::emitBytecode):
+ (JSC::ForInNode::emitBytecode):
+ (JSC::ContinueNode::emitBytecode):
+ (JSC::BreakNode::emitBytecode):
+ (JSC::ReturnNode::emitBytecode):
+ (JSC::LabelNode::emitBytecode):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ * jit/JIT.h:
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_throw_reference_error):
+ (JSC::JIT::emit_op_throw_syntax_error):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_throw_reference_error):
+ (JSC::JIT::emit_op_throw_syntax_error):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jit/JITStubs.h:
+ * parser/Nodes.h:
+
+2010-11-11 Darin Adler <darin@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Harden some string functions against large lengths
+ https://bugs.webkit.org/show_bug.cgi?id=49293
+
+ * wtf/text/StringImpl.cpp:
+ (WTF::StringImpl::create): Fix incorrect use of PassRefPtr. Check for
+ strlen results that are too large for StringImpl.
+ (WTF::StringImpl::lower): Check for lengths that are too large for
+ int32_t.
+ (WTF::StringImpl::upper): Fix incorrect use of PassRefPtr. Check for
+ lengths that are too large for int32_t.
+ (WTF::StringImpl::secure): Fix incorect use of PassRefPtr. Use unsigned
+ rather than int and int32_t so we can handle any length.
+ (WTF::StringImpl::foldCase): Fix incorrect use of PassRefPtr. Check for
+ lengths that are too large for int32_t.
+ (WTF::StringImpl::find): Check for strlen results that are too large for
+ StringImpl.
+ (WTF::StringImpl::findIgnoringCase): Ditto.
+ (WTF::StringImpl::replace): Fix incorrect use of PassRefPtr.
+ (WTF::StringImpl::createWithTerminatingNullCharacter): Check before
+ incrementing length.
+
+2010-11-11 Dan Horák <dan@danny.cz>
+
+ Reviewed by Andreas Kling.
+
+ Add support for the s390/s390x architectures, it's big-endian
+ with s390 being 32-bit and s390x being 64-bit.
+
+ https://bugs.webkit.org/show_bug.cgi?id=34786
+
+ * wtf/Platform.h:
+
+2010-11-10 Csaba Osztrogonác <ossy@webkit.org>
+
+ Reviewed by David Hyatt.
+
+ HTML5 Ruby support should be mandatory feature
+ https://bugs.webkit.org/show_bug.cgi?id=49272
+
+ Remove Ruby as optional feature.
+
+ * Configurations/FeatureDefines.xcconfig:
+ * JavaScriptCorePrefix.h:: Touch it to avoid incremental build failure on Windows.
+
+2010-11-10 Peter Rybin <peter.rybin@gmail.com>
+
+ Reviewed by Adam Barth.
+
+ HTML parser should provide script column position within HTML document to JavaScript engine
+ https://bugs.webkit.org/show_bug.cgi?id=45271
+
+ Adds TextPosition* classes -- a structure that stores line/column/generation
+ level coordinates inside text document. Adds *BasedNumber classes -- typesafe int
+ wrappers that emphasize whether int number is used as zero-based or
+ one-based.
+
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * wtf/text/TextPosition.h: Added.
+ (WTF::TextPosition::TextPosition):
+ (WTF::TextPosition::minimumPosition):
+ (WTF::TextPosition::belowRangePosition):
+ (WTF::ZeroBasedNumber::fromZeroBasedInt):
+ (WTF::ZeroBasedNumber::ZeroBasedNumber):
+ (WTF::ZeroBasedNumber::zeroBasedInt):
+ (WTF::ZeroBasedNumber::base):
+ (WTF::ZeroBasedNumber::belowBase):
+ (WTF::OneBasedNumber::fromOneBasedInt):
+ (WTF::OneBasedNumber::OneBasedNumber):
+ (WTF::OneBasedNumber::oneBasedInt):
+ (WTF::OneBasedNumber::convertAsZeroBasedInt):
+ (WTF::OneBasedNumber::convertToZeroBased):
+ (WTF::OneBasedNumber::base):
+ (WTF::OneBasedNumber::belowBase):
+ (WTF::toZeroBasedTextPosition):
+ (WTF::toOneBasedTextPosition):
+ (WTF::ZeroBasedNumber::convertToOneBased):
+
+2010-11-09 Gabor Loki <loki@webkit.org>
+
+ Reviewed by Gavin Barraclough.
+
+ ARM JIT asserts when loading http://reader.google.com in debug mode
+ https://bugs.webkit.org/show_bug.cgi?id=48912
+
+ There are several cases when the uninterrupted sequence is larger than
+ maximum required offset for pathing the same sequence. Eg.: if in a
+ uninterrupted sequence the last macroassembler's instruction is a stub
+ call, it emits store instruction(s) which should not be included in the
+ calculation of length of uninterrupted sequence. So, the insnSpace and
+ constSpace should be upper limit instead of hard limit.
+
+ * jit/JIT.h:
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::endUninterruptedSequence):
+
+2010-11-09 David Kilzer <ddkilzer@apple.com>
+
+ <http://webkit.org/b/49279> Fix include statements for local headers
+
+ Reviewed by Gavin Barraclough.
+
+ Use "Foo.h" instead of <Foo.h> for local headers.
+
+ * assembler/AbstractMacroAssembler.h: Also fixed sort order.
+ * assembler/CodeLocation.h:
+ * yarr/RegexJIT.h:
+ * yarr/RegexParser.h:
+
2010-11-08 Adam Roben <aroben@apple.com>
Roll out r71532
diff --git a/JavaScriptCore/Configurations/FeatureDefines.xcconfig b/JavaScriptCore/Configurations/FeatureDefines.xcconfig
index d08fadf..46d5de4 100644
--- a/JavaScriptCore/Configurations/FeatureDefines.xcconfig
+++ b/JavaScriptCore/Configurations/FeatureDefines.xcconfig
@@ -91,9 +91,6 @@ ENABLE_NOTIFICATIONS = ;
ENABLE_OFFLINE_WEB_APPLICATIONS = ENABLE_OFFLINE_WEB_APPLICATIONS;
ENABLE_PROGRESS_TAG = ENABLE_PROGRESS_TAG;
-ENABLE_RUBY = $(ENABLE_RUBY_$(REAL_PLATFORM_NAME));
-ENABLE_RUBY_macosx = ENABLE_RUBY;
-
ENABLE_SHARED_WORKERS = $(ENABLE_SHARED_WORKERS_$(REAL_PLATFORM_NAME));
ENABLE_SHARED_WORKERS_macosx = ENABLE_SHARED_WORKERS;
@@ -124,4 +121,4 @@ ENABLE_XHTMLMP = ;
ENABLE_XPATH = ENABLE_XPATH;
ENABLE_XSLT = ENABLE_XSLT;
-FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_3D_CANVAS) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PROGRESS_TAG) $(ENABLE_RUBY) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);
+FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_3D_CANVAS) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PROGRESS_TAG) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);
diff --git a/JavaScriptCore/Configurations/Version.xcconfig b/JavaScriptCore/Configurations/Version.xcconfig
index 8cdcafc..d4cb8e7 100644
--- a/JavaScriptCore/Configurations/Version.xcconfig
+++ b/JavaScriptCore/Configurations/Version.xcconfig
@@ -22,7 +22,7 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MAJOR_VERSION = 534;
-MINOR_VERSION = 12;
+MINOR_VERSION = 13;
TINY_VERSION = 0;
FULL_VERSION = $(MAJOR_VERSION).$(MINOR_VERSION);
diff --git a/JavaScriptCore/GNUmakefile.am b/JavaScriptCore/GNUmakefile.am
index c507f5d..f7806b4 100644
--- a/JavaScriptCore/GNUmakefile.am
+++ b/JavaScriptCore/GNUmakefile.am
@@ -518,6 +518,7 @@ javascriptcore_sources += \
JavaScriptCore/wtf/text/StringImpl.cpp \
JavaScriptCore/wtf/text/StringImpl.h \
JavaScriptCore/wtf/text/StringStatics.cpp \
+ JavaScriptCore/wtf/text/TextPosition.h \
JavaScriptCore/wtf/text/WTFString.cpp \
JavaScriptCore/wtf/text/WTFString.h \
JavaScriptCore/wtf/ThreadIdentifierDataPthreads.cpp \
diff --git a/JavaScriptCore/JavaScriptCore.gypi b/JavaScriptCore/JavaScriptCore.gypi
index 6252d07..deb36fb 100644
--- a/JavaScriptCore/JavaScriptCore.gypi
+++ b/JavaScriptCore/JavaScriptCore.gypi
@@ -461,6 +461,7 @@
'wtf/text/StringImpl.cpp',
'wtf/text/StringImpl.h',
'wtf/text/StringStatics.cpp',
+ 'wtf/text/TextPosition.h',
'wtf/text/WTFString.cpp',
'wtf/text/WTFString.h',
'wtf/unicode/Collator.h',
diff --git a/JavaScriptCore/JavaScriptCore.pri b/JavaScriptCore/JavaScriptCore.pri
index 847576d..0590b94 100644
--- a/JavaScriptCore/JavaScriptCore.pri
+++ b/JavaScriptCore/JavaScriptCore.pri
@@ -42,6 +42,7 @@ INCLUDEPATH = \
$$PWD/profiler \
$$PWD/runtime \
$$PWD/wtf \
+ $$PWD/wtf/gobject \
$$PWD/wtf/symbian \
$$PWD/wtf/unicode \
$$PWD/yarr \
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def
index aa9d529..449c0bb 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def
+++ b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def
@@ -88,7 +88,7 @@ EXPORTS
?createEmptyString@SmallStrings@JSC@@AAEXPAVJSGlobalData@2@@Z
?createError@JSC@@YAPAVJSObject@1@PAVExecState@1@ABVUString@1@@Z
?createInheritorID@JSObject@JSC@@AAEPAVStructure@2@XZ
- ?createInterruptedExecutionException@JSC@@YA?AVJSValue@1@PAVJSGlobalData@1@@Z
+ ?createInterruptedExecutionException@JSC@@YAPAVJSObject@1@PAVJSGlobalData@1@@Z
?createLeaked@JSGlobalData@JSC@@SA?AV?$PassRefPtr@VJSGlobalData@JSC@@@WTF@@W4ThreadStackType@2@@Z
?createReferenceError@JSC@@YAPAVJSObject@1@PAVExecState@1@ABVUString@1@@Z
?createSingleCharacterString@SmallStrings@JSC@@AAEXPAVJSGlobalData@2@E@Z
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
index 4823286..8c83526 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
+++ b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
@@ -72,13 +72,15 @@
<Tool
Name="VCWebDeploymentTool"
/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
</Configuration>
<Configuration
Name="Release|Win32"
ConfigurationType="2"
InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\JavaScriptCoreCommon.vsprops;.\JavaScriptCoreCF.vsprops"
CharacterSet="1"
- WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -131,6 +133,9 @@
<Tool
Name="VCWebDeploymentTool"
/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
</Configuration>
<Configuration
Name="Debug_Internal|Win32"
@@ -189,6 +194,9 @@
<Tool
Name="VCWebDeploymentTool"
/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
</Configuration>
<Configuration
Name="Release_PGOInstrument|Win32"
@@ -249,6 +257,9 @@
<Tool
Name="VCWebDeploymentTool"
/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
</Configuration>
<Configuration
Name="Release_PGOOptimize|Win32"
@@ -309,6 +320,9 @@
<Tool
Name="VCWebDeploymentTool"
/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
</Configuration>
<Configuration
Name="Debug_CFLite|Win32"
@@ -367,6 +381,9 @@
<Tool
Name="VCWebDeploymentTool"
/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
</Configuration>
<Configuration
Name="Release_CFLite|Win32"
@@ -426,6 +443,9 @@
<Tool
Name="VCWebDeploymentTool"
/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
</Configuration>
<Configuration
Name="Debug_All|Win32"
@@ -484,6 +504,71 @@
<Tool
Name="VCWebDeploymentTool"
/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\JavaScriptCoreCommon.vsprops;.\JavaScriptCoreCF.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
</Configuration>
</Configurations>
<References>
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTF.vcproj b/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTF.vcproj
index c0ecd45..7c26a9c 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTF.vcproj
+++ b/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTF.vcproj
@@ -73,7 +73,6 @@
ConfigurationType="4"
InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\WTFCommon.vsprops"
CharacterSet="1"
- WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -228,6 +227,60 @@
Name="VCPostBuildEventTool"
/>
</Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\WTFCommon.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ ProgramDataBaseFileName="$(OutDir)\$(TargetName).vc80.pdb"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
</Configurations>
<References>
</References>
@@ -447,6 +500,14 @@
DisableSpecificWarnings="4702"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ DisableSpecificWarnings="4702"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\..\wtf\FastMalloc.h"
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/jsc/jsc.vcproj b/JavaScriptCore/JavaScriptCore.vcproj/jsc/jsc.vcproj
index 029a4b0..47861ae 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/jsc/jsc.vcproj
+++ b/JavaScriptCore/JavaScriptCore.vcproj/jsc/jsc.vcproj
@@ -81,7 +81,6 @@
ConfigurationType="1"
InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\jscCommon.vsprops"
CharacterSet="1"
- WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -321,6 +320,68 @@
Name="VCPostBuildEventTool"
/>
</Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\jscCommon.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
</Configurations>
<References>
</References>
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapi.vcproj b/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapi.vcproj
index 9581e54..c786abd 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapi.vcproj
+++ b/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapi.vcproj
@@ -81,7 +81,6 @@
ConfigurationType="1"
InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\testapiCommon.vsprops;..\JavaScriptCore\JavaScriptCoreCF.vsprops"
CharacterSet="1"
- WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -383,6 +382,68 @@
Name="VCPostBuildEventTool"
/>
</Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\testapiCommon.vsprops;..\JavaScriptCore\JavaScriptCoreCF.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
</Configurations>
<References>
</References>
@@ -438,6 +499,14 @@
CompileAs="2"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\..\API\tests\testapi.js"
diff --git a/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj b/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
index d134a73..a1e1c5c 100644
--- a/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
+++ b/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
@@ -555,6 +555,7 @@
E1EE793D0D6C9B9200FEA3BA /* ThreadingPthreads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E1EE793C0D6C9B9200FEA3BA /* ThreadingPthreads.cpp */; };
E1EF79AA0CE97BA60088D500 /* UTF8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E1EF79A80CE97BA60088D500 /* UTF8.cpp */; };
E48E0F2D0F82151700A8CA37 /* FastAllocBase.h in Headers */ = {isa = PBXBuildFile; fileRef = E48E0F2C0F82151700A8CA37 /* FastAllocBase.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ F3BD31ED126735770065467F /* TextPosition.h in Headers */ = {isa = PBXBuildFile; fileRef = F3BD31D0126730180065467F /* TextPosition.h */; settings = {ATTRIBUTES = (Private, ); }; };
FE1B447A0ECCD73B004F4DD1 /* StdLibExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = FE1B44790ECCD73B004F4DD1 /* StdLibExtras.h */; settings = {ATTRIBUTES = (Private, ); }; };
/* End PBXBuildFile section */
@@ -1144,6 +1145,7 @@
E1EF79A80CE97BA60088D500 /* UTF8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UTF8.cpp; sourceTree = "<group>"; };
E1EF79A90CE97BA60088D500 /* UTF8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UTF8.h; sourceTree = "<group>"; };
E48E0F2C0F82151700A8CA37 /* FastAllocBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FastAllocBase.h; sourceTree = "<group>"; };
+ F3BD31D0126730180065467F /* TextPosition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextPosition.h; path = text/TextPosition.h; sourceTree = "<group>"; };
F5BB2BC5030F772101FCFE1D /* Completion.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = Completion.h; sourceTree = "<group>"; tabWidth = 8; };
F5C290E60284F98E018635CA /* JavaScriptCorePrefix.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = JavaScriptCorePrefix.h; sourceTree = "<group>"; tabWidth = 8; };
F68EBB8C0255D4C601FF60F7 /* config.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; tabWidth = 8; };
@@ -1860,6 +1862,7 @@
868BFA07117CEFD100B908B1 /* StringImpl.h */,
86B99AE2117E578100DF5A90 /* StringImplBase.h */,
8626BECE11928E3900782FAB /* StringStatics.cpp */,
+ F3BD31D0126730180065467F /* TextPosition.h */,
868BFA15117CF19900B908B1 /* WTFString.cpp */,
868BFA16117CF19900B908B1 /* WTFString.h */,
);
@@ -2349,6 +2352,7 @@
90213E3E123A40C200D422F3 /* MemoryStatistics.h in Headers */,
A730B6121250068F009D25B1 /* StrictEvalActivation.h in Headers */,
933F5CDC1269229B0049191E /* NullPtr.h in Headers */,
+ F3BD31ED126735770065467F /* TextPosition.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2442,7 +2446,6 @@
isa = PBXProject;
buildConfigurationList = 149C277108902AFE008A9EFC /* Build configuration list for PBXProject "JavaScriptCore" */;
compatibilityVersion = "Xcode 2.4";
- developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
English,
diff --git a/JavaScriptCore/JavaScriptCorePrefix.h b/JavaScriptCore/JavaScriptCorePrefix.h
index 13b21bb..21d6204 100644
--- a/JavaScriptCore/JavaScriptCorePrefix.h
+++ b/JavaScriptCore/JavaScriptCorePrefix.h
@@ -33,3 +33,4 @@
/* Work around bug with C++ library that screws up Objective-C++ when exception support is disabled. */
#undef try
#undef catch
+
diff --git a/JavaScriptCore/assembler/AbstractMacroAssembler.h b/JavaScriptCore/assembler/AbstractMacroAssembler.h
index 5db2cb9..1fa5ec7 100644
--- a/JavaScriptCore/assembler/AbstractMacroAssembler.h
+++ b/JavaScriptCore/assembler/AbstractMacroAssembler.h
@@ -26,8 +26,8 @@
#ifndef AbstractMacroAssembler_h
#define AbstractMacroAssembler_h
-#include <MacroAssemblerCodeRef.h>
-#include <CodeLocation.h>
+#include "CodeLocation.h"
+#include "MacroAssemblerCodeRef.h"
#include <wtf/Noncopyable.h>
#include <wtf/UnusedParam.h>
diff --git a/JavaScriptCore/assembler/CodeLocation.h b/JavaScriptCore/assembler/CodeLocation.h
index cab28cd..e29029b 100644
--- a/JavaScriptCore/assembler/CodeLocation.h
+++ b/JavaScriptCore/assembler/CodeLocation.h
@@ -26,8 +26,7 @@
#ifndef CodeLocation_h
#define CodeLocation_h
-
-#include <MacroAssemblerCodeRef.h>
+#include "MacroAssemblerCodeRef.h"
#if ENABLE(ASSEMBLER)
diff --git a/JavaScriptCore/bytecode/CodeBlock.cpp b/JavaScriptCore/bytecode/CodeBlock.cpp
index 55101d4..bcd2af3 100644
--- a/JavaScriptCore/bytecode/CodeBlock.cpp
+++ b/JavaScriptCore/bytecode/CodeBlock.cpp
@@ -663,6 +663,11 @@ void CodeBlock::dump(ExecState* exec, const Vector<Instruction>::const_iterator&
printUnaryOp(exec, location, it, "bitnot");
break;
}
+ case op_check_has_instance: {
+ int base = (++it)->u.operand;
+ printf("[%4d] check_has_instance\t\t %s\n", location, registerName(exec, base).data());
+ break;
+ }
case op_instanceof: {
int r0 = (++it)->u.operand;
int r1 = (++it)->u.operand;
@@ -1187,11 +1192,14 @@ void CodeBlock::dump(ExecState* exec, const Vector<Instruction>::const_iterator&
printf("[%4d] throw\t\t %s\n", location, registerName(exec, r0).data());
break;
}
- case op_new_error: {
- int r0 = (++it)->u.operand;
- int errorType = (++it)->u.operand;
+ case op_throw_reference_error: {
int k0 = (++it)->u.operand;
- printf("[%4d] new_error\t %s, %d, %s\n", location, registerName(exec, r0).data(), errorType, constantName(exec, k0, getConstant(k0)).data());
+ printf("[%4d] throw_reference_error\t %s\n", location, constantName(exec, k0, getConstant(k0)).data());
+ break;
+ }
+ case op_throw_syntax_error: {
+ int k0 = (++it)->u.operand;
+ printf("[%4d] throw_syntax_error\t %s\n", location, constantName(exec, k0, getConstant(k0)).data());
break;
}
case op_jsr: {
@@ -1617,7 +1625,7 @@ int CodeBlock::lineNumberForBytecodeOffset(CallFrame* callFrame, unsigned byteco
return m_exceptionInfo->m_lineInfo[low - 1].lineNumber;
}
-int CodeBlock::expressionRangeForBytecodeOffset(CallFrame* callFrame, unsigned bytecodeOffset, int& divot, int& startOffset, int& endOffset)
+void CodeBlock::expressionRangeForBytecodeOffset(CallFrame* callFrame, unsigned bytecodeOffset, int& divot, int& startOffset, int& endOffset)
{
ASSERT(bytecodeOffset < m_instructionCount);
@@ -1627,7 +1635,7 @@ int CodeBlock::expressionRangeForBytecodeOffset(CallFrame* callFrame, unsigned b
startOffset = 0;
endOffset = 0;
divot = 0;
- return lineNumberForBytecodeOffset(callFrame, bytecodeOffset);
+ return;
}
int low = 0;
@@ -1639,43 +1647,19 @@ int CodeBlock::expressionRangeForBytecodeOffset(CallFrame* callFrame, unsigned b
else
high = mid;
}
-
+
ASSERT(low);
if (!low) {
startOffset = 0;
endOffset = 0;
divot = 0;
- return lineNumberForBytecodeOffset(callFrame, bytecodeOffset);
+ return;
}
startOffset = m_exceptionInfo->m_expressionInfo[low - 1].startOffset;
endOffset = m_exceptionInfo->m_expressionInfo[low - 1].endOffset;
divot = m_exceptionInfo->m_expressionInfo[low - 1].divotPoint + m_sourceOffset;
- return lineNumberForBytecodeOffset(callFrame, bytecodeOffset);
-}
-
-bool CodeBlock::getByIdExceptionInfoForBytecodeOffset(CallFrame* callFrame, unsigned bytecodeOffset, OpcodeID& opcodeID)
-{
- ASSERT(bytecodeOffset < m_instructionCount);
-
- if (!reparseForExceptionInfoIfNecessary(callFrame) || !m_exceptionInfo->m_getByIdExceptionInfo.size())
- return false;
-
- int low = 0;
- int high = m_exceptionInfo->m_getByIdExceptionInfo.size();
- while (low < high) {
- int mid = low + (high - low) / 2;
- if (m_exceptionInfo->m_getByIdExceptionInfo[mid].bytecodeOffset <= bytecodeOffset)
- low = mid + 1;
- else
- high = mid;
- }
-
- if (!low || m_exceptionInfo->m_getByIdExceptionInfo[low - 1].bytecodeOffset != bytecodeOffset)
- return false;
-
- opcodeID = m_exceptionInfo->m_getByIdExceptionInfo[low - 1].isOpCreateThis ? op_create_this : op_instanceof;
- return true;
+ return;
}
#if ENABLE(JIT)
@@ -1770,7 +1754,6 @@ void CodeBlock::shrinkToFit()
if (m_exceptionInfo) {
m_exceptionInfo->m_expressionInfo.shrinkToFit();
m_exceptionInfo->m_lineInfo.shrinkToFit();
- m_exceptionInfo->m_getByIdExceptionInfo.shrinkToFit();
}
if (m_rareData) {
diff --git a/JavaScriptCore/bytecode/CodeBlock.h b/JavaScriptCore/bytecode/CodeBlock.h
index 68acae4..54acd50 100644
--- a/JavaScriptCore/bytecode/CodeBlock.h
+++ b/JavaScriptCore/bytecode/CodeBlock.h
@@ -93,14 +93,6 @@ namespace JSC {
int32_t lineNumber;
};
- // Both op_construct and op_instanceof require a use of op_get_by_id to get
- // the prototype property from an object. The exception messages for exceptions
- // thrown by these instances op_get_by_id need to reflect this.
- struct GetByIdExceptionInfo {
- unsigned bytecodeOffset : 31;
- bool isOpCreateThis : 1;
- };
-
#if ENABLE(JIT)
struct CallLinkInfo {
CallLinkInfo()
@@ -265,7 +257,6 @@ namespace JSC {
struct ExceptionInfo : FastAllocBase {
Vector<ExpressionRangeInfo> m_expressionInfo;
Vector<LineInfo> m_lineInfo;
- Vector<GetByIdExceptionInfo> m_getByIdExceptionInfo;
#if ENABLE(JIT)
Vector<CallReturnOffsetToBytecodeOffset> m_callReturnIndexVector;
@@ -317,8 +308,7 @@ namespace JSC {
HandlerInfo* handlerForBytecodeOffset(unsigned bytecodeOffset);
int lineNumberForBytecodeOffset(CallFrame*, unsigned bytecodeOffset);
- int expressionRangeForBytecodeOffset(CallFrame*, unsigned bytecodeOffset, int& divot, int& startOffset, int& endOffset);
- bool getByIdExceptionInfoForBytecodeOffset(CallFrame*, unsigned bytecodeOffset, OpcodeID&);
+ void expressionRangeForBytecodeOffset(CallFrame*, unsigned bytecodeOffset, int& divot, int& startOffset, int& endOffset);
#if ENABLE(JIT)
void addCaller(CallLinkInfo* caller)
@@ -468,7 +458,6 @@ namespace JSC {
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); }
size_t numberOfLineInfos() const { ASSERT(m_exceptionInfo); return m_exceptionInfo->m_lineInfo.size(); }
void addLineInfo(const LineInfo& lineInfo) { ASSERT(m_exceptionInfo); m_exceptionInfo->m_lineInfo.append(lineInfo); }
diff --git a/JavaScriptCore/bytecode/Opcode.h b/JavaScriptCore/bytecode/Opcode.h
index 8ee82e7..6c1c6b2 100644
--- a/JavaScriptCore/bytecode/Opcode.h
+++ b/JavaScriptCore/bytecode/Opcode.h
@@ -82,6 +82,7 @@ namespace JSC {
macro(op_bitor, 5) \
macro(op_bitnot, 3) \
\
+ macro(op_check_has_instance, 2) \
macro(op_instanceof, 5) \
macro(op_typeof, 3) \
macro(op_is_undefined, 3) \
@@ -183,7 +184,8 @@ namespace JSC {
\
macro(op_catch, 2) \
macro(op_throw, 2) \
- macro(op_new_error, 4) \
+ macro(op_throw_reference_error, 2) \
+ macro(op_throw_syntax_error, 2) \
\
macro(op_jsr, 3) \
macro(op_sret, 2) \
diff --git a/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp b/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
index 7538314..1fa5aa4 100644
--- a/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
+++ b/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
@@ -443,7 +443,6 @@ BytecodeGenerator::BytecodeGenerator(FunctionBodyNode* functionBody, const Debug
emitOpcode(op_get_callee);
instructions().append(func->index());
// Load prototype.
- emitGetByIdExceptionInfo(op_create_this);
emitGetById(funcProto.get(), func.get(), globalData()->propertyNames->prototype);
emitOpcode(op_create_this);
@@ -1158,6 +1157,12 @@ bool BytecodeGenerator::findScopedProperty(const Identifier& property, int& inde
return true;
}
+void BytecodeGenerator::emitCheckHasInstance(RegisterID* base)
+{
+ emitOpcode(op_check_has_instance);
+ instructions().append(base->index());
+}
+
RegisterID* BytecodeGenerator::emitInstanceOf(RegisterID* dst, RegisterID* value, RegisterID* base, RegisterID* basePrototype)
{
emitOpcode(op_instanceof);
@@ -2050,13 +2055,16 @@ RegisterID* BytecodeGenerator::emitCatch(RegisterID* targetRegister, Label* star
return targetRegister;
}
-RegisterID* BytecodeGenerator::emitNewError(RegisterID* dst, bool isReferenceError, JSValue message)
+void BytecodeGenerator::emitThrowReferenceError(const UString& message)
{
- emitOpcode(op_new_error);
- instructions().append(dst->index());
- instructions().append(isReferenceError);
- instructions().append(addConstantValue(message)->index());
- return dst;
+ emitOpcode(op_throw_reference_error);
+ instructions().append(addConstantValue(jsString(globalData(), message))->index());
+}
+
+void BytecodeGenerator::emitThrowSyntaxError(const UString& message)
+{
+ emitOpcode(op_throw_syntax_error);
+ instructions().append(addConstantValue(jsString(globalData(), message))->index());
}
PassRefPtr<Label> BytecodeGenerator::emitJumpSubroutine(RegisterID* retAddrDst, Label* finally)
@@ -2211,9 +2219,8 @@ RegisterID* BytecodeGenerator::emitThrowExpressionTooDeepException()
// that from an arbitrary node. However, calling emitExpressionInfo without any useful data
// is still good enough to get us an accurate line number.
emitExpressionInfo(0, 0, 0);
- RegisterID* exception = emitNewError(newTemporary(), false, jsString(globalData(), "Expression too deep"));
- emitThrow(exception);
- return exception;
+ emitThrowSyntaxError("Expression too deep");
+ return newTemporary();
}
void BytecodeGenerator::setIsNumericCompareFunction(bool isNumericCompareFunction)
diff --git a/JavaScriptCore/bytecompiler/BytecodeGenerator.h b/JavaScriptCore/bytecompiler/BytecodeGenerator.h
index b189565..499d232 100644
--- a/JavaScriptCore/bytecompiler/BytecodeGenerator.h
+++ b/JavaScriptCore/bytecompiler/BytecodeGenerator.h
@@ -230,8 +230,10 @@ namespace JSC {
LineInfo info = { instructions().size(), n->lineNo() };
m_codeBlock->addLineInfo(info);
}
- if (m_emitNodeDepth >= s_maxEmitNodeDepth)
+ if (m_emitNodeDepth >= s_maxEmitNodeDepth) {
emitThrowExpressionTooDeepException();
+ return;
+ }
++m_emitNodeDepth;
n->emitBytecodeInConditionContext(*this, trueTarget, falseTarget, fallThroughMeansTrue);
--m_emitNodeDepth;
@@ -266,17 +268,6 @@ namespace JSC {
m_codeBlock->addExpressionInfo(info);
}
- void emitGetByIdExceptionInfo(OpcodeID opcodeID)
- {
- // Only op_construct and op_instanceof need exception info for
- // a preceding op_get_by_id.
- ASSERT(opcodeID == op_create_this || opcodeID == op_instanceof);
- GetByIdExceptionInfo info;
- info.bytecodeOffset = instructions().size();
- info.isOpCreateThis = (opcodeID == op_create_this);
- m_codeBlock->addGetByIdExceptionInfo(info);
- }
-
ALWAYS_INLINE bool leftHandSideNeedsCopy(bool rightHasAssignments, bool rightIsPure)
{
return (m_codeType != FunctionCode || m_codeBlock->needsFullScopeChain() || rightHasAssignments) && !rightIsPure;
@@ -320,6 +311,7 @@ namespace JSC {
RegisterID* emitPostInc(RegisterID* dst, RegisterID* srcDst);
RegisterID* emitPostDec(RegisterID* dst, RegisterID* srcDst);
+ void emitCheckHasInstance(RegisterID* base);
RegisterID* emitInstanceOf(RegisterID* dst, RegisterID* value, RegisterID* base, RegisterID* basePrototype);
RegisterID* emitTypeOf(RegisterID* dst, RegisterID* src) { return emitUnaryOp(op_typeof, dst, src); }
RegisterID* emitIn(RegisterID* dst, RegisterID* property, RegisterID* base) { return emitBinaryOp(op_in, dst, property, base, OperandTypes()); }
@@ -380,7 +372,9 @@ namespace JSC {
emitUnaryNoDstOp(op_throw, exc);
}
- RegisterID* emitNewError(RegisterID* dst, bool isReferenceError, JSValue message);
+ void emitThrowReferenceError(const UString& message);
+ void emitThrowSyntaxError(const UString& message);
+
void emitPushNewScope(RegisterID* dst, const Identifier& property, RegisterID* value);
RegisterID* emitPushScope(RegisterID* scope);
diff --git a/JavaScriptCore/bytecompiler/NodesCodegen.cpp b/JavaScriptCore/bytecompiler/NodesCodegen.cpp
index 47129d5..a850c96 100644
--- a/JavaScriptCore/bytecompiler/NodesCodegen.cpp
+++ b/JavaScriptCore/bytecompiler/NodesCodegen.cpp
@@ -76,34 +76,18 @@ namespace JSC {
// ------------------------------ ThrowableExpressionData --------------------------------
-static void substitute(UString& string, const UString& substring)
-{
- size_t position = string.find("%s");
- ASSERT(position != notFound);
- string = makeUString(string.substringSharingImpl(0, position), substring, string.substringSharingImpl(position + 2));
-}
-
-RegisterID* ThrowableExpressionData::emitThrowError(BytecodeGenerator& generator, bool isReferenceError, const char* message)
+RegisterID* ThrowableExpressionData::emitThrowReferenceError(BytecodeGenerator& generator, const UString& message)
{
generator.emitExpressionInfo(divot(), startOffset(), endOffset());
- RegisterID* exception = generator.emitNewError(generator.newTemporary(), isReferenceError, jsString(generator.globalData(), message));
- generator.emitThrow(exception);
- return exception;
+ generator.emitThrowReferenceError(message);
+ return generator.newTemporary();
}
-RegisterID* ThrowableExpressionData::emitThrowError(BytecodeGenerator& generator, bool isReferenceError, const char* messageTemplate, const UString& label)
+RegisterID* ThrowableExpressionData::emitThrowSyntaxError(BytecodeGenerator& generator, const UString& message)
{
- UString message = messageTemplate;
- substitute(message, label);
generator.emitExpressionInfo(divot(), startOffset(), endOffset());
- RegisterID* exception = generator.emitNewError(generator.newTemporary(), isReferenceError, jsString(generator.globalData(), message));
- generator.emitThrow(exception);
- return exception;
-}
-
-inline RegisterID* ThrowableExpressionData::emitThrowError(BytecodeGenerator& generator, bool isReferenceError, const char* messageTemplate, const Identifier& label)
-{
- return emitThrowError(generator, isReferenceError, messageTemplate, label.ustring());
+ generator.emitThrowSyntaxError(message);
+ return generator.newTemporary();
}
// ------------------------------ NullNode -------------------------------------
@@ -148,7 +132,7 @@ RegisterID* RegExpNode::emitBytecode(BytecodeGenerator& generator, RegisterID* d
{
RefPtr<RegExp> regExp = generator.globalData()->regExpCache()->lookupOrCreate(m_pattern.ustring(), m_flags.ustring());
if (!regExp->isValid())
- return emitThrowError(generator, false, "Invalid regular expression: %s", regExp->errorMessage());
+ return emitThrowSyntaxError(generator, makeUString("Invalid regular expression: ", regExp->errorMessage()));
if (dst == generator.ignoredResult())
return 0;
return generator.emitNewRegExp(generator.finalDestination(dst), regExp.get());
@@ -661,7 +645,7 @@ RegisterID* PostfixDotNode::emitBytecode(BytecodeGenerator& generator, RegisterI
RegisterID* PostfixErrorNode::emitBytecode(BytecodeGenerator& generator, RegisterID*)
{
- return emitThrowError(generator, true, m_operator == OpPlusPlus
+ return emitThrowReferenceError(generator, m_operator == OpPlusPlus
? "Postfix ++ operator applied to value that is not a reference."
: "Postfix -- operator applied to value that is not a reference.");
}
@@ -826,7 +810,7 @@ RegisterID* PrefixDotNode::emitBytecode(BytecodeGenerator& generator, RegisterID
RegisterID* PrefixErrorNode::emitBytecode(BytecodeGenerator& generator, RegisterID*)
{
- return emitThrowError(generator, true, m_operator == OpPlusPlus
+ return emitThrowReferenceError(generator, m_operator == OpPlusPlus
? "Prefix ++ operator applied to value that is not a reference."
: "Prefix -- operator applied to value that is not a reference.");
}
@@ -1032,7 +1016,9 @@ RegisterID* InstanceOfNode::emitBytecode(BytecodeGenerator& generator, RegisterI
RefPtr<RegisterID> src2 = generator.emitNode(m_expr2);
generator.emitExpressionInfo(divot(), startOffset(), endOffset());
- generator.emitGetByIdExceptionInfo(op_instanceof);
+ generator.emitCheckHasInstance(src2.get());
+
+ generator.emitExpressionInfo(divot(), startOffset(), endOffset());
RegisterID* src2Prototype = generator.emitGetById(generator.newTemporary(), src2.get(), generator.globalData()->propertyNames->prototype);
generator.emitExpressionInfo(divot(), startOffset(), endOffset());
@@ -1269,7 +1255,7 @@ RegisterID* ReadModifyDotNode::emitBytecode(BytecodeGenerator& generator, Regist
RegisterID* AssignErrorNode::emitBytecode(BytecodeGenerator& generator, RegisterID*)
{
- return emitThrowError(generator, true, "Left side of assignment is not a reference.");
+ return emitThrowReferenceError(generator, "Left side of assignment is not a reference.");
}
// ------------------------------ AssignBracketNode -----------------------------------
@@ -1579,7 +1565,7 @@ RegisterID* ForInNode::emitBytecode(BytecodeGenerator& generator, RegisterID* ds
RefPtr<LabelScope> scope = generator.newLabelScope(LabelScope::Loop);
if (!m_lexpr->isLocation())
- return emitThrowError(generator, true, "Left side of for-in statement is not a reference.");
+ return emitThrowReferenceError(generator, "Left side of for-in statement is not a reference.");
generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
@@ -1656,10 +1642,11 @@ RegisterID* ContinueNode::emitBytecode(BytecodeGenerator& generator, RegisterID*
LabelScope* scope = generator.continueTarget(m_ident);
- if (!scope)
- return m_ident.isEmpty()
- ? emitThrowError(generator, false, "Invalid continue statement.")
- : emitThrowError(generator, false, "Undefined label: '%s'.", m_ident);
+ if (!scope) {
+ if (m_ident.isEmpty())
+ return emitThrowSyntaxError(generator, "Invalid continue statement.");
+ return emitThrowSyntaxError(generator, makeUString("Undefined label: '", m_ident.ustring(), "'."));
+ }
generator.emitJumpScopes(scope->continueTarget(), scope->scopeDepth());
return dst;
@@ -1674,10 +1661,11 @@ RegisterID* BreakNode::emitBytecode(BytecodeGenerator& generator, RegisterID* ds
LabelScope* scope = generator.breakTarget(m_ident);
- if (!scope)
- return m_ident.isEmpty()
- ? emitThrowError(generator, false, "Invalid break statement.")
- : emitThrowError(generator, false, "Undefined label: '%s'.", m_ident);
+ if (!scope) {
+ if (m_ident.isEmpty())
+ return emitThrowSyntaxError(generator, "Invalid break statement.");
+ return emitThrowSyntaxError(generator, makeUString("Undefined label: '", m_ident.ustring(), "'."));
+ }
generator.emitJumpScopes(scope->breakTarget(), scope->scopeDepth());
return dst;
@@ -1689,7 +1677,7 @@ RegisterID* ReturnNode::emitBytecode(BytecodeGenerator& generator, RegisterID* d
{
generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
if (generator.codeType() != FunctionCode)
- return emitThrowError(generator, false, "Invalid return statement.");
+ return emitThrowSyntaxError(generator, "Invalid return statement.");
if (dst == generator.ignoredResult())
dst = 0;
@@ -1895,7 +1883,7 @@ RegisterID* LabelNode::emitBytecode(BytecodeGenerator& generator, RegisterID* ds
generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine());
if (generator.breakTarget(m_name))
- return emitThrowError(generator, false, "Duplicate label: %s.", m_name);
+ return emitThrowSyntaxError(generator, makeUString("Duplicate label: ", m_name.ustring(), "."));
RefPtr<LabelScope> scope = generator.newLabelScope(LabelScope::NamedLabel, &m_name);
RegisterID* r0 = generator.emitNode(dst, m_statement);
diff --git a/JavaScriptCore/interpreter/Interpreter.cpp b/JavaScriptCore/interpreter/Interpreter.cpp
index 68be9fa..0a1be48 100644
--- a/JavaScriptCore/interpreter/Interpreter.cpp
+++ b/JavaScriptCore/interpreter/Interpreter.cpp
@@ -38,6 +38,7 @@
#include "Collector.h"
#include "Debugger.h"
#include "DebuggerCallFrame.h"
+#include "ErrorInstance.h"
#include "EvalCodeCache.h"
#include "ExceptionHelpers.h"
#include "GetterSetter.h"
@@ -60,6 +61,7 @@
#include "Register.h"
#include "SamplingTool.h"
#include "StrictEvalActivation.h"
+#include "UStringConcatenate.h"
#include <limits.h>
#include <stdio.h>
#include <wtf/Threading.h>
@@ -112,7 +114,7 @@ NEVER_INLINE bool Interpreter::resolve(CallFrame* callFrame, Instruction* vPC, J
return true;
}
} while (++iter != end);
- exceptionValue = createUndefinedVariableError(callFrame, ident, vPC - codeBlock->instructions().begin(), codeBlock);
+ exceptionValue = createUndefinedVariableError(callFrame, ident);
return false;
}
@@ -152,7 +154,7 @@ NEVER_INLINE bool Interpreter::resolveSkip(CallFrame* callFrame, Instruction* vP
return true;
}
} while (++iter != end);
- exceptionValue = createUndefinedVariableError(callFrame, ident, vPC - codeBlock->instructions().begin(), codeBlock);
+ exceptionValue = createUndefinedVariableError(callFrame, ident);
return false;
}
@@ -192,7 +194,7 @@ NEVER_INLINE bool Interpreter::resolveGlobal(CallFrame* callFrame, Instruction*
return true;
}
- exceptionValue = createUndefinedVariableError(callFrame, ident, vPC - codeBlock->instructions().begin(), codeBlock);
+ exceptionValue = createUndefinedVariableError(callFrame, ident);
return false;
}
@@ -237,7 +239,7 @@ NEVER_INLINE bool Interpreter::resolveGlobalDynamic(CallFrame* callFrame, Instru
o = *iter;
++iter;
} while (true);
- exceptionValue = createUndefinedVariableError(callFrame, ident, vPC - codeBlock->instructions().begin(), codeBlock);
+ exceptionValue = createUndefinedVariableError(callFrame, ident);
return false;
}
++iter;
@@ -272,7 +274,7 @@ NEVER_INLINE bool Interpreter::resolveGlobalDynamic(CallFrame* callFrame, Instru
return true;
}
- exceptionValue = createUndefinedVariableError(callFrame, ident, vPC - codeBlock->instructions().begin(), codeBlock);
+ exceptionValue = createUndefinedVariableError(callFrame, ident);
return false;
}
@@ -322,7 +324,7 @@ NEVER_INLINE bool Interpreter::resolveBaseAndProperty(CallFrame* callFrame, Inst
++iter;
} while (iter != end);
- exceptionValue = createUndefinedVariableError(callFrame, ident, vPC - codeBlock->instructions().begin(), codeBlock);
+ exceptionValue = createUndefinedVariableError(callFrame, ident);
return false;
}
@@ -366,19 +368,19 @@ ALWAYS_INLINE CallFrame* Interpreter::slideRegisterWindowForCall(CodeBlock* newC
}
#if ENABLE(INTERPRETER)
-static NEVER_INLINE bool isInvalidParamForIn(CallFrame* callFrame, CodeBlock* codeBlock, const Instruction* vPC, JSValue value, JSValue& exceptionData)
+static NEVER_INLINE bool isInvalidParamForIn(CallFrame* callFrame, JSValue value, JSValue& exceptionData)
{
if (value.isObject())
return false;
- exceptionData = createInvalidParamError(callFrame, "in" , value, vPC - codeBlock->instructions().begin(), codeBlock);
+ exceptionData = createInvalidParamError(callFrame, "in" , value);
return true;
}
-static NEVER_INLINE bool isInvalidParamForInstanceOf(CallFrame* callFrame, CodeBlock* codeBlock, const Instruction* vPC, JSValue value, JSValue& exceptionData)
+static NEVER_INLINE bool isInvalidParamForInstanceOf(CallFrame* callFrame, JSValue value, JSValue& exceptionData)
{
if (value.isObject() && asObject(value)->structure()->typeInfo().implementsHasInstance())
return false;
- exceptionData = createInvalidParamError(callFrame, "instanceof" , value, vPC - codeBlock->instructions().begin(), codeBlock);
+ exceptionData = createInvalidParamError(callFrame, "instanceof" , value);
return true;
}
#endif
@@ -605,6 +607,54 @@ NEVER_INLINE bool Interpreter::unwindCallFrame(CallFrame*& callFrame, JSValue ex
return true;
}
+static void appendSourceToError(CallFrame* callFrame, ErrorInstance* exception, unsigned bytecodeOffset)
+{
+ exception->clearAppendSourceToMessage();
+
+ int startOffset = 0;
+ int endOffset = 0;
+ int divotPoint = 0;
+
+ CodeBlock* codeBlock = callFrame->codeBlock();
+ codeBlock->expressionRangeForBytecodeOffset(callFrame, bytecodeOffset, divotPoint, startOffset, endOffset);
+
+ int expressionStart = divotPoint - startOffset;
+ int expressionStop = divotPoint + endOffset;
+
+ if (!expressionStop || expressionStart > codeBlock->source()->length())
+ return;
+
+ JSGlobalData* globalData = &callFrame->globalData();
+ JSValue jsMessage = exception->getDirect(globalData->propertyNames->message);
+ if (!jsMessage || !jsMessage.isString())
+ return;
+
+ UString message = asString(jsMessage)->value(callFrame);
+
+ if (expressionStart < expressionStop)
+ message = makeUString(message, " (evaluating '", codeBlock->source()->getRange(expressionStart, expressionStop), "')");
+ else {
+ // No range information, so give a few characters of context
+ const UChar* data = codeBlock->source()->data();
+ int dataLength = codeBlock->source()->length();
+ int start = expressionStart;
+ int stop = expressionStart;
+ // Get up to 20 characters of context to the left and right of the divot, clamping to the line.
+ // then strip whitespace.
+ while (start > 0 && (expressionStart - start < 20) && data[start - 1] != '\n')
+ start--;
+ while (start < (expressionStart - 1) && isStrWhiteSpace(data[start]))
+ start++;
+ while (stop < dataLength && (stop - expressionStart < 20) && data[stop] != '\n')
+ stop++;
+ while (stop > expressionStart && isStrWhiteSpace(data[stop]))
+ stop--;
+ message = makeUString(message, " (near '...", codeBlock->source()->getRange(start, stop), "...')");
+ }
+
+ exception->putDirect(globalData->propertyNames->message, jsString(globalData, message));
+}
+
NEVER_INLINE HandlerInfo* Interpreter::throwException(CallFrame*& callFrame, JSValue& exceptionValue, unsigned bytecodeOffset, bool explicitThrow)
{
// Set up the exception object
@@ -612,28 +662,20 @@ NEVER_INLINE HandlerInfo* Interpreter::throwException(CallFrame*& callFrame, JSV
CodeBlock* codeBlock = callFrame->codeBlock();
if (exceptionValue.isObject()) {
JSObject* exception = asObject(exceptionValue);
- if (exception->isNotAnObjectErrorStub()) {
- exception = createNotAnObjectError(callFrame, static_cast<JSNotAnObjectErrorStub*>(exception), bytecodeOffset, codeBlock);
- exceptionValue = exception;
- } else {
- if (!hasErrorInfo(callFrame, exception)) {
- if (explicitThrow) {
- int startOffset = 0;
- int endOffset = 0;
- int divotPoint = 0;
- int line = codeBlock->expressionRangeForBytecodeOffset(callFrame, bytecodeOffset, divotPoint, startOffset, endOffset);
- addErrorInfo(callFrame, exception, line, codeBlock->ownerExecutable()->source(), divotPoint, startOffset, endOffset, false);
- } else
- addErrorInfo(callFrame, exception, codeBlock->lineNumberForBytecodeOffset(callFrame, bytecodeOffset), codeBlock->ownerExecutable()->source());
- }
-
- ComplType exceptionType = exception->exceptionType();
- if (exceptionType == Interrupted || exceptionType == Terminated) {
- while (unwindCallFrame(callFrame, exceptionValue, bytecodeOffset, codeBlock)) {
- // Don't need handler checks or anything, we just want to unroll all the JS callframes possible.
- }
- return 0;
+ if (!explicitThrow && exception->isErrorInstance() && static_cast<ErrorInstance*>(exception)->appendSourceToMessage())
+ appendSourceToError(callFrame, static_cast<ErrorInstance*>(exception), bytecodeOffset);
+
+ // FIXME: should only really be adding these properties to VM generated exceptions,
+ // but the inspector currently requires these for all thrown objects.
+ if (!hasErrorInfo(callFrame, exception))
+ addErrorInfo(callFrame, exception, codeBlock->lineNumberForBytecodeOffset(callFrame, bytecodeOffset), codeBlock->ownerExecutable()->source());
+
+ ComplType exceptionType = exception->exceptionType();
+ if (exceptionType == Interrupted || exceptionType == Terminated) {
+ while (unwindCallFrame(callFrame, exceptionValue, bytecodeOffset, codeBlock)) {
+ // Don't need handler checks or anything, we just want to unroll all the JS callframes possible.
}
+ return 0;
}
}
@@ -2098,6 +2140,23 @@ JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFi
vPC += OPCODE_LENGTH(op_not);
NEXT_INSTRUCTION();
}
+ DEFINE_OPCODE(op_check_has_instance) {
+ /* check_has_instance constructor(r)
+
+ Check 'constructor' is an object with the internal property
+ [HasInstance] (i.e. is a function ... *shakes head sadly at
+ JSC API*). Raises an exception if register constructor is not
+ an valid parameter for instanceof.
+ */
+ int base = vPC[1].u.operand;
+ JSValue baseVal = callFrame->r(base).jsValue();
+
+ if (isInvalidParamForInstanceOf(callFrame, baseVal, exceptionValue))
+ goto vm_throw;
+
+ vPC += OPCODE_LENGTH(op_check_has_instance);
+ NEXT_INSTRUCTION();
+ }
DEFINE_OPCODE(op_instanceof) {
/* instanceof dst(r) value(r) constructor(r) constructorProto(r)
@@ -2118,8 +2177,7 @@ JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFi
JSValue baseVal = callFrame->r(base).jsValue();
- if (isInvalidParamForInstanceOf(callFrame, codeBlock, vPC, baseVal, exceptionValue))
- goto vm_throw;
+ ASSERT(!isInvalidParamForInstanceOf(callFrame, baseVal, exceptionValue));
bool result = asObject(baseVal)->hasInstance(callFrame, callFrame->r(value).jsValue(), callFrame->r(baseProto).jsValue());
CHECK_FOR_EXCEPTION();
@@ -2240,7 +2298,7 @@ JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFi
int base = vPC[3].u.operand;
JSValue baseVal = callFrame->r(base).jsValue();
- if (isInvalidParamForIn(callFrame, codeBlock, vPC, baseVal, exceptionValue))
+ if (isInvalidParamForIn(callFrame, baseVal, exceptionValue))
goto vm_throw;
JSObject* baseObj = asObject(baseVal);
@@ -3885,7 +3943,7 @@ skip_id_custom_self:
ASSERT(callType == CallTypeNone);
- exceptionValue = createNotAFunctionError(callFrame, v, vPC - codeBlock->instructions().begin(), codeBlock);
+ exceptionValue = createNotAFunctionError(callFrame, v);
goto vm_throw;
}
DEFINE_OPCODE(op_load_varargs) {
@@ -3917,7 +3975,7 @@ skip_id_custom_self:
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);
+ exceptionValue = createInvalidParamError(callFrame, "Function.prototype.apply", arguments);
goto vm_throw;
}
if (asObject(arguments)->classInfo() == &Arguments::info) {
@@ -3958,7 +4016,7 @@ skip_id_custom_self:
CHECK_FOR_EXCEPTION();
}
} else {
- exceptionValue = createInvalidParamError(callFrame, "Function.prototype.apply", arguments, vPC - codeBlock->instructions().begin(), codeBlock);
+ exceptionValue = createInvalidParamError(callFrame, "Function.prototype.apply", arguments);
goto vm_throw;
}
}
@@ -4043,7 +4101,7 @@ skip_id_custom_self:
ASSERT(callType == CallTypeNone);
- exceptionValue = createNotAFunctionError(callFrame, v, vPC - codeBlock->instructions().begin(), codeBlock);
+ exceptionValue = createNotAFunctionError(callFrame, v);
goto vm_throw;
}
DEFINE_OPCODE(op_tear_off_activation) {
@@ -4387,7 +4445,7 @@ skip_id_custom_self:
ASSERT(constructType == ConstructTypeNone);
- exceptionValue = createNotAConstructorError(callFrame, v, vPC - codeBlock->instructions().begin(), codeBlock);
+ exceptionValue = createNotAConstructorError(callFrame, v);
goto vm_throw;
}
DEFINE_OPCODE(op_strcat) {
@@ -4584,24 +4642,27 @@ skip_id_custom_self:
vPC = codeBlock->instructions().begin() + handler->target;
NEXT_INSTRUCTION();
}
- DEFINE_OPCODE(op_new_error) {
- /* new_error dst(r) type(n) message(k)
+ DEFINE_OPCODE(op_throw_reference_error) {
+ /* op_throw_reference_error message(k)
- Constructs a new Error instance using the original
- constructor, using immediate number n as the type and
- constant message as the message string. The result is
- written to register dst.
+ Constructs a new reference Error instance using the
+ original constructor, using constant message as the
+ message string. The result is thrown.
*/
- int dst = vPC[1].u.operand;
- int isReference = vPC[2].u.operand;
- UString message = callFrame->r(vPC[3].u.operand).jsValue().toString(callFrame);
-
- JSObject* error = isReference ? createReferenceError(callFrame, message) : createSyntaxError(callFrame, message);
- addErrorInfo(globalData, error, codeBlock->lineNumberForBytecodeOffset(callFrame, vPC - codeBlock->instructions().begin()), codeBlock->ownerExecutable()->source());
- callFrame->r(dst) = JSValue(error);
+ UString message = callFrame->r(vPC[1].u.operand).jsValue().toString(callFrame);
+ exceptionValue = JSValue(createReferenceError(callFrame, message));
+ goto vm_throw;
+ }
+ DEFINE_OPCODE(op_throw_syntax_error) {
+ /* op_throw_syntax_error message(k)
- vPC += OPCODE_LENGTH(op_new_error);
- NEXT_INSTRUCTION();
+ Constructs a new syntax Error instance using the
+ original constructor, using constant message as the
+ message string. The result is thrown.
+ */
+ UString message = callFrame->r(vPC[1].u.operand).jsValue().toString(callFrame);
+ exceptionValue = JSValue(createSyntaxError(callFrame, message));
+ goto vm_throw;
}
DEFINE_OPCODE(op_end) {
/* end result(r)
diff --git a/JavaScriptCore/jit/JIT.cpp b/JavaScriptCore/jit/JIT.cpp
index e5be43b..3f2ec59 100644
--- a/JavaScriptCore/jit/JIT.cpp
+++ b/JavaScriptCore/jit/JIT.cpp
@@ -241,6 +241,7 @@ void JIT::privateCompileMainPass()
DEFINE_OP(op_get_global_var)
DEFINE_OP(op_get_pnames)
DEFINE_OP(op_get_scoped_var)
+ DEFINE_OP(op_check_has_instance)
DEFINE_OP(op_instanceof)
DEFINE_OP(op_jeq_null)
DEFINE_OP(op_jfalse)
@@ -271,7 +272,6 @@ void JIT::privateCompileMainPass()
DEFINE_OP(op_neq)
DEFINE_OP(op_neq_null)
DEFINE_OP(op_new_array)
- DEFINE_OP(op_new_error)
DEFINE_OP(op_new_func)
DEFINE_OP(op_new_func_exp)
DEFINE_OP(op_new_object)
@@ -317,6 +317,8 @@ void JIT::privateCompileMainPass()
DEFINE_OP(op_tear_off_activation)
DEFINE_OP(op_tear_off_arguments)
DEFINE_OP(op_throw)
+ DEFINE_OP(op_throw_reference_error)
+ DEFINE_OP(op_throw_syntax_error)
DEFINE_OP(op_to_jsnumber)
DEFINE_OP(op_to_primitive)
@@ -401,6 +403,7 @@ void JIT::privateCompileSlowCases()
DEFINE_SLOWCASE_OP(op_get_by_val)
DEFINE_SLOWCASE_OP(op_get_argument_by_val)
DEFINE_SLOWCASE_OP(op_get_by_pname)
+ DEFINE_SLOWCASE_OP(op_check_has_instance)
DEFINE_SLOWCASE_OP(op_instanceof)
DEFINE_SLOWCASE_OP(op_jfalse)
DEFINE_SLOWCASE_OP(op_jnless)
diff --git a/JavaScriptCore/jit/JIT.h b/JavaScriptCore/jit/JIT.h
index 3ef0538..907a774 100644
--- a/JavaScriptCore/jit/JIT.h
+++ b/JavaScriptCore/jit/JIT.h
@@ -402,7 +402,7 @@ namespace JSC {
static const int sequenceGetByIdHotPathInstructionSpace = 36;
static const int sequenceGetByIdHotPathConstantSpace = 4;
// sequenceGetByIdSlowCase
- static const int sequenceGetByIdSlowCaseInstructionSpace = 40;
+ static const int sequenceGetByIdSlowCaseInstructionSpace = 56;
static const int sequenceGetByIdSlowCaseConstantSpace = 2;
// sequencePutById
static const int sequencePutByIdInstructionSpace = 36;
@@ -755,6 +755,7 @@ namespace JSC {
void emit_op_get_global_var(Instruction*);
void emit_op_get_scoped_var(Instruction*);
void emit_op_init_lazy_reg(Instruction*);
+ void emit_op_check_has_instance(Instruction*);
void emit_op_instanceof(Instruction*);
void emit_op_jeq_null(Instruction*);
void emit_op_jfalse(Instruction*);
@@ -783,7 +784,6 @@ namespace JSC {
void emit_op_neq(Instruction*);
void emit_op_neq_null(Instruction*);
void emit_op_new_array(Instruction*);
- void emit_op_new_error(Instruction*);
void emit_op_new_func(Instruction*);
void emit_op_new_func_exp(Instruction*);
void emit_op_new_object(Instruction*);
@@ -828,6 +828,8 @@ namespace JSC {
void emit_op_tear_off_activation(Instruction*);
void emit_op_tear_off_arguments(Instruction*);
void emit_op_throw(Instruction*);
+ void emit_op_throw_reference_error(Instruction*);
+ void emit_op_throw_syntax_error(Instruction*);
void emit_op_to_jsnumber(Instruction*);
void emit_op_to_primitive(Instruction*);
void emit_op_unexpected_load(Instruction*);
@@ -854,6 +856,7 @@ namespace JSC {
void emitSlow_op_get_by_val(Instruction*, Vector<SlowCaseEntry>::iterator&);
void emitSlow_op_get_argument_by_val(Instruction*, Vector<SlowCaseEntry>::iterator&);
void emitSlow_op_get_by_pname(Instruction*, Vector<SlowCaseEntry>::iterator&);
+ void emitSlow_op_check_has_instance(Instruction*, Vector<SlowCaseEntry>::iterator&);
void emitSlow_op_instanceof(Instruction*, Vector<SlowCaseEntry>::iterator&);
void emitSlow_op_jfalse(Instruction*, Vector<SlowCaseEntry>::iterator&);
void emitSlow_op_jnless(Instruction*, Vector<SlowCaseEntry>::iterator&);
diff --git a/JavaScriptCore/jit/JITInlineMethods.h b/JavaScriptCore/jit/JITInlineMethods.h
index 7611151..39ca4a5 100644
--- a/JavaScriptCore/jit/JITInlineMethods.h
+++ b/JavaScriptCore/jit/JITInlineMethods.h
@@ -122,8 +122,15 @@ ALWAYS_INLINE void JIT::beginUninterruptedSequence(int insnSpace, int constSpace
ALWAYS_INLINE void JIT::endUninterruptedSequence(int insnSpace, int constSpace)
{
#if defined(ASSEMBLER_HAS_CONSTANT_POOL) && ASSEMBLER_HAS_CONSTANT_POOL
- ASSERT(differenceBetween(m_uninterruptedInstructionSequenceBegin, label()) == insnSpace);
- ASSERT(sizeOfConstantPool() - m_uninterruptedConstantSequenceBegin == constSpace);
+ /* There are several cases when the uninterrupted sequence is larger than
+ * maximum required offset for pathing the same sequence. Eg.: if in a
+ * uninterrupted sequence the last macroassembler's instruction is a stub
+ * call, it emits store instruction(s) which should not be included in the
+ * calculation of length of uninterrupted sequence. So, the insnSpace and
+ * constSpace should be upper limit instead of hard limit.
+ */
+ ASSERT(differenceBetween(m_uninterruptedInstructionSequenceBegin, label()) <= insnSpace);
+ ASSERT(sizeOfConstantPool() - m_uninterruptedConstantSequenceBegin <= constSpace);
#endif
JSInterfaceJIT::endUninterruptedSequence();
}
diff --git a/JavaScriptCore/jit/JITOpcodes.cpp b/JavaScriptCore/jit/JITOpcodes.cpp
index 74170c1..d783581 100644
--- a/JavaScriptCore/jit/JITOpcodes.cpp
+++ b/JavaScriptCore/jit/JITOpcodes.cpp
@@ -378,6 +378,20 @@ void JIT::emit_op_new_object(Instruction* currentInstruction)
JITStubCall(this, cti_op_new_object).call(currentInstruction[1].u.operand);
}
+void JIT::emit_op_check_has_instance(Instruction* currentInstruction)
+{
+ unsigned baseVal = currentInstruction[1].u.operand;
+
+ emitGetVirtualRegister(baseVal, regT0);
+
+ // Check that baseVal is a cell.
+ emitJumpSlowCaseIfNotJSCell(regT0, baseVal);
+
+ // Check that baseVal 'ImplementsHasInstance'.
+ loadPtr(Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), regT0);
+ addSlowCase(branchTest8(Zero, Address(regT0, OBJECT_OFFSETOF(Structure, m_typeInfo.m_flags)), Imm32(ImplementsHasInstance)));
+}
+
void JIT::emit_op_instanceof(Instruction* currentInstruction)
{
unsigned dst = currentInstruction[1].u.operand;
@@ -391,15 +405,15 @@ void JIT::emit_op_instanceof(Instruction* currentInstruction)
emitGetVirtualRegister(baseVal, regT0);
emitGetVirtualRegister(proto, regT1);
- // Check that baseVal & proto are cells.
+ // Check that proto are cells. baseVal must be a cell - this is checked by op_check_has_instance.
emitJumpSlowCaseIfNotJSCell(regT2, value);
- emitJumpSlowCaseIfNotJSCell(regT0, baseVal);
emitJumpSlowCaseIfNotJSCell(regT1, proto);
// Check that prototype is an object
loadPtr(Address(regT1, OBJECT_OFFSETOF(JSCell, m_structure)), regT3);
addSlowCase(branch8(NotEqual, Address(regT3, OBJECT_OFFSETOF(Structure, m_typeInfo.m_type)), Imm32(ObjectType)));
+ // Fixme: this check is only needed because the JSC API allows HasInstance to be overridden; we should deprecate this.
// Check that baseVal 'ImplementsDefaultHasInstance'.
loadPtr(Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), regT0);
addSlowCase(branchTest8(Zero, Address(regT0, OBJECT_OFFSETOF(Structure, m_typeInfo.m_flags)), Imm32(ImplementsDefaultHasInstance)));
@@ -1133,13 +1147,18 @@ void JIT::emit_op_switch_string(Instruction* currentInstruction)
jump(regT0);
}
-void JIT::emit_op_new_error(Instruction* currentInstruction)
+void JIT::emit_op_throw_reference_error(Instruction* currentInstruction)
{
- JITStubCall stubCall(this, cti_op_new_error);
- stubCall.addArgument(Imm32(currentInstruction[2].u.operand));
- stubCall.addArgument(ImmPtr(JSValue::encode(m_codeBlock->getConstant(currentInstruction[3].u.operand))));
- stubCall.addArgument(Imm32(m_bytecodeOffset));
- stubCall.call(currentInstruction[1].u.operand);
+ JITStubCall stubCall(this, cti_op_throw_reference_error);
+ stubCall.addArgument(ImmPtr(JSValue::encode(m_codeBlock->getConstant(currentInstruction[1].u.operand))));
+ stubCall.call();
+}
+
+void JIT::emit_op_throw_syntax_error(Instruction* currentInstruction)
+{
+ JITStubCall stubCall(this, cti_op_throw_syntax_error);
+ stubCall.addArgument(ImmPtr(JSValue::encode(m_codeBlock->getConstant(currentInstruction[1].u.operand))));
+ stubCall.call();
}
void JIT::emit_op_debug(Instruction* currentInstruction)
@@ -1475,6 +1494,17 @@ void JIT::emitSlow_op_nstricteq(Instruction* currentInstruction, Vector<SlowCase
stubCall.call(currentInstruction[1].u.operand);
}
+void JIT::emitSlow_op_check_has_instance(Instruction* currentInstruction, Vector<SlowCaseEntry>::iterator& iter)
+{
+ unsigned baseVal = currentInstruction[1].u.operand;
+
+ linkSlowCaseIfNotJSCell(iter, baseVal);
+ linkSlowCase(iter);
+ JITStubCall stubCall(this, cti_op_check_has_instance);
+ stubCall.addArgument(baseVal, regT2);
+ stubCall.call();
+}
+
void JIT::emitSlow_op_instanceof(Instruction* currentInstruction, Vector<SlowCaseEntry>::iterator& iter)
{
unsigned dst = currentInstruction[1].u.operand;
@@ -1483,7 +1513,6 @@ void JIT::emitSlow_op_instanceof(Instruction* currentInstruction, Vector<SlowCas
unsigned proto = currentInstruction[4].u.operand;
linkSlowCaseIfNotJSCell(iter, value);
- linkSlowCaseIfNotJSCell(iter, baseVal);
linkSlowCaseIfNotJSCell(iter, proto);
linkSlowCase(iter);
linkSlowCase(iter);
diff --git a/JavaScriptCore/jit/JITOpcodes32_64.cpp b/JavaScriptCore/jit/JITOpcodes32_64.cpp
index 8e0226d..076649d 100644
--- a/JavaScriptCore/jit/JITOpcodes32_64.cpp
+++ b/JavaScriptCore/jit/JITOpcodes32_64.cpp
@@ -512,6 +512,20 @@ void JIT::emit_op_new_object(Instruction* currentInstruction)
JITStubCall(this, cti_op_new_object).call(currentInstruction[1].u.operand);
}
+void JIT::emit_op_check_has_instance(Instruction* currentInstruction)
+{
+ unsigned baseVal = currentInstruction[1].u.operand;
+
+ emitLoadPayload(baseVal, regT0);
+
+ // Check that baseVal is a cell.
+ emitJumpSlowCaseIfNotJSCell(baseVal);
+
+ // Check that baseVal 'ImplementsHasInstance'.
+ loadPtr(Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), regT0);
+ addSlowCase(branchTest8(Zero, Address(regT0, OBJECT_OFFSETOF(Structure, m_typeInfo.m_flags)), Imm32(ImplementsHasInstance)));
+}
+
void JIT::emit_op_instanceof(Instruction* currentInstruction)
{
unsigned dst = currentInstruction[1].u.operand;
@@ -525,15 +539,15 @@ void JIT::emit_op_instanceof(Instruction* currentInstruction)
emitLoadPayload(baseVal, regT0);
emitLoadPayload(proto, regT1);
- // Check that value, baseVal, and proto are cells.
+ // Check that proto are cells. baseVal must be a cell - this is checked by op_check_has_instance.
emitJumpSlowCaseIfNotJSCell(value);
- emitJumpSlowCaseIfNotJSCell(baseVal);
emitJumpSlowCaseIfNotJSCell(proto);
// Check that prototype is an object
loadPtr(Address(regT1, OBJECT_OFFSETOF(JSCell, m_structure)), regT3);
addSlowCase(branch8(NotEqual, Address(regT3, OBJECT_OFFSETOF(Structure, m_typeInfo.m_type)), Imm32(ObjectType)));
-
+
+ // Fixme: this check is only needed because the JSC API allows HasInstance to be overridden; we should deprecate this.
// Check that baseVal 'ImplementsDefaultHasInstance'.
loadPtr(Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), regT0);
addSlowCase(branchTest8(Zero, Address(regT0, OBJECT_OFFSETOF(Structure, m_typeInfo.m_flags)), Imm32(ImplementsDefaultHasInstance)));
@@ -559,6 +573,18 @@ void JIT::emit_op_instanceof(Instruction* currentInstruction)
emitStoreBool(dst, regT0);
}
+void JIT::emitSlow_op_check_has_instance(Instruction* currentInstruction, Vector<SlowCaseEntry>::iterator& iter)
+{
+ unsigned baseVal = currentInstruction[1].u.operand;
+
+ linkSlowCaseIfNotJSCell(iter, baseVal);
+ linkSlowCase(iter);
+
+ JITStubCall stubCall(this, cti_op_check_has_instance);
+ stubCall.addArgument(baseVal);
+ stubCall.call();
+}
+
void JIT::emitSlow_op_instanceof(Instruction* currentInstruction, Vector<SlowCaseEntry>::iterator& iter)
{
unsigned dst = currentInstruction[1].u.operand;
@@ -567,7 +593,6 @@ void JIT::emitSlow_op_instanceof(Instruction* currentInstruction, Vector<SlowCas
unsigned proto = currentInstruction[4].u.operand;
linkSlowCaseIfNotJSCell(iter, value);
- linkSlowCaseIfNotJSCell(iter, baseVal);
linkSlowCaseIfNotJSCell(iter, proto);
linkSlowCase(iter);
linkSlowCase(iter);
@@ -1462,17 +1487,22 @@ void JIT::emit_op_switch_string(Instruction* currentInstruction)
jump(regT0);
}
-void JIT::emit_op_new_error(Instruction* currentInstruction)
+void JIT::emit_op_throw_reference_error(Instruction* currentInstruction)
{
- unsigned dst = currentInstruction[1].u.operand;
- unsigned type = currentInstruction[2].u.operand;
- unsigned message = currentInstruction[3].u.operand;
+ unsigned message = currentInstruction[1].u.operand;
- JITStubCall stubCall(this, cti_op_new_error);
- stubCall.addArgument(Imm32(type));
+ JITStubCall stubCall(this, cti_op_throw_reference_error);
stubCall.addArgument(m_codeBlock->getConstant(message));
- stubCall.addArgument(Imm32(m_bytecodeOffset));
- stubCall.call(dst);
+ stubCall.call();
+}
+
+void JIT::emit_op_throw_syntax_error(Instruction* currentInstruction)
+{
+ unsigned message = currentInstruction[1].u.operand;
+
+ JITStubCall stubCall(this, cti_op_throw_syntax_error);
+ stubCall.addArgument(m_codeBlock->getConstant(message));
+ stubCall.call();
}
void JIT::emit_op_debug(Instruction* currentInstruction)
diff --git a/JavaScriptCore/jit/JITStubs.cpp b/JavaScriptCore/jit/JITStubs.cpp
index 896b93d..36d36a2 100644
--- a/JavaScriptCore/jit/JITStubs.cpp
+++ b/JavaScriptCore/jit/JITStubs.cpp
@@ -1841,6 +1841,23 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_get_by_id_string_fail)
#endif // ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS)
+DEFINE_STUB_FUNCTION(void, op_check_has_instance)
+{
+ STUB_INIT_STACK_FRAME(stackFrame);
+
+ CallFrame* callFrame = stackFrame.callFrame;
+ JSValue baseVal = stackFrame.args[0].jsValue();
+
+ // ECMA-262 15.3.5.3:
+ // Throw an exception either if baseVal is not an object, or if it does not implement 'HasInstance' (i.e. is a function).
+#ifndef NDEBUG
+ TypeInfo typeInfo(UnspecifiedType);
+ ASSERT(!baseVal.isObject() || !(typeInfo = asObject(baseVal)->structure()->typeInfo()).implementsHasInstance());
+#endif
+ stackFrame.globalData->exception = createInvalidParamError(callFrame, "instanceof", baseVal);
+ VM_THROW_EXCEPTION_AT_END();
+}
+
DEFINE_STUB_FUNCTION(EncodedJSValue, op_instanceof)
{
STUB_INIT_STACK_FRAME(stackFrame);
@@ -1860,10 +1877,7 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_instanceof)
// Throw an exception either if baseVal is not an object, or if it does not implement 'HasInstance' (i.e. is a function).
TypeInfo typeInfo(UnspecifiedType);
if (!baseVal.isObject() || !(typeInfo = asObject(baseVal)->structure()->typeInfo()).implementsHasInstance()) {
- CallFrame* callFrame = stackFrame.callFrame;
- CodeBlock* codeBlock = callFrame->codeBlock();
- unsigned vPCIndex = codeBlock->bytecodeOffset(callFrame, STUB_RETURN_ADDRESS);
- stackFrame.globalData->exception = createInvalidParamError(callFrame, "instanceof", baseVal, vPCIndex, codeBlock);
+ stackFrame.globalData->exception = createInvalidParamError(stackFrame.callFrame, "instanceof", baseVal);
VM_THROW_EXCEPTION();
}
ASSERT(typeInfo.type() != UnspecifiedType);
@@ -2201,10 +2215,7 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_call_NotJSFunction)
ASSERT(callType == CallTypeNone);
- CallFrame* callFrame = stackFrame.callFrame;
- CodeBlock* codeBlock = callFrame->codeBlock();
- unsigned vPCIndex = codeBlock->bytecodeOffset(callFrame, STUB_RETURN_ADDRESS);
- stackFrame.globalData->exception = createNotAFunctionError(stackFrame.callFrame, funcVal, vPCIndex, codeBlock);
+ stackFrame.globalData->exception = createNotAFunctionError(stackFrame.callFrame, funcVal);
VM_THROW_EXCEPTION();
}
@@ -2307,9 +2318,7 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_resolve)
}
} while (++iter != end);
- CodeBlock* codeBlock = callFrame->codeBlock();
- unsigned vPCIndex = codeBlock->bytecodeOffset(callFrame, STUB_RETURN_ADDRESS);
- stackFrame.globalData->exception = createUndefinedVariableError(callFrame, ident, vPCIndex, codeBlock);
+ stackFrame.globalData->exception = createUndefinedVariableError(callFrame, ident);
VM_THROW_EXCEPTION();
}
@@ -2348,10 +2357,7 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_construct_NotJSConstruct)
ASSERT(constructType == ConstructTypeNone);
- CallFrame* callFrame = stackFrame.callFrame;
- CodeBlock* codeBlock = callFrame->codeBlock();
- unsigned vPCIndex = codeBlock->bytecodeOffset(callFrame, STUB_RETURN_ADDRESS);
- stackFrame.globalData->exception = createNotAConstructorError(callFrame, constrVal, vPCIndex, codeBlock);
+ stackFrame.globalData->exception = createNotAConstructorError(stackFrame.callFrame, constrVal);
VM_THROW_EXCEPTION();
}
@@ -2621,9 +2627,7 @@ DEFINE_STUB_FUNCTION(int, op_load_varargs)
} else if (!arguments.isUndefinedOrNull()) {
if (!arguments.isObject()) {
- CodeBlock* codeBlock = callFrame->codeBlock();
- unsigned vPCIndex = codeBlock->bytecodeOffset(callFrame, STUB_RETURN_ADDRESS);
- stackFrame.globalData->exception = createInvalidParamError(callFrame, "Function.prototype.apply", arguments, vPCIndex, codeBlock);
+ stackFrame.globalData->exception = createInvalidParamError(callFrame, "Function.prototype.apply", arguments);
VM_THROW_EXCEPTION();
}
if (asObject(arguments)->classInfo() == &Arguments::info) {
@@ -2664,9 +2668,7 @@ DEFINE_STUB_FUNCTION(int, op_load_varargs)
CHECK_FOR_EXCEPTION();
}
} else {
- CodeBlock* codeBlock = callFrame->codeBlock();
- unsigned vPCIndex = codeBlock->bytecodeOffset(callFrame, STUB_RETURN_ADDRESS);
- stackFrame.globalData->exception = createInvalidParamError(callFrame, "Function.prototype.apply", arguments, vPCIndex, codeBlock);
+ stackFrame.globalData->exception = createInvalidParamError(callFrame, "Function.prototype.apply", arguments);
VM_THROW_EXCEPTION();
}
}
@@ -2757,8 +2759,7 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_resolve_skip)
}
} while (++iter != end);
- unsigned vPCIndex = codeBlock->bytecodeOffset(callFrame, STUB_RETURN_ADDRESS);
- stackFrame.globalData->exception = createUndefinedVariableError(callFrame, ident, vPCIndex, codeBlock);
+ stackFrame.globalData->exception = createUndefinedVariableError(callFrame, ident);
VM_THROW_EXCEPTION();
}
@@ -2790,8 +2791,7 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_resolve_global)
return JSValue::encode(result);
}
- unsigned vPCIndex = codeBlock->bytecodeOffset(callFrame, STUB_RETURN_ADDRESS);
- stackFrame.globalData->exception = createUndefinedVariableError(callFrame, ident, vPCIndex, codeBlock);
+ stackFrame.globalData->exception = createUndefinedVariableError(callFrame, ident);
VM_THROW_EXCEPTION();
}
@@ -3091,9 +3091,7 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_resolve_with_base)
++iter;
} while (iter != end);
- CodeBlock* codeBlock = callFrame->codeBlock();
- unsigned vPCIndex = codeBlock->bytecodeOffset(callFrame, STUB_RETURN_ADDRESS);
- stackFrame.globalData->exception = createUndefinedVariableError(callFrame, ident, vPCIndex, codeBlock);
+ stackFrame.globalData->exception = createUndefinedVariableError(callFrame, ident);
VM_THROW_EXCEPTION_AT_END();
return JSValue::encode(JSValue());
}
@@ -3396,10 +3394,7 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_in)
JSValue baseVal = stackFrame.args[1].jsValue();
if (!baseVal.isObject()) {
- CallFrame* callFrame = stackFrame.callFrame;
- CodeBlock* codeBlock = callFrame->codeBlock();
- unsigned vPCIndex = codeBlock->bytecodeOffset(callFrame, STUB_RETURN_ADDRESS);
- stackFrame.globalData->exception = createInvalidParamError(callFrame, "in", baseVal, vPCIndex, codeBlock);
+ stackFrame.globalData->exception = createInvalidParamError(stackFrame.callFrame, "in", baseVal);
VM_THROW_EXCEPTION();
}
@@ -3563,19 +3558,24 @@ DEFINE_STUB_FUNCTION(void, op_put_setter)
baseObj->defineSetter(callFrame, stackFrame.args[1].identifier(), asObject(stackFrame.args[2].jsValue()));
}
-DEFINE_STUB_FUNCTION(JSObject*, op_new_error)
+DEFINE_STUB_FUNCTION(void, op_throw_reference_error)
{
STUB_INIT_STACK_FRAME(stackFrame);
CallFrame* callFrame = stackFrame.callFrame;
- CodeBlock* codeBlock = callFrame->codeBlock();
- unsigned isReference = stackFrame.args[0].int32();
- UString message = stackFrame.args[1].jsValue().toString(callFrame);
- unsigned bytecodeOffset = stackFrame.args[2].int32();
+ UString message = stackFrame.args[0].jsValue().toString(callFrame);
+ stackFrame.globalData->exception = createReferenceError(callFrame, message);
+ VM_THROW_EXCEPTION_AT_END();
+}
- JSObject* error = isReference ? createReferenceError(callFrame, message) : createSyntaxError(callFrame, message);
- unsigned lineNumber = codeBlock->lineNumberForBytecodeOffset(callFrame, bytecodeOffset);
- return addErrorInfo(stackFrame.globalData, error, lineNumber, codeBlock->ownerExecutable()->source());
+DEFINE_STUB_FUNCTION(void, op_throw_syntax_error)
+{
+ STUB_INIT_STACK_FRAME(stackFrame);
+
+ CallFrame* callFrame = stackFrame.callFrame;
+ UString message = stackFrame.args[0].jsValue().toString(callFrame);
+ stackFrame.globalData->exception = createSyntaxError(callFrame, message);
+ VM_THROW_EXCEPTION_AT_END();
}
DEFINE_STUB_FUNCTION(void, op_debug)
diff --git a/JavaScriptCore/jit/JITStubs.h b/JavaScriptCore/jit/JITStubs.h
index c27ee52..937134b 100644
--- a/JavaScriptCore/jit/JITStubs.h
+++ b/JavaScriptCore/jit/JITStubs.h
@@ -354,7 +354,6 @@ extern "C" {
EncodedJSValue JIT_STUB cti_op_urshift(STUB_ARGS_DECLARATION);
EncodedJSValue JIT_STUB cti_to_object(STUB_ARGS_DECLARATION);
JSObject* JIT_STUB cti_op_new_array(STUB_ARGS_DECLARATION);
- JSObject* JIT_STUB cti_op_new_error(STUB_ARGS_DECLARATION);
JSObject* JIT_STUB cti_op_new_func(STUB_ARGS_DECLARATION);
JSObject* JIT_STUB cti_op_new_func_exp(STUB_ARGS_DECLARATION);
JSObject* JIT_STUB cti_op_new_object(STUB_ARGS_DECLARATION);
@@ -373,6 +372,7 @@ extern "C" {
int JIT_STUB cti_op_loop_if_lesseq(STUB_ARGS_DECLARATION);
int JIT_STUB cti_timeout_check(STUB_ARGS_DECLARATION);
int JIT_STUB cti_has_property(STUB_ARGS_DECLARATION);
+ void JIT_STUB cti_op_check_has_instance(STUB_ARGS_DECLARATION);
void JIT_STUB cti_op_debug(STUB_ARGS_DECLARATION);
void JIT_STUB cti_op_end(STUB_ARGS_DECLARATION);
void JIT_STUB cti_op_jmp_scopes(STUB_ARGS_DECLARATION);
@@ -393,6 +393,8 @@ extern "C" {
void JIT_STUB cti_op_ret_scopeChain(STUB_ARGS_DECLARATION);
void JIT_STUB cti_op_tear_off_activation(STUB_ARGS_DECLARATION);
void JIT_STUB cti_op_tear_off_arguments(STUB_ARGS_DECLARATION);
+ void JIT_STUB cti_op_throw_reference_error(STUB_ARGS_DECLARATION);
+ void JIT_STUB cti_op_throw_syntax_error(STUB_ARGS_DECLARATION);
void* JIT_STUB cti_op_call_arityCheck(STUB_ARGS_DECLARATION);
void* JIT_STUB cti_op_construct_arityCheck(STUB_ARGS_DECLARATION);
void* JIT_STUB cti_op_call_jitCompile(STUB_ARGS_DECLARATION);
diff --git a/JavaScriptCore/parser/Nodes.h b/JavaScriptCore/parser/Nodes.h
index f2a7c1e..6930f63 100644
--- a/JavaScriptCore/parser/Nodes.h
+++ b/JavaScriptCore/parser/Nodes.h
@@ -269,9 +269,8 @@ namespace JSC {
uint16_t endOffset() const { return m_endOffset; }
protected:
- RegisterID* emitThrowError(BytecodeGenerator&, bool isReferenceError, const char* message);
- RegisterID* emitThrowError(BytecodeGenerator&, bool isReferenceError, const char* message, const UString&);
- RegisterID* emitThrowError(BytecodeGenerator&, bool isReferenceError, const char* message, const Identifier&);
+ RegisterID* emitThrowReferenceError(BytecodeGenerator&, const UString& message);
+ RegisterID* emitThrowSyntaxError(BytecodeGenerator&, const UString& message);
private:
uint32_t m_divot;
diff --git a/JavaScriptCore/runtime/Error.cpp b/JavaScriptCore/runtime/Error.cpp
index fd97beb..227e9ec 100644
--- a/JavaScriptCore/runtime/Error.cpp
+++ b/JavaScriptCore/runtime/Error.cpp
@@ -38,9 +38,6 @@ namespace JSC {
static const char* linePropertyName = "line";
static const char* sourceIdPropertyName = "sourceId";
static const char* sourceURLPropertyName = "sourceURL";
-static const char* expressionBeginOffsetPropertyName = "expressionBeginOffset";
-static const char* expressionCaretOffsetPropertyName = "expressionCaretOffset";
-static const char* expressionEndOffsetPropertyName = "expressionEndOffset";
JSObject* createError(JSGlobalObject* globalObject, const UString& message)
{
@@ -119,7 +116,7 @@ JSObject* createURIError(ExecState* exec, const UString& message)
return createURIError(exec->lexicalGlobalObject(), message);
}
-static void addErrorSourceInfo(JSGlobalData* globalData, JSObject* error, int line, const SourceCode& source)
+JSObject* addErrorInfo(JSGlobalData* globalData, JSObject* error, int line, const SourceCode& source)
{
intptr_t sourceID = source.provider()->asID();
const UString& sourceURL = source.provider()->url();
@@ -130,26 +127,7 @@ static void addErrorSourceInfo(JSGlobalData* globalData, JSObject* error, int li
error->putWithAttributes(globalData, Identifier(globalData, sourceIdPropertyName), jsNumber((double)sourceID), ReadOnly | DontDelete);
if (!sourceURL.isNull())
error->putWithAttributes(globalData, Identifier(globalData, sourceURLPropertyName), jsString(globalData, sourceURL), ReadOnly | DontDelete);
-}
-
-static void addErrorDivotInfo(JSGlobalData* globalData, JSObject* error, int divotPoint, int startOffset, int endOffset, bool withCaret)
-{
- error->putWithAttributes(globalData, Identifier(globalData, expressionBeginOffsetPropertyName), jsNumber(divotPoint - startOffset), ReadOnly | DontDelete);
- error->putWithAttributes(globalData, Identifier(globalData, expressionEndOffsetPropertyName), jsNumber(divotPoint + endOffset), ReadOnly | DontDelete);
- if (withCaret)
- error->putWithAttributes(globalData, Identifier(globalData, expressionCaretOffsetPropertyName), jsNumber(divotPoint), ReadOnly | DontDelete);
-}
-
-JSObject* addErrorInfo(JSGlobalData* globalData, JSObject* error, int line, const SourceCode& source)
-{
- addErrorSourceInfo(globalData, error, line, source);
- return error;
-}
-JSObject* addErrorInfo(JSGlobalData* globalData, JSObject* error, int line, const SourceCode& source, int divotPoint, int startOffset, int endOffset, bool withCaret)
-{
- addErrorSourceInfo(globalData, error, line, source);
- addErrorDivotInfo(globalData, error, divotPoint, startOffset, endOffset, withCaret);
return error;
}
@@ -158,19 +136,11 @@ JSObject* addErrorInfo(ExecState* exec, JSObject* error, int line, const SourceC
return addErrorInfo(&exec->globalData(), error, line, source);
}
-JSObject* addErrorInfo(ExecState* exec, JSObject* error, int line, const SourceCode& source, int divotPoint, int startOffset, int endOffset, bool withCaret)
-{
- return addErrorInfo(&exec->globalData(), error, line, source, divotPoint, startOffset, endOffset, withCaret);
-}
-
bool hasErrorInfo(ExecState* exec, JSObject* error)
{
return error->hasProperty(exec, Identifier(exec, linePropertyName))
|| error->hasProperty(exec, Identifier(exec, sourceIdPropertyName))
- || error->hasProperty(exec, Identifier(exec, sourceURLPropertyName))
- || error->hasProperty(exec, Identifier(exec, expressionBeginOffsetPropertyName))
- || error->hasProperty(exec, Identifier(exec, expressionCaretOffsetPropertyName))
- || error->hasProperty(exec, Identifier(exec, expressionEndOffsetPropertyName));
+ || error->hasProperty(exec, Identifier(exec, sourceURLPropertyName));
}
JSValue throwError(ExecState* exec, JSValue error)
diff --git a/JavaScriptCore/runtime/Error.h b/JavaScriptCore/runtime/Error.h
index bfde7dc..c0f9d32 100644
--- a/JavaScriptCore/runtime/Error.h
+++ b/JavaScriptCore/runtime/Error.h
@@ -56,10 +56,8 @@ namespace JSC {
// Methods to add
bool hasErrorInfo(ExecState*, JSObject* error);
JSObject* addErrorInfo(JSGlobalData*, JSObject* error, int line, const SourceCode&);
- JSObject* addErrorInfo(JSGlobalData*, JSObject* error, int line, const SourceCode&, int divotPoint, int startOffset, int endOffset, bool withCaret = true);
// ExecState wrappers.
JSObject* addErrorInfo(ExecState*, JSObject* error, int line, const SourceCode&);
- JSObject* addErrorInfo(ExecState*, JSObject* error, int line, const SourceCode&, int divotPoint, int startOffset, int endOffset, bool withCaret = true);
// Methods to throw Errors.
JSValue throwError(ExecState*, JSValue);
diff --git a/JavaScriptCore/runtime/ErrorInstance.cpp b/JavaScriptCore/runtime/ErrorInstance.cpp
index 740e20e..0f3153c 100644
--- a/JavaScriptCore/runtime/ErrorInstance.cpp
+++ b/JavaScriptCore/runtime/ErrorInstance.cpp
@@ -27,12 +27,14 @@ const ClassInfo ErrorInstance::info = { "Error", 0, 0, 0 };
ErrorInstance::ErrorInstance(JSGlobalData* globalData, NonNullPassRefPtr<Structure> structure)
: JSObject(structure)
+ , m_appendSourceToMessage(false)
{
putDirect(globalData->propertyNames->message, jsString(globalData, ""));
}
ErrorInstance::ErrorInstance(JSGlobalData* globalData, NonNullPassRefPtr<Structure> structure, const UString& message)
: JSObject(structure)
+ , m_appendSourceToMessage(false)
{
putDirect(globalData->propertyNames->message, jsString(globalData, message));
}
diff --git a/JavaScriptCore/runtime/ErrorInstance.h b/JavaScriptCore/runtime/ErrorInstance.h
index a49cc3c..b3bebec 100644
--- a/JavaScriptCore/runtime/ErrorInstance.h
+++ b/JavaScriptCore/runtime/ErrorInstance.h
@@ -34,9 +34,18 @@ namespace JSC {
static ErrorInstance* create(JSGlobalData*, NonNullPassRefPtr<Structure>, const UString&);
static ErrorInstance* create(ExecState* exec, NonNullPassRefPtr<Structure>, JSValue message);
+
+ bool appendSourceToMessage() { return m_appendSourceToMessage; }
+ void setAppendSourceToMessage() { m_appendSourceToMessage = true; }
+ void clearAppendSourceToMessage() { m_appendSourceToMessage = false; }
+
+ virtual bool isErrorInstance() const { return true; }
+
protected:
explicit ErrorInstance(JSGlobalData*, NonNullPassRefPtr<Structure>);
explicit ErrorInstance(JSGlobalData*, NonNullPassRefPtr<Structure>, const UString&);
+
+ bool m_appendSourceToMessage;
};
} // namespace JSC
diff --git a/JavaScriptCore/runtime/ExceptionHelpers.cpp b/JavaScriptCore/runtime/ExceptionHelpers.cpp
index 5fbaa18..1ef264c 100644
--- a/JavaScriptCore/runtime/ExceptionHelpers.cpp
+++ b/JavaScriptCore/runtime/ExceptionHelpers.cpp
@@ -31,6 +31,7 @@
#include "CodeBlock.h"
#include "CallFrame.h"
+#include "ErrorInstance.h"
#include "JSGlobalObjectFunctions.h"
#include "JSObject.h"
#include "JSNotAnObject.h"
@@ -52,7 +53,7 @@ public:
virtual UString toString(ExecState*) const { return "JavaScript execution exceeded timeout."; }
};
-JSValue createInterruptedExecutionException(JSGlobalData* globalData)
+JSObject* createInterruptedExecutionException(JSGlobalData* globalData)
{
return new (globalData) InterruptedExecutionError(globalData);
}
@@ -69,7 +70,7 @@ public:
virtual UString toString(ExecState*) const { return "JavaScript execution terminated."; }
};
-JSValue createTerminatedExecutionException(JSGlobalData* globalData)
+JSObject* createTerminatedExecutionException(JSGlobalData* globalData)
{
return new (globalData) TerminatedExecutionError(globalData);
}
@@ -84,106 +85,45 @@ JSObject* createStackOverflowError(JSGlobalObject* globalObject)
return createRangeError(globalObject, "Maximum call stack size exceeded.");
}
-JSValue createUndefinedVariableError(ExecState* exec, const Identifier& ident, unsigned bytecodeOffset, CodeBlock* codeBlock)
+JSObject* createUndefinedVariableError(ExecState* exec, const Identifier& ident)
{
- int startOffset = 0;
- int endOffset = 0;
- int divotPoint = 0;
- int line = codeBlock->expressionRangeForBytecodeOffset(exec, bytecodeOffset, divotPoint, startOffset, endOffset);
UString message(makeUString("Can't find variable: ", ident.ustring()));
- JSObject* exception = addErrorInfo(exec, createReferenceError(exec, message), line, codeBlock->ownerExecutable()->source(), divotPoint, startOffset, endOffset);
- return exception;
+ return createReferenceError(exec, message);
}
-static UString createErrorMessage(ExecState* exec, CodeBlock* codeBlock, int, int expressionStart, int expressionStop, JSValue value, UString error)
+JSObject* createInvalidParamError(ExecState* exec, const char* op, JSValue value)
{
- if (!expressionStop || expressionStart > codeBlock->source()->length())
- return makeUString(value.toString(exec), " is ", error);
- if (expressionStart < expressionStop)
- return makeUString("Result of expression '", codeBlock->source()->getRange(expressionStart, expressionStop), "' [", value.toString(exec), "] is ", error, ".");
-
- // No range information, so give a few characters of context
- const UChar* data = codeBlock->source()->data();
- int dataLength = codeBlock->source()->length();
- int start = expressionStart;
- int stop = expressionStart;
- // Get up to 20 characters of context to the left and right of the divot, clamping to the line.
- // then strip whitespace.
- while (start > 0 && (expressionStart - start < 20) && data[start - 1] != '\n')
- start--;
- while (start < (expressionStart - 1) && isStrWhiteSpace(data[start]))
- start++;
- while (stop < dataLength && (stop - expressionStart < 20) && data[stop] != '\n')
- stop++;
- while (stop > expressionStart && isStrWhiteSpace(data[stop]))
- stop--;
- return makeUString("Result of expression near '...", codeBlock->source()->getRange(start, stop), "...' [", value.toString(exec), "] is ", error, ".");
-}
-
-JSObject* createInvalidParamError(ExecState* exec, const char* op, JSValue value, unsigned bytecodeOffset, CodeBlock* codeBlock)
-{
- int startOffset = 0;
- int endOffset = 0;
- int divotPoint = 0;
- int line = codeBlock->expressionRangeForBytecodeOffset(exec, bytecodeOffset, divotPoint, startOffset, endOffset);
- UString errorMessage = createErrorMessage(exec, codeBlock, line, divotPoint, divotPoint + endOffset, value, makeUString("not a valid argument for '", op, "'"));
- JSObject* exception = addErrorInfo(exec, createTypeError(exec, errorMessage), line, codeBlock->ownerExecutable()->source(), divotPoint, startOffset, endOffset);
+ UString errorMessage = makeUString("'", value.toString(exec), "' is not a valid argument for '", op, "'");
+ JSObject* exception = createTypeError(exec, errorMessage);
+ ASSERT(exception->isErrorInstance());
+ static_cast<ErrorInstance*>(exception)->setAppendSourceToMessage();
return exception;
}
-JSObject* createNotAConstructorError(ExecState* exec, JSValue value, unsigned bytecodeOffset, CodeBlock* codeBlock)
+JSObject* createNotAConstructorError(ExecState* exec, JSValue value)
{
- int startOffset = 0;
- int endOffset = 0;
- int divotPoint = 0;
- int line = codeBlock->expressionRangeForBytecodeOffset(exec, bytecodeOffset, divotPoint, startOffset, endOffset);
-
- // We're in a "new" expression, so we need to skip over the "new.." part
- int startPoint = divotPoint - (startOffset ? startOffset - 4 : 0); // -4 for "new "
- const UChar* data = codeBlock->source()->data();
- while (startPoint < divotPoint && isStrWhiteSpace(data[startPoint]))
- startPoint++;
-
- UString errorMessage = createErrorMessage(exec, codeBlock, line, startPoint, divotPoint, value, "not a constructor");
- JSObject* exception = addErrorInfo(exec, createTypeError(exec, errorMessage), line, codeBlock->ownerExecutable()->source(), divotPoint, startOffset, endOffset);
+ UString errorMessage = makeUString("'", value.toString(exec), "' is not a constructor");
+ JSObject* exception = createTypeError(exec, errorMessage);
+ ASSERT(exception->isErrorInstance());
+ static_cast<ErrorInstance*>(exception)->setAppendSourceToMessage();
return exception;
}
-JSValue createNotAFunctionError(ExecState* exec, JSValue value, unsigned bytecodeOffset, CodeBlock* codeBlock)
+JSObject* createNotAFunctionError(ExecState* exec, JSValue value)
{
- int startOffset = 0;
- int endOffset = 0;
- int divotPoint = 0;
- int line = codeBlock->expressionRangeForBytecodeOffset(exec, bytecodeOffset, divotPoint, startOffset, endOffset);
- UString errorMessage = createErrorMessage(exec, codeBlock, line, divotPoint - startOffset, divotPoint, value, "not a function");
- JSObject* exception = addErrorInfo(exec, createTypeError(exec, errorMessage), line, codeBlock->ownerExecutable()->source(), divotPoint, startOffset, endOffset);
+ UString errorMessage = makeUString("'", value.toString(exec), "' is not a function");
+ JSObject* exception = createTypeError(exec, errorMessage);
+ ASSERT(exception->isErrorInstance());
+ static_cast<ErrorInstance*>(exception)->setAppendSourceToMessage();
return exception;
}
-JSNotAnObjectErrorStub* createNotAnObjectErrorStub(ExecState* exec, bool isNull)
+JSObject* createNotAnObjectError(ExecState* exec, JSValue value)
{
- return new (exec) JSNotAnObjectErrorStub(exec, isNull);
-}
-
-JSObject* createNotAnObjectError(ExecState* exec, JSNotAnObjectErrorStub* error, unsigned bytecodeOffset, CodeBlock* codeBlock)
-{
- // Both op_create_this and op_instanceof require a use of op_get_by_id to get
- // the prototype property from an object. The exception messages for exceptions
- // thrown by these instances op_get_by_id need to reflect this.
- OpcodeID followingOpcodeID;
- if (codeBlock->getByIdExceptionInfoForBytecodeOffset(exec, bytecodeOffset, followingOpcodeID)) {
- ASSERT(followingOpcodeID == op_create_this || followingOpcodeID == op_instanceof);
- if (followingOpcodeID == op_create_this)
- return createNotAConstructorError(exec, error->isNull() ? jsNull() : jsUndefined(), bytecodeOffset, codeBlock);
- return createInvalidParamError(exec, "instanceof", error->isNull() ? jsNull() : jsUndefined(), bytecodeOffset, codeBlock);
- }
-
- int startOffset = 0;
- int endOffset = 0;
- int divotPoint = 0;
- int line = codeBlock->expressionRangeForBytecodeOffset(exec, bytecodeOffset, divotPoint, startOffset, endOffset);
- UString errorMessage = createErrorMessage(exec, codeBlock, line, divotPoint - startOffset, divotPoint, error->isNull() ? jsNull() : jsUndefined(), "not an object");
- JSObject* exception = addErrorInfo(exec, createTypeError(exec, errorMessage), line, codeBlock->ownerExecutable()->source(), divotPoint, startOffset, endOffset);
+ UString errorMessage = makeUString("'", value.toString(exec), "' is not an object");
+ JSObject* exception = createTypeError(exec, errorMessage);
+ ASSERT(exception->isErrorInstance());
+ static_cast<ErrorInstance*>(exception)->setAppendSourceToMessage();
return exception;
}
diff --git a/JavaScriptCore/runtime/ExceptionHelpers.h b/JavaScriptCore/runtime/ExceptionHelpers.h
index a7b2ca7..7edffad 100644
--- a/JavaScriptCore/runtime/ExceptionHelpers.h
+++ b/JavaScriptCore/runtime/ExceptionHelpers.h
@@ -43,16 +43,15 @@ namespace JSC {
class Node;
struct Instruction;
- JSValue createInterruptedExecutionException(JSGlobalData*);
- JSValue createTerminatedExecutionException(JSGlobalData*);
+ JSObject* createInterruptedExecutionException(JSGlobalData*);
+ JSObject* createTerminatedExecutionException(JSGlobalData*);
JSObject* createStackOverflowError(ExecState*);
JSObject* createStackOverflowError(JSGlobalObject*);
- JSValue createUndefinedVariableError(ExecState*, const Identifier&, unsigned bytecodeOffset, CodeBlock*);
- JSNotAnObjectErrorStub* createNotAnObjectErrorStub(ExecState*, bool isNull);
- JSObject* createInvalidParamError(ExecState*, const char* op, JSValue, unsigned bytecodeOffset, CodeBlock*);
- JSObject* createNotAConstructorError(ExecState*, JSValue, unsigned bytecodeOffset, CodeBlock*);
- JSValue createNotAFunctionError(ExecState*, JSValue, unsigned bytecodeOffset, CodeBlock*);
- JSObject* createNotAnObjectError(ExecState*, JSNotAnObjectErrorStub*, unsigned bytecodeOffset, CodeBlock*);
+ JSObject* createUndefinedVariableError(ExecState*, const Identifier&);
+ JSObject* createNotAnObjectError(ExecState*, JSValue);
+ JSObject* createInvalidParamError(ExecState*, const char* op, JSValue);
+ JSObject* createNotAConstructorError(ExecState*, JSValue);
+ JSObject* createNotAFunctionError(ExecState*, JSValue);
JSObject* createErrorForInvalidGlobalAssignment(ExecState*, const UString&);
JSObject* throwOutOfMemoryError(ExecState*);
diff --git a/JavaScriptCore/runtime/JSFunction.cpp b/JavaScriptCore/runtime/JSFunction.cpp
index 0697fc3..ba89d04 100644
--- a/JavaScriptCore/runtime/JSFunction.cpp
+++ b/JavaScriptCore/runtime/JSFunction.cpp
@@ -45,9 +45,7 @@ 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));
+ return throwVMError(exec, createNotAConstructorError(exec, exec->callee()));
}
#endif
@@ -284,6 +282,10 @@ bool JSFunction::getOwnPropertyDescriptor(ExecState* exec, const Identifier& pro
void JSFunction::getOwnPropertyNames(ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode)
{
if (!isHostFunction() && (mode == IncludeDontEnumProperties)) {
+ // Make sure prototype has been reified.
+ PropertySlot slot;
+ getOwnPropertySlot(exec, exec->propertyNames().prototype, slot);
+
propertyNames.add(exec->propertyNames().arguments);
propertyNames.add(exec->propertyNames().callee);
propertyNames.add(exec->propertyNames().caller);
@@ -298,6 +300,12 @@ void JSFunction::put(ExecState* exec, const Identifier& propertyName, JSValue va
Base::put(exec, propertyName, value, slot);
return;
}
+ if (propertyName == exec->propertyNames().prototype) {
+ // Make sure prototype has been reified, such that it can only be overwritten
+ // following the rules set out in ECMA-262 8.12.9.
+ PropertySlot slot;
+ getOwnPropertySlot(exec, propertyName, slot);
+ }
if (jsExecutable()->isStrictMode()) {
if (propertyName == exec->propertyNames().arguments) {
throwTypeError(exec, StrictModeArgumentsAccessError);
diff --git a/JavaScriptCore/runtime/JSGlobalData.cpp b/JavaScriptCore/runtime/JSGlobalData.cpp
index 1404ddf..58b844c 100644
--- a/JavaScriptCore/runtime/JSGlobalData.cpp
+++ b/JavaScriptCore/runtime/JSGlobalData.cpp
@@ -127,7 +127,6 @@ JSGlobalData::JSGlobalData(GlobalDataType globalDataType, ThreadStackType thread
, staticScopeStructure(JSStaticScopeObject::createStructure(jsNull()))
, strictEvalActivationStructure(StrictEvalActivation::createStructure(jsNull()))
, stringStructure(JSString::createStructure(jsNull()))
- , notAnObjectErrorStubStructure(JSNotAnObjectErrorStub::createStructure(jsNull()))
, notAnObjectStructure(JSNotAnObject::createStructure(jsNull()))
, propertyNameIteratorStructure(JSPropertyNameIterator::createStructure(jsNull()))
, getterSetterStructure(GetterSetter::createStructure(jsNull()))
diff --git a/JavaScriptCore/runtime/JSGlobalData.h b/JavaScriptCore/runtime/JSGlobalData.h
index 775d026..153a4e5 100644
--- a/JavaScriptCore/runtime/JSGlobalData.h
+++ b/JavaScriptCore/runtime/JSGlobalData.h
@@ -147,7 +147,6 @@ namespace JSC {
RefPtr<Structure> staticScopeStructure;
RefPtr<Structure> strictEvalActivationStructure;
RefPtr<Structure> stringStructure;
- RefPtr<Structure> notAnObjectErrorStubStructure;
RefPtr<Structure> notAnObjectStructure;
RefPtr<Structure> propertyNameIteratorStructure;
RefPtr<Structure> getterSetterStructure;
diff --git a/JavaScriptCore/runtime/JSNotAnObject.cpp b/JavaScriptCore/runtime/JSNotAnObject.cpp
index f4764e2..e01b401 100644
--- a/JavaScriptCore/runtime/JSNotAnObject.cpp
+++ b/JavaScriptCore/runtime/JSNotAnObject.cpp
@@ -39,91 +39,84 @@ ASSERT_CLASS_FITS_IN_CELL(JSNotAnObject);
// JSValue methods
JSValue JSNotAnObject::toPrimitive(ExecState* exec, PreferredPrimitiveType) const
{
- ASSERT_UNUSED(exec, exec->hadException() && exec->exception() == m_exception);
- return m_exception;
+ ASSERT_UNUSED(exec, exec->hadException());
+ return jsNumber(0);
}
bool JSNotAnObject::getPrimitiveNumber(ExecState* exec, double&, JSValue&)
{
- ASSERT_UNUSED(exec, exec->hadException() && exec->exception() == m_exception);
+ ASSERT_UNUSED(exec, exec->hadException());
return false;
}
bool JSNotAnObject::toBoolean(ExecState* exec) const
{
- ASSERT_UNUSED(exec, exec->hadException() && exec->exception() == m_exception);
+ ASSERT_UNUSED(exec, exec->hadException());
return false;
}
double JSNotAnObject::toNumber(ExecState* exec) const
{
- ASSERT_UNUSED(exec, exec->hadException() && exec->exception() == m_exception);
+ ASSERT_UNUSED(exec, exec->hadException());
return NaN;
}
UString JSNotAnObject::toString(ExecState* exec) const
{
- ASSERT_UNUSED(exec, exec->hadException() && exec->exception() == m_exception);
+ ASSERT_UNUSED(exec, exec->hadException());
return "";
}
JSObject* JSNotAnObject::toObject(ExecState* exec) const
{
- ASSERT_UNUSED(exec, exec->hadException() && exec->exception() == m_exception);
- return m_exception;
-}
-
-// Marking
-void JSNotAnObject::markChildren(MarkStack& markStack)
-{
- JSObject::markChildren(markStack);
- markStack.append(m_exception);
+ ASSERT_UNUSED(exec, exec->hadException());
+ return const_cast<JSNotAnObject*>(this);
}
// JSObject methods
bool JSNotAnObject::getOwnPropertySlot(ExecState* exec, const Identifier&, PropertySlot&)
{
- ASSERT_UNUSED(exec, exec->hadException() && exec->exception() == m_exception);
+ ASSERT_UNUSED(exec, exec->hadException());
return false;
}
bool JSNotAnObject::getOwnPropertySlot(ExecState* exec, unsigned, PropertySlot&)
{
- ASSERT_UNUSED(exec, exec->hadException() && exec->exception() == m_exception);
+ ASSERT_UNUSED(exec, exec->hadException());
return false;
}
bool JSNotAnObject::getOwnPropertyDescriptor(ExecState* exec, const Identifier&, PropertyDescriptor&)
{
- ASSERT_UNUSED(exec, exec->hadException() && exec->exception() == m_exception);
+ ASSERT_UNUSED(exec, exec->hadException());
return false;
}
void JSNotAnObject::put(ExecState* exec, const Identifier& , JSValue, PutPropertySlot&)
{
- ASSERT_UNUSED(exec, exec->hadException() && exec->exception() == m_exception);
+ ASSERT_UNUSED(exec, exec->hadException());
}
void JSNotAnObject::put(ExecState* exec, unsigned, JSValue)
{
- ASSERT_UNUSED(exec, exec->hadException() && exec->exception() == m_exception);
+ ASSERT_UNUSED(exec, exec->hadException());
}
bool JSNotAnObject::deleteProperty(ExecState* exec, const Identifier&)
{
- ASSERT_UNUSED(exec, exec->hadException() && exec->exception() == m_exception);
+ ASSERT_UNUSED(exec, exec->hadException());
return false;
}
bool JSNotAnObject::deleteProperty(ExecState* exec, unsigned)
{
- ASSERT_UNUSED(exec, exec->hadException() && exec->exception() == m_exception);
+ ASSERT_UNUSED(exec, exec->hadException());
return false;
}
void JSNotAnObject::getOwnPropertyNames(ExecState* exec, PropertyNameArray&, EnumerationMode)
{
- ASSERT_UNUSED(exec, exec->hadException() && exec->exception() == m_exception);
+ ASSERT_UNUSED(exec, exec->hadException());
}
} // namespace JSC
diff --git a/JavaScriptCore/runtime/JSNotAnObject.h b/JavaScriptCore/runtime/JSNotAnObject.h
index 339d41f..9f527cf 100644
--- a/JavaScriptCore/runtime/JSNotAnObject.h
+++ b/JavaScriptCore/runtime/JSNotAnObject.h
@@ -33,30 +33,13 @@
namespace JSC {
- class JSNotAnObjectErrorStub : public JSObject {
- public:
- JSNotAnObjectErrorStub(ExecState* exec, bool isNull)
- : JSObject(exec->globalData().notAnObjectErrorStubStructure)
- , m_isNull(isNull)
- {
- }
-
- bool isNull() const { return m_isNull; }
-
- private:
- virtual bool isNotAnObjectErrorStub() const { return true; }
-
- bool m_isNull;
- };
-
// This unholy class is used to allow us to avoid multiple exception checks
// in certain SquirrelFish bytecodes -- effectively it just silently consumes
// any operations performed on the result of a failed toObject call.
class JSNotAnObject : public JSObject {
public:
- JSNotAnObject(ExecState* exec, JSNotAnObjectErrorStub* exception)
+ JSNotAnObject(ExecState* exec)
: JSObject(exec->globalData().notAnObjectStructure)
- , m_exception(exception)
{
}
@@ -67,7 +50,7 @@ namespace JSC {
private:
- static const unsigned StructureFlags = OverridesGetOwnPropertySlot | OverridesMarkChildren | OverridesGetPropertyNames | JSObject::StructureFlags;
+ static const unsigned StructureFlags = OverridesGetOwnPropertySlot | OverridesGetPropertyNames | JSObject::StructureFlags;
// JSValue methods
virtual JSValue toPrimitive(ExecState*, PreferredPrimitiveType) const;
@@ -77,9 +60,6 @@ namespace JSC {
virtual UString toString(ExecState*) const;
virtual JSObject* toObject(ExecState*) const;
- // Marking
- virtual void markChildren(MarkStack&);
-
// JSObject methods
virtual bool getOwnPropertySlot(ExecState*, const Identifier& propertyName, PropertySlot&);
virtual bool getOwnPropertySlot(ExecState*, unsigned propertyName, PropertySlot&);
@@ -92,8 +72,6 @@ namespace JSC {
virtual bool deleteProperty(ExecState*, unsigned propertyName);
virtual void getOwnPropertyNames(ExecState*, PropertyNameArray&, EnumerationMode mode = ExcludeDontEnumProperties);
-
- JSNotAnObjectErrorStub* m_exception;
};
} // namespace JSC
diff --git a/JavaScriptCore/runtime/JSObject.h b/JavaScriptCore/runtime/JSObject.h
index f484ce4..803abfd 100644
--- a/JavaScriptCore/runtime/JSObject.h
+++ b/JavaScriptCore/runtime/JSObject.h
@@ -208,8 +208,8 @@ namespace JSC {
virtual bool isGlobalObject() const { return false; }
virtual bool isVariableObject() const { return false; }
virtual bool isActivationObject() const { return false; }
- virtual bool isNotAnObjectErrorStub() const { return false; }
virtual bool isStrictModeFunction() const { return false; }
+ virtual bool isErrorInstance() const { return false; }
virtual ComplType exceptionType() const { return Throw; }
diff --git a/JavaScriptCore/runtime/JSValue.cpp b/JavaScriptCore/runtime/JSValue.cpp
index 2a23a79..f4662db 100644
--- a/JavaScriptCore/runtime/JSValue.cpp
+++ b/JavaScriptCore/runtime/JSValue.cpp
@@ -62,10 +62,10 @@ JSObject* JSValue::toObjectSlowCase(ExecState* exec) const
return constructNumber(exec, asValue());
if (isTrue() || isFalse())
return constructBooleanFromImmediateBoolean(exec, asValue());
+
ASSERT(isUndefinedOrNull());
- JSNotAnObjectErrorStub* exception = createNotAnObjectErrorStub(exec, isNull());
- throwError(exec, exception);
- return new (exec) JSNotAnObject(exec, exception);
+ throwError(exec, createNotAnObjectError(exec, *this));
+ return new (exec) JSNotAnObject(exec);
}
JSObject* JSValue::toThisObjectSlowCase(ExecState* exec) const
@@ -87,10 +87,10 @@ JSObject* JSValue::synthesizeObject(ExecState* exec) const
return constructNumber(exec, asValue());
if (isBoolean())
return constructBooleanFromImmediateBoolean(exec, asValue());
-
- JSNotAnObjectErrorStub* exception = createNotAnObjectErrorStub(exec, isNull());
- throwError(exec, exception);
- return new (exec) JSNotAnObject(exec, exception);
+
+ ASSERT(isUndefinedOrNull());
+ throwError(exec, createNotAnObjectError(exec, *this));
+ return new (exec) JSNotAnObject(exec);
}
JSObject* JSValue::synthesizePrototype(ExecState* exec) const
@@ -101,9 +101,9 @@ JSObject* JSValue::synthesizePrototype(ExecState* exec) const
if (isBoolean())
return exec->lexicalGlobalObject()->booleanPrototype();
- JSNotAnObjectErrorStub* exception = createNotAnObjectErrorStub(exec, isNull());
- throwError(exec, exception);
- return new (exec) JSNotAnObject(exec, exception);
+ ASSERT(isUndefinedOrNull());
+ throwError(exec, createNotAnObjectError(exec, *this));
+ return new (exec) JSNotAnObject(exec);
}
#ifndef NDEBUG
diff --git a/JavaScriptCore/wtf/Platform.h b/JavaScriptCore/wtf/Platform.h
index cb732f3..e1fdc60 100644
--- a/JavaScriptCore/wtf/Platform.h
+++ b/JavaScriptCore/wtf/Platform.h
@@ -188,6 +188,18 @@
#define WTF_CPU_SPARC 1
#endif
+/* CPU(S390X) - S390 64-bit */
+#if defined(__s390x__)
+#define WTF_CPU_S390X 1
+#define WTF_CPU_BIG_ENDIAN 1
+#endif
+
+/* CPU(S390) - S390 32-bit */
+#if defined(__s390__)
+#define WTF_CPU_S390 1
+#define WTF_CPU_BIG_ENDIAN 1
+#endif
+
/* CPU(X86) - i386 / x86 32-bit */
#if defined(__i386__) \
|| defined(i386) \
@@ -594,6 +606,7 @@
#define HAVE_READLINE 1
#define HAVE_RUNLOOP_TIMER 1
#define ENABLE_FULLSCREEN_API 1
+#define ENABLE_SMOOTH_SCROLLING 1
#endif /* PLATFORM(MAC) && !PLATFORM(IOS) */
#if PLATFORM(MAC)
@@ -941,6 +954,7 @@
|| (CPU(IA64) && !CPU(IA64_32)) \
|| CPU(ALPHA) \
|| CPU(SPARC64) \
+ || CPU(S390X) \
|| CPU(PPC64)
#define WTF_USE_JSVALUE64 1
#else
@@ -1126,3 +1140,4 @@
#endif
#endif /* WTF_Platform_h */
+
diff --git a/JavaScriptCore/wtf/text/CString.cpp b/JavaScriptCore/wtf/text/CString.cpp
index c048a1b..db6443f 100644
--- a/JavaScriptCore/wtf/text/CString.cpp
+++ b/JavaScriptCore/wtf/text/CString.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2003, 2006, 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2003, 2006, 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
@@ -27,12 +27,15 @@
#include "config.h"
#include "CString.h"
-using std::min;
+using namespace std;
namespace WTF {
CString::CString(const char* str)
{
+ if (!str)
+ return;
+
init(str, strlen(str));
}
@@ -45,7 +48,10 @@ void CString::init(const char* str, size_t length)
{
if (!str)
return;
-
+
+ if (length >= numeric_limits<size_t>::max())
+ CRASH();
+
m_buffer = CStringBuffer::create(length + 1);
memcpy(m_buffer->mutableData(), str, length);
m_buffer->mutableData()[length] = '\0';
@@ -61,6 +67,9 @@ char* CString::mutableData()
CString CString::newUninitialized(size_t length, char*& characterBuffer)
{
+ if (length >= numeric_limits<size_t>::max())
+ CRASH();
+
CString result;
result.m_buffer = CStringBuffer::create(length + 1);
char* bytes = result.m_buffer->mutableData();
@@ -73,11 +82,11 @@ void CString::copyBufferIfNeeded()
{
if (!m_buffer || m_buffer->hasOneRef())
return;
-
- int len = m_buffer->length();
- RefPtr<CStringBuffer> m_temp = m_buffer;
- m_buffer = CStringBuffer::create(len);
- memcpy(m_buffer->mutableData(), m_temp->data(), len);
+
+ RefPtr<CStringBuffer> buffer = m_buffer.release();
+ size_t length = buffer->length();
+ m_buffer = CStringBuffer::create(length);
+ memcpy(m_buffer->mutableData(), buffer->data(), length);
}
bool operator==(const CString& a, const CString& b)
diff --git a/JavaScriptCore/wtf/text/StringImpl.cpp b/JavaScriptCore/wtf/text/StringImpl.cpp
index f4b2f05..1c4de66 100644
--- a/JavaScriptCore/wtf/text/StringImpl.cpp
+++ b/JavaScriptCore/wtf/text/StringImpl.cpp
@@ -96,9 +96,9 @@ PassRefPtr<StringImpl> StringImpl::create(const UChar* characters, unsigned leng
return empty();
UChar* data;
- PassRefPtr<StringImpl> string = createUninitialized(length, data);
+ RefPtr<StringImpl> string = createUninitialized(length, data);
memcpy(data, characters, length * sizeof(UChar));
- return string;
+ return string.release();
}
PassRefPtr<StringImpl> StringImpl::create(const char* characters, unsigned length)
@@ -107,19 +107,22 @@ PassRefPtr<StringImpl> StringImpl::create(const char* characters, unsigned lengt
return empty();
UChar* data;
- PassRefPtr<StringImpl> string = createUninitialized(length, data);
+ RefPtr<StringImpl> string = createUninitialized(length, data);
for (unsigned i = 0; i != length; ++i) {
unsigned char c = characters[i];
data[i] = c;
}
- return string;
+ return string.release();
}
PassRefPtr<StringImpl> StringImpl::create(const char* string)
{
if (!string)
return empty();
- return create(string, strlen(string));
+ size_t length = strlen(string);
+ if (length > numeric_limits<unsigned>::max())
+ CRASH();
+ return create(string, length);
}
PassRefPtr<StringImpl> StringImpl::create(const UChar* characters, unsigned length, PassRefPtr<SharedUChar> sharedBuffer)
@@ -205,7 +208,10 @@ PassRefPtr<StringImpl> StringImpl::lower()
if (noUpper && !(ored & ~0x7F))
return this;
+ if (m_length > static_cast<unsigned>(numeric_limits<int32_t>::max()))
+ CRASH();
int32_t length = m_length;
+
UChar* data;
RefPtr<StringImpl> newImpl = createUninitialized(m_length, data);
@@ -236,7 +242,10 @@ PassRefPtr<StringImpl> StringImpl::upper()
// but in empirical testing, few actual calls to upper() are no-ops, so
// it wouldn't be worth the extra time for pre-scanning.
UChar* data;
- PassRefPtr<StringImpl> newImpl = createUninitialized(m_length, data);
+ RefPtr<StringImpl> newImpl = createUninitialized(m_length, data);
+
+ if (m_length > static_cast<unsigned>(numeric_limits<int32_t>::max()))
+ CRASH();
int32_t length = m_length;
// Do a faster loop for the case where all the characters are ASCII.
@@ -247,7 +256,7 @@ PassRefPtr<StringImpl> StringImpl::upper()
data[i] = toASCIIUpper(c);
}
if (!(ored & ~0x7F))
- return newImpl;
+ return newImpl.release();
// Do a slower implementation for cases that include non-ASCII characters.
bool error;
@@ -258,45 +267,47 @@ PassRefPtr<StringImpl> StringImpl::upper()
Unicode::toUpper(data, realLength, m_data, m_length, &error);
if (error)
return this;
- return newImpl;
+ return newImpl.release();
}
-PassRefPtr<StringImpl> StringImpl::secure(UChar aChar)
+PassRefPtr<StringImpl> StringImpl::secure(UChar character)
{
UChar* data;
- PassRefPtr<StringImpl> newImpl = createUninitialized(m_length, data);
- int32_t length = m_length;
- for (int i = 0; i < length; ++i)
- data[i] = aChar;
- return newImpl;
+ RefPtr<StringImpl> newImpl = createUninitialized(m_length, data);
+ for (unsigned i = 0; i < m_length; ++i)
+ data[i] = character;
+ return newImpl.release();
}
PassRefPtr<StringImpl> StringImpl::foldCase()
{
UChar* data;
- PassRefPtr<StringImpl> newImpl = createUninitialized(m_length, data);
+ RefPtr<StringImpl> newImpl = createUninitialized(m_length, data);
+
+ if (m_length > static_cast<unsigned>(numeric_limits<int32_t>::max()))
+ CRASH();
int32_t length = m_length;
// Do a faster loop for the case where all the characters are ASCII.
UChar ored = 0;
- for (int i = 0; i < length; i++) {
+ for (int32_t i = 0; i < length; i++) {
UChar c = m_data[i];
ored |= c;
data[i] = toASCIILower(c);
}
if (!(ored & ~0x7F))
- return newImpl;
+ return newImpl.release();
// Do a slower implementation for cases that include non-ASCII characters.
bool error;
int32_t realLength = Unicode::foldCase(data, length, m_data, m_length, &error);
if (!error && realLength == length)
- return newImpl;
+ return newImpl.release();
newImpl = createUninitialized(realLength, data);
Unicode::foldCase(data, realLength, m_data, m_length, &error);
if (error)
return this;
- return newImpl;
+ return newImpl.release();
}
PassRefPtr<StringImpl> StringImpl::stripWhiteSpace()
@@ -517,7 +528,10 @@ size_t StringImpl::find(const char* matchString, unsigned index)
// Check for null or empty string to match against
if (!matchString)
return notFound;
- unsigned matchLength = strlen(matchString);
+ size_t matchStringLength = strlen(matchString);
+ if (matchStringLength > numeric_limits<unsigned>::max())
+ CRASH();
+ unsigned matchLength = matchStringLength;
if (!matchLength)
return min(index, length());
@@ -563,7 +577,10 @@ size_t StringImpl::findIgnoringCase(const char* matchString, unsigned index)
// Check for null or empty string to match against
if (!matchString)
return notFound;
- unsigned matchLength = strlen(matchString);
+ size_t matchStringLength = strlen(matchString);
+ if (matchStringLength > numeric_limits<unsigned>::max())
+ CRASH();
+ unsigned matchLength = matchStringLength;
if (!matchLength)
return min(index, length());
@@ -761,7 +778,7 @@ PassRefPtr<StringImpl> StringImpl::replace(UChar oldC, UChar newC)
return this;
UChar* data;
- PassRefPtr<StringImpl> newImpl = createUninitialized(m_length, data);
+ RefPtr<StringImpl> newImpl = createUninitialized(m_length, data);
for (i = 0; i != m_length; ++i) {
UChar ch = m_data[i];
@@ -769,7 +786,7 @@ PassRefPtr<StringImpl> StringImpl::replace(UChar oldC, UChar newC)
ch = newC;
data[i] = ch;
}
- return newImpl;
+ return newImpl.release();
}
PassRefPtr<StringImpl> StringImpl::replace(unsigned position, unsigned lengthToReplace, StringImpl* str)
@@ -784,14 +801,14 @@ PassRefPtr<StringImpl> StringImpl::replace(unsigned position, unsigned lengthToR
if ((length() - lengthToReplace) >= (numeric_limits<unsigned>::max() - lengthToInsert))
CRASH();
- PassRefPtr<StringImpl> newImpl =
+ RefPtr<StringImpl> newImpl =
createUninitialized(length() - lengthToReplace + lengthToInsert, data);
memcpy(data, characters(), position * sizeof(UChar));
if (str)
memcpy(data + position, str->characters(), lengthToInsert * sizeof(UChar));
memcpy(data + position + lengthToInsert, characters() + position + lengthToReplace,
(length() - position - lengthToReplace) * sizeof(UChar));
- return newImpl;
+ return newImpl.release();
}
PassRefPtr<StringImpl> StringImpl::replace(UChar pattern, StringImpl* replacement)
@@ -824,7 +841,7 @@ PassRefPtr<StringImpl> StringImpl::replace(UChar pattern, StringImpl* replacemen
newSize += replaceSize;
UChar* data;
- PassRefPtr<StringImpl> newImpl = createUninitialized(newSize, data);
+ RefPtr<StringImpl> newImpl = createUninitialized(newSize, data);
// Construct the new data
size_t srcSegmentEnd;
@@ -846,7 +863,7 @@ PassRefPtr<StringImpl> StringImpl::replace(UChar pattern, StringImpl* replacemen
ASSERT(dstOffset + srcSegmentLength == newImpl->length());
- return newImpl;
+ return newImpl.release();
}
PassRefPtr<StringImpl> StringImpl::replace(StringImpl* pattern, StringImpl* replacement)
@@ -882,7 +899,7 @@ PassRefPtr<StringImpl> StringImpl::replace(StringImpl* pattern, StringImpl* repl
newSize += matchCount * repStrLength;
UChar* data;
- PassRefPtr<StringImpl> newImpl = createUninitialized(newSize, data);
+ RefPtr<StringImpl> newImpl = createUninitialized(newSize, data);
// Construct the new data
size_t srcSegmentEnd;
@@ -904,7 +921,7 @@ PassRefPtr<StringImpl> StringImpl::replace(StringImpl* pattern, StringImpl* repl
ASSERT(dstOffset + srcSegmentLength == newImpl->length());
- return newImpl;
+ return newImpl.release();
}
bool equal(const StringImpl* a, const StringImpl* b)
@@ -1020,9 +1037,11 @@ PassRefPtr<StringImpl> StringImpl::adopt(StringBuffer& buffer)
PassRefPtr<StringImpl> StringImpl::createWithTerminatingNullCharacter(const StringImpl& string)
{
// Use createUninitialized instead of 'new StringImpl' so that the string and its buffer
- // get allocated in a single malloc block.
+ // get allocated in a single memory block.
UChar* data;
- int length = string.m_length;
+ unsigned length = string.m_length;
+ if (length >= numeric_limits<unsigned>::max())
+ CRASH();
RefPtr<StringImpl> terminatedString = createUninitialized(length + 1, data);
memcpy(data, string.m_data, length * sizeof(UChar));
data[length] = 0;
diff --git a/JavaScriptCore/wtf/text/TextPosition.h b/JavaScriptCore/wtf/text/TextPosition.h
new file mode 100644
index 0000000..63dc594
--- /dev/null
+++ b/JavaScriptCore/wtf/text/TextPosition.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 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 TextPosition_h
+#define TextPosition_h
+
+#include <wtf/Assertions.h>
+
+namespace WTF {
+
+/*
+ * Text Position
+ *
+ * TextPosition structure specifies coordinates within an text resource. It is used mostly
+ * for saving script source position.
+ *
+ * Later TextPosition0 and TextPosition1 and both number types can be merged together quite easily.
+ *
+ * 0-based and 1-based
+ *
+ * Line and column numbers could be interpreted as zero-based or 1-based. Since
+ * both practices coexist in WebKit source base, 'int' type should be replaced with
+ * a dedicated wrapper types, so that compiler helped us with this ambiguity.
+ *
+ * Here we introduce 2 types of numbers: ZeroBasedNumber and OneBasedNumber and
+ * 2 corresponding types of TextPosition structure. While only one type ought to be enough,
+ * this is done to keep transition to the new types as transparent as possible:
+ * e.g. in areas where 0-based integers are used, TextPosition0 should be introduced. This
+ * way all changes will remain trackable.
+ *
+ * Later both number types can be merged in one type quite easily.
+ *
+ * For type safety and for the future type merge it is important that all operations in API
+ * that accept or return integer have a name explicitly defining base of integer. For this reason
+ * int-receiving constructors are hidden from API.
+ */
+
+template<typename NUMBER>
+class TextPosition {
+public:
+ TextPosition(NUMBER line, NUMBER column)
+ : m_line(line)
+ , m_column(column)
+ {
+ }
+ TextPosition() {}
+
+ // A 'minimum' value of position, used as a default value.
+ static TextPosition<NUMBER> minimumPosition() { return TextPosition<NUMBER>(NUMBER::base(), NUMBER::base()); }
+
+ // A value with line value less than a minimum; used as an impossible position.
+ static TextPosition<NUMBER> belowRangePosition() { return TextPosition<NUMBER>(NUMBER::belowBase(), NUMBER::base()); }
+
+ NUMBER m_line;
+ NUMBER m_column;
+};
+
+class OneBasedNumber;
+
+// An int wrapper that always reminds you that the number should be 0-based
+class ZeroBasedNumber {
+public:
+ static ZeroBasedNumber fromZeroBasedInt(int zeroBasedInt) { return ZeroBasedNumber(zeroBasedInt); }
+
+ ZeroBasedNumber() {}
+
+ int zeroBasedInt() const { return m_value; }
+
+ OneBasedNumber convertToOneBased() const;
+
+ static ZeroBasedNumber base() { return 0; }
+ static ZeroBasedNumber belowBase() { return -1; }
+
+private:
+ ZeroBasedNumber(int value) : m_value(value) {}
+ int m_value;
+};
+
+// An int wrapper that always reminds you that the number should be 1-based
+class OneBasedNumber {
+public:
+ static OneBasedNumber fromOneBasedInt(int oneBasedInt) { return OneBasedNumber(oneBasedInt); }
+ OneBasedNumber() {}
+
+ int oneBasedInt() const { return m_value; }
+ int convertAsZeroBasedInt() const { return m_value - 1; }
+ ZeroBasedNumber convertToZeroBased() const { return ZeroBasedNumber::fromZeroBasedInt(m_value - 1); }
+
+ static OneBasedNumber base() { return 1; }
+ static OneBasedNumber belowBase() { return 0; }
+
+private:
+ OneBasedNumber(int value) : m_value(value) {}
+ int m_value;
+};
+
+typedef TextPosition<ZeroBasedNumber> TextPosition0;
+typedef TextPosition<OneBasedNumber> TextPosition1;
+
+inline TextPosition0 toZeroBasedTextPosition(const TextPosition1& position)
+{
+ return TextPosition0(position.m_line.convertToZeroBased(), position.m_column.convertToZeroBased());
+}
+
+inline TextPosition1 toOneBasedTextPosition(const TextPosition0& position)
+{
+ return TextPosition1(position.m_line.convertToOneBased(), position.m_column.convertToOneBased());
+}
+
+inline OneBasedNumber ZeroBasedNumber::convertToOneBased() const
+{
+ return OneBasedNumber::fromOneBasedInt(m_value + 1);
+}
+
+}
+
+using WTF::TextPosition0;
+using WTF::TextPosition1;
+
+#endif // TextPosition_h
diff --git a/JavaScriptCore/wtf/text/WTFString.cpp b/JavaScriptCore/wtf/text/WTFString.cpp
index 5161477..6bb74f6 100644
--- a/JavaScriptCore/wtf/text/WTFString.cpp
+++ b/JavaScriptCore/wtf/text/WTFString.cpp
@@ -1,6 +1,6 @@
/*
* (C) 1999 Lars Knoll (knoll@kde.org)
- * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2010 Apple Inc. All rights reserved.
* Copyright (C) 2007-2009 Torch Mobile, Inc.
*
* This library is free software; you can redistribute it and/or
@@ -22,7 +22,6 @@
#include "config.h"
#include "WTFString.h"
-#include <limits>
#include <stdarg.h>
#include <wtf/ASCIICType.h>
#include <wtf/text/CString.h>
@@ -32,9 +31,12 @@
#include <wtf/unicode/UTF8.h>
#include <wtf/unicode/Unicode.h>
+using namespace std;
+
namespace WTF {
using namespace Unicode;
+using namespace std;
// Construct a string with UTF-16 data.
String::String(const UChar* characters, unsigned length)
@@ -52,7 +54,7 @@ String::String(const UChar* str)
while (str[len] != UChar(0))
len++;
- if (len > std::numeric_limits<unsigned>::max())
+ if (len > numeric_limits<unsigned>::max())
CRASH();
m_impl = StringImpl::create(str, len);
@@ -82,8 +84,9 @@ void String::append(const String& str)
if (str.m_impl) {
if (m_impl) {
UChar* data;
- RefPtr<StringImpl> newImpl =
- StringImpl::createUninitialized(m_impl->length() + str.length(), data);
+ if (str.length() > numeric_limits<unsigned>::max() - m_impl->length())
+ CRASH();
+ RefPtr<StringImpl> newImpl = StringImpl::createUninitialized(m_impl->length() + str.length(), data);
memcpy(data, m_impl->characters(), m_impl->length() * sizeof(UChar));
memcpy(data + m_impl->length(), str.characters(), str.length() * sizeof(UChar));
m_impl = newImpl.release();
@@ -100,8 +103,9 @@ void String::append(char c)
// call to fastMalloc every single time.
if (m_impl) {
UChar* data;
- RefPtr<StringImpl> newImpl =
- StringImpl::createUninitialized(m_impl->length() + 1, data);
+ if (m_impl->length() >= numeric_limits<unsigned>::max())
+ CRASH();
+ RefPtr<StringImpl> newImpl = StringImpl::createUninitialized(m_impl->length() + 1, data);
memcpy(data, m_impl->characters(), m_impl->length() * sizeof(UChar));
data[m_impl->length()] = c;
m_impl = newImpl.release();
@@ -117,8 +121,9 @@ void String::append(UChar c)
// call to fastMalloc every single time.
if (m_impl) {
UChar* data;
- RefPtr<StringImpl> newImpl =
- StringImpl::createUninitialized(m_impl->length() + 1, data);
+ if (m_impl->length() >= numeric_limits<unsigned>::max())
+ CRASH();
+ RefPtr<StringImpl> newImpl = StringImpl::createUninitialized(m_impl->length() + 1, data);
memcpy(data, m_impl->characters(), m_impl->length() * sizeof(UChar));
data[m_impl->length()] = c;
m_impl = newImpl.release();
@@ -178,10 +183,9 @@ void String::append(const UChar* charactersToAppend, unsigned lengthToAppend)
ASSERT(charactersToAppend);
UChar* data;
- if (lengthToAppend > std::numeric_limits<unsigned>::max() - length())
+ if (lengthToAppend > numeric_limits<unsigned>::max() - length())
CRASH();
- RefPtr<StringImpl> newImpl =
- StringImpl::createUninitialized(length() + lengthToAppend, data);
+ RefPtr<StringImpl> newImpl = StringImpl::createUninitialized(length() + lengthToAppend, data);
memcpy(data, characters(), length() * sizeof(UChar));
memcpy(data + length(), charactersToAppend, lengthToAppend * sizeof(UChar));
m_impl = newImpl.release();
@@ -201,10 +205,9 @@ void String::insert(const UChar* charactersToInsert, unsigned lengthToInsert, un
ASSERT(charactersToInsert);
UChar* data;
- if (lengthToInsert > std::numeric_limits<unsigned>::max() - length())
+ if (lengthToInsert > numeric_limits<unsigned>::max() - length())
CRASH();
- RefPtr<StringImpl> newImpl =
- StringImpl::createUninitialized(length() + lengthToInsert, data);
+ RefPtr<StringImpl> newImpl = StringImpl::createUninitialized(length() + lengthToInsert, data);
memcpy(data, characters(), position * sizeof(UChar));
memcpy(data + position, charactersToInsert, lengthToInsert * sizeof(UChar));
memcpy(data + position + lengthToInsert, characters() + position, (length() - position) * sizeof(UChar));
@@ -237,8 +240,7 @@ void String::remove(unsigned position, int lengthToRemove)
if (static_cast<unsigned>(lengthToRemove) > length() - position)
lengthToRemove = length() - position;
UChar* data;
- RefPtr<StringImpl> newImpl =
- StringImpl::createUninitialized(length() - lengthToRemove, data);
+ RefPtr<StringImpl> newImpl = StringImpl::createUninitialized(length() - lengthToRemove, data);
memcpy(data, characters(), position * sizeof(UChar));
memcpy(data + position, characters() + position + lengthToRemove,
(length() - lengthToRemove - position) * sizeof(UChar));
@@ -695,6 +697,8 @@ CString String::utf8(bool strict) const
// * We could allocate a CStringBuffer with an appropriate size to
// have a good chance of being able to write the string into the
// buffer without reallocing (say, 1.5 x length).
+ if (length > numeric_limits<unsigned>::max() / 3)
+ return CString();
Vector<char, 1024> bufferVector(length * 3);
char* buffer = bufferVector.data();
@@ -725,7 +729,7 @@ CString String::utf8(bool strict) const
String String::fromUTF8(const char* stringStart, size_t length)
{
- if (length > std::numeric_limits<unsigned>::max())
+ if (length > numeric_limits<unsigned>::max())
CRASH();
if (!stringStart)
@@ -787,8 +791,8 @@ static bool isCharacterAllowedInBase(UChar c, int base)
template <typename IntegralType>
static inline IntegralType toIntegralType(const UChar* data, size_t length, bool* ok, int base)
{
- static const IntegralType integralMax = std::numeric_limits<IntegralType>::max();
- static const bool isSigned = std::numeric_limits<IntegralType>::is_signed;
+ static const IntegralType integralMax = numeric_limits<IntegralType>::max();
+ static const bool isSigned = numeric_limits<IntegralType>::is_signed;
const IntegralType maxMultiplier = integralMax / base;
IntegralType value = 0;
diff --git a/JavaScriptCore/wtf/wtf.pri b/JavaScriptCore/wtf/wtf.pri
index 83e71d8..1780334 100644
--- a/JavaScriptCore/wtf/wtf.pri
+++ b/JavaScriptCore/wtf/wtf.pri
@@ -8,6 +8,8 @@ SOURCES += \
wtf/dtoa.cpp \
wtf/DecimalNumber.cpp \
wtf/FastMalloc.cpp \
+ wtf/gobject/GOwnPtr.cpp \
+ wtf/gobject/GRefPtr.cpp \
wtf/HashTable.cpp \
wtf/MD5.cpp \
wtf/MainThread.cpp \
@@ -31,6 +33,12 @@ SOURCES += \
wtf/unicode/icu/CollatorICU.cpp \
wtf/unicode/UTF8.cpp
+contains(DEFINES, USE_GSTREAMER=1) {
+ DEFINES += ENABLE_GLIB_SUPPORT=1
+ PKGCONFIG += glib-2.0 gio-2.0
+ CONFIG += link_pkgconfig
+}
+
!contains(DEFINES, USE_SYSTEM_MALLOC) {
SOURCES += wtf/TCSystemAlloc.cpp
}
diff --git a/JavaScriptCore/yarr/RegexCompiler.cpp b/JavaScriptCore/yarr/RegexCompiler.cpp
index 9f9e028..ccfc94e 100644
--- a/JavaScriptCore/yarr/RegexCompiler.cpp
+++ b/JavaScriptCore/yarr/RegexCompiler.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2010 Peter Varga (pvarga@inf.u-szeged.hu), University of Szeged
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -235,11 +236,117 @@ private:
Vector<CharacterRange> m_rangesUnicode;
};
+struct BeginCharHelper {
+ BeginCharHelper(Vector<BeginChar>* beginChars, bool isCaseInsensitive = false)
+ : m_beginChars(beginChars)
+ , m_isCaseInsensitive(isCaseInsensitive)
+ {}
+
+ void addBeginChar(BeginChar beginChar, Vector<TermChain>* hotTerms, QuantifierType quantityType, unsigned quantityCount)
+ {
+ if (quantityType == QuantifierFixedCount && quantityCount > 1) {
+ // We duplicate the first found character if the quantity of the term is more than one. eg.: /a{3}/
+ beginChar.value |= beginChar.value << 16;
+ beginChar.mask |= beginChar.mask << 16;
+ addCharacter(beginChar);
+ } else if (quantityType == QuantifierFixedCount && quantityCount == 1 && hotTerms->size())
+ // In case of characters with fixed quantifier we should check the next character as well.
+ linkHotTerms(beginChar, hotTerms);
+ else
+ // In case of greedy matching the next character checking is unnecessary therefore we just store
+ // the first character.
+ addCharacter(beginChar);
+ }
+
+ // Merge two following BeginChars in the vector to reduce the number of character checks.
+ void merge(unsigned size)
+ {
+ for (unsigned i = 0; i < size; i++) {
+ BeginChar* curr = &m_beginChars->at(i);
+ BeginChar* next = &m_beginChars->at(i + 1);
+
+ // If the current and the next size of value is different we should skip the merge process
+ // because the 16bit and 32bit values are unmergable.
+ if (curr->value <= 0xFFFF && next->value > 0xFFFF)
+ continue;
+
+ unsigned diff = curr->value ^ next->value;
+
+ curr->mask |= diff;
+ curr->value |= curr->mask;
+
+ m_beginChars->remove(i + 1);
+ size--;
+ }
+ }
+
+private:
+ void addCharacter(BeginChar beginChar)
+ {
+ unsigned pos = 0;
+ unsigned range = m_beginChars->size();
+
+ // binary chop, find position to insert char.
+ while (range) {
+ unsigned index = range >> 1;
+
+ int val = m_beginChars->at(pos+index).value - beginChar.value;
+ if (!val)
+ return;
+ if (val < 0)
+ range = index;
+ else {
+ pos += (index+1);
+ range -= (index+1);
+ }
+ }
+
+ if (pos == m_beginChars->size())
+ m_beginChars->append(beginChar);
+ else
+ m_beginChars->insert(pos, beginChar);
+ }
+
+ // Create BeginChar objects by appending each terms from a hotTerms vector to an existing BeginChar object.
+ void linkHotTerms(BeginChar beginChar, Vector<TermChain>* hotTerms)
+ {
+ for (unsigned i = 0; i < hotTerms->size(); i++) {
+ PatternTerm hotTerm = hotTerms->at(i).term;
+ ASSERT(hotTerm.type == PatternTerm::TypePatternCharacter);
+
+ UChar characterNext = hotTerm.patternCharacter;
+
+ // Append a character to an existing BeginChar object.
+ if (characterNext <= 0x7f) {
+ unsigned mask = 0;
+
+ if (m_isCaseInsensitive && isASCIIAlpha(characterNext)) {
+ mask = 32;
+ characterNext = toASCIILower(characterNext);
+ }
+
+ addCharacter(BeginChar(beginChar.value | (characterNext << 16), beginChar.mask | (mask << 16)));
+ } else {
+ UChar upper, lower;
+ if (m_isCaseInsensitive && ((upper = Unicode::toUpper(characterNext)) != (lower = Unicode::toLower(characterNext)))) {
+ addCharacter(BeginChar(beginChar.value | (upper << 16), beginChar.mask));
+ addCharacter(BeginChar(beginChar.value | (lower << 16), beginChar.mask));
+ } else
+ addCharacter(BeginChar(beginChar.value | (characterNext << 16), beginChar.mask));
+ }
+ }
+ }
+
+ Vector<BeginChar>* m_beginChars;
+ bool m_isCaseInsensitive;
+};
+
class RegexPatternConstructor {
public:
RegexPatternConstructor(RegexPattern& pattern)
: m_pattern(pattern)
, m_characterClassConstructor(pattern.m_ignoreCase)
+ , m_beginCharHelper(&pattern.m_beginChars, pattern.m_ignoreCase)
, m_invertParentheticalAssertion(false)
{
}
@@ -649,12 +756,153 @@ public:
loopDisjunction->m_alternatives.clear();
}
}
-
-
+
+ bool addBeginTerm(PatternTerm term, Vector<TermChain>* beginTerms, PatternAlternative* alternative, unsigned numTerms, unsigned termIndex, unsigned depth)
+ {
+ if (term.quantityType == QuantifierFixedCount) {
+ beginTerms->append(TermChain(term));
+ if (depth < 2 && termIndex < numTerms - 1 && term.quantityCount == 1)
+ setupAlternativeBeginTerms(alternative, &beginTerms->last().hotTerms, termIndex + 1, depth + 1);
+ } else if (termIndex != numTerms - 1) {
+ beginTerms->append(TermChain(term));
+ return true;
+ }
+
+ return false;
+ }
+
+ // This function collects the terms which are potentially matching the first number of depth characters in the result.
+ // If this function returns false then it found at least one term which makes the beginning character
+ // look-up optimization inefficient.
+ bool setupDisjunctionBeginTerms(PatternDisjunction* disjunction, Vector<TermChain>* beginTerms, unsigned depth)
+ {
+ for (unsigned alt = 0; alt < disjunction->m_alternatives.size(); ++alt) {
+ PatternAlternative* alternative = disjunction->m_alternatives[alt];
+
+ if (!setupAlternativeBeginTerms(alternative, beginTerms, 0, depth))
+ return false;
+ }
+
+ return true;
+ }
+
+ bool setupAlternativeBeginTerms(PatternAlternative* alternative, Vector<TermChain>* beginTerms, unsigned termIndex, unsigned depth)
+ {
+ bool checkNext = true;
+ unsigned numTerms = alternative->m_terms.size();
+
+ while (checkNext && termIndex < numTerms) {
+ PatternTerm term = alternative->m_terms[termIndex];
+ checkNext = false;
+
+ switch (term.type) {
+ case PatternTerm::TypeAssertionBOL:
+ case PatternTerm::TypeAssertionEOL:
+ case PatternTerm::TypeAssertionWordBoundary:
+ return false;
+
+ case PatternTerm::TypeBackReference:
+ case PatternTerm::TypeForwardReference:
+ return false;
+
+ case PatternTerm::TypePatternCharacter:
+ if (addBeginTerm(term, beginTerms, alternative, numTerms, termIndex, depth)) {
+ termIndex++;
+ checkNext = true;
+ }
+ break;
+
+ case PatternTerm::TypeCharacterClass:
+ return false;
+
+ case PatternTerm::TypeParentheticalAssertion:
+ if (term.invertOrCapture)
+ return false;
+
+ case PatternTerm::TypeParenthesesSubpattern:
+ if (term.quantityType != QuantifierFixedCount) {
+ if (termIndex == numTerms - 1)
+ break;
+
+ termIndex++;
+ checkNext = true;
+
+ }
+
+ if (!setupDisjunctionBeginTerms(term.parentheses.disjunction, beginTerms, depth))
+ return false;
+
+ break;
+ }
+ }
+
+ return true;
+ }
+
+ void setupBeginChars()
+ {
+ Vector<TermChain> beginTerms;
+ bool containsFixedCharacter = false;
+
+ if ((!m_pattern.m_body->m_hasFixedSize || m_pattern.m_body->m_alternatives.size() > 1)
+ && setupDisjunctionBeginTerms(m_pattern.m_body, &beginTerms, 0)) {
+ unsigned size = beginTerms.size();
+
+ // If we haven't collected any terms we should abort the preparation of beginning character look-up optimization.
+ if (!size)
+ return;
+
+ m_pattern.m_containsBeginChars = true;
+
+ for (unsigned i = 0; i < size; i++) {
+ PatternTerm term = beginTerms[i].term;
+
+ // We have just collected PatternCharacter terms, other terms are not allowed.
+ ASSERT(term.type == PatternTerm::TypePatternCharacter);
+
+ if (term.quantityType == QuantifierFixedCount)
+ containsFixedCharacter = true;
+
+ UChar character = term.patternCharacter;
+ unsigned mask = 0;
+
+ if (character <= 0x7f) {
+ if (m_pattern.m_ignoreCase && isASCIIAlpha(character)) {
+ mask = 32;
+ character = toASCIILower(character);
+ }
+
+ m_beginCharHelper.addBeginChar(BeginChar(character, mask), &beginTerms[i].hotTerms, term.quantityType, term.quantityCount);
+ } else {
+ UChar upper, lower;
+ if (m_pattern.m_ignoreCase && ((upper = Unicode::toUpper(character)) != (lower = Unicode::toLower(character)))) {
+ m_beginCharHelper.addBeginChar(BeginChar(upper, mask), &beginTerms[i].hotTerms, term.quantityType, term.quantityCount);
+ m_beginCharHelper.addBeginChar(BeginChar(lower, mask), &beginTerms[i].hotTerms, term.quantityType, term.quantityCount);
+ } else
+ m_beginCharHelper.addBeginChar(BeginChar(character, mask), &beginTerms[i].hotTerms, term.quantityType, term.quantityCount);
+ }
+ }
+
+ // If the pattern doesn't contain terms with fixed quantifiers then the beginning character look-up optimization is inefficient.
+ if (!containsFixedCharacter) {
+ m_pattern.m_containsBeginChars = false;
+ return;
+ }
+
+ size = m_pattern.m_beginChars.size();
+
+ if (size > 2)
+ m_beginCharHelper.merge(size - 1);
+ else if (size <= 1)
+ m_pattern.m_containsBeginChars = false;
+ }
+ }
+
private:
RegexPattern& m_pattern;
PatternAlternative* m_alternative;
CharacterClassConstructor m_characterClassConstructor;
+ BeginCharHelper m_beginCharHelper;
bool m_invertCharacterClass;
bool m_invertParentheticalAssertion;
};
@@ -687,6 +935,7 @@ const char* compileRegex(const UString& patternString, RegexPattern& pattern)
constructor.optimizeBOL();
constructor.setupOffsets();
+ constructor.setupBeginChars();
return 0;
};
diff --git a/JavaScriptCore/yarr/RegexInterpreter.cpp b/JavaScriptCore/yarr/RegexInterpreter.cpp
index ec96636..dc3024a 100644
--- a/JavaScriptCore/yarr/RegexInterpreter.cpp
+++ b/JavaScriptCore/yarr/RegexInterpreter.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2010 Peter Varga (pvarga@inf.u-szeged.hu), University of Szeged
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -195,6 +196,12 @@ public:
return -1;
}
+ int readPair()
+ {
+ ASSERT(pos + 1 < length);
+ return input[pos] | input[pos + 1] << 16;
+ }
+
int readChecked(int position)
{
ASSERT(position < 0);
@@ -262,6 +269,11 @@ public:
return (pos + position) == length;
}
+ bool isNotAvailableInput(int position)
+ {
+ return (pos + position) > length;
+ }
+
private:
const UChar* input;
unsigned pos;
@@ -591,20 +603,24 @@ public:
unsigned count = term.atom.parenthesesDisjunction->m_numSubpatterns;
context->restoreOutput(output, firstSubpatternId, count);
}
- bool parenthesesDoBacktrack(ByteTerm& term, BackTrackInfoParentheses* backTrack)
+ JSRegExpResult parenthesesDoBacktrack(ByteTerm& term, BackTrackInfoParentheses* backTrack)
{
while (backTrack->matchAmount) {
ParenthesesDisjunctionContext* context = backTrack->lastContext;
- if (matchDisjunction(term.atom.parenthesesDisjunction, context->getDisjunctionContext(term), true))
- return true;
+ JSRegExpResult result = matchDisjunction(term.atom.parenthesesDisjunction, context->getDisjunctionContext(term), true);
+ if (result == JSRegExpMatch)
+ return JSRegExpMatch;
resetMatches(term, context);
popParenthesesDisjunctionContext(backTrack);
freeParenthesesDisjunctionContext(context);
+
+ if (result != JSRegExpNoMatch)
+ return result;
}
- return false;
+ return JSRegExpNoMatch;
}
bool matchParenthesesOnceBegin(ByteTerm& term, DisjunctionContext* context)
@@ -765,7 +781,7 @@ public:
return false;
}
- bool matchParentheses(ByteTerm& term, DisjunctionContext* context)
+ JSRegExpResult matchParentheses(ByteTerm& term, DisjunctionContext* context)
{
ASSERT(term.type == ByteTerm::TypeParenthesesSubpattern);
@@ -786,31 +802,42 @@ public:
while (backTrack->matchAmount < term.atom.quantityCount) {
// Try to do a match, and it it succeeds, add it to the list.
ParenthesesDisjunctionContext* context = allocParenthesesDisjunctionContext(disjunctionBody, output, term);
- if (matchDisjunction(disjunctionBody, context->getDisjunctionContext(term)))
+ JSRegExpResult result = matchDisjunction(disjunctionBody, context->getDisjunctionContext(term));
+ if (result == JSRegExpMatch)
appendParenthesesDisjunctionContext(backTrack, context);
else {
// The match failed; try to find an alternate point to carry on from.
resetMatches(term, context);
freeParenthesesDisjunctionContext(context);
- if (!parenthesesDoBacktrack(term, backTrack))
- return false;
+
+ if (result == JSRegExpNoMatch) {
+ JSRegExpResult backtrackResult = parenthesesDoBacktrack(term, backTrack);
+ if (backtrackResult != JSRegExpMatch)
+ return backtrackResult;
+ } else
+ return result;
}
}
ASSERT(backTrack->matchAmount == term.atom.quantityCount);
ParenthesesDisjunctionContext* context = backTrack->lastContext;
recordParenthesesMatch(term, context);
- return true;
+ return JSRegExpMatch;
}
case QuantifierGreedy: {
while (backTrack->matchAmount < term.atom.quantityCount) {
ParenthesesDisjunctionContext* context = allocParenthesesDisjunctionContext(disjunctionBody, output, term);
- if (matchNonZeroDisjunction(disjunctionBody, context->getDisjunctionContext(term)))
+ JSRegExpResult result = matchNonZeroDisjunction(disjunctionBody, context->getDisjunctionContext(term));
+ if (result == JSRegExpMatch)
appendParenthesesDisjunctionContext(backTrack, context);
else {
resetMatches(term, context);
freeParenthesesDisjunctionContext(context);
+
+ if (result != JSRegExpNoMatch)
+ return result;
+
break;
}
}
@@ -819,15 +846,15 @@ public:
ParenthesesDisjunctionContext* context = backTrack->lastContext;
recordParenthesesMatch(term, context);
}
- return true;
+ return JSRegExpMatch;
}
case QuantifierNonGreedy:
- return true;
+ return JSRegExpMatch;
}
ASSERT_NOT_REACHED();
- return false;
+ return JSRegExpErrorNoMatch;
}
// Rules for backtracking differ depending on whether this is greedy or non-greedy.
@@ -840,7 +867,7 @@ public:
// Non-greedy, we've already done the one less case, so don't match on popping.
// We haven't done the one more case, so always try to add that.
//
- bool backtrackParentheses(ByteTerm& term, DisjunctionContext* context)
+ JSRegExpResult backtrackParentheses(ByteTerm& term, DisjunctionContext* context)
{
ASSERT(term.type == ByteTerm::TypeParenthesesSubpattern);
@@ -859,44 +886,58 @@ public:
ASSERT(backTrack->matchAmount == term.atom.quantityCount);
ParenthesesDisjunctionContext* context = 0;
+ JSRegExpResult result = parenthesesDoBacktrack(term, backTrack);
- if (!parenthesesDoBacktrack(term, backTrack))
- return false;
+ if (result != JSRegExpMatch)
+ return result;
// While we haven't yet reached our fixed limit,
while (backTrack->matchAmount < term.atom.quantityCount) {
// Try to do a match, and it it succeeds, add it to the list.
context = allocParenthesesDisjunctionContext(disjunctionBody, output, term);
- if (matchDisjunction(disjunctionBody, context->getDisjunctionContext(term)))
+ result = matchDisjunction(disjunctionBody, context->getDisjunctionContext(term));
+
+ if (result == JSRegExpMatch)
appendParenthesesDisjunctionContext(backTrack, context);
else {
// The match failed; try to find an alternate point to carry on from.
resetMatches(term, context);
freeParenthesesDisjunctionContext(context);
- if (!parenthesesDoBacktrack(term, backTrack))
- return false;
+
+ if (result == JSRegExpNoMatch) {
+ JSRegExpResult backtrackResult = parenthesesDoBacktrack(term, backTrack);
+ if (backtrackResult != JSRegExpMatch)
+ return backtrackResult;
+ } else
+ return result;
}
}
ASSERT(backTrack->matchAmount == term.atom.quantityCount);
context = backTrack->lastContext;
recordParenthesesMatch(term, context);
- return true;
+ return JSRegExpMatch;
}
case QuantifierGreedy: {
if (!backTrack->matchAmount)
- return false;
+ return JSRegExpNoMatch;
ParenthesesDisjunctionContext* context = backTrack->lastContext;
- if (matchNonZeroDisjunction(disjunctionBody, context->getDisjunctionContext(term), true)) {
+ JSRegExpResult result = matchNonZeroDisjunction(disjunctionBody, context->getDisjunctionContext(term), true);
+ if (result == JSRegExpMatch) {
while (backTrack->matchAmount < term.atom.quantityCount) {
ParenthesesDisjunctionContext* context = allocParenthesesDisjunctionContext(disjunctionBody, output, term);
- if (matchNonZeroDisjunction(disjunctionBody, context->getDisjunctionContext(term)))
+ JSRegExpResult parenthesesResult = matchNonZeroDisjunction(disjunctionBody, context->getDisjunctionContext(term));
+ if (parenthesesResult == JSRegExpMatch)
appendParenthesesDisjunctionContext(backTrack, context);
else {
resetMatches(term, context);
freeParenthesesDisjunctionContext(context);
+
+ if (parenthesesResult != JSRegExpNoMatch)
+ return parenthesesResult;
+
break;
}
}
@@ -904,63 +945,108 @@ public:
resetMatches(term, context);
popParenthesesDisjunctionContext(backTrack);
freeParenthesesDisjunctionContext(context);
+
+ if (result != JSRegExpNoMatch)
+ return result;
}
if (backTrack->matchAmount) {
ParenthesesDisjunctionContext* context = backTrack->lastContext;
recordParenthesesMatch(term, context);
}
- return true;
+ return JSRegExpMatch;
}
case QuantifierNonGreedy: {
// If we've not reached the limit, try to add one more match.
if (backTrack->matchAmount < term.atom.quantityCount) {
ParenthesesDisjunctionContext* context = allocParenthesesDisjunctionContext(disjunctionBody, output, term);
- if (matchNonZeroDisjunction(disjunctionBody, context->getDisjunctionContext(term))) {
+ JSRegExpResult result = matchNonZeroDisjunction(disjunctionBody, context->getDisjunctionContext(term));
+ if (result == JSRegExpMatch) {
appendParenthesesDisjunctionContext(backTrack, context);
recordParenthesesMatch(term, context);
- return true;
- } else {
- resetMatches(term, context);
- freeParenthesesDisjunctionContext(context);
+ return JSRegExpMatch;
}
+
+ resetMatches(term, context);
+ freeParenthesesDisjunctionContext(context);
+
+ if (result != JSRegExpNoMatch)
+ return result;
}
// Nope - okay backtrack looking for an alternative.
while (backTrack->matchAmount) {
ParenthesesDisjunctionContext* context = backTrack->lastContext;
- if (matchNonZeroDisjunction(disjunctionBody, context->getDisjunctionContext(term), true)) {
+ JSRegExpResult result = matchNonZeroDisjunction(disjunctionBody, context->getDisjunctionContext(term), true);
+ if (result == JSRegExpMatch) {
// successful backtrack! we're back in the game!
if (backTrack->matchAmount) {
context = backTrack->lastContext;
recordParenthesesMatch(term, context);
}
- return true;
+ return JSRegExpMatch;
}
// pop a match off the stack
resetMatches(term, context);
popParenthesesDisjunctionContext(backTrack);
freeParenthesesDisjunctionContext(context);
+
+ return result;
}
- return false;
+ return JSRegExpNoMatch;
}
}
ASSERT_NOT_REACHED();
- return false;
+ return JSRegExpErrorNoMatch;
+ }
+
+ void lookupForBeginChars()
+ {
+ int character;
+ bool firstSingleCharFound;
+
+ while (true) {
+ if (input.isNotAvailableInput(2))
+ return;
+
+ firstSingleCharFound = false;
+
+ character = input.readPair();
+
+ for (unsigned i = 0; i < pattern->m_beginChars.size(); ++i) {
+ BeginChar bc = pattern->m_beginChars[i];
+
+ if (!firstSingleCharFound && bc.value <= 0xFFFF) {
+ firstSingleCharFound = true;
+ character &= 0xFFFF;
+ }
+
+ if ((character | bc.mask) == bc.value)
+ return;
+ }
+
+ input.next();
+ }
}
#define MATCH_NEXT() { ++context->term; goto matchAgain; }
#define BACKTRACK() { --context->term; goto backtrack; }
#define currentTerm() (disjunction->terms[context->term])
- bool matchDisjunction(ByteDisjunction* disjunction, DisjunctionContext* context, bool btrack = false)
+ JSRegExpResult matchDisjunction(ByteDisjunction* disjunction, DisjunctionContext* context, bool btrack = false, bool isBody = false)
{
+ if (!--remainingMatchCount)
+ return JSRegExpErrorHitLimit;
+
if (btrack)
BACKTRACK();
+ if (pattern->m_containsBeginChars && isBody)
+ lookupForBeginChars();
+
context->matchBegin = input.getPos();
context->term = 0;
@@ -972,14 +1058,14 @@ public:
MATCH_NEXT();
case ByteTerm::TypeSubpatternEnd:
context->matchEnd = input.getPos();
- return true;
+ return JSRegExpMatch;
case ByteTerm::TypeBodyAlternativeBegin:
MATCH_NEXT();
case ByteTerm::TypeBodyAlternativeDisjunction:
case ByteTerm::TypeBodyAlternativeEnd:
context->matchEnd = input.getPos();
- return true;
+ return JSRegExpMatch;
case ByteTerm::TypeAlternativeBegin:
MATCH_NEXT();
@@ -1069,10 +1155,16 @@ public:
if (matchBackReference(currentTerm(), context))
MATCH_NEXT();
BACKTRACK();
- case ByteTerm::TypeParenthesesSubpattern:
- if (matchParentheses(currentTerm(), context))
+ case ByteTerm::TypeParenthesesSubpattern: {
+ JSRegExpResult result = matchParentheses(currentTerm(), context);
+
+ if (result == JSRegExpMatch) {
MATCH_NEXT();
+ } else if (result != JSRegExpNoMatch)
+ return result;
+
BACKTRACK();
+ }
case ByteTerm::TypeParenthesesSubpatternOnceBegin:
if (matchParenthesesOnceBegin(currentTerm(), context))
MATCH_NEXT();
@@ -1104,7 +1196,7 @@ public:
switch (currentTerm().type) {
case ByteTerm::TypeSubpatternBegin:
- return false;
+ return JSRegExpNoMatch;
case ByteTerm::TypeSubpatternEnd:
ASSERT_NOT_REACHED();
@@ -1116,9 +1208,13 @@ public:
MATCH_NEXT();
if (input.atEnd())
- return false;
+ return JSRegExpNoMatch;
input.next();
+
+ if (pattern->m_containsBeginChars && isBody)
+ lookupForBeginChars();
+
context->matchBegin = input.getPos();
if (currentTerm().alternative.onceThrough)
@@ -1172,10 +1268,16 @@ public:
if (backtrackBackReference(currentTerm(), context))
MATCH_NEXT();
BACKTRACK();
- case ByteTerm::TypeParenthesesSubpattern:
- if (backtrackParentheses(currentTerm(), context))
+ case ByteTerm::TypeParenthesesSubpattern: {
+ JSRegExpResult result = backtrackParentheses(currentTerm(), context);
+
+ if (result == JSRegExpMatch) {
MATCH_NEXT();
+ } else if (result != JSRegExpNoMatch)
+ return result;
+
BACKTRACK();
+ }
case ByteTerm::TypeParenthesesSubpatternOnceBegin:
if (backtrackParenthesesOnceBegin(currentTerm(), context))
MATCH_NEXT();
@@ -1199,20 +1301,23 @@ public:
}
ASSERT_NOT_REACHED();
- return false;
+ return JSRegExpErrorNoMatch;
}
- bool matchNonZeroDisjunction(ByteDisjunction* disjunction, DisjunctionContext* context, bool btrack = false)
+ JSRegExpResult matchNonZeroDisjunction(ByteDisjunction* disjunction, DisjunctionContext* context, bool btrack = false)
{
- if (matchDisjunction(disjunction, context, btrack)) {
+ JSRegExpResult result = matchDisjunction(disjunction, context, btrack);
+
+ if (result == JSRegExpMatch) {
while (context->matchBegin == context->matchEnd) {
- if (!matchDisjunction(disjunction, context, true))
- return false;
+ result = matchDisjunction(disjunction, context, true);
+ if (result != JSRegExpMatch)
+ return result;
}
- return true;
+ return JSRegExpMatch;
}
- return false;
+ return result;
}
int interpret()
@@ -1226,7 +1331,8 @@ public:
DisjunctionContext* context = allocDisjunctionContext(pattern->m_body.get());
- if (matchDisjunction(pattern->m_body.get(), context)) {
+ JSRegExpResult result = matchDisjunction(pattern->m_body.get(), context, false, true);
+ if (result == JSRegExpMatch) {
output[0] = context->matchBegin;
output[1] = context->matchEnd;
}
@@ -1235,6 +1341,9 @@ public:
pattern->m_allocator->stopAllocator();
+ if (output[0] == -1 && result != JSRegExpNoMatch)
+ return result;
+
return output[0];
}
@@ -1243,6 +1352,7 @@ public:
, output(output)
, input(inputChar, start, length)
, allocatorPool(0)
+ , remainingMatchCount(matchLimit)
{
}
@@ -1251,6 +1361,7 @@ private:
int* output;
InputStream input;
BumpPointerPool* allocatorPool;
+ unsigned remainingMatchCount;
};
diff --git a/JavaScriptCore/yarr/RegexInterpreter.h b/JavaScriptCore/yarr/RegexInterpreter.h
index 37f17fe..dae8f9d 100644
--- a/JavaScriptCore/yarr/RegexInterpreter.h
+++ b/JavaScriptCore/yarr/RegexInterpreter.h
@@ -40,6 +40,21 @@ using WTF::BumpPointerAllocator;
namespace JSC { namespace Yarr {
+// TODO move the matchLimit constant and the JSRegExpResult enum to the JSRegExp.h when pcre is removed.
+
+// The below limit restricts the number of "recursive" match calls in order to
+// avoid spending exponential time on complex regular expressions.
+static const unsigned matchLimit = 1000000;
+
+enum JSRegExpResult {
+ JSRegExpMatch = 1,
+ JSRegExpNoMatch = 0,
+ JSRegExpErrorNoMatch = -1,
+ JSRegExpErrorHitLimit = -2,
+ JSRegExpErrorNoMemory = -3,
+ JSRegExpErrorInternal = -4
+};
+
class ByteDisjunction;
struct ByteTerm {
@@ -309,6 +324,7 @@ struct BytecodePattern : FastAllocBase {
: m_body(body)
, m_ignoreCase(pattern.m_ignoreCase)
, m_multiline(pattern.m_multiline)
+ , m_containsBeginChars(pattern.m_containsBeginChars)
, m_allocator(allocator)
{
newlineCharacterClass = pattern.newlineCharacterClass();
@@ -320,6 +336,8 @@ struct BytecodePattern : FastAllocBase {
// array, so that it won't delete them on destruction. We'll
// take responsibility for that.
pattern.m_userCharacterClasses.clear();
+
+ m_beginChars.append(pattern.m_beginChars);
}
~BytecodePattern()
@@ -331,12 +349,16 @@ struct BytecodePattern : FastAllocBase {
OwnPtr<ByteDisjunction> m_body;
bool m_ignoreCase;
bool m_multiline;
+ bool m_containsBeginChars;
// Each BytecodePattern is associated with a RegExp, each RegExp is associated
// with a JSGlobalData. Cache a pointer to out JSGlobalData's m_regexAllocator.
BumpPointerAllocator* m_allocator;
CharacterClass* newlineCharacterClass;
CharacterClass* wordcharCharacterClass;
+
+ Vector<BeginChar> m_beginChars;
+
private:
Vector<ByteDisjunction*> m_allParenthesesInfo;
Vector<CharacterClass*> m_userCharacterClasses;
diff --git a/JavaScriptCore/yarr/RegexJIT.h b/JavaScriptCore/yarr/RegexJIT.h
index 5d587b2..02e905d 100644
--- a/JavaScriptCore/yarr/RegexJIT.h
+++ b/JavaScriptCore/yarr/RegexJIT.h
@@ -30,9 +30,9 @@
#include "MacroAssembler.h"
#include "RegexPattern.h"
-#include <UString.h>
+#include "UString.h"
-#include <pcre.h>
+#include "pcre.h"
struct JSRegExp; // temporary, remove when fallback is removed.
#if CPU(X86) && !COMPILER(MSVC)
diff --git a/JavaScriptCore/yarr/RegexParser.h b/JavaScriptCore/yarr/RegexParser.h
index 8a5eeba..ede9417 100644
--- a/JavaScriptCore/yarr/RegexParser.h
+++ b/JavaScriptCore/yarr/RegexParser.h
@@ -28,7 +28,7 @@
#if ENABLE(YARR)
-#include <UString.h>
+#include "UString.h"
#include <limits.h>
#include <wtf/ASCIICType.h>
#include <wtf/unicode/Unicode.h>
diff --git a/JavaScriptCore/yarr/RegexPattern.h b/JavaScriptCore/yarr/RegexPattern.h
index eecbd43..be31fcd 100644
--- a/JavaScriptCore/yarr/RegexPattern.h
+++ b/JavaScriptCore/yarr/RegexPattern.h
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2010 Peter Varga (pvarga@inf.u-szeged.hu), University of Szeged
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -283,11 +284,36 @@ CharacterClass* nondigitsCreate();
CharacterClass* nonspacesCreate();
CharacterClass* nonwordcharCreate();
+struct TermChain {
+ TermChain(PatternTerm term)
+ : term(term)
+ {}
+
+ PatternTerm term;
+ Vector<TermChain> hotTerms;
+};
+
+struct BeginChar {
+ BeginChar()
+ : value(0)
+ , mask(0)
+ {}
+
+ BeginChar(unsigned value, unsigned mask)
+ : value(value)
+ , mask(mask)
+ {}
+
+ unsigned value;
+ unsigned mask;
+};
+
struct RegexPattern {
RegexPattern(bool ignoreCase, bool multiline)
: m_ignoreCase(ignoreCase)
, m_multiline(multiline)
, m_containsBackreferences(false)
+ , m_containsBeginChars(false)
, m_containsBOL(false)
, m_numSubpatterns(0)
, m_maxBackReference(0)
@@ -313,6 +339,7 @@ struct RegexPattern {
m_maxBackReference = 0;
m_containsBackreferences = false;
+ m_containsBeginChars = false;
m_containsBOL = false;
newlineCached = 0;
@@ -327,6 +354,7 @@ struct RegexPattern {
m_disjunctions.clear();
deleteAllValues(m_userCharacterClasses);
m_userCharacterClasses.clear();
+ m_beginChars.clear();
}
bool containsIllegalBackReference()
@@ -380,12 +408,14 @@ struct RegexPattern {
bool m_ignoreCase : 1;
bool m_multiline : 1;
bool m_containsBackreferences : 1;
+ bool m_containsBeginChars : 1;
bool m_containsBOL : 1;
unsigned m_numSubpatterns;
unsigned m_maxBackReference;
PatternDisjunction* m_body;
Vector<PatternDisjunction*, 4> m_disjunctions;
Vector<CharacterClass*> m_userCharacterClasses;
+ Vector<BeginChar> m_beginChars;
private:
CharacterClass* newlineCached;
diff --git a/JavaScriptGlue/Configurations/Version.xcconfig b/JavaScriptGlue/Configurations/Version.xcconfig
index 8cdcafc..d4cb8e7 100644
--- a/JavaScriptGlue/Configurations/Version.xcconfig
+++ b/JavaScriptGlue/Configurations/Version.xcconfig
@@ -22,7 +22,7 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MAJOR_VERSION = 534;
-MINOR_VERSION = 12;
+MINOR_VERSION = 13;
TINY_VERSION = 0;
FULL_VERSION = $(MAJOR_VERSION).$(MINOR_VERSION);
diff --git a/JavaScriptGlue/ForwardingHeaders/wtf/text/TextPosition.h b/JavaScriptGlue/ForwardingHeaders/wtf/text/TextPosition.h
new file mode 100644
index 0000000..bd4f09b
--- /dev/null
+++ b/JavaScriptGlue/ForwardingHeaders/wtf/text/TextPosition.h
@@ -0,0 +1 @@
+#include <JavaScriptCore/TextPosition.h>
diff --git a/LayoutTests/fast/dom/Attr/access-after-element-destruction-expected.txt b/LayoutTests/fast/dom/Attr/access-after-element-destruction-expected.txt
index 8c09132..dfbf96e 100644
--- a/LayoutTests/fast/dom/Attr/access-after-element-destruction-expected.txt
+++ b/LayoutTests/fast/dom/Attr/access-after-element-destruction-expected.txt
@@ -10,14 +10,12 @@ PASS attributes.item(0).name is 'a'
PASS attributes.item(0).specified is true
PASS attributes.item(0).value is 'b'
PASS attributes.item(0).ownerElement.tagName is 'P'
-PASS attributes.item(0).style is null
PASS attributes.item(0).value is 'c'
PASS attributes.length is 0
PASS attr.name is 'a'
PASS attr.specified is true
PASS attr.value is 'b'
PASS attr.ownerElement.tagName is 'P'
-PASS attr.style is null
PASS attr.value is 'c'
PASS successfullyParsed is true
diff --git a/LayoutTests/fast/dom/Attr/script-tests/access-after-element-destruction.js b/LayoutTests/fast/dom/Attr/script-tests/access-after-element-destruction.js
index 91588a3..b9f4e16 100644
--- a/LayoutTests/fast/dom/Attr/script-tests/access-after-element-destruction.js
+++ b/LayoutTests/fast/dom/Attr/script-tests/access-after-element-destruction.js
@@ -25,7 +25,6 @@ shouldBe("attributes.item(0).name", "'a'");
shouldBe("attributes.item(0).specified", "true");
shouldBe("attributes.item(0).value", "'b'");
shouldBe("attributes.item(0).ownerElement.tagName", "'P'");
-shouldBe("attributes.item(0).style", "null");
attributes.item(0).value = 'c';
@@ -46,7 +45,6 @@ shouldBe("attr.name", "'a'");
shouldBe("attr.specified", "true");
shouldBe("attr.value", "'b'");
shouldBe("attr.ownerElement.tagName", "'P'");
-shouldBe("attr.style", "null");
attr.value = 'c';
diff --git a/LayoutTests/fast/dom/Geolocation/script-tests/timestamp.js b/LayoutTests/fast/dom/Geolocation/script-tests/timestamp.js
new file mode 100644
index 0000000..b51ca43
--- /dev/null
+++ b/LayoutTests/fast/dom/Geolocation/script-tests/timestamp.js
@@ -0,0 +1,34 @@
+description("Tests that Geoposition timestamps are well-formed (non-zero and in the same units as Date.getTime).");
+
+var mockLatitude = 51.478;
+var mockLongitude = -0.166;
+var mockAccuracy = 100.0;
+
+if (window.layoutTestController) {
+ layoutTestController.setGeolocationPermission(true);
+ layoutTestController.setMockGeolocationPosition(mockLatitude, mockLongitude, mockAccuracy);
+}
+
+var now = new Date().getTime();
+shouldBeTrue('now != 0');
+var t = null;
+var then = null;
+
+function checkPosition(p) {
+ t = p.timestamp;
+ var d = new Date();
+ then = d.getTime();
+ shouldBeTrue('t != 0');
+ shouldBeTrue('then != 0');
+ shouldBeTrue('now - 1 <= t'); // Avoid rounding errors
+ if (now - 1 > t) {
+ debug(" now - 1 = " + (now-1));
+ debug(" t = " + t);
+ }
+ shouldBeTrue('t <= then + 1'); // Avoid rounding errors
+ finishJSTest();
+}
+
+navigator.geolocation.getCurrentPosition(checkPosition);
+window.jsTestIsAsync = true;
+window.successfullyParsed = true;
diff --git a/LayoutTests/fast/dom/Geolocation/timestamp-expected.txt b/LayoutTests/fast/dom/Geolocation/timestamp-expected.txt
new file mode 100644
index 0000000..e4e8c91
--- /dev/null
+++ b/LayoutTests/fast/dom/Geolocation/timestamp-expected.txt
@@ -0,0 +1,14 @@
+Tests that Geoposition timestamps are well-formed (non-zero and in the same units as Date.getTime).
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS now != 0 is true
+PASS t != 0 is true
+PASS then != 0 is true
+PASS now - 1 <= t is true
+PASS t <= then + 1 is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/dom/Geolocation/timestamp.html b/LayoutTests/fast/dom/Geolocation/timestamp.html
new file mode 100644
index 0000000..ce319a7
--- /dev/null
+++ b/LayoutTests/fast/dom/Geolocation/timestamp.html
@@ -0,0 +1,13 @@
+<!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 id="description"></p>
+<div id="console"></div>
+<script src="script-tests/timestamp.js"></script>
+<script src="../../js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/WebCore/Android.derived.jscbindings.mk b/WebCore/Android.derived.jscbindings.mk
index 7461ece..13ac5f9 100644
--- a/WebCore/Android.derived.jscbindings.mk
+++ b/WebCore/Android.derived.jscbindings.mk
@@ -67,8 +67,6 @@ GEN := \
$(intermediates)/css/JSCSSStyleSheet.h \
$(intermediates)/css/JSCSSValue.h \
$(intermediates)/css/JSCSSValueList.h \
- $(intermediates)/css/JSCSSVariablesDeclaration.h \
- $(intermediates)/css/JSCSSVariablesRule.h \
$(intermediates)/css/JSCounter.h \
$(intermediates)/css/JSMediaList.h \
$(intermediates)/css/JSRGBColor.h \
diff --git a/WebCore/Android.derived.v8bindings.mk b/WebCore/Android.derived.v8bindings.mk
index 02d7b3b..24454ba 100644
--- a/WebCore/Android.derived.v8bindings.mk
+++ b/WebCore/Android.derived.v8bindings.mk
@@ -50,8 +50,6 @@ GEN := \
$(intermediates)/bindings/V8CSSStyleSheet.h \
$(intermediates)/bindings/V8CSSValue.h \
$(intermediates)/bindings/V8CSSValueList.h \
- $(intermediates)/bindings/V8CSSVariablesDeclaration.h \
- $(intermediates)/bindings/V8CSSVariablesRule.h \
$(intermediates)/bindings/V8Counter.h \
$(intermediates)/bindings/V8MediaList.h \
$(intermediates)/bindings/V8Rect.h \
diff --git a/WebCore/Android.jscbindings.mk b/WebCore/Android.jscbindings.mk
index bc8a494..ba3213f 100644
--- a/WebCore/Android.jscbindings.mk
+++ b/WebCore/Android.jscbindings.mk
@@ -158,7 +158,6 @@ LOCAL_SRC_FILES += \
bindings/js/JSSQLTransactionSyncCustom.cpp \
bindings/js/JSSVGElementInstanceCustom.cpp \
bindings/js/JSSVGLengthCustom.cpp \
- bindings/js/JSSVGMatrixCustom.cpp \
bindings/js/JSSVGPathSegCustom.cpp \
bindings/js/JSSVGPathSegListCustom.cpp \
bindings/js/JSSharedWorkerCustom.cpp \
diff --git a/WebCore/Android.mk b/WebCore/Android.mk
index 8f62856..f371c24 100644
--- a/WebCore/Android.mk
+++ b/WebCore/Android.mk
@@ -68,9 +68,6 @@ LOCAL_SRC_FILES := \
css/CSSTimingFunctionValue.cpp \
css/CSSUnicodeRangeValue.cpp \
css/CSSValueList.cpp \
- css/CSSVariableDependentValue.cpp \
- css/CSSVariablesDeclaration.cpp \
- css/CSSVariablesRule.cpp \
css/FontFamilyValue.cpp \
css/FontValue.cpp \
css/MediaFeatureNames.cpp \
@@ -139,6 +136,7 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
dom/EntityReference.cpp \
dom/ErrorEvent.cpp \
dom/Event.cpp \
+ dom/EventContext.cpp \
dom/EventNames.cpp \
dom/EventTarget.cpp \
dom/ExceptionBase.cpp \
@@ -201,6 +199,7 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
dom/WebKitAnimationEvent.cpp \
dom/WebKitTransitionEvent.cpp \
dom/WheelEvent.cpp \
+ dom/WindowEventContext.cpp \
dom/XMLDocumentParser.cpp \
dom/XMLDocumentParserLibxml2.cpp \
dom/XMLDocumentParserScope.cpp \
@@ -462,7 +461,6 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
page/Location.cpp \
page/MemoryInfo.cpp \
page/MouseEventWithHitTestResults.cpp \
- page/Navigation.cpp \
page/Navigator.cpp \
page/NavigatorBase.cpp \
page/OriginAccessEntry.cpp \
@@ -470,6 +468,8 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
page/PageGroup.cpp \
page/PageGroupLoadDeferrer.cpp \
page/Performance.cpp \
+ page/PerformanceNavigation.cpp \
+ page/PerformanceTiming.cpp \
page/PluginHalter.cpp \
page/PrintContext.cpp \
page/Screen.cpp \
@@ -479,7 +479,6 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
page/SpeechInput.cpp \
page/SpeechInputResult.cpp \
page/SuspendableTimer.cpp \
- page/Timing.cpp \
page/UserContentURLPattern.cpp \
page/WindowFeatures.cpp \
page/WorkerNavigator.cpp \
diff --git a/WebCore/Android.v8bindings.mk b/WebCore/Android.v8bindings.mk
index 79fd72e..84acbfa 100644
--- a/WebCore/Android.v8bindings.mk
+++ b/WebCore/Android.v8bindings.mk
@@ -173,8 +173,12 @@ LOCAL_SRC_FILES += \
bindings/v8/custom/V8SVGDocumentCustom.cpp \
bindings/v8/custom/V8SVGElementCustom.cpp \
bindings/v8/custom/V8SVGLengthCustom.cpp \
+<<<<<<< HEAD
bindings/v8/custom/V8SVGMatrixCustom.cpp \
bindings/v8/custom/V8SVGPathSegCustom.cpp
+=======
+ bindings/v8/custom/V8SVGPathSegCustom.cpp \
+>>>>>>> webkit.org at r72274
endif
LOCAL_SRC_FILES += \
diff --git a/WebCore/CMakeLists.txt b/WebCore/CMakeLists.txt
index e7e741a..08f8809 100644
--- a/WebCore/CMakeLists.txt
+++ b/WebCore/CMakeLists.txt
@@ -128,8 +128,6 @@ SET(WebCore_IDL_FILES
css/CSSStyleSheet.idl
css/CSSValue.idl
css/CSSValueList.idl
- css/CSSVariablesDeclaration.idl
- css/CSSVariablesRule.idl
css/MediaList.idl
css/Rect.idl
css/RGBColor.idl
@@ -295,10 +293,6 @@ SET(WebCore_IDL_FILES
html/canvas/CanvasPattern.idl
html/canvas/CanvasRenderingContext2D.idl
html/canvas/CanvasRenderingContext.idl
- html/canvas/WebGLRenderingContext.idl
-
- html/canvas/ArrayBuffer.idl
- html/canvas/ArrayBufferView.idl
html/canvas/Float32Array.idl
html/canvas/Int16Array.idl
html/canvas/Int32Array.idl
@@ -306,6 +300,7 @@ SET(WebCore_IDL_FILES
html/canvas/Uint16Array.idl
html/canvas/Uint32Array.idl
html/canvas/Uint8Array.idl
+ html/canvas/WebGLRenderingContext.idl
inspector/InjectedScriptHost.idl
inspector/InspectorFrontendHost.idl
@@ -329,12 +324,12 @@ SET(WebCore_IDL_FILES
page/History.idl
page/Location.idl
page/MemoryInfo.idl
- page/Navigation.idl
page/Navigator.idl
page/Performance.idl
+ page/PerformanceNavigation.idl
+ page/PerformanceTiming.idl
page/PositionError.idl
page/Screen.idl
- page/Timing.idl
page/WebKitPoint.idl
page/WorkerNavigator.idl
@@ -571,7 +566,6 @@ SET(WebCore_SOURCES
accessibility/AccessibilityTableHeaderContainer.cpp
accessibility/AccessibilityTableRow.cpp
- bindings/js/specialization/JSBindingState.cpp
bindings/ScriptControllerBase.cpp
bindings/generic/ActiveDOMCallback.cpp
@@ -704,6 +698,8 @@ SET(WebCore_SOURCES
bindings/js/SerializedScriptValue.cpp
bindings/js/WorkerScriptController.cpp
+ bindings/js/specialization/JSBindingState.cpp
+
bridge/IdentifierRep.cpp
bridge/NP_jsobject.cpp
bridge/npruntime.cpp
@@ -760,9 +756,6 @@ SET(WebCore_SOURCES
css/CSSTimingFunctionValue.cpp
css/CSSUnicodeRangeValue.cpp
css/CSSValueList.cpp
- css/CSSVariableDependentValue.cpp
- css/CSSVariablesDeclaration.cpp
- css/CSSVariablesRule.cpp
css/FontFamilyValue.cpp
css/FontValue.cpp
css/MediaFeatureNames.cpp
@@ -825,6 +818,7 @@ SET(WebCore_SOURCES
dom/EntityReference.cpp
dom/ErrorEvent.cpp
dom/Event.cpp
+ dom/EventContext.cpp
dom/EventNames.cpp
dom/EventTarget.cpp
dom/ExceptionBase.cpp
@@ -882,6 +876,7 @@ SET(WebCore_SOURCES
dom/WebKitAnimationEvent.cpp
dom/WebKitTransitionEvent.cpp
dom/WheelEvent.cpp
+ dom/WindowEventContext.cpp
dom/XMLDocumentParser.cpp
dom/XMLDocumentParserLibxml2.cpp
dom/XMLDocumentParserScope.cpp
@@ -1087,12 +1082,14 @@ SET(WebCore_SOURCES
html/ValidationMessage.cpp
html/ValidityState.cpp
html/WeekInputType.cpp
+
html/canvas/CanvasGradient.cpp
html/canvas/CanvasPattern.cpp
html/canvas/CanvasPixelArray.cpp
html/canvas/CanvasRenderingContext.cpp
html/canvas/CanvasRenderingContext2D.cpp
html/canvas/CanvasStyle.cpp
+
html/parser/CSSPreloadScanner.cpp
html/parser/HTMLConstructionSite.cpp
html/parser/HTMLDocumentParser.cpp
@@ -1140,17 +1137,8 @@ SET(WebCore_SOURCES
inspector/ScriptCallStack.cpp
inspector/TimelineRecordFactory.cpp
- loader/cache/CachedCSSStyleSheet.cpp
- loader/cache/CachedFont.cpp
- loader/cache/CachedImage.cpp
- loader/cache/CachedResource.cpp
- loader/cache/CachedResourceClientWalker.cpp
- loader/cache/CachedResourceHandle.cpp
- loader/cache/CachedScript.cpp
- loader/cache/CachedXSLStyleSheet.cpp
loader/CrossOriginAccessControl.cpp
loader/CrossOriginPreflightResultCache.cpp
- loader/cache/CachedResourceLoader.cpp
loader/DocumentLoader.cpp
loader/DocumentThreadableLoader.cpp
loader/DocumentWriter.cpp
@@ -1172,6 +1160,7 @@ SET(WebCore_SOURCES
loader/NavigationScheduler.cpp
loader/Request.cpp
loader/ResourceLoadNotifier.cpp
+ loader/ResourceLoadScheduler.cpp
loader/ResourceLoader.cpp
loader/SinkDocument.cpp
loader/SubframeLoader.cpp
@@ -1179,6 +1168,7 @@ SET(WebCore_SOURCES
loader/TextResourceDecoder.cpp
loader/ThreadableLoader.cpp
loader/WorkerThreadableLoader.cpp
+ loader/loader.cpp
loader/appcache/ApplicationCache.cpp
loader/appcache/ApplicationCacheGroup.cpp
@@ -1192,13 +1182,21 @@ SET(WebCore_SOURCES
loader/archive/ArchiveResource.cpp
loader/archive/ArchiveResourceCollection.cpp
+ loader/cache/CachedCSSStyleSheet.cpp
+ loader/cache/CachedFont.cpp
+ loader/cache/CachedImage.cpp
+ loader/cache/CachedResource.cpp
+ loader/cache/CachedResourceClientWalker.cpp
+ loader/cache/CachedResourceHandle.cpp
+ loader/cache/CachedResourceLoader.cpp
+ loader/cache/CachedScript.cpp
+ loader/cache/CachedXSLStyleSheet.cpp
loader/cache/MemoryCache.cpp
loader/icon/IconDatabase.cpp
loader/icon/IconLoader.cpp
loader/icon/IconRecord.cpp
loader/icon/PageURLRecord.cpp
- loader/loader.cpp
page/BarInfo.cpp
page/Chrome.cpp
@@ -1222,7 +1220,6 @@ SET(WebCore_SOURCES
page/Location.cpp
page/MemoryInfo.cpp
page/MouseEventWithHitTestResults.cpp
- page/Navigation.cpp
page/Navigator.cpp
page/NavigatorBase.cpp
page/OriginAccessEntry.cpp
@@ -1230,6 +1227,8 @@ SET(WebCore_SOURCES
page/PageGroup.cpp
page/PageGroupLoadDeferrer.cpp
page/Performance.cpp
+ page/PerformanceNavigation.cpp
+ page/PerformanceTiming.cpp
page/PluginHalter.cpp
page/PrintContext.cpp
page/Screen.cpp
@@ -1237,7 +1236,6 @@ SET(WebCore_SOURCES
page/Settings.cpp
page/SpatialNavigation.cpp
page/SuspendableTimer.cpp
- page/Timing.cpp
page/UserContentURLPattern.cpp
page/WindowFeatures.cpp
page/WorkerNavigator.cpp
@@ -1481,6 +1479,7 @@ SET(WebCore_SOURCES
rendering/TextControlInnerElements.cpp
rendering/TransformState.cpp
rendering/break_lines.cpp
+
rendering/style/ContentData.cpp
rendering/style/CounterDirectives.cpp
rendering/style/FillLayer.cpp
@@ -1679,6 +1678,7 @@ if (ENABLE_FILE_SYSTEM)
fileapi/FileEntrySync.cpp
fileapi/FileSystemCallbacks.cpp
fileapi/FileWriter.cpp
+ fileapi/FileWriterSync.cpp
fileapi/LocalFileSystem.cpp
platform/AsyncFileSystem.cpp
)
@@ -1702,6 +1702,7 @@ if (ENABLE_FILE_SYSTEM)
fileapi/FileSystemCallback.idl
fileapi/FileWriterCallback.idl
fileapi/FileWriter.idl
+ fileapi/FileWriterSync.idl
fileapi/Flags.idl
fileapi/Metadata.idl
fileapi/MetadataCallback.idl
@@ -1712,7 +1713,6 @@ IF (ENABLE_SVG)
LIST(APPEND WebCore_SOURCES
bindings/js/JSSVGElementInstanceCustom.cpp
bindings/js/JSSVGLengthCustom.cpp
- bindings/js/JSSVGMatrixCustom.cpp
bindings/js/JSSVGPathSegCustom.cpp
bindings/js/JSSVGPathSegListCustom.cpp
css/SVGCSSComputedStyleDeclaration.cpp
diff --git a/WebCore/CMakeListsEfl.txt b/WebCore/CMakeListsEfl.txt
index 18fedc3..789cfdc 100644
--- a/WebCore/CMakeListsEfl.txt
+++ b/WebCore/CMakeListsEfl.txt
@@ -69,11 +69,7 @@ IF (WTF_PLATFORM_CAIRO)
LIST(APPEND WebCore_SOURCES
platform/graphics/cairo/CairoUtilities.cpp
platform/graphics/cairo/ContextShadowCairo.cpp
- platform/graphics/cairo/FontCacheFreeType.cpp
platform/graphics/cairo/FontCairo.cpp
- platform/graphics/cairo/FontCustomPlatformData.cpp
- platform/graphics/cairo/FontPlatformDataFreeType.cpp
- platform/graphics/cairo/GlyphPageTreeNodeCairo.cpp
platform/graphics/cairo/GradientCairo.cpp
platform/graphics/cairo/GraphicsContextCairo.cpp
platform/graphics/cairo/ImageBufferCairo.cpp
@@ -82,11 +78,40 @@ IF (WTF_PLATFORM_CAIRO)
platform/graphics/cairo/PathCairo.cpp
platform/graphics/cairo/PatternCairo.cpp
platform/graphics/cairo/RefPtrCairo.cpp
- platform/graphics/cairo/SimpleFontDataCairo.cpp
platform/graphics/cairo/TransformationMatrixCairo.cpp
platform/image-decoders/cairo/ImageDecoderCairo.cpp
)
+
+ IF (WTF_USE_FREETYPE)
+ LIST(APPEND WebCore_INCLUDE_DIRECTORIES
+ "${WEBCORE_DIR}/platform/graphics/freetype"
+ )
+ LIST(APPEND WebCore_SOURCES
+ platform/graphics/freetype/FontCacheFreeType.cpp
+ platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp
+ platform/graphics/freetype/FontPlatformDataFreeType.cpp
+ platform/graphics/freetype/GlyphPageTreeNodeFreeType.cpp
+ platform/graphics/freetype/SimpleFontDataFreeType.cpp
+ )
+ ENDIF ()
+
+ IF (WTF_USE_PANGO)
+ LIST(APPEND WebCore_INCLUDE_DIRECTORIES
+ "${WEBCORE_DIR}/platform/graphics/pango"
+ ${Pango_INCLUDE_DIRS}
+ )
+ LIST(APPEND WebCore_SOURCES
+ platform/graphics/pango/FontCachePango.cpp
+ platform/graphics/pango/FontCustomPlatformDataPango.cpp
+ platform/graphics/pango/FontPlatformDataPango.cpp
+ platform/graphics/pango/GlyphPageTreeNodePango.cpp
+ platform/graphics/pango/SimpleFontDataPango.cpp
+ )
+ LIST(APPEND WebCore_LIBRARIES
+ ${Pango_LIBRARIES}
+ )
+ ENDIF ()
ENDIF ()
IF (WTF_USE_SOUP)
@@ -164,7 +189,6 @@ LIST(APPEND WebCore_LIBRARIES
${ICU_LIBRARIES}
${LIBXML2_LIBRARIES}
${LIBXSLT_LIBRARIES}
- ${Pango_LIBRARIES}
${SQLITE_LIBRARIES}
)
@@ -198,7 +222,6 @@ LIST(APPEND WebCore_INCLUDE_DIRECTORIES
${ICU_INCLUDE_DIRS}
${LIBXML2_INCLUDE_DIR}
${LIBXSLT_INCLUDE_DIRS}
- ${Pango_INCLUDE_DIRS}
${SQLITE_INCLUDE_DIRS}
)
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 6bf8f3c..48756e8 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,5771 @@
+2010-11-17 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r72228.
+ http://trac.webkit.org/changeset/72228
+ https://bugs.webkit.org/show_bug.cgi?id=49712
+
+ Caused many >10 regressions on Win and Linux gpu layout test
+ runs. (Requested by dave_levin on #webkit).
+
+ * html/canvas/WebGLFramebuffer.cpp:
+ (WebCore::WebGLFramebuffer::onAccess):
+ (WebCore::WebGLFramebuffer::initializeRenderbuffers):
+ * html/canvas/WebGLFramebuffer.h:
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::clear):
+ (WebCore::WebGLRenderingContext::copyTexImage2D):
+ (WebCore::WebGLRenderingContext::copyTexSubImage2D):
+ (WebCore::WebGLRenderingContext::drawArrays):
+ (WebCore::WebGLRenderingContext::drawElements):
+ (WebCore::WebGLRenderingContext::readPixels):
+ (WebCore::WebGLRenderingContext::texImage2DBase):
+
+2010-11-17 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r72243.
+ http://trac.webkit.org/changeset/72243
+ https://bugs.webkit.org/show_bug.cgi?id=49710
+
+ Seemed to cause a large set of Chromium layout test to start
+ failing. (Requested by dave_levin on #webkit).
+
+ * bindings/v8/V8NPUtils.cpp:
+ (WebCore::convertV8ObjectToNPVariant):
+
+2010-11-17 Adam Roben <aroben@apple.com>
+
+ Fix Acid3 in Safari for Windows
+
+ Reviewed by Dave Hyatt.
+
+ * platform/graphics/win/SimpleFontDataWin.cpp:
+ (WebCore::SimpleFontData::initGDIFont): Initialize all our metrics to 0
+ if we have a font size of 0.
+
+2010-11-17 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Converge means of querying a parent node into one way, which is Node::parentNode.
+ https://bugs.webkit.org/show_bug.cgi?id=49686
+
+ No change in behavior, so no new tests.
+
+ * accessibility/AccessibilityObject.cpp:
+ (WebCore::renderListItemContainerForNode): Changed to use parentNode.
+ * accessibility/AccessibilityRenderObject.cpp:
+ (WebCore::AccessibilityRenderObject::mouseButtonListener): Ditto.
+ (WebCore::siblingWithAriaRole): Ditto.
+ (WebCore::AccessibilityRenderObject::getDocumentLinks): Ditto.
+ (WebCore::AccessibilityRenderObject::accessibilityImageMapHitTest): Ditto.
+ * accessibility/mac/AccessibilityObjectWrapper.mm: Ditto.
+ (blockquoteLevel): Ditto.
+ * bindings/v8/V8GCController.cpp:
+ (WebCore::ObjectGrouperVisitor::visitDOMWrapper): Ditto.
+ * dom/ContainerNode.cpp: Ditto.
+ (WebCore::ContainerNode::insertBefore): Ditto.
+ (WebCore::ContainerNode::insertBeforeCommon): Ditto.
+ (WebCore::ContainerNode::replaceChild): Ditto.
+ (WebCore::ContainerNode::removeChild): Ditto.
+ (WebCore::ContainerNode::appendChild): Ditto.
+ (WebCore::ContainerNode::parserAddChild): Ditto.
+ * dom/DocumentType.cpp:
+ (WebCore::DocumentType::insertedIntoDocument): Ditto.
+ * dom/Element.cpp:
+ (WebCore::Element::computeInheritedLanguage): Ditto.
+ * dom/MouseRelatedEvent.cpp:
+ (WebCore::MouseRelatedEvent::receivedTarget): Ditto.
+ * dom/Position.cpp:
+ (WebCore::Position::isCandidate): Changed to use parentNode.
+ * dom/PositionIterator.cpp:
+ (WebCore::PositionIterator::isCandidate): Ditto.
+ * editing/AppendNodeCommand.cpp:
+ (WebCore::AppendNodeCommand::AppendNodeCommand): Ditto.
+ * editing/ApplyStyleCommand.cpp:
+ (WebCore::dummySpanAncestorForNode): Ditto.
+ (WebCore::ApplyStyleCommand::splitAncestorsWithUnicodeBidi): Ditto.
+ (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock): Ditto.
+ (WebCore::highestEmbeddingAncestor): Ditto.
+ (WebCore::ApplyStyleCommand::splitTextElementAtEnd): Ditto.
+ (WebCore::ApplyStyleCommand::mergeStartWithPreviousIfIdentical): Ditto.
+ (WebCore::ApplyStyleCommand::mergeEndWithNextIfIdentical): Ditto.
+ * editing/CompositeEditCommand.cpp:
+ (WebCore::CompositeEditCommand::splitTreeToNode): Ditto.
+ * editing/DeleteSelectionCommand.cpp:
+ (WebCore::updatePositionForNodeRemoval): Ditto.
+ * editing/Editor.cpp:
+ (WebCore::Editor::textDirectionForSelection): Ditto.
+ * editing/MergeIdenticalElementsCommand.cpp:
+ (WebCore::MergeIdenticalElementsCommand::doUnapply): Ditto.
+ * editing/htmlediting.cpp:
+ (WebCore::isEmptyTableCell): Ditto.
+ * editing/markup.cpp:
+ (WebCore::StyledMarkupAccumulator::serializeNodes): Ditto.
+ * editing/visible_units.cpp:
+ (WebCore::previousLinePosition): Ditto.
+ (WebCore::nextLinePosition): Ditto.
+ * html/HTMLAreaElement.cpp:
+ (WebCore::HTMLAreaElement::imageElement): Ditto.
+ * html/HTMLElement.cpp:
+ (WebCore::HTMLElement::setOuterHTML): Ditto.
+ (WebCore::HTMLElement::insertAdjacent): Ditto.
+ (WebCore::HTMLElement::supportsFocus): Ditto.
+ * html/HTMLEmbedElement.cpp:
+ (WebCore::HTMLEmbedElement::insertedIntoDocument): Ditto.
+ (WebCore::HTMLEmbedElement::attributeChanged): Ditto.
+ * html/HTMLTableElement.cpp:
+ (WebCore::HTMLTableElement::insertRow): Ditto.
+ * html/HTMLTableRowsCollection.cpp: Ditto.
+ (WebCore::isInHead): Ditto.
+ (WebCore::isInBody): Ditto.
+ (WebCore::isInFoot): Ditto.
+ (WebCore::HTMLTableRowsCollection::rowAfter): Ditto.
+ * html/HTMLViewSourceDocument.cpp:
+ (WebCore::HTMLViewSourceDocument::addRange): Ditto.
+ * html/MediaDocument.cpp:
+ (WebCore::MediaDocument::replaceMediaElementTimerFired): Ditto.
+ * html/parser/HTMLConstructionSite.cpp:
+ (WebCore::HTMLConstructionSite::attach): Ditto.
+ (WebCore::HTMLConstructionSite::findFosterSite): Ditto.
+ * html/parser/HTMLTreeBuilder.cpp:
+ * page/FocusController.cpp:
+ (WebCore::FocusController::findFocusableNodeInDirection): Ditto.
+ * rendering/MediaControlElements.cpp:
+ (WebCore::MediaControlElement::rendererIsNeeded): Ditto.
+ (WebCore::MediaControlElement::attach): Ditto.
+ (WebCore::MediaControlElement::updateStyle): Ditto.
+ (WebCore::MediaControlInputElement::rendererIsNeeded): Ditto.
+ (WebCore::MediaControlInputElement::attach): Ditto.
+ (WebCore::MediaControlInputElement::updateStyle): Ditto.
+ * rendering/RenderSVGGradientStop.cpp:
+ (WebCore::RenderSVGGradientStop::gradientElement): Ditto.
+ * svg/SVGAElement.cpp:
+ (WebCore::SVGAElement::createRenderer): Ditto.
+ (WebCore::SVGAElement::childShouldCreateRenderer): Ditto.
+ * svg/SVGFELightElement.cpp:
+ (WebCore::SVGFELightElement::svgAttributeChanged): Ditto.
+ (WebCore::SVGFELightElement::childrenChanged): Ditto.
+ * svg/SVGFEMergeNodeElement.cpp:
+ (WebCore::SVGFEMergeNodeElement::svgAttributeChanged): Ditto.
+ * svg/SVGLength.cpp:
+ (WebCore::SVGLength::determineViewport): Ditto.
+ * svg/SVGStyledElement.cpp:
+ (WebCore::SVGStyledElement::updateRelativeLengthsInformation): Ditto.
+ * svg/SVGUseElement.cpp:
+ (WebCore::SVGUseElement::removeDisallowedElementsFromSubtree): Ditto.
+ * svg/animation/SVGSMILElement.cpp:
+ (WebCore::SVGSMILElement::insertedIntoDocument): Ditto.
+ * xml/XPathNodeSet.cpp:
+ (WebCore::XPath::NodeSet::sort): Ditto.
+ * xml/XPathStep.cpp:
+ (WebCore::XPath::Step::nodesInAxis): Ditto.
+ * xml/XSLTProcessorLibxslt.cpp:
+ (WebCore::xsltStylesheetPointer): Ditto.
+
+2010-11-17 Kenneth Rohde Christiansen <kenneth@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ ScrollView: Don't translate by scrollX/scrollY or clip when paintsEntireContents()
+
+ This makes paint() with paintEntireContents() do exactly what it's supposed to:
+ paint from 0,0 to contentsSize().
+
+ The clipping was a no-op anyway since visibleContentRect() will return the whole
+ rect in paintsEntireContents() mode.
+
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::paint):
+
+2010-11-17 Kenneth Rohde Christansen <kenneth@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ ScrollView: Update the actualVisibleContentRect after delegating a scroll.
+
+ This lets us avoid updating the actualVisibleContentRect from the client
+ after each scroll. We had to do this synchronously for WebKit2 to support
+ programmatic "animated scrolling" from JS.
+
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::setScrollPosition):
+
+2010-11-17 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ ScrollView: Decouple actualVisibleContentRect from visibleContentRect
+
+ Added actualVisibleContentRect() which will return the override provided
+ by setActualVisibleContentRect() or fall back to visibleContentRect()
+ if no override has been set.
+
+ This is similar to what the iPhone does.
+
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::visibleContentRect):
+ * platform/ScrollView.h:
+ (WebCore::ScrollView::actualVisibleContentRect):
+ (WebCore::ScrollView::setActualVisibleContentRect): IntRect -> const IntRect&
+
+2010-11-17 Tony Chang <tony@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ [chromium] fix get-int-identifier-special-values.html using TestNetscapePlugIn
+ https://bugs.webkit.org/show_bug.cgi?id=49036
+
+ No new tests: Covered by plugins/npruntime/get-int-identifier-special-values.html
+
+ In http://codereview.chromium.org/11574, the forked chromium test
+ plugin changed how it testGetIntIdentifier to work around a change
+ caused by a silverlight specific plugin fix:
+ http://codereview.chromium.org/11569/diff/1/2
+
+ It's not clear to me that this change is needed anymore since
+ silverlight has had multiple releases, testing without this patch
+ works on a test windows build, and safari win seems to run silverlight
+ without this either. Since there's no test for this behavior, I'm
+ rolling it out so we can match the upstream test.
+
+ * bindings/v8/V8NPUtils.cpp:
+ (WebCore::convertV8ObjectToNPVariant):
+
+2010-11-17 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ ScrollView: Let visibleContentRect() return the contentsSize() if paintsEntireContents()
+
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::visibleContentRect):
+
+2010-11-17 James Simonsen <simonjam@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ [chromium] Fix negative letter spacing in complex text on linux
+ https://bugs.webkit.org/show_bug.cgi?id=49563
+
+ Test: fast/text/atsui-negative-spacing-features.html
+
+ * platform/graphics/chromium/FontLinux.cpp: Make spacing signed.
+
+2010-11-17 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ ScrollView: Avoid unnecessary work in setScrollPosition() when scrolling is delegated.
+
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::setScrollPosition): If delegatesScrolling(), we never use the
+ newScrollPosition, so move that calculation below the delegation path.
+
+2010-11-17 Dave Hyatt <hyatt@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ https://bugs.webkit.org/show_bug.cgi?id=48537
+
+ Fonts with no vertical metrics should synthesize baselines when they appear
+ on lines that do use fonts with vertical metrics. Basically we want to make
+ sure that English text behaves like vertical-align:middle, i.e., its baseline
+ should be treated as though it cuts through the middle of the ascent+descent.
+
+ The way this works is that each line in the line box tree is labeled as having
+ a baseline type that is either ideographic or alphabetic for the purposes of
+ vertical alignment. A line becomes ideographic if any font with vertical tables
+ is either explicitly specified as the primary font or in any of the used fonts
+ in the text on that line.
+
+ This baselineType is passed down to computeLogicalBoxHeights and placeBoxesInBlockDirection,
+ and passed to the ascent and descent methods of the fonts that are examined.
+ The underlying Font code selects an appropriate baseline given the type passed in.
+
+ This patch also rewrites vertical alignment to lop 4 bytes off all RenderInlines and
+ to instead carry around the cached vertical positions for RenderInlines in a new
+ VerticalPositionCache object. This cache only lives for a single layout
+ operation, but it does cache information across all the lines built and placed during the
+ layout.
+
+ This matches the old behavior, since every call to layoutInlineChildren invalidated
+ all of the vertical positions in all of the RenderInlines anyway.
+
+ The VerticalPositionCache consists of two HashMaps, and it caches vertical alignment
+ positions for both alphabetic and ideographic baseline types.
+
+ The vertical-align computation has now been moved out of RenderBoxModelObject and
+ RenderInline and just placed right into verticalPositionForBox in InlineFlowBox.
+ This function has been changed to no longer be recursive when checking parents,
+ and it now relies on the fact that the parent vertical alignment computation result
+ has already been stored in the logicalTop() of that parent's line box. By checking
+ the line box logicalTop() value instead of recurring, the performance of first lines
+ now significantly improves to no longer have O(n^2) behavior in the depth of the line
+ box tree on the first line.
+
+ All of the baselinePosition functions on the various RenderObjects have been amended
+ to take a FontBaseline as the first argument. This patch does not attempt to fix up
+ MathML or form controls yet and just hardcodes AlphabeticBaselines for those renderers.
+
+ The RenderTableCell baselinePosition virtual method has been made non-virtual and had
+ all arguments removed, since it actually had no real connection with the rest of the
+ baseline positioning system. Cell baseline positioning works by calling firstLineBoxBaseline,
+ and that method has been patched to use the cached baselineType for the first line box
+ when computing the baseline of that line.
+
+ Added fast/blockflow/vertical-baseline-alignment.html and fast/blockflow/vertical-align-table-baseline.html.
+
+ * WebCore.xcodeproj/project.pbxproj:
+ * mathml/RenderMathMLFraction.cpp:
+ (WebCore::RenderMathMLFraction::baselinePosition):
+ * mathml/RenderMathMLFraction.h:
+ * mathml/RenderMathMLOperator.cpp:
+ (WebCore::RenderMathMLOperator::baselinePosition):
+ * mathml/RenderMathMLOperator.h:
+ * mathml/RenderMathMLRow.cpp:
+ (WebCore::RenderMathMLRow::baselinePosition):
+ * mathml/RenderMathMLRow.h:
+ * mathml/RenderMathMLSubSup.cpp:
+ (WebCore::RenderMathMLSubSup::baselinePosition):
+ * mathml/RenderMathMLSubSup.h:
+ * mathml/RenderMathMLUnderOver.cpp:
+ (WebCore::RenderMathMLUnderOver::layout):
+ (WebCore::RenderMathMLUnderOver::baselinePosition):
+ * mathml/RenderMathMLUnderOver.h:
+ * platform/graphics/SimpleFontData.h:
+ * rendering/InlineBox.h:
+ (WebCore::InlineBox::baselinePosition):
+ * rendering/InlineFlowBox.cpp:
+ (WebCore::verticalPositionForBox):
+ (WebCore::InlineFlowBox::computeLogicalBoxHeights):
+ (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
+ * rendering/InlineFlowBox.h:
+ * rendering/InlineTextBox.cpp:
+ (WebCore::InlineTextBox::baselinePosition):
+ * rendering/InlineTextBox.h:
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::baselinePosition):
+ (WebCore::RenderBlock::firstLineBoxBaseline):
+ (WebCore::RenderBlock::lastLineBoxBaseline):
+ * rendering/RenderBlock.h:
+ * rendering/RenderBlockLineLayout.cpp:
+ (WebCore::RenderBlock::computeBlockDirectionPositionsForLine):
+ (WebCore::RenderBlock::layoutInlineChildren):
+ * rendering/RenderBox.cpp:
+ (WebCore::RenderBox::baselinePosition):
+ * rendering/RenderBox.h:
+ * rendering/RenderBoxModelObject.cpp:
+ * rendering/RenderBoxModelObject.h:
+ * rendering/RenderFileUploadControl.cpp:
+ (WebCore::RenderFileUploadControl::paintObject):
+ * rendering/RenderInline.cpp:
+ (WebCore::RenderInline::RenderInline):
+ (WebCore::RenderInline::baselinePosition):
+ * rendering/RenderInline.h:
+ * rendering/RenderListBox.cpp:
+ (WebCore::RenderListBox::baselinePosition):
+ * rendering/RenderListBox.h:
+ * rendering/RenderListMarker.cpp:
+ (WebCore::RenderListMarker::baselinePosition):
+ * rendering/RenderListMarker.h:
+ * rendering/RenderSlider.cpp:
+ (WebCore::RenderSlider::baselinePosition):
+ * rendering/RenderSlider.h:
+ * rendering/RenderTableCell.cpp:
+ (WebCore::RenderTableCell::baselinePosition):
+ * rendering/RenderTableCell.h:
+ * rendering/RenderTextControlMultiLine.cpp:
+ (WebCore::RenderTextControlMultiLine::baselinePosition):
+ * rendering/RenderTextControlMultiLine.h:
+ * rendering/RootInlineBox.cpp:
+ (WebCore::RootInlineBox::alignBoxesInBlockDirection):
+ * rendering/RootInlineBox.h:
+ (WebCore::RootInlineBox::baselinePosition):
+ * rendering/VerticalPositionCache.h: Added.
+ (WebCore::VerticalPositionCache::VerticalPositionCache):
+ (WebCore::VerticalPositionCache::get):
+ (WebCore::VerticalPositionCache::set):
+ * rendering/svg/SVGInlineTextBox.cpp:
+ (WebCore::SVGInlineTextBox::calculateBoundaries):
+
+2010-11-17 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Add stubbed out ScrollAnimator for the Mac
+ https://bugs.webkit.org/show_bug.cgi?id=49678
+
+ * WebCore.xcodeproj/project.pbxproj:
+ Add ScrollAnimator.h/cpp.
+
+ * platform/mac/ScrollAnimatorMac.cpp: Added.
+ (WebCore::ScrollAnimator::create):
+ (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
+ (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):
+ (WebCore::ScrollAnimatorMac::scroll):
+ (WebCore::ScrollAnimatorMac::setScrollPositionAndStopAnimation):
+ * platform/mac/ScrollAnimatorMac.h: Added.
+ ScrollAnimatorMac just calls through to the base class for now.
+
+2010-11-17 Cris Neckar <cdn@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Modified codepath for object fallback content which has failed to load.
+ Refactored CachedResource error handling to use more granular statuses instead of a boolean value.
+ https://bugs.webkit.org/show_bug.cgi?id=46921
+
+ Test: fast/html/object-image-nested-fallback.html
+
+ * html/HTMLObjectElement.cpp:
+ (WebCore::HTMLObjectElement::renderFallbackContent):
+ * loader/cache/CachedCSSStyleSheet.cpp:
+ (WebCore::CachedCSSStyleSheet::error):
+ * loader/cache/CachedCSSStyleSheet.h:
+ * loader/cache/CachedFont.cpp:
+ (WebCore::CachedFont::ensureCustomFontData):
+ (WebCore::CachedFont::error):
+ * loader/cache/CachedFont.h:
+ * loader/cache/CachedImage.cpp:
+ (WebCore::CachedImage::data):
+ (WebCore::CachedImage::error):
+ * loader/cache/CachedImage.h:
+ * loader/cache/CachedResource.cpp:
+ (WebCore::CachedResource::CachedResource):
+ (WebCore::CachedResource::canUseCacheValidator):
+ (WebCore::CachedResource::mustRevalidate):
+ * loader/cache/CachedResource.h:
+ (WebCore::CachedResource::error):
+ (WebCore::CachedResource::httpStatusCodeError):
+ (WebCore::CachedResource::errorOccurred):
+ * loader/cache/CachedScript.cpp:
+ (WebCore::CachedScript::error):
+ * loader/cache/CachedScript.h:
+ * loader/cache/CachedXSLStyleSheet.cpp:
+ (WebCore::CachedXSLStyleSheet::error):
+ * loader/cache/CachedXSLStyleSheet.h:
+ * loader/loader.cpp:
+ (WebCore::Loader::load):
+ (WebCore::Loader::didFinishLoading):
+ (WebCore::Loader::didFail):
+ (WebCore::Loader::didReceiveData):
+
+2010-11-16 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ WebGLRenderingContext needs to zero textures and renderbuffers
+ https://bugs.webkit.org/show_bug.cgi?id=49355
+
+ Test: fast/canvas/webgl/uninitialized-test.html
+
+ * html/canvas/WebGLFramebuffer.cpp:
+ (WebCore::WebGLFramebuffer::onAccess): Use a parameter to decide if renderbuffer initialization is needed.
+ (WebCore::WebGLFramebuffer::initializeRenderbuffers): Don't return false if color buffer doesn't exist.
+ * html/canvas/WebGLFramebuffer.h: Modify onAccess function signature.
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::clear): Call onAccess with an added parameter.
+ (WebCore::WebGLRenderingContext::copyTexImage2D): Ditto.
+ (WebCore::WebGLRenderingContext::copyTexSubImage2D): Ditto.
+ (WebCore::WebGLRenderingContext::drawArrays): Ditto.
+ (WebCore::WebGLRenderingContext::drawElements): Ditto.
+ (WebCore::WebGLRenderingContext::readPixels): Ditto.
+ (WebCore::WebGLRenderingContext::texImage2DBase): Create buffer data of 0s if input is null to initialize textures.
+
+2010-11-17 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Merge ScriptElement and ScriptElementData
+ https://bugs.webkit.org/show_bug.cgi?id=49647
+
+ Merged two classes.
+
+ * dom/AsyncScriptRunner.cpp:
+ (WebCore::AsyncScriptRunner::executeScriptSoon): Takes ScriptElement* instead of ScriptElementData*.
+ (WebCore::AsyncScriptRunner::timerFired): Uses ScriptElement* instead of ScriptElementData*.
+ * dom/AsyncScriptRunner.h:
+ * dom/ScriptElement.cpp:
+ (WebCore::ScriptElement::ScriptElement): Merged with ScriptElementData::ScriptElementData.
+ (WebCore::ScriptElement::~ScriptElement): Merged with ScriptElementData::~ScriptElementData.
+ (WebCore::ScriptElement::insertedIntoDocument): Calls createdByParser, isAsynchronous, requestScript, and scriptContent.
+ (WebCore::ScriptElement::removedFromDocument): Calls stopLoadRequest.
+ (WebCore::ScriptElement::childrenChanged): Calls createdByParser and accesses m_element.
+ (WebCore::ScriptElement::finishParsingChildren): Calls scriptContent.
+ (WebCore::ScriptElement::handleSourceAttribute): Calls ignoresLoadRequest and requestScript.
+ (WebCore::ScriptElement::requestScript): Moved from ScriptElementData; calls dispatchErrorEvent.
+ (WebCore::ScriptElement::evaluateScript): Moved from ScriptElementData.
+ (WebCore::ScriptElement::executeScript): Ditto.
+ (WebCore::ScriptElement::stopLoadRequest): Ditto.
+ (WebCore::ScriptElement::execute): Moved from ScriptElementData; calls dispatchErrorEvent and dispatchLoadEvent.
+ (WebCore::ScriptElement::notifyFinished): Moved from ScriptElementData.
+ (WebCore::ScriptElement::ignoresLoadRequest): Ditto.
+ (WebCore::ScriptElement::shouldExecuteAsJavaScript): Moved from ScriptElementData; calls typeAttributeValue, languageAttributeValue,
+ forAttributeValue, and eventAttributeValue.
+ (WebCore::ScriptElement::scriptCharset): Moved from ScriptElementData.
+ (WebCore::ScriptElement::scriptContent): Ditto.
+ (WebCore::ScriptElement::isAsynchronous): Moved from ScriptElementData; calls sourceAttributeValue and asyncAttributeValue.
+ (WebCore::ScriptElement::isDeferred): Moved from ScriptElementData; calls sourceAttributeValue, asyncAttributeValue,
+ and deferAttributeValue.
+ * dom/ScriptElement.h:
+ (WebCore::ScriptElement::element):
+ (WebCore::ScriptElement::haveFiredLoadEvent):
+ (WebCore::ScriptElement::setHaveFiredLoadEvent):
+ (WebCore::ScriptElement::createdByParser):
+ (WebCore::ScriptElement::isEvaluated):
+
+2010-11-17 Tenghui Zhu <ztenghui@google.com>
+
+ Reviewed by Jeremy Orlow.
+
+ profileCallback and profileEndCallback should be guarded with ENABLE_JAVASCRIPT_DEBUGGER
+ https://bugs.webkit.org/show_bug.cgi?id=49623
+
+ No new tests. Just a compiling error fix.
+
+ * bindings/v8/custom/V8ConsoleCustom.cpp:
+ Add the guard ENABLE_JAVA_SCRIPT_DEBUGGER to profileCallback and profileEndCallback
+
+2010-11-17 John Knottenbelt <jknotten@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ Introduce GeoNotifierVector typedef for increased readability
+ https://bugs.webkit.org/show_bug.cgi?id=49597
+
+ * page/Geolocation.cpp:
+ (WebCore::Geolocation::Watchers::getNotifiersVector):
+ (WebCore::Geolocation::sendError):
+ (WebCore::Geolocation::sendPosition):
+ (WebCore::Geolocation::stopTimer):
+ (WebCore::Geolocation::stopTimersForOneShots):
+ (WebCore::Geolocation::stopTimersForWatchers):
+ (WebCore::Geolocation::cancelRequests):
+ (WebCore::Geolocation::cancelAllRequests):
+ (WebCore::Geolocation::handleError):
+ (WebCore::Geolocation::makeSuccessCallbacks):
+ * page/Geolocation.h:
+
+2010-11-17 John Knottenbelt <jknotten@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ Convert correctly between GeolocationPosition and Geoposition
+ timestamp formats.
+ https://bugs.webkit.org/show_bug.cgi?id=48518
+
+ Test: fast/dom/Geolocation/timestamp.html
+
+ * page/Geolocation.cpp:
+ (WebCore::createGeoposition):
+
+2010-11-17 Chang Shu <chang.shu@nokia.com>
+
+ Reviewed by Antonio Gomes.
+
+ [Mac] Suppress single select popup menu when spatial navigation is enabled on Mac.
+ This makes spatial navigation work properly for single select box.
+
+ Test: fast/events/spatial-navigation/snav-single-select.html
+
+ * dom/SelectElement.cpp:
+ (WebCore::nextValidIndex):
+ (WebCore::SelectElement::menuListDefaultEventHandler):
+
+2010-11-17 Satish Sampath <satish@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ Clear the speech input mock explicitly before each test.
+ https://bugs.webkit.org/show_bug.cgi?id=49660
+
+ * platform/mock/SpeechInputClientMock.cpp:
+ (WebCore::SpeechInputClientMock::clearResults): Added clearResults method.
+ * platform/mock/SpeechInputClientMock.h:
+
+2010-11-17 Alexander Pavlov <apavlov@chromium.org>
+
+ [Chromium] Unreviewed, fix Chromium-Mac build from r72189.
+
+ * css/CSSPrimitiveValue.cpp:
+ (WebCore::CSSPrimitiveValue::getDoubleValue):
+
+2010-11-17 Hans Wennborg <hans@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ IndexedDB: IDBKey::whereSyntax should impose conditions on all columns
+ https://bugs.webkit.org/show_bug.cgi?id=49601
+
+ The WHERE clause should specifiy a condition for each key column to
+ make sure that the ObjectStoreData_composit index can be used when
+ querying the object store based on key. Not using the index causes
+ severe performance degradation for common IDB operations.
+
+ * storage/IDBKey.cpp:
+ (WebCore::IDBKey::whereSyntax):
+
+2010-11-17 Eric Uhrhane <ericu@chromium.org>
+
+ Reviewed by David Levin.
+
+ [Chromium] implementation of async FileWriter for workers
+ https://bugs.webkit.org/show_bug.cgi?id=47681
+
+ Tests are in a separate changelist.
+
+ * platform/CrossThreadCopier.h: Changed CrossThreadCopier[Base] to support PassRefPtrs
+
+2010-11-17 Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [gtk] r69119 modified just the gtk2 version of the
+ scrolled_window_paint function but not the gtk3 version
+ https://bugs.webkit.org/show_bug.cgi?id=49585
+
+ Use gtk_paint_shadow the same as the actual code from GTK+. Avoid
+ using state and use the same values we are using for gtk2 in the
+ paint function.
+
+ * platform/gtk/ScrollbarThemeGtk.cpp:
+ (WebCore::ScrollbarThemeGtk::paintButton): Initialized the
+ depressed attribute of the state variable to avoid using it
+ without initialization.
+ * platform/gtk/gtk3drawing.c:
+ (moz_gtk_scrolled_window_paint):
+
+2010-11-16 Alexander Pavlov <apavlov@chromium.org>
+
+ Reviewed by Simon Fraser.
+
+ CSSPrimitiveValue.getFloatValue does not convert sizes
+ https://bugs.webkit.org/show_bug.cgi?id=35770
+
+ Implemented all same-category unit conversions (length, angle, time, frequency) and retained
+ absolute-relative (cm, mm, in, pt, pc) length conversions intact.
+ Illegal unit conversion attempts will throw an INVALID_ACCESS_ERR DOMException.
+
+ * css/CSSPrimitiveValue.cpp:
+ (WebCore::unitCategory):
+ (WebCore::conversionToCanonicalUnitsScaleFactor):
+ (WebCore::CSSPrimitiveValue::getDoubleValue):
+ (WebCore::CSSPrimitiveValue::canonicalUnitTypeForCategory):
+ (WebCore::CSSPrimitiveValue::getDoubleValueInternal):
+ (WebCore::CSSPrimitiveValue::getIdent):
+ * css/CSSPrimitiveValue.h:
+ (WebCore::CSSPrimitiveValue::getFloatValue):
+ (WebCore::CSSPrimitiveValue::getIntValue):
+
+2010-11-17 Ademar de Souza Reis Jr. <ademar.reis@openbossa.org>
+
+ Reviewed by Andreas Kling.
+
+ Document::nodesFromRect() has wrong source code documentation
+ https://bugs.webkit.org/show_bug.cgi?id=49610
+
+ * dom/Document.h: fix nodesFromRect() documentation
+
+2010-11-17 Alexis Menard <alexis.menard@nokia.com>, Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Kenneth Christiansen, Tor Arne Vestbø.
+
+ [Qt] Add support for use GStreamer with the Qt build
+
+ Make it possible to use gstreamer with the Qt build via the USE_GSTREAMER macro. The
+ integration is rather basic at this point, allowing for software based rendering
+ only at the moment. AC integration and fullscreen playback is still missing.
+
+ * WebCore.pro: Added a bunch of gstreamer files to the build and guard it as a
+ build option with the USE_GSTREAMER macro.
+ * platform/graphics/MediaPlayer.cpp:
+ (WebCore::installedMediaEngines): Don't use the generic media player registration
+ when using GStreamer. These #ifdefs should be removed, but the gstreamer folks want
+ to be able to build with gstreamer _and_ another backend simultaenously.
+ * platform/graphics/gstreamer/ImageGStreamer.h:
+ * platform/graphics/gstreamer/ImageGStreamerQt.cpp: Added.
+ (ImageGStreamer::createImage):
+ (ImageGStreamer::ImageGStreamer):
+ (ImageGStreamer::~ImageGStreamer):
+ * platform/graphics/gstreamer/PlatformVideoWindowPrivate.h: Added.
+ * platform/graphics/gstreamer/PlatformVideoWindowQt.cpp: Added.
+ (FullScreenVideoWindow::FullScreenVideoWindow):
+ (FullScreenVideoWindow::keyPressEvent):
+ (FullScreenVideoWindow::event):
+ (PlatformVideoWindow::PlatformVideoWindow):
+ (PlatformVideoWindow::~PlatformVideoWindow):
+ (PlatformVideoWindow::prepareForOverlay):
+
+2010-11-17 Alexander Pavlov <apavlov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: [REGRESSION] editing disabled styles breaks style bodies.
+ https://bugs.webkit.org/show_bug.cgi?id=49602
+
+ * inspector/InspectorStyleSheet.cpp:
+ (WebCore::InspectorStyle::setPropertyText):
+ * inspector/front-end/StylesSidebarPane.js:
+ (WebInspector.StylePropertyTreeElement.prototype.get name):
+ (WebInspector.StylePropertyTreeElement.prototype.get priority):
+ (WebInspector.StylePropertyTreeElement.prototype.get value):
+
+2010-11-16 Adam Roben <aroben@apple.com>
+
+ Move QTMovieWin's settings into a vsprops file
+
+ Fixes <http://webkit.org/b/49644> QTMovieWin should use a vsprops file
+
+ Reviewed by Steve Falkenburg.
+
+ * WebCore.vcproj/QTMovieWin.vcproj:
+ * WebCore.vcproj/QTMovieWinCommon.vsprops: Added.
+
+2010-11-16 Andy Estes <aestes@apple.com>
+
+ Reviewed by Dave Hyatt.
+
+ WebKit mishandles line boxes where the content height exceeds the
+ specified line-height.
+ https://bugs.webkit.org/show_bug.cgi?id=49410
+
+ If a line height is explicitly specified on a text box and fallback
+ fonts are in use, only the primary font should be considered when
+ computing the box's ascent and descent. This prevents the inline box
+ from being sized larger than the specified line height.
+
+ This patch also fixes a math error when computing a used font's descent
+ in the case where line height isn't explicitly set. This change results
+ in a number of layout tests needing re-baselining.
+
+ Test: fast/css/line-height-determined-by-primary-font.html
+
+ * rendering/InlineFlowBox.cpp:
+ (WebCore::InlineFlowBox::computeLogicalBoxHeights):
+
+2010-11-15 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ ScriptElementData should be a private member of ScriptElement
+ https://bugs.webkit.org/show_bug.cgi?id=49578
+
+ Privatized m_data of ScriptElement. Added haveFiredLoadEvent, setHaveFiredLoadEvent, createdByParser,
+ and isEvaluated to ScriptElement to proxy calls from HTMLScriptElement and SVGScriptElement to ScriptElementData.
+
+ No tests are added since this is a cleanup.
+
+ * dom/ScriptElement.h:
+ (WebCore::ScriptElement::haveFiredLoadEvent): Added.
+ (WebCore::ScriptElement::setHaveFiredLoadEvent): Added.
+ (WebCore::ScriptElement::createdByParser): Added.
+ (WebCore::ScriptElement::isEvaluated): Added.
+ * html/HTMLScriptElement.cpp:
+ (WebCore::HTMLScriptElement::dispatchLoadEvent): Calls haveFiredLoadEvent and setHaveFiredLoadEvent.
+ (WebCore::HTMLScriptElement::cloneElementWithoutAttributesAndChildren): Calls isEvaluated.
+ * html/HTMLScriptElement.h:
+ (WebCore::HTMLScriptElement::text): Calls scriptContent.
+ (WebCore::HTMLScriptElement::haveFiredLoadEvent): Calls haveFiredLoadEvent.
+ * svg/SVGScriptElement.cpp:
+ (WebCore::SVGScriptElement::svgAttributeChanged): Calls haveFiredLoadEvent and createdByParser.
+ (WebCore::SVGScriptElement::insertedIntoDocument): Calls createdByParser.
+ (WebCore::SVGScriptElement::finishParsingChildren): Calls setHaveFiredLoadEvent.
+ (WebCore::SVGScriptElement::haveLoadedRequiredResources): Ditto.
+ (WebCore::SVGScriptElement::dispatchLoadEvent): Calls haveFiredLoadEvent.
+ (WebCore::SVGScriptElement::cloneElementWithoutAttributesAndChildren): Calls createdByParser,
+ haveFiredLoadEvent, and setHaveFiredLoadEvent.
+
+2010-11-16 Antti Koivisto <antti@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49320
+ Minor ResourceLoadScheduler cleanups
+
+ * loader/ResourceLoadScheduler.cpp:
+ (WebCore::ResourceLoadScheduler::scheduleLoad):
+ (WebCore::ResourceLoadScheduler::servePendingRequests):
+ (WebCore::ResourceLoadScheduler::HostInformation::~HostInformation):
+ (WebCore::ResourceLoadScheduler::HostInformation::remove):
+ (WebCore::ResourceLoadScheduler::HostInformation::hasRequests):
+ * loader/ResourceLoadScheduler.h:
+
+2010-11-16 Dave Hyatt <hyatt@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add a baselineType member to RootInlineBox that caches whether the default baseline behavior for that
+ line should be ideographic or alphabetic. Add a requiresIdeographicsBaseline recursive function to
+ InlineFlowBox that scans for the use of any vertical fonts.
+
+ * rendering/InlineFlowBox.cpp:
+ (WebCore::InlineFlowBox::requiresIdeographicBaseline):
+ * rendering/InlineFlowBox.h:
+ * rendering/RootInlineBox.cpp:
+ (WebCore::RootInlineBox::RootInlineBox):
+ (WebCore::RootInlineBox::alignBoxesInBlockDirection):
+ * rendering/RootInlineBox.h:
+ (WebCore::RootInlineBox::baselineType):
+
+2010-11-16 Dave Hyatt <hyatt@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add FontBaseline.h and make ascent and descent take a baseline parameter so that both an
+ alphabetic and ideographic baseline can be requested.
+
+ * WebCore.xcodeproj/project.pbxproj:
+ * platform/graphics/Font.h:
+ (WebCore::Font::ascent):
+ (WebCore::Font::descent):
+ * platform/graphics/FontBaseline.h: Added.
+ * platform/graphics/SimpleFontData.h:
+ (WebCore::SimpleFontData::ascent):
+ (WebCore::SimpleFontData::descent):
+ (WebCore::SimpleFontData::height):
+
+2010-11-16 Antti Koivisto <koivisto@iki.fi>
+
+ Reviewed by Adam Barth.
+
+ https://bugs.webkit.org/show_bug.cgi?id=31223
+ Make primitive values immutable.
+
+ Make CSSPrimitiveValue setFloatValue and setStringValue always throw NO_MODIFICATION_ALLOWED exception.
+
+ Reasoning:
+ - these setters never worked correctly, style was not invalidated so changing values would have no effect on rendering
+ - computed style is immutable in all cases, and it wasn't
+ - no other engine seems to support mutable primitives, as a result there is no content using these APIs
+ - mutable primitive values are pointless, the usual way to change the value of a propertly is to replace it with a new value
+ - allowing mutation of primitive values makes optimizations harder
+
+ * css/CSSPrimitiveValue.cpp:
+ (WebCore::CSSPrimitiveValue::setFloatValue):
+ (WebCore::CSSPrimitiveValue::setStringValue):
+
+2010-11-16 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Disable LTCG for Windows Release builds. Add new Release_LTCG configuration.
+ https://bugs.webkit.org/show_bug.cgi?id=49632
+
+ * WebCore.vcproj/QTMovieWin.vcproj:
+ * WebCore.vcproj/WebCore.make:
+ * WebCore.vcproj/WebCore.sln:
+ * WebCore.vcproj/WebCore.vcproj:
+
+2010-11-16 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by John Sullivan.
+
+ Set the original URL for downloads
+ https://bugs.webkit.org/show_bug.cgi?id=49628
+
+ Export symbols needed by WebKit2.
+
+ * WebCore.exp.in:
+
+2010-11-16 Dave Hyatt <hyatt@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=11004
+
+ font-size:0 is ignored. Remove the minimum font size of 1 in CSSStyleSelector.
+ Change the pref value for minimum font size from 1 to 0. Make sure to never use the NSFont's size,
+ since it doesn't honor a size of 0. Instead pass the size in to the FontPlatformData(NSFont*) version
+ of the constructor rather than using [NSFont pointSize].
+
+ https://bugs.webkit.org/show_bug.cgi?id=49582
+
+ Negative leading is not handled correctly. There are two bugs here. The first is that
+ maxAscent and maxDescent can be negative, so we need a notion of whether or not we have
+ set them before so that we can allow them to be < 0.
+
+ The second issue is that we should understand where fonts will end up relative to
+ our baseline (excluding line height), and only allow those boxes to impact ascent and
+ descent if the actual font box (without factoring in line height) is above or below the
+ root line box baseline.
+
+ Added fast/css/negative-leading.html
+
+ These two bug fixes have to land together to keep the Acid 3 test rendering correctly.
+
+ * WebCore.exp.in:
+ * css/CSSStyleSelector.cpp:
+ (WebCore::CSSStyleSelector::getComputedSizeFromSpecifiedSize):
+ * platform/graphics/cocoa/FontPlatformData.h:
+ * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
+ (WebCore::FontPlatformData::FontPlatformData):
+ * platform/graphics/mac/FontCacheMac.mm:
+ (WebCore::FontCache::getFontDataForCharacters):
+ (WebCore::FontCache::createFontPlatformData):
+ * platform/graphics/mac/SimpleFontDataMac.mm:
+ (WebCore::SimpleFontData::smallCapsFontData):
+ * rendering/InlineFlowBox.cpp:
+ (WebCore::InlineFlowBox::computeLogicalBoxHeights):
+ * rendering/InlineFlowBox.h:
+ * rendering/RootInlineBox.cpp:
+ (WebCore::RootInlineBox::alignBoxesInBlockDirection):
+
+2010-11-16 Darin Adler <darin@apple.com>
+
+ https://bugs.webkit.org/show_bug.cgi?id=49611
+ REGRESSION (r72115): 5 layout tests are broken
+
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::loadFrameRequest): Roll change from
+ https://bugs.webkit.org/show_bug.cgi?id=48603 out. I'll roll
+ it back in after fixing the failing tests.
+
+2010-11-16 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ <rdar://problem/8672000> REGRESSION (r72040): Error image with alt text can cause style to be frozen in a subtree
+ https://bugs.webkit.org/show_bug.cgi?id=49579
+
+ r72040 introduced a call to setNeedsStyleRecalc() from RenderImage::imageChanged(). When imageChanged()
+ got called beneath recalcStyle() on some ancestor element, the result was that the ancestor’s
+ childNeedsStyleRecalc flag got cleared, but its descendants all the way down to the image did not.
+ Thereafter, setNeedsStyleRecalc() would fail to propagate from that subtree up to the root. The fix
+ is to avoid the newly-added setNeedsStyleRecalc() in most cases, including during reclacStyle(), and
+ just keep it for when it is needed.
+
+ Tests: fast/block/float/015.html
+ fast/images/style-access-during-imageChanged-style-freeze.html
+
+ * dom/Document.cpp:
+ (WebCore::Document::isPendingStyleRecalc): Added.
+ * dom/Document.h:
+ * rendering/RenderImage.cpp:
+ (WebCore::RenderImage::imageChanged): Only defer intrinsic size compoutation if a style recalc
+ is coming (indicating that current style() is stale).
+
+2010-11-11 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Implement UNPACK_COLORSPACE_CONVERSION_WEBGL
+ https://bugs.webkit.org/show_bug.cgi?id=47196
+
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::texImage2DImpl): Apply UNPACK_COLORSPACE_CONVERSION settings to image uploading.
+ (WebCore::WebGLRenderingContext::texSubImage2DImpl): Ditto.
+ * platform/graphics/GraphicsContext3D.cpp:
+ (WebCore::GraphicsContext3D::extractImageData): Ditto.
+ * platform/graphics/GraphicsContext3D.h:
+ * platform/graphics/ImageSource.cpp:
+ (WebCore::ImageSource::ImageSource): Add ignoreGammaColorProfile parameter.
+ (WebCore::ImageSource::setData): Ditto.
+ * platform/graphics/ImageSource.h:
+ * platform/graphics/cg/GraphicsContext3DCG.cpp:
+ (WebCore::GraphicsContext3D::getImageData): Ditto.
+ * platform/graphics/cg/ImageSourceCG.cpp:
+ (WebCore::ImageSource::ImageSource): Ditto.
+ * platform/graphics/qt/GraphicsContext3DQt.cpp:
+ (WebCore::GraphicsContext3D::getImageData): Ditto.
+ * platform/graphics/qt/ImageDecoderQt.cpp:
+ (WebCore::ImageDecoder::create): Ditto.
+ (WebCore::ImageDecoderQt::ImageDecoderQt): Ditto.
+ * platform/graphics/qt/ImageDecoderQt.h:
+ * platform/graphics/skia/GraphicsContext3DSkia.cpp:
+ (WebCore::GraphicsContext3D::getImageData): Ditto.
+ * platform/image-decoders/ImageDecoder.cpp:
+ (WebCore::ImageDecoder::create): Ditto.
+ * platform/image-decoders/ImageDecoder.h:
+ (WebCore::ImageDecoder::ImageDecoder): Ditto.
+ * platform/image-decoders/bmp/BMPImageDecoder.cpp:
+ (WebCore::BMPImageDecoder::BMPImageDecoder):
+ * platform/image-decoders/bmp/BMPImageDecoder.h:
+ * platform/image-decoders/gif/GIFImageDecoder.cpp:
+ (WebCore::GIFImageDecoder::GIFImageDecoder): Ditto.
+ * platform/image-decoders/gif/GIFImageDecoder.h:
+ * platform/image-decoders/ico/ICOImageDecoder.cpp:
+ (WebCore::ICOImageDecoder::ICOImageDecoder): Ditto.
+ (WebCore::ICOImageDecoder::decodeAtIndex): Ditto.
+ * platform/image-decoders/ico/ICOImageDecoder.h:
+ * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
+ (WebCore::JPEGImageDecoder::JPEGImageDecoder): Ditto.
+ * platform/image-decoders/jpeg/JPEGImageDecoder.h:
+ * platform/image-decoders/png/PNGImageDecoder.cpp:
+ (WebCore::PNGImageDecoder::PNGImageDecoder): Ditto.
+ (WebCore::PNGImageDecoder::headerAvailable): Ignore gamma settings if ignoreGammaAndColorProfile is true.
+ * platform/image-decoders/png/PNGImageDecoder.h:
+ * platform/image-decoders/webp/WEBPImageDecoder.cpp:
+ (WebCore::WEBPImageDecoder::WEBPImageDecoder): Add ignoreGammaAndColorProfile parameter.
+ * platform/image-decoders/webp/WEBPImageDecoder.h:
+
+2010-11-16 Eric Carlson <eric.carlson@apple.com>
+
+ Unreviewed attempt to fix GTK build after http://trac.webkit.org/changeset/72117
+
+ * platform/graphics/MediaPlayer.cpp:
+ (WebCore::installedMediaEngines):
+
+2010-11-12 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Refactor GL backend flags
+ https://bugs.webkit.org/show_bug.cgi?id=49460
+
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::WebGLRenderingContext): Call setupFlags().
+ (WebCore::WebGLRenderingContext::initializeNewContext): Remove flag initialization to setupFlags().
+ (WebCore::WebGLRenderingContext::setupFlags): Initialize GL flags.
+ (WebCore::WebGLRenderingContext::getRenderbufferParameter): Use accessor function instead of member.
+ (WebCore::WebGLRenderingContext::renderbufferStorage): Ditto.
+ * html/canvas/WebGLRenderingContext.h: Use flags set in setupFlags instead of querying underlying GL implementation.
+ (WebCore::WebGLRenderingContext::isGLES2Compliant):
+ (WebCore::WebGLRenderingContext::isGLES2NPOTStrict):
+ (WebCore::WebGLRenderingContext::isErrorGeneratedOnOutOfBoundsAccesses):
+ (WebCore::WebGLRenderingContext::isResourceSafe):
+ (WebCore::WebGLRenderingContext::isDepthStencilSupported):
+ * platform/graphics/Extensions3D.h: Add NPOT extension.
+ * platform/graphics/GraphicsContext3D.h: Remove GL flag queries at this level.
+ * platform/graphics/chromium/Extensions3DChromium.h: Add resource_safe and strict_attribs extensions.
+ * platform/graphics/mac/GraphicsContext3DMac.mm: Remove GL flag queries at this level.
+
+2010-11-16 Kenneth Russell <kbr@google.com>
+
+ Reviewed by Dimitri Glazkov.
+
+ WebIDL conversions from string to number and array to number should not generate TypeError
+ https://bugs.webkit.org/show_bug.cgi?id=49218
+
+ Recent SVG-related changes to the StrictTypeChecking extended attribute in
+ CodeGeneratorJS.pm and CodeGeneratorV8.pm were not correct according to the Web IDL and
+ ECMA-262 specifications. In particular, when an attribute or function argument is specified
+ as a number type (floating-point or integer), passing in a String or object is not supposed
+ to raise an exception.
+
+ The original intent of the StrictTypeChecking extended attribute was to properly raise
+ TypeError when an interface type is required, but the supplied object does not implement the
+ interface type (http://dev.w3.org/2006/webapi/WebIDL/#es-interface). Historically WebKit has
+ silently passed null to the C++ bindings in this case. The handling of strings in the
+ original StrictTypeChecking implementation was also incorrect, raising exceptions when it
+ should not.
+
+ The semantics of StrictTypeChecking have been changed to enforce only the restrictions on
+ interface types. The V8 custom bindings for WebGL have been updated to match the behavior of
+ the autogenerated code.
+
+ Test: fast/canvas/webgl/type-conversion-test.html
+
+ * bindings/scripts/CodeGeneratorJS.pm:
+ * bindings/scripts/CodeGeneratorV8.pm:
+ * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
+ (WebCore::getObjectParameter):
+ (WebCore::V8WebGLRenderingContext::getFramebufferAttachmentParameterCallback):
+ (WebCore::V8WebGLRenderingContext::getParameterCallback):
+ (WebCore::V8WebGLRenderingContext::getProgramParameterCallback):
+ (WebCore::V8WebGLRenderingContext::getShaderParameterCallback):
+ (WebCore::vertexAttribAndUniformHelperf):
+
+2010-11-16 Alexey Proskuryakov <ap@apple.com>
+
+ Windows build fix.
+
+ * DerivedSources.cpp: Removing CSS Variables generated files.
+
+2010-11-16 Eric Carlson <eric.carlson@apple.com>
+
+ Reviewed by John Sullivan.
+
+ getMIMEType(s)ForExtension should consult system mapping
+ https://bugs.webkit.org/show_bug.cgi?id=49497
+
+ No new tests possible.
+
+ * platform/MIMETypeRegistry.cpp:
+ (WebCore::MIMETypeRegistry::getMediaMIMETypeForExtension): Add the type returned by getMIMETypeForExtension.
+ Put the result of mediaMIMETypeMap().get() in a local variable and test instead of calling
+ constains() and then get().
+ (WebCore::MIMETypeRegistry::getMediaMIMETypesForExtension): Ditto.
+
+2010-11-16 Eric Carlson <eric.carlson@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Rename QTKit based media engine class name
+ https://bugs.webkit.org/show_bug.cgi?id=36663
+
+ No new tests as this just renames a class and restructures existing code.
+
+ * platform/graphics/MediaPlayer.cpp:
+ (WebCore::installedMediaEngines): Use a macro with the platform media player class name to reduce the
+ number of #ifs in the code.
+
+ * platform/graphics/mac/MediaPlayerPrivateQTKit.h: Rename MediaPlayerPrivate to MediaPlayerPrivateQTKit.
+ * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
+ (WebCore::MediaPlayerPrivateQTKit::create):
+ (WebCore::MediaPlayerPrivateQTKit::registerMediaEngine):
+ (WebCore::MediaPlayerPrivateQTKit::MediaPlayerPrivateQTKit):
+ (WebCore::MediaPlayerPrivateQTKit::~MediaPlayerPrivateQTKit):
+ (WebCore::MediaPlayerPrivateQTKit::createQTMovie):
+ (WebCore::MediaPlayerPrivateQTKit::createQTMovieView):
+ (WebCore::MediaPlayerPrivateQTKit::detachQTMovieView):
+ (WebCore::MediaPlayerPrivateQTKit::createQTVideoRenderer):
+ (WebCore::MediaPlayerPrivateQTKit::destroyQTVideoRenderer):
+ (WebCore::MediaPlayerPrivateQTKit::createQTMovieLayer):
+ (WebCore::MediaPlayerPrivateQTKit::destroyQTMovieLayer):
+ (WebCore::MediaPlayerPrivateQTKit::currentRenderingMode):
+ (WebCore::MediaPlayerPrivateQTKit::preferredRenderingMode):
+ (WebCore::MediaPlayerPrivateQTKit::setUpVideoRendering):
+ (WebCore::MediaPlayerPrivateQTKit::tearDownVideoRendering):
+ (WebCore::MediaPlayerPrivateQTKit::hasSetUpVideoRendering):
+ (WebCore::MediaPlayerPrivateQTKit::createQTTime):
+ (WebCore::MediaPlayerPrivateQTKit::resumeLoad):
+ (WebCore::MediaPlayerPrivateQTKit::load):
+ (WebCore::MediaPlayerPrivateQTKit::loadInternal):
+ (WebCore::MediaPlayerPrivateQTKit::prepareToPlay):
+ (WebCore::MediaPlayerPrivateQTKit::platformMedia):
+ (WebCore::MediaPlayerPrivateQTKit::platformLayer):
+ (WebCore::MediaPlayerPrivateQTKit::play):
+ (WebCore::MediaPlayerPrivateQTKit::pause):
+ (WebCore::MediaPlayerPrivateQTKit::duration):
+ (WebCore::MediaPlayerPrivateQTKit::currentTime):
+ (WebCore::MediaPlayerPrivateQTKit::seek):
+ (WebCore::MediaPlayerPrivateQTKit::doSeek):
+ (WebCore::MediaPlayerPrivateQTKit::cancelSeek):
+ (WebCore::MediaPlayerPrivateQTKit::seekTimerFired):
+ (WebCore::MediaPlayerPrivateQTKit::paused):
+ (WebCore::MediaPlayerPrivateQTKit::seeking):
+ (WebCore::MediaPlayerPrivateQTKit::naturalSize):
+ (WebCore::MediaPlayerPrivateQTKit::hasVideo):
+ (WebCore::MediaPlayerPrivateQTKit::hasAudio):
+ (WebCore::MediaPlayerPrivateQTKit::supportsFullscreen):
+ (WebCore::MediaPlayerPrivateQTKit::setVolume):
+ (WebCore::MediaPlayerPrivateQTKit::hasClosedCaptions):
+ (WebCore::MediaPlayerPrivateQTKit::setClosedCaptionsVisible):
+ (WebCore::MediaPlayerPrivateQTKit::setRate):
+ (WebCore::MediaPlayerPrivateQTKit::setPreservesPitch):
+ (WebCore::MediaPlayerPrivateQTKit::buffered):
+ (WebCore::MediaPlayerPrivateQTKit::maxTimeSeekable):
+ (WebCore::MediaPlayerPrivateQTKit::maxTimeLoaded):
+ (WebCore::MediaPlayerPrivateQTKit::bytesLoaded):
+ (WebCore::MediaPlayerPrivateQTKit::totalBytes):
+ (WebCore::MediaPlayerPrivateQTKit::cancelLoad):
+ (WebCore::MediaPlayerPrivateQTKit::cacheMovieScale):
+ (WebCore::MediaPlayerPrivateQTKit::isReadyForVideoSetup):
+ (WebCore::MediaPlayerPrivateQTKit::prepareForRendering):
+ (WebCore::MediaPlayerPrivateQTKit::updateStates):
+ (WebCore::MediaPlayerPrivateQTKit::loadStateChanged):
+ (WebCore::MediaPlayerPrivateQTKit::rateChanged):
+ (WebCore::MediaPlayerPrivateQTKit::sizeChanged):
+ (WebCore::MediaPlayerPrivateQTKit::timeChanged):
+ (WebCore::MediaPlayerPrivateQTKit::didEnd):
+ (WebCore::MediaPlayerPrivateQTKit::setSize):
+ (WebCore::MediaPlayerPrivateQTKit::setVisible):
+ (WebCore::MediaPlayerPrivateQTKit::hasAvailableVideoFrame):
+ (WebCore::MediaPlayerPrivateQTKit::repaint):
+ (WebCore::MediaPlayerPrivateQTKit::paintCurrentFrameInContext):
+ (WebCore::MediaPlayerPrivateQTKit::paint):
+ (WebCore::MediaPlayerPrivateQTKit::getSupportedTypes):
+ (WebCore::MediaPlayerPrivateQTKit::supportsType):
+ (WebCore::MediaPlayerPrivateQTKit::isAvailable):
+ (WebCore::MediaPlayerPrivateQTKit::disableUnsupportedTracks):
+ (WebCore::MediaPlayerPrivateQTKit::sawUnsupportedTracks):
+ (WebCore::MediaPlayerPrivateQTKit::supportsAcceleratedRendering):
+ (WebCore::MediaPlayerPrivateQTKit::acceleratedRenderingStateChanged):
+ (WebCore::MediaPlayerPrivateQTKit::hasSingleSecurityOrigin):
+ (WebCore::MediaPlayerPrivateQTKit::movieLoadType):
+ (WebCore::MediaPlayerPrivateQTKit::setPreload):
+ (WebCore::MediaPlayerPrivateQTKit::mediaTimeForTimeValue):
+ (-[WebCoreMovieObserver initWithCallback:]):
+
+2010-11-16 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Dave Hyatt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49483
+ Remove CSS Variable support
+
+ * Android.derived.jscbindings.mk:
+ * Android.derived.v8bindings.mk:
+ * Android.mk:
+ * CMakeLists.txt:
+ * DerivedSources.make:
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.pri:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * bindings/js/JSCSSRuleCustom.cpp:
+ (WebCore::toJS):
+ * bindings/v8/custom/V8DOMWindowCustom.cpp
+ * bindings/objc/DOMCSS.mm:
+ (kitClass):
+ * bindings/scripts/CodeGeneratorJS.pm:
+ * css/CSSComputedStyleDeclaration.cpp:
+ (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
+ * css/CSSGrammar.y:
+ * css/CSSMutableStyleDeclaration.cpp:
+ (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):
+ (WebCore::CSSMutableStyleDeclaration::removeProperty):
+ (WebCore::CSSMutableStyleDeclaration::addParsedProperties):
+ (WebCore::CSSMutableStyleDeclaration::copy):
+ * css/CSSMutableStyleDeclaration.h:
+ (WebCore::CSSMutableStyleDeclaration::create):
+ * css/CSSParser.cpp:
+ (WebCore::CSSParser::CSSParser):
+ (WebCore::CSSParser::~CSSParser):
+ (WebCore::CSSParser::parseValue):
+ (WebCore::CSSParser::lex):
+ (WebCore::CSSParser::recheckAtKeyword):
+ (WebCore::CSSParser::text):
+ (WebCore::CSSParser::createMediaRule):
+ (WebCore::CSSParser::createKeyframesRule):
+ (WebCore::CSSParser::createStyleRule):
+ (WebCore::CSSParser::createFontFaceRule):
+ (WebCore::CSSParser::addNamespace):
+ (WebCore::CSSParser::createPageRule):
+ * css/CSSParser.h:
+ * css/CSSParserValues.cpp:
+ (WebCore::CSSParserValueList::addValue):
+ (WebCore::CSSParserValueList::deleteValueAt):
+ (WebCore::CSSParserValue::createCSSValue):
+ * css/CSSParserValues.h:
+ (WebCore::CSSParserValueList::CSSParserValueList):
+ * css/CSSPrimitiveValue.cpp:
+ (WebCore::CSSPrimitiveValue::cleanup):
+ (WebCore::CSSPrimitiveValue::getStringValue):
+ (WebCore::CSSPrimitiveValue::cssText):
+ (WebCore::CSSPrimitiveValue::parserValue):
+ * css/CSSPrimitiveValue.h:
+ * css/CSSProperty.cpp:
+ (WebCore::CSSProperty::cssText):
+ * css/CSSPropertyNames.in:
+ * css/CSSRule.h:
+ * css/CSSRule.idl:
+ * css/CSSStyleDeclaration.cpp:
+ (WebCore::CSSStyleDeclaration::copyPropertiesInSet):
+ * css/CSSStyleSelector.cpp:
+ (WebCore::CSSStyleSelector::addMatchedDeclaration):
+ (WebCore::CSSRuleSet::addRulesFromSheet):
+ (WebCore::CSSStyleSelector::applyProperty):
+ * css/CSSStyleSelector.h:
+ * css/CSSValue.h:
+ * css/CSSVariableDependentValue.cpp: Removed.
+ * css/CSSVariableDependentValue.h: Removed.
+ * css/CSSVariablesDeclaration.cpp: Removed.
+ * css/CSSVariablesDeclaration.h: Removed.
+ * css/CSSVariablesDeclaration.idl: Removed.
+ * css/CSSVariablesRule.cpp: Removed.
+ * css/CSSVariablesRule.h: Removed.
+ * css/CSSVariablesRule.idl: Removed.
+ * css/StyleBase.h:
+ (WebCore::StyleBase::isMediaRule):
+ * css/tokenizer.flex:
+ * page/DOMWindow.idl:
+
+2010-11-16 Darin Adler <darin@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ https://bugs.webkit.org/show_bug.cgi?id=48603
+ Boolean logic mistake in local file check
+
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::loadFrameRequest): Fix logic so that both checks have to pass
+ before accepting a local file load.
+
+2010-11-15 Darin Adler <darin@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Harden additional string functions against large lengths
+ https://bugs.webkit.org/show_bug.cgi?id=49574
+
+ * platform/text/TextCodecUTF16.cpp:
+ (WebCore::TextCodecUTF16::encode): Check for length that is
+ too large for size_t.
+
+ * platform/text/TextStream.cpp:
+ (WebCore::TextStream::operator<<): Check for length that is
+ too large for size_t.
+
+2010-11-16 Pavel Feldman <pfeldman@chromium.org>
+
+ Not reviewed. Touching inspector controller to make gtk / qt happier.
+
+ * inspector/InspectorController.cpp:
+
+2010-11-16 Carlos Garcia Campos <cgarcia@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Use gdk_pixbuf_get_from_surface() when available
+ https://bugs.webkit.org/show_bug.cgi?id=49532
+
+ * platform/graphics/gtk/GdkCairoUtilities.cpp:
+ (cairoImageSurfaceToGdkPixbuf):
+
+2010-11-16 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: init front-end UI upon DOMContentLoaded, not load event.
+ https://bugs.webkit.org/show_bug.cgi?id=49596
+
+ * inspector/front-end/inspector.js:
+ (windowLoaded):
+
+2010-11-15 Alexander Pavlov <apavlov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: Migrate frontend to the new CSS editing/retrieval API
+ https://bugs.webkit.org/show_bug.cgi?id=49492
+
+ Test: inspector/styles-new-API.html
+
+ * inspector/front-end/AuditRules.js:
+ (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.selectorsCallback):
+ (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.routine):
+ (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback):
+ (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.styleSheetCallback):
+ (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.allStylesCallback):
+ (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
+ (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
+ (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.receivedImages):
+ * inspector/front-end/CSSStyleModel.js:
+ (WebInspector.CSSStyleModel.prototype.getStylesAsync):
+ (WebInspector.CSSStyleModel.prototype.getComputedStyleAsync):
+ (WebInspector.CSSStyleModel.prototype.getInlineStyleAsync):
+ (WebInspector.CSSStyleModel.prototype.setRuleSelector):
+ (WebInspector.CSSStyleModel.prototype.setRuleSelector.callback):
+ (WebInspector.CSSStyleModel.prototype.addRule):
+ (WebInspector.CSSStyleModel.prototype.addRule.callback):
+ (WebInspector.CSSStyleDeclaration):
+ (WebInspector.CSSStyleDeclaration.prototype.propertyAt):
+ (WebInspector.CSSStyleDeclaration.prototype.pastLastSourcePropertyIndex):
+ (WebInspector.CSSStyleDeclaration.prototype.newBlankProperty):
+ (WebInspector.CSSStyleDeclaration.prototype.insertPropertyAt):
+ (WebInspector.CSSStyleDeclaration.prototype.appendProperty):
+ (WebInspector.CSSRule):
+ (WebInspector.CSSProperty.prototype.get propertyText):
+ (WebInspector.CSSProperty.prototype.setText):
+ (WebInspector.CSSProperty.prototype.setDisabled):
+ (WebInspector.CSSStyleSheet):
+ (WebInspector.CSSStyleSheet.createForId):
+ (WebInspector.CSSStyleSheet.prototype.getText):
+ (WebInspector.CSSStyleSheet.prototype.setText):
+ * inspector/front-end/Settings.js:
+ * inspector/front-end/StylesSidebarPane.js:
+ (WebInspector.StylePropertiesSection.prototype.onpopulate):
+ (WebInspector.StylePropertiesSection.prototype.addNewBlankProperty):
+ (WebInspector.StylePropertiesSection.prototype._debugShowStyle.removeStyleBox):
+ (WebInspector.StylePropertiesSection.prototype._debugShowStyle):
+ (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
+ (WebInspector.StylePropertyTreeElement.prototype):
+ (WebInspector.StylePropertyTreeElement.prototype.):
+ * inspector/front-end/inspector.css:
+ (.styles-section .properties li.not-parsed-ok):
+ (.styles-section .properties li.not-parsed-ok::before):
+ (.styles-section .properties .inactive):
+
+2010-11-16 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r72082.
+ http://trac.webkit.org/changeset/72082
+ https://bugs.webkit.org/show_bug.cgi?id=49594
+
+ "broken SnowLeopard build" (Requested by apavlov on #webkit).
+
+ * css/CSSPrimitiveValue.cpp:
+ (WebCore::scaleFactorForConversion):
+ (WebCore::CSSPrimitiveValue::getDoubleValue):
+ (WebCore::CSSPrimitiveValue::getIdent):
+ * css/CSSPrimitiveValue.h:
+ (WebCore::CSSPrimitiveValue::getFloatValue):
+ (WebCore::CSSPrimitiveValue::getIntValue):
+
+2010-11-16 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r72087.
+ http://trac.webkit.org/changeset/72087
+ https://bugs.webkit.org/show_bug.cgi?id=49593
+
+ "broken build" (Requested by apavlov on #webkit).
+
+ * css/CSSPrimitiveValue.cpp:
+ (WebCore::unitCategory):
+
+2010-11-15 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: rename StoragePanel to ResourcesPanel.
+ https://bugs.webkit.org/show_bug.cgi?id=49534
+
+ * WebCore.gypi:
+ * WebCore.vcproj/WebCore.vcproj:
+ * inspector/front-end/DatabaseQueryView.js:
+ (WebInspector.DatabaseQueryView.prototype._queryFinished):
+ * inspector/front-end/DatabaseTableView.js:
+ (WebInspector.DatabaseTableView.prototype._queryFinished):
+ * inspector/front-end/ExtensionServer.js:
+ (WebInspector.ExtensionServer.prototype._onRevealAndSelectResource):
+ * inspector/front-end/Images/storageIcon.png: Removed.
+ * inspector/front-end/ResourceManager.js:
+ (WebInspector.ResourceManager.prototype.setOverrideContent):
+ (WebInspector.ResourceTreeModel.prototype.addOrUpdateFrame):
+ (WebInspector.ResourceTreeModel.prototype.didCommitLoadForFrame):
+ (WebInspector.ResourceTreeModel.prototype.frameDetachedFromParent):
+ (WebInspector.ResourceTreeModel.prototype._clearChildFramesAndResources):
+ (WebInspector.ResourceTreeModel.prototype.addResourceToFrame):
+ * inspector/front-end/StoragePanel.js: Removed.
+ * inspector/front-end/WebKit.qrc:
+ * inspector/front-end/inspector.css:
+ (.resources.panel .sidebar):
+ (.resources.panel .sidebar li):
+ (.resources.panel .sidebar li.parent):
+ (.resources.panel .sidebar li.selected):
+ (.resources.panel .sidebar li.selected .selection):
+ (.resources.panel .sidebar :focus li.selected .selection):
+ (body.inactive .resources.panel .sidebar li.selected .selection):
+ (.resources.panel .sidebar .icon):
+ (.resources.panel .base-storage-tree-element-title):
+ (.resources.panel .status):
+ (.resources.panel li .status .bubble):
+ * inspector/front-end/inspector.html:
+ * inspector/front-end/inspector.js:
+ (WebInspector._createPanels):
+ (WebInspector.openResource):
+ (WebInspector.showPanel):
+ (WebInspector.selectDatabase):
+ (WebInspector.selectDOMStorage):
+ (WebInspector.addDatabase):
+ (WebInspector.addDOMStorage):
+ (WebInspector.updateDOMStorage):
+ (WebInspector.updateApplicationCacheStatus):
+ (WebInspector.didGetFileSystemPath):
+ (WebInspector.didGetFileSystemError):
+ (WebInspector.didGetFileSystemDisabled):
+ (WebInspector.updateNetworkState):
+ (WebInspector._choosePanelToShowSourceLine):
+
+2010-11-16 Alexander Pavlov <apavlov@chromium.org>
+
+ Unreviewed SnowLeopard build fix.
+
+ * css/CSSPrimitiveValue.cpp:
+ (WebCore::unitCategory):
+
+2010-11-16 Kenneth Rohde Christiansen <kenneth@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ Viewport meta tag: Fix geometry computation
+
+ Available width and height should also be divided by the device pixel ratio.
+
+ * dom/ViewportArguments.cpp:
+ (WebCore::computeViewportAttributes):
+ * platform/network/qt/DnsPrefetchHelper.cpp:
+
+2010-11-12 Alexander Pavlov <apavlov@chromium.org>
+
+ Reviewed by Simon Fraser.
+
+ CSSPrimitiveValue.getFloatValue does not convert sizes
+ https://bugs.webkit.org/show_bug.cgi?id=35770
+
+ Implemented all same-category unit conversions (length, angle, time, frequency) and retained
+ absolute-relative (cm, mm, in, pt, pc) length conversions intact.
+ Illegal unit conversion attempts will throw an INVALID_ACCESS_ERR DOMException.
+
+ * css/CSSPrimitiveValue.cpp:
+ (WebCore::unitCategory):
+ (WebCore::scaleFactorForConversion):
+ (WebCore::CSSPrimitiveValue::getDoubleValue):
+ (WebCore::CSSPrimitiveValue::canonicalUnitTypeForCategory):
+ (WebCore::CSSPrimitiveValue::getDoubleValueInternal):
+ * css/CSSPrimitiveValue.h:
+
+2010-11-15 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: extract HTML title setter in treeoutline.js.
+ https://bugs.webkit.org/show_bug.cgi?id=49540
+
+ * inspector/front-end/ElementsTreeOutline.js:
+ (WebInspector.ElementsTreeElement.prototype.adjustCollapsedRange):
+ (WebInspector.ElementsTreeElement.prototype.updateTitle):
+ * inspector/front-end/treeoutline.js:
+ (TreeElement.prototype.get titleHTML):
+ (TreeElement.prototype.set titleHTML):
+ (TreeElement.prototype._setListItemNodeContent):
+
+2010-11-16 John Knottenbelt <jknotten@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ Assert that DeviceOrientationClientMock is used by only one controller.
+ https://bugs.webkit.org/show_bug.cgi?id=48506
+
+ This is a design constraint of the DeviceOrientationClientMock because the
+ m_controller field can only store a pointer to a single instance of the
+ corresponding DeviceOrientationController.
+
+ * platform/mock/DeviceOrientationClientMock.cpp:
+ (WebCore::DeviceOrientationClientMock::setController):
+
+2010-11-16 Mihai Parparita <mihaip@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ fast/images/size-failure.html results in malloc of 2 Gb after switching to WebKit image decoders
+ https://bugs.webkit.org/show_bug.cgi?id=48634
+
+ Specify the capacity when calling CFDataCreateMutable, which can signal
+ malloc failures (by returning NULL), unlike CFDataSetLength.
+
+ * platform/image-decoders/cg/ImageDecoderCG.cpp:
+ (WebCore::RGBA32Buffer::setSize):
+
+2010-11-15 Rob Buis <rwlbuis@gmail.com>
+
+ Reviewed by Dirk Schulze and Darin Adler.
+
+ requiredFeatures does not adapt to SVGStringList changes
+ https://bugs.webkit.org/show_bug.cgi?id=40887
+
+ Centralize the const_cast handling and only do it if needed.
+ Remove the const_cast in all svgAttributeChanged functions and move
+ it to SVGTest::handleAttributeChange. Add an early return to
+ handleAttributeChange to avoid unnecessary const_casts.
+
+ No tests necessary as functionality has not changed.
+
+ * svg/SVGCircleElement.cpp:
+ (WebCore::SVGCircleElement::svgAttributeChanged):
+ * svg/SVGEllipseElement.cpp:
+ (WebCore::SVGEllipseElement::svgAttributeChanged):
+ * svg/SVGForeignObjectElement.cpp:
+ (WebCore::SVGForeignObjectElement::svgAttributeChanged):
+ * svg/SVGGElement.cpp:
+ (WebCore::SVGGElement::svgAttributeChanged):
+ * svg/SVGImageElement.cpp:
+ (WebCore::SVGImageElement::svgAttributeChanged):
+ * svg/SVGLineElement.cpp:
+ (WebCore::SVGLineElement::svgAttributeChanged):
+ * svg/SVGPathElement.cpp:
+ (WebCore::SVGPathElement::svgAttributeChanged):
+ * svg/SVGPolyElement.cpp:
+ (WebCore::SVGPolyElement::svgAttributeChanged):
+ * svg/SVGRectElement.cpp:
+ (WebCore::SVGRectElement::svgAttributeChanged):
+ * svg/SVGSVGElement.cpp:
+ (WebCore::SVGSVGElement::svgAttributeChanged):
+ * svg/SVGTests.cpp:
+ (WebCore::SVGTests::handleAttributeChange):
+ * svg/SVGTests.h:
+ * svg/SVGTextContentElement.cpp:
+ (WebCore::SVGTextContentElement::svgAttributeChanged):
+ * svg/SVGUseElement.cpp:
+ (WebCore::SVGUseElement::svgAttributeChanged):
+
+2010-11-15 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ REGRESSION(r71934): Removing an element with a shadow DOM from under a cursor causes a crash.
+ https://bugs.webkit.org/show_bug.cgi?id=49569
+
+ Test: fast/events/remove-shadow-host-crash.html
+
+ * rendering/TextControlInnerElements.h:
+ (WebCore::TextControlInnerElement::isShadowNode):
+ (WebCore::TextControlInnerElement::shadowParentNode):
+
+2010-11-12 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ ScriptElement rather than HTMLScriptElement and SVGScriptElement should have ScriptElementData
+ https://bugs.webkit.org/show_bug.cgi?id=49469
+
+ Moved m_data, scriptCharset, scriptContent, shouldExecuteAsJavaScript, and executeScript from
+ HTMLScriptElement and SVGScriptElement to ScriptElementData.
+
+ Also made insertedIntoDocument, removedFromDocument, childrenChanged, finishParsingChildren,
+ and handleSourceAttribute of ScriptElement non-static.
+
+ No new tests are added since this is a cleanup.
+
+ * dom/ScriptElement.cpp:
+ (WebCore::ScriptElement::scriptCharset): Added.
+ (WebCore::ScriptElement::scriptContent): Added.
+ (WebCore::ScriptElement::shouldExecuteAsJavaScript): Added.
+ (WebCore::ScriptElement::executeScript): Added.
+ (WebCore::ScriptElement::insertedIntoDocument): Made non-static. Accesses m_data.
+ (WebCore::ScriptElement::removedFromDocument): Ditto.
+ (WebCore::ScriptElement::childrenChanged): Ditto.
+ (WebCore::ScriptElement::finishParsingChildren): Ditto.
+ (WebCore::ScriptElement::handleSourceAttribute): Ditto.
+ * dom/ScriptElement.h: Moved the declaration of ScriptElement after that of ScriptElementData
+ because ScriptElement has to instantiate ScriptElementData.
+ (WebCore::ScriptElement::ScriptElement): Initializes m_data.
+ * html/HTMLScriptElement.cpp: Removed scriptCharset, scriptContent, shouldExecuteAsJavaScript, and executeScript.
+ (WebCore::HTMLScriptElement::HTMLScriptElement): Initializes ScriptElement instead of ScriptElementData.
+ (WebCore::HTMLScriptElement::childrenChanged): Calls ScriptElement::childrenChanged.
+ (WebCore::HTMLScriptElement::parseMappedAttribute): Calls ScriptElement::handleSourceAttribute.
+ (WebCore::HTMLScriptElement::finishParsingChildren): Calls ScriptElement::finishParsingChildren.
+ (WebCore::HTMLScriptElement::insertedIntoDocument): Calls ScriptElement::insertedIntoDocument.
+ (WebCore::HTMLScriptElement::removedFromDocument): Calls ScriptElement::removedFromDocument.
+ * html/HTMLScriptElement.h:
+ * svg/SVGScriptElement.cpp: Removed scriptCharset, scriptContent, shouldExecuteAsJavaScript, and executeScript.
+ (WebCore::SVGScriptElement::SVGScriptElement): Initializes ScriptElement instead of ScriptElementData.
+ (WebCore::SVGScriptElement::svgAttributeChanged): Calls ScriptElement::handleSourceAttribute.
+ (WebCore::SVGScriptElement::insertedIntoDocument): Calls ScriptElement::insertedIntoDocument.
+ (WebCore::SVGScriptElement::removedFromDocument): Calls ScriptElement::removedFromDocument.
+ (WebCore::SVGScriptElement::childrenChanged): Calls ScriptElement::childrenChanged.
+ (WebCore::SVGScriptElement::finishParsingChildren): Calls ScriptElement::finishParsingChildren.
+ * svg/SVGScriptElement.h:
+
+2010-11-15 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Refactor HTMLInputElement: Move a part of HTMLInputElement::
+ defaultEventHandler() to InputTypes.
+ https://bugs.webkit.org/show_bug.cgi?id=48317
+
+ Move out the followings to InputTypes:
+ - click event processing,
+ - the first keydown event processing, and
+ - DOMActivate event processing.
+
+ Move m_xPos and m_yPos from HTMLInputElement to ImageInputType as
+ m_clickLocation. It's ok to move them because they should be valid only
+ when HTMLInputElement::m_activeSubmit is true. For type=image,
+ m_activeSubmit is true only in DOMActivate event handling. So we reset
+ m_clickLocation in handleDOMActivateEvent() with Event::underlyingEvent().
+
+ No new tests because this is just a refactoring.
+
+ * html/BaseDateAndTimeInputType.cpp:
+ (WebCore::BaseDateAndTimeInputType::handleKeydownEvent):
+ * html/BaseDateAndTimeInputType.h:
+ * html/FileInputType.cpp:
+ (WebCore::FileInputType::handleDOMActivateEvent):
+ * html/FileInputType.h:
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::HTMLInputElement):
+ (WebCore::HTMLInputElement::defaultEventHandler):
+ * html/HTMLInputElement.h:
+ * html/ImageInputType.cpp:
+ (WebCore::ImageInputType::appendFormData):
+ (WebCore::ImageInputType::handleDOMActivateEvent):
+ * html/ImageInputType.h:
+ * html/InputType.cpp:
+ (WebCore::InputType::handleClickEvent):
+ (WebCore::InputType::handleDOMActivateEvent):
+ (WebCore::InputType::handleKeydownEvent):
+ * html/InputType.h:
+ * html/NumberInputType.cpp:
+ (WebCore::NumberInputType::handleKeydownEvent):
+ * html/NumberInputType.h:
+ * html/RadioInputType.cpp:
+ (WebCore::RadioInputType::handleClickEvent):
+ * html/RadioInputType.h:
+ * html/RangeInputType.cpp:
+ (WebCore::RangeInputType::handleKeydownEvent):
+ * html/RangeInputType.h:
+ * html/ResetInputType.cpp:
+ (WebCore::ResetInputType::handleDOMActivateEvent):
+ * html/ResetInputType.h:
+ * html/SubmitInputType.cpp:
+ (WebCore::SubmitInputType::handleDOMActivateEvent):
+ * html/SubmitInputType.h:
+ * html/TextFieldInputType.cpp:
+ (WebCore::TextFieldInputType::handleKeydownEvent):
+ (WebCore::TextFieldInputType::handleKeydownEventForSpinButton):
+ * html/TextFieldInputType.h:
+
+2010-11-15 Chris Rogers <crogers@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Add AudioNode custom bindings
+ https://bugs.webkit.org/show_bug.cgi?id=49119
+
+ No new tests since audio API is not yet implemented.
+
+ * bindings/js/JSAudioNodeCustom.cpp: Added.
+ (WebCore::JSAudioNode::connect):
+ (WebCore::JSAudioNode::disconnect):
+ * bindings/v8/custom/V8AudioNodeCustom.cpp: Added.
+ (WebCore::V8AudioNode::connectCallback):
+ (WebCore::V8AudioNode::disconnectCallback):
+ * webaudio/AudioNode.idl:
+
+2010-11-15 Dave Hyatt <hyatt@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49570
+
+ Put italics specialization check back in CSSFontSelector. I had to back it out, since it broke
+ a layout test, and the issue was that local font fallback fonts should not be considered by the
+ specialization check (since you never want to pick a fallback over an actual @font-face rule if
+ the @font-face rule can handle it).
+
+ * css/CSSFontFace.h:
+ (WebCore::CSSFontFace::create):
+ (WebCore::CSSFontFace::isLocalFallback):
+ (WebCore::CSSFontFace::CSSFontFace):
+ * css/CSSFontSelector.cpp:
+ (WebCore::CSSFontSelector::addFontFaceRule):
+ (WebCore::compareFontFaces):
+
+2010-11-15 Adele Peterson <adele@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Fix for: https://bugs.webkit.org/show_bug.cgi?id=49452
+ Placeholder should not be swapped in and out of the text control's inner text element
+
+ There's no need to swap the placeholder text in and out of the inner text element. Instead, just paint the text.
+ This reduces complexity and makes it easier to make independent decisions about the placeholder text and the text control value.
+
+ * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::setValueFromRenderer):
+ Since updatePlaceholderVisibility checks the value, set the value before calling updatePlaceholderVisibility.
+ * rendering/RenderTextControl.cpp:
+ (WebCore::RenderTextControl::updatePlaceholderVisibility): Remove code that set the inner text value with the placeholder text.
+ (WebCore::RenderTextControl::paintObject): Paint the placeholder text during the background phase.
+ * rendering/RenderTextControl.h:
+ * rendering/RenderTextControlMultiLine.cpp:
+ (WebCore::RenderTextControlMultiLine::nodeAtPoint): Remove custom hit testing that tried to avoid hitting the placeholder text at the wrong time.
+ (WebCore::RenderTextControlMultiLine::updateFromElement): Remove code that set the inner text value with the placeholder text.
+ (WebCore::RenderTextControlMultiLine::createInnerTextStyle): Remove code that created the inner text style based on the placeholder pseudoelement.
+ (WebCore::RenderTextControlMultiLine::textBoxInsetLeft): Added.
+ (WebCore::RenderTextControlMultiLine::textBoxInsetRight): Added.
+ * rendering/RenderTextControlMultiLine.h:
+ * rendering/RenderTextControlSingleLine.cpp:
+ (WebCore::RenderTextControlSingleLine::updateFromElement): Remove code that set the inner text value with the placeholder text.
+ (WebCore::RenderTextControlSingleLine::createInnerTextStyle): Remove code that created the inner text style based on the placeholder pseudoelement.
+ (WebCore::RenderTextControlSingleLine::textBoxInsetLeft): Added.
+ (WebCore::RenderTextControlSingleLine::textBoxInsetRight): Added.
+ * rendering/RenderTextControlSingleLine.h:
+ * rendering/TextControlInnerElements.cpp: Removed custom hit testing that tried to avoid hitting the placeholder text at the wrong time.
+
+2010-11-15 Andreas Kling <kling@webkit.org>
+
+ Unreviewed buildfix (Qt WebKit2 minimal)
+
+ * platform/qt/CookieJarQt.cpp: Add missing <QStringList> include.
+
+2010-11-15 Chris Rogers <crogers@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Add Event and EventListener hooks for JavaScriptAudioNode and AudioProcessingEvent
+ https://bugs.webkit.org/show_bug.cgi?id=49357
+
+ No new tests since audio API is not yet implemented.
+
+ * bindings/js/JSEventCustom.cpp:
+ (WebCore::toJS):
+ * bindings/js/JSEventTarget.cpp:
+ (WebCore::toJS):
+ * bindings/v8/V8DOMWrapper.cpp:
+ (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
+ * bindings/v8/custom/V8EventCustom.cpp:
+ (WebCore::toV8):
+ * dom/Event.cpp:
+ (WebCore::Event::isAudioProcessingEvent):
+ * dom/Event.h:
+ * dom/EventNames.h:
+ * dom/EventTarget.cpp:
+ (WebCore::EventTarget::toJavaScriptAudioNode):
+ * dom/EventTarget.h:
+
+2010-11-15 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ A minor style fix in StyledElement.cpp.
+
+ * dom/StyledElement.cpp:
+ (WebCore::StyledElement::addCSSProperty):
+ (WebCore::StyledElement::addCSSImageProperty):
+
+2010-11-15 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49565
+ Remove Attr.style accessor
+
+ * dom/Attr.idl: Only keep the accessor for Objective C API. Inspector doesn't seem to need
+ it any more.
+
+2010-11-15 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Fix for https://bugs.webkit.org/show_bug.cgi?id=49555
+ Frame::scalePage() should treat the origin as an absolute
+ coordinate
+ -and corresponding-
+ <rdar://problem/8667138>
+
+ * page/Frame.cpp:
+ (WebCore::Frame::scalePage):
+
+2010-11-15 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Darin Adler.
+
+ <rdar://problem/8662770> Error image has incorrect size when a custom font is used
+
+ Test: fast/images/style-access-during-imageChanged-crash.html
+
+ * rendering/RenderImage.cpp:
+ (WebCore::RenderImage::RenderImage): Added initialization of m_needsToSetSizeForAltText.
+ (WebCore::RenderImage::imageSizeForError): Factored the non-alt-text dependent size computation
+ out of setImageSizeForAltText() into this function.
+ (WebCore::RenderImage::setImageSizeForAltText): Changed to use imageSizeForError().
+ (WebCore::RenderImage::styleDidChange): Added. If m_needsToSetSizeForAltText is true, sets the
+ intrinsic size and calls imageDimensionsChanged() as needed to cause layout or invalidation.
+ (WebCore::RenderImage::imageChanged): Moved some code from here...
+ (WebCore::RenderImage::imageDimensionsChanged): ...to here.
+ * rendering/RenderImage.h:
+
+2010-11-15 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Dimitri Glazkov.
+
+ ASSERTION (r72003): Assertion failure when running layout tests
+ https://bugs.webkit.org/show_bug.cgi?id=49561
+
+ r72003 added the 'formaction' URL attribute to HTMLButtonElement and HTMLInputElement,
+ but did not add the attribute to the isURLAttribute which lead to assertion failures
+ when running the layout tests with a debug build.
+
+ * html/HTMLButtonElement.cpp:
+ (WebCore::HTMLButtonElement::isURLAttribute):
+ * html/HTMLButtonElement.h:
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::isURLAttribute):
+
+2010-11-15 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49559
+ DOMWindow.getComputedStyle pseudo element argument lacks ConvertUndefinedOrNullToNullString
+
+ No observable change in behavior, so no tests.
+
+ * page/DOMWindow.idl: Added ConvertUndefinedOrNullToNullString.
+
+2010-11-15 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Make WTF_USE_MEEGOTOUCH available for WebKit2 as well
+
+ Move this into WebCore/features.pri which is used by both WebCore and WebKit2.
+
+ * WebCore.pro:
+ * features.pri:
+
+2010-11-15 Martin Robinson <mrobinson@igalia.com>
+
+ Build fix for GTK+.
+
+ * GNUmakefile.am: Add some missing generated files to the source list.
+
+2010-11-15 Kenneth Russell <kbr@google.com>
+
+ Reviewed by James Robinson.
+
+ [chromium] Avoid copying of SkBitmap in LayerRendererChromium
+ https://bugs.webkit.org/show_bug.cgi?id=49560
+
+ Ran CSS 3D content to test. No other new tests.
+
+ * platform/graphics/chromium/LayerRendererChromium.cpp:
+ (WebCore::LayerRendererChromium::updateRootLayerTextureRect):
+
+2010-11-15 Vangelis Kokkevis <vangelis@chromium.org>
+
+ Reviewed by Kenneth Russell.
+
+ [chromium] Fixes layer opacity implementation of composited layers
+ https://bugs.webkit.org/show_bug.cgi?id=49233
+
+ This introduces a fairly drastic change in how LayerRendererChromium draws
+ composited layers. Layers that have non-zero opacity as well as layers that
+ clip their descendants (and have non-trivial transforms) are now first
+ rendered onto off-screen surfaces (RenderSurfaceChromium's). The compositing
+ operation now consists of two distinct phases: First a hierarchical traversal
+ of the layer tree to compute the layer transforms, determine what the necessary
+ RenderSurfaces are and sort layer that preserve-3d based on their z-value. A second
+ pass goes through all the RenderSurfaces discovered by the first pass and updates
+ their contents.
+ Additional significant side-effects of this change are:
+ 1. Depth buffer and depth testing is no longer used. Drawing relies on a painter's
+ algorithm to render layers with the preserves-3d property from back to front using
+ the Z coordinate of their center. This will further be improved in the future with
+ the intoduction of a BSP tree to properly deal with intersecting layers.
+ 2. Compositor no longer uses the stencil buffer to do clipping. Clipping is now performed
+ by rendering layer subtrees into an offscreen buffer and setting the appropriate
+ scissor and viewport transformation.
+
+ Tests: abs-position-inside-opacity.html (for the opacity implementation)
+ and the rest of the compositing layout tests to verify that
+ everything still works.
+
+ * WebCore.gypi:
+ * platform/graphics/chromium/ContentLayerChromium.cpp:
+ (WebCore::ContentLayerChromium::cleanupResources):
+ (WebCore::ContentLayerChromium::requiresClippedUpdateRect):
+ (WebCore::ContentLayerChromium::calculateClippedUpdateRect):
+ (WebCore::ContentLayerChromium::updateContents):
+ * platform/graphics/chromium/LayerChromium.cpp:
+ (WebCore::LayerChromium::LayerChromium):
+ (WebCore::LayerChromium::cleanupResources):
+ (WebCore::LayerChromium::createRenderSurface):
+ (WebCore::LayerChromium::descendantsDrawContent):
+ (WebCore::LayerChromium::descendantsDrawContentRecursive):
+ * platform/graphics/chromium/LayerChromium.h:
+ (WebCore::LayerChromium::drawTransform):
+ (WebCore::LayerChromium::layerRenderer):
+ * platform/graphics/chromium/LayerRendererChromium.cpp:
+ (WebCore::orthoMatrix):
+ (WebCore::isScaleOrTranslation):
+ (WebCore::LayerRendererChromium::compareLayerZ):
+ (WebCore::LayerRendererChromium::LayerRendererChromium):
+ (WebCore::LayerRendererChromium::prepareToDrawLayers):
+ (WebCore::LayerRendererChromium::drawLayers):
+ (WebCore::LayerRendererChromium::updateLayersRecursive):
+ (WebCore::LayerRendererChromium::useRenderSurface):
+ (WebCore::LayerRendererChromium::drawLayer):
+ (WebCore::LayerRendererChromium::setScissorToRect):
+ (WebCore::LayerRendererChromium::setDrawViewportRect):
+ (WebCore::LayerRendererChromium::initializeSharedObjects):
+ (WebCore::LayerRendererChromium::cleanupSharedObjects):
+ * platform/graphics/chromium/LayerRendererChromium.h:
+ * platform/graphics/chromium/RenderSurfaceChromium.cpp: Added.
+ (WebCore::RenderSurfaceChromium::RenderSurfaceChromium):
+ (WebCore::RenderSurfaceChromium::~RenderSurfaceChromium):
+ (WebCore::RenderSurfaceChromium::cleanupResources):
+ (WebCore::RenderSurfaceChromium::layerRenderer):
+ (WebCore::RenderSurfaceChromium::prepareContentsTexture):
+ * platform/graphics/chromium/RenderSurfaceChromium.h: Added.
+ (WebCore::RenderSurfaceChromium::contentRectCenter):
+ (WebCore::RenderSurfaceChromium::contentRect):
+ * platform/graphics/chromium/VideoLayerChromium.cpp:
+ (WebCore::VideoLayerChromium::cleanupResources):
+
+2010-11-15 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Andreas Kling.
+
+ [GTK] gdk_pixbuf_get_from_surface from GtkVersioning.h is broken on GTK+ 2 builds
+ https://bugs.webkit.org/show_bug.cgi?id=49549
+
+ No new tests. This can be verified by loading any existing vertical text test
+ in GtkLauncher and noticing the lack of CRITICAL GLib exceptions. There's currently
+ no automatic way of verifying custom cursors.
+
+ * platform/gtk/GtkVersioning.c:
+ (gdk_pixbuf_get_from_surface): Reverse a sanity check in this method to be correct.
+
+2010-11-12 Jer Noble <jer.noble@apple.com>
+
+ Reviewed by Brady Eidson.
+
+ Can't view HTML5 video when running Safari with an authenticated proxy server
+ <rdar://problem/8351926>
+
+ * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
+ (WebCore::MediaPlayerPrivate::createQTMovie):
+
+2010-11-14 Abhishek Arya <inferno@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Event dispatch call can blow away the node's renderer initialized
+ before the call in updateSelectionForMouseDrag function. We need
+ to initialize it after the call.
+ https://bugs.webkit.org/show_bug.cgi?id=49524
+
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::updateSelectionForMouseDrag):
+
+2010-11-15 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Martin Robinson.
+
+ Make ContextShadow compile on all platforms
+ https://bugs.webkit.org/show_bug.cgi?id=49535
+
+ Add a void* typedef for PlatformImage and PlatformContext for unsupported platforms
+ and move them into the WebCore namespace like all other Platform* typedefs.
+
+ * platform/graphics/ContextShadow.h:
+
+2010-11-15 Renata Hodovan <reni@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ SVGFEImageElement doesn't support dynamic invalidation
+ https://bugs.webkit.org/show_bug.cgi?id=49536
+
+ The dynamic changes are captured by the svgAttributeChanged function. Invalidate the filter primitive if necessary.
+
+ Tests: svg/dynamic-updates/SVGFEImageElement-dom-preserveAspectRatio-attr.html
+ svg/dynamic-updates/SVGFEImageElement-svgdom-preserveAspectRatio-prop.html
+
+ * svg/SVGFEImageElement.cpp:
+ (WebCore::SVGFEImageElement::svgAttributeChanged):
+ * svg/SVGFEImageElement.h:
+
+2010-11-15 Yael Aharon <yael.aharon@nokia.com>
+
+ Reviewed by Antonio Gomes.
+
+ [Qt] Focus ring does not show on focused links.
+ https://bugs.webkit.org/show_bug.cgi?id=49515
+
+ After http://trac.webkit.org/changeset/69766 the focus ring on links is no longer
+ visible in Qt.
+ The reason is that Qt always returned true in RenderTheme::supportsFocusRing(),
+ but until r69766, we did not check that for links. Qt draws its own focus ring
+ for controls that it draws, but not for links.
+ Change the return value to false if the style's appearance is not something that Qt
+ draws by itself or does not support.
+ Added a Qt specific test result for the new test added in r69766.
+
+ * platform/qt/RenderThemeQt.cpp:
+ (WebCore::RenderThemeQt::supportsFocusRing):
+
+2010-11-15 Dai Mikurube <dmikurube@google.com>
+
+ Reviewed by Kent Tamura.
+
+ Implement formaction, formenctype, formmethod and formtarget attributes for input and button tags
+ https://bugs.webkit.org/show_bug.cgi?id=49240
+
+ Tests: fast/forms/formaction-attribute.html
+ fast/forms/formmethod-attribute-button-html.html
+ fast/forms/formmethod-attribute-input-html.html
+ fast/forms/formtarget-attribute-button-html.html
+ fast/forms/formtarget-attribute-input-html.html
+ fast/forms/mailto/formenctype-attribute-button-html.html
+ fast/forms/mailto/formenctype-attribute-input-html.html
+ fast/forms/submit-form-attributes.html
+
+ * html/HTMLAttributeNames.in: Added formaction, formmethod, formtarget and formenctype attributes
+ * html/HTMLButtonElement.idl:
+ * html/HTMLInputElement.idl:
+ * loader/FormSubmission.cpp: Modified to check the pressed button and its attributes
+ (WebCore::FormSubmission::Attributes::copyFrom):
+ (WebCore::FormSubmission::create):
+ * loader/FormSubmission.h:
+
+2010-11-15 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: Do not hide default Ctrl+A behavior on non-Mac.
+ https://bugs.webkit.org/show_bug.cgi?id=49527
+
+ * inspector/front-end/TextPrompt.js:
+ (WebInspector.TextPrompt.prototype._onKeyDown):
+
+2010-11-15 Ilya Sherman <isherman@chromium.org>
+
+ Reviewed by Kent Tamura.
+
+ Add capability for displaying warnings to autofill popup
+ Warnings are displayed in dark gray italic.
+ https://bugs.webkit.org/show_bug.cgi?id=49291
+ http://code.google.com/p/chromium/issues/detail?id=58509
+
+ * platform/chromium/PopupMenuChromium.cpp:
+ (WebCore::PopupListBox::getRowFont):
+ Use item-specific font, not just the generic menu font.
+ (WebCore::PopupListBox::selectIndex):
+ Updated to clear the selection when hovering over a non-selectable item.
+ * platform/chromium/PopupMenuChromium.h: Minor cleanup
+
+2010-11-14 David Hyatt <hyatt@apple.com>
+
+ Back out the italics portion of the previous patch until I can figure out why it
+ doesn't work.
+
+ * css/CSSFontSelector.cpp:
+ (WebCore::compareFontFaces):
+
+2010-11-14 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Improve API for form validation message strings
+ https://bugs.webkit.org/show_bug.cgi?id=34945
+
+ This change introduces three new functions;
+ validationMessageTypeMismatchFor*Text(). The implementation for each
+ platform is just a call to validationMessageTypeMismatchText().
+
+ Some validationMessage*() functions have new parameters. The parameters
+ are ignored in all platforms for now.
+
+ This change doesn't change any behavior. However a platform can add
+ additional information to validation messages. e.g. Changing "type
+ mismatch" to "Please specify an e-mail address" for <input type=email>.
+
+ * html/EmailInputType.cpp:
+ (WebCore::EmailInputType::typeMismatchText): Call validationMessageTypeMismatchForEmailText()
+ or validationMessageTypeMismatchForMultipleEmailText().
+ * html/EmailInputType.h:
+ * html/HTMLFormControlElement.h: Add maxLength() and value() to access them from ValidityState.
+ * html/HTMLInputElement.cpp: Add the following functions to pass extra
+ information to validation message string functions.
+ (WebCore::HTMLInputElement::minimumString):
+ (WebCore::HTMLInputElement::maximumString):
+ (WebCore::HTMLInputElement::stepBaseString):
+ (WebCore::HTMLInputElement::stepString):
+ (WebCore::HTMLInputElement::typeMismatchText):
+ * html/HTMLInputElement.h:
+ * html/HTMLTextAreaElement.h:
+ * html/InputType.cpp:
+ (WebCore::InputType::typeMismatchText): Call validationMessageTypeMismatchText().
+ * html/InputType.h:
+ * html/URLInputType.cpp:
+ (WebCore::URLInputType::typeMismatchText): Call validationMessageTypeMismatchForURLText().
+ * html/URLInputType.h:
+ * html/ValidityState.cpp:
+ (WebCore::ValidityState::validationMessage):
+ * platform/LocalizedStrings.cpp:
+ (WebCore::validationMessageTypeMismatchForEmailText):
+ (WebCore::validationMessageTypeMismatchForMultipleEmailText):
+ (WebCore::validationMessageTypeMismatchForURLText):
+ (WebCore::validationMessageTooLongText):
+ (WebCore::validationMessageRangeUnderflowText):
+ (WebCore::validationMessageRangeOverflowText):
+ (WebCore::validationMessageStepMismatchText):
+ * platform/LocalizedStrings.h:
+ - Add validationMessageTypeMismatchForEmailText(),
+ validationMessageTypeMismatchForMultipleEmailText() and
+ validationMessageTypeMismatchForURLText()
+ - Add length parameters to validationMessageTooLongText().
+ - Add the minimum value parameter to validationMessageRangeUnderflowText()
+ - Add the maximum value parameter to validationMessageRangeOverflowText()
+ - Add parameters of the base value and the step value to validationMessageStepMismatchText()
+ * platform/android/LocalizedStringsAndroid.cpp:
+ (WebCore::validationMessageTypeMismatchForEmailText):
+ (WebCore::validationMessageTypeMismatchForMultipleEmailText):
+ (WebCore::validationMessageTypeMismatchForURLText):
+ (WebCore::validationMessageTooLongText):
+ (WebCore::validationMessageRangeUnderflowText):
+ (WebCore::validationMessageRangeOverflowText):
+ (WebCore::validationMessageStepMismatchText):
+ * platform/brew/LocalizedStringsBrew.cpp:
+ (WebCore::validationMessageTypeMismatchForEmailText):
+ (WebCore::validationMessageTypeMismatchForMultipleEmailText):
+ (WebCore::validationMessageTypeMismatchForURLText):
+ (WebCore::validationMessageTooLongText):
+ (WebCore::validationMessageRangeUnderflowText):
+ (WebCore::validationMessageRangeOverflowText):
+ (WebCore::validationMessageStepMismatchText):
+ * platform/efl/LocalizedStringsEfl.cpp:
+ (WebCore::validationMessageRangeOverflowText):
+ (WebCore::validationMessageRangeUnderflowText):
+ (WebCore::validationMessageStepMismatchText):
+ (WebCore::validationMessageTooLongText):
+ (WebCore::validationMessageTypeMismatchForEmailText):
+ (WebCore::validationMessageTypeMismatchForMultipleEmailText):
+ (WebCore::validationMessageTypeMismatchForURLText):
+ * platform/gtk/LocalizedStringsGtk.cpp:
+ (WebCore::validationMessageTypeMismatchForEmailText):
+ (WebCore::validationMessageTypeMismatchForMultipleEmailText):
+ (WebCore::validationMessageTypeMismatchForURLText):
+ (WebCore::validationMessageTooLongText):
+ (WebCore::validationMessageRangeUnderflowText):
+ (WebCore::validationMessageRangeOverflowText):
+ (WebCore::validationMessageStepMismatchText):
+ * platform/haiku/LocalizedStringsHaiku.cpp:
+ (WebCore::validationMessageTypeMismatchForEmailText):
+ (WebCore::validationMessageTypeMismatchForMultipleEmailText):
+ (WebCore::validationMessageTypeMismatchForURLText):
+ (WebCore::validationMessageTooLongText):
+ (WebCore::validationMessageRangeUnderflowText):
+ (WebCore::validationMessageRangeOverflowText):
+ (WebCore::validationMessageStepMismatchText):
+ * platform/wx/LocalizedStringsWx.cpp:
+ (WebCore::validationMessageTypeMismatchForEmailText):
+ (WebCore::validationMessageTypeMismatchForMultipleEmailText):
+ (WebCore::validationMessageTypeMismatchForURLText):
+ (WebCore::validationMessageTooLongText):
+ (WebCore::validationMessageRangeUnderflowText):
+ (WebCore::validationMessageRangeOverflowText):
+ (WebCore::validationMessageStepMismatchText):
+
+2010-11-14 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Andreas Kling.
+
+ KeyboardEvent::keyIdentifier() should return "const String&"
+ https://bugs.webkit.org/show_bug.cgi?id=49426
+
+ No new tests. This shouldn't change the current behavior.
+
+ * dom/KeyboardEvent.h:
+ (WebCore::KeyboardEvent::keyIdentifier): Change the return type; String -> const String&
+ * dom/SelectElement.cpp:
+ (WebCore::SelectElement::menuListDefaultEventHandler):
+ Change the type of a variable to have keyIdentifier(); String -> const String&
+ (WebCore::SelectElement::listBoxDefaultEventHandler): ditto.
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::defaultEventHandler): ditto.
+ (WebCore::HTMLInputElement::handleKeyEventForRange): ditto.
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::handleKeyboardSelectionMovement): ditto.
+
+2010-11-14 Kenichi Ishibashi <bashi@google.com>
+
+ Reviewed by Kent Tamura.
+
+ [HTML5] "form" attribute support for form control elements
+ https://bugs.webkit.org/show_bug.cgi?id=47813
+
+ Adds a list of form-associated elements with form attribute into
+ the Document class to support form attribute.
+ Adds a function to determine the right place to locate
+ form-associated elements with form attribute into
+ m_associatedElements of HTMLFormElement class.
+
+ Tests: fast/forms/form-attribute-elements-order.html
+ fast/forms/form-attribute-elements-order2.html
+ fast/forms/form-attribute-elements.html
+ fast/forms/form-attribute.html
+
+ * dom/Document.cpp:
+ (WebCore::Document::registerFormElementWithFormAttribute): Added.
+ (WebCore::Document::unregisterFormElementWithFormAttribute): Added.
+ (WebCore::Document::resetFormElementsOwner): Added.
+ * dom/Document.h: Added the list for elements with form attribute.
+ * html/HTMLAttributeNames.in: Added form attribute.
+ * html/HTMLFormControlElement.cpp:
+ (WebCore::HTMLFormControlElement::insertedIntoTree): Modified to handle
+ form attribute.
+ (WebCore::HTMLFormControlElement::removedFromTree): Ditto.
+ (WebCore::HTMLFormControlElement::resetFormOwner): Added.
+ (WebCore::HTMLFormControlElement::attributeChanged): Added.
+ * html/HTMLFormControlElement.h:
+ * html/HTMLFormElement.cpp:
+ (WebCore::HTMLFormElement::HTMLFormElement): Modified to initialize
+ newly-added variables.
+ (WebCore::HTMLFormElement::insertedIntoDocument): Modified to reset
+ form owner of form-associated elements.
+ (WebCore::HTMLFormElement::removedFromDocument): Ditto.
+ (WebCore::HTMLFormElement::formElementIndexWithFormAttribute): Added.
+ (WebCore::HTMLFormElement::formElementIndex): Modified to treat
+ form-associated elements with form attribute separately.
+ (WebCore::HTMLFormElement::removeFormElement): Modified to handle
+ form-associated elements with form attribute.
+ * html/HTMLFormElement.h: Added three variables to handle form attribute.
+ * html/HTMLOutputElement.cpp: Removed "FIXME" comment.
+ (WebCore::HTMLOutputElement::parseMappedAttribute):
+ * html/HTMLOutputElement.h: Removed setForm().
+
+2010-11-14 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49521
+
+ REGRESSION svg/W3C-SVG-1.1/fonts-desc-02-t.svg broken by r71979.
+
+ Refine the font selection function for @font-face to be smarter about what fonts it prefers. If
+ a font is labeled as only supporting small-caps, then prefer it to one that claims to support both
+ normal and small-caps. The specialized font is more likely to be true small-caps and to not rely
+ on synthesis.
+
+ Added the same logic for italic as well. Prefer the font that is specifically restricted to
+ italic to one that claims it can support anything.
+
+ * css/CSSFontSelector.cpp:
+ (WebCore::compareFontFaces):
+
+2010-11-14 Ryuan Choi <ryuan.choi@samsung.com>
+
+ Reviewed by Martin Robinson.
+
+ [EFL] add pango support
+ https://bugs.webkit.org/show_bug.cgi?id=46029
+
+ Include pango related files.
+ No new tests; functionality is unchanged.
+
+ * CMakeListsEfl.txt:
+
+2010-11-12 Tenghui Zhu <ztenghui@google.com>
+
+ Reviewed by Andreas Kling.
+
+ [V8] Code generation script error in generating the SVGStaticListPropertyTearOff
+ https://bugs.webkit.org/show_bug.cgi?id=49463
+
+ * bindings/scripts/CodeGeneratorV8.pm: The svgNativeType is the one containing
+ the SVGStaticListPropertyTearOff string, not the svgListPropertyType.
+
+2010-11-14 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ Sort CMakeLists.txt
+ https://bugs.webkit.org/show_bug.cgi?id=49507
+
+ * CMakeLists.txt:
+
+2010-11-13 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Buildfix for !ENABLE(INSPECTOR)
+ https://bugs.webkit.org/show_bug.cgi?id=49500
+
+ Also unify the position of the condition in the cpp files.
+
+ * inspector/ConsoleMessage.cpp:
+ * inspector/InspectorResourceAgent.cpp:
+ * inspector/InspectorState.cpp:
+ * inspector/ScriptCallFrame.cpp:
+ * inspector/ScriptCallStack.cpp:
+
+2010-11-13 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49506
+
+ Repaint is broken across writing mode boundaries. It's not enough to add in flipped offsets. You have
+ to flip the rect itself.
+
+ Added fast/repaint/repaint-across-writing-mode-boundary.html
+
+ * rendering/RenderBox.cpp:
+ (WebCore::RenderBox::computeRectForRepaint):
+
+2010-11-13 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49505
+
+ REGRESSION: @font-face doesn't work with the small-caps variant. This was broken by the addition of SVG fonts
+ support long ago. This patch fixes the SVG code so that it doesn't break non-SVG fonts.
+
+ Added fast/blockflow/broken-ideograph-small-caps.html
+
+ * css/CSSFontFace.cpp:
+ (WebCore::CSSFontFace::hasSVGFontFaceSource):
+ * css/CSSFontFace.h:
+ * css/CSSFontFaceSource.cpp:
+ (WebCore::CSSFontFaceSource::getFontData):
+ * css/CSSFontFaceSource.h:
+ * css/CSSFontSelector.cpp:
+ (WebCore::CSSFontSelector::addFontFaceRule):
+ (WebCore::CSSFontSelector::getFontData):
+
+2010-11-13 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Dave Hyatt.
+
+ fast/text/hyphen* tests have different results on Leopard
+ https://bugs.webkit.org/show_bug.cgi?id=43296
+
+ * platform/text/mac/TextBreakIteratorInternalICUMac.mm:
+ (WebCore::topLanguagePreference): Changed to look up the value of the AppleLanguages default
+ through the normal NSUserDefaults search order rather than skipping the application domain.
+ This makes this function respect DumpRenderTree’s setting of the default in the application
+ domain.
+
+2010-11-13 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49499
+
+ broken-ideographic-font.html causes layout test flakiness in release builds. The reason for this is
+ that the custom font data for m_brokenIdeographFontData was never getting pruned out of the tree.
+ The same problem exists for custom small caps fonts, so I made sure that the small caps fonts get
+ pruned as well. In addition, custom small caps fonts were never getting deleted either.
+
+ I also made allowsLigatures in FontPlatformData orientation-independent, and the callers check it
+ instead.
+
+ Unskip fast/blockflow/broken-ideographic-font.html
+
+ * platform/graphics/SimpleFontData.cpp:
+ (WebCore::SimpleFontData::~SimpleFontData):
+ * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
+ (WebCore::SimpleFontData::platformDestroy):
+ (WebCore::SimpleFontData::smallCapsFontData):
+ * platform/graphics/chromium/SimpleFontDataLinux.cpp:
+ (WebCore::SimpleFontData::platformDestroy):
+ (WebCore::SimpleFontData::smallCapsFontData):
+ * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
+ (WebCore::FontPlatformData::allowsLigatures):
+ * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
+ (WebCore::SimpleFontData::platformDestroy):
+ (WebCore::SimpleFontData::smallCapsFontData):
+ * platform/graphics/haiku/SimpleFontDataHaiku.cpp:
+ (WebCore::SimpleFontData::platformDestroy):
+ (WebCore::SimpleFontData::smallCapsFontData):
+ * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
+ (WebCore::disableLigatures):
+ * platform/graphics/mac/SimpleFontDataCoreText.cpp:
+ (WebCore::SimpleFontData::getCFStringAttributes):
+ * platform/graphics/mac/SimpleFontDataMac.mm:
+ (WebCore::SimpleFontData::platformDestroy):
+ * platform/graphics/win/SimpleFontDataWin.cpp:
+ (WebCore::SimpleFontData::platformDestroy):
+ (WebCore::SimpleFontData::smallCapsFontData):
+ * platform/graphics/wx/SimpleFontDataWx.cpp:
+ (WebCore::SimpleFontData::platformDestroy):
+ (WebCore::SimpleFontData::smallCapsFontData):
+
+2010-11-13 David Hyatt <hyatt@apple.com>
+
+ https://bugs.webkit.org/show_bug.cgi?id=49496
+
+ Fix broken-ideographic-font.html. I had the font installed locally on my machine, and this covered up
+ the fact that CoreText was implicitly using it as fallback in the vertical case only. The bots don't have
+ the font installed locally, and so they showed the bug.
+
+ Make sure the GlyphPage is filled with horizontal glyphs for a broken ideograph font, so that CoreText is
+ willing to fill.
+
+ * platform/graphics/mac/SimpleFontDataCoreText.cpp:
+ (WebCore::SimpleFontData::getCFStringAttributes):
+
+2010-11-13 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49464
+
+ Fix bugs with the orientation of fonts when the font is brought in via fallback, when the font contains no
+ vertical tables, or when the font is loaded via font-face in both horizontal and vertical forms.
+
+ (1) Include orientation as part of the @font-face hashtables so that the fonts are treated as
+ distinct when used in horizontal and vertical forms.
+
+ (2) Let the orientation member of FontPlatformData represent the desired orientation rather than
+ the supported one. Add an orientation member to SimpleFontData that represents the actual
+ supported orientation of the font.
+
+ (3) For fonts with no vertical tables, add a brokenIdeographicsFont accessor that is invoked when
+ CJK ideographs are encountered. This is essentially identical to the small caps fallback mechanism
+ but invoked only for ideographs. The special ideograph font locks the orientation to vertical and
+ renders the glyphs upright even when the font has no vertical tables. Punctuation and such will
+ still look funny, and really this is a bug in the font, but at least this way it will be apparent
+ that the font is to blame.
+
+ Added fast/blockflow/broken-ideographic-font.html and fast/blockflow/vertical-font-fallback.html.
+
+ * css/CSSFontFaceSource.cpp:
+ (WebCore::CSSFontFaceSource::getFontData):
+ * css/CSSSegmentedFontFace.cpp:
+ (WebCore::CSSSegmentedFontFace::getFontData):
+ * platform/graphics/Font.cpp:
+ (WebCore::Font::isCJKIdeograph):
+ * platform/graphics/Font.h:
+ * platform/graphics/FontFastPath.cpp:
+ (WebCore::Font::glyphDataForCharacter):
+ * platform/graphics/SimpleFontData.cpp:
+ (WebCore::SimpleFontData::SimpleFontData):
+ (WebCore::SimpleFontData::~SimpleFontData):
+ (WebCore::SimpleFontData::brokenIdeographFontData):
+ * platform/graphics/SimpleFontData.h:
+ (WebCore::SimpleFontData::orientation):
+ * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
+ (WebCore::FontPlatformData::FontPlatformData):
+ * platform/graphics/mac/FontMac.mm:
+ (WebCore::showGlyphsWithAdvances):
+ * platform/graphics/mac/SimpleFontDataMac.mm:
+ (WebCore::SimpleFontData::platformInit):
+ (WebCore::SimpleFontData::platformBoundsForGlyph):
+ (WebCore::SimpleFontData::platformWidthForGlyph):
+
+2010-11-13 Rob Buis <rwlbuis@gmail.com>
+
+ Reviewed by Dirk Schulze.
+
+ requiredFeatures does not adapt to SVGStringList changes
+ https://bugs.webkit.org/show_bug.cgi?id=40887
+
+ Centralize logic of handling of SVGElement validity changes.
+ The logic is to detach the SVGElement when changing from valid
+ to invalid, and to attach when changing from invalid to valid.
+
+ Tests: svg/dynamic-updates/SVGCircleElement-dom-requiredFeatures.html
+ svg/dynamic-updates/SVGCircleElement-svgdom-requiredFeatures.html
+ svg/dynamic-updates/SVGEllipseElement-dom-requiredFeatures.html
+ svg/dynamic-updates/SVGEllipseElement-svgdom-requiredFeatures.html
+ svg/dynamic-updates/SVGForeignObjectElement-dom-requiredFeatures.html
+ svg/dynamic-updates/SVGForeignObjectElement-svgdom-requiredFeatures.html
+ svg/dynamic-updates/SVGGElement-dom-requiredFeatures.html
+ svg/dynamic-updates/SVGGElement-svgdom-requiredFeatures.html
+ svg/dynamic-updates/SVGImageElement-dom-requiredFeatures.html
+ svg/dynamic-updates/SVGImageElement-svgdom-requiredFeatures.html
+ svg/dynamic-updates/SVGLineElement-dom-requiredFeatures.html
+ svg/dynamic-updates/SVGLineElement-svgdom-requiredFeatures.html
+ svg/dynamic-updates/SVGPathElement-dom-requiredFeatures.html
+ svg/dynamic-updates/SVGPathElement-svgdom-requiredFeatures.html
+ svg/dynamic-updates/SVGPolygonElement-dom-requiredFeatures.html
+ svg/dynamic-updates/SVGPolygonElement-svgdom-requiredFeatures.html
+ svg/dynamic-updates/SVGPolylineElement-dom-requiredFeatures.html
+ svg/dynamic-updates/SVGPolylineElement-svgdom-requiredFeatures.html
+ svg/dynamic-updates/SVGRectElement-dom-requiredFeatures.html
+ svg/dynamic-updates/SVGRectElement-svgdom-requiredFeatures.html
+ svg/dynamic-updates/SVGSVGElement-dom-requiredFeatures.html
+ svg/dynamic-updates/SVGSVGElement-svgdom-requiredFeatures.html
+ svg/dynamic-updates/SVGTextElement-dom-requiredFeatures.html
+ svg/dynamic-updates/SVGTextElement-svgdom-requiredFeatures.html
+ svg/dynamic-updates/SVGUseElement-dom-requiredFeatures.html
+ svg/dynamic-updates/SVGUseElement-svgdom-requiredFeatures.html
+
+ * svg/SVGCircleElement.cpp:
+ (WebCore::SVGCircleElement::svgAttributeChanged):
+ * svg/SVGEllipseElement.cpp:
+ (WebCore::SVGEllipseElement::svgAttributeChanged):
+ * svg/SVGForeignObjectElement.cpp:
+ (WebCore::SVGForeignObjectElement::svgAttributeChanged):
+ * svg/SVGGElement.cpp:
+ (WebCore::SVGGElement::svgAttributeChanged):
+ * svg/SVGImageElement.cpp:
+ (WebCore::SVGImageElement::svgAttributeChanged):
+ * svg/SVGLineElement.cpp:
+ (WebCore::SVGLineElement::svgAttributeChanged):
+ * svg/SVGPathElement.cpp:
+ (WebCore::SVGPathElement::svgAttributeChanged):
+ * svg/SVGPolyElement.cpp:
+ (WebCore::SVGPolyElement::svgAttributeChanged):
+ * svg/SVGRectElement.cpp:
+ (WebCore::SVGRectElement::svgAttributeChanged):
+ * svg/SVGSVGElement.cpp:
+ (WebCore::SVGSVGElement::svgAttributeChanged):
+ * svg/SVGTests.cpp:
+ (WebCore::knownAttribute):
+ (WebCore::SVGTests::isKnownAttribute):
+ (WebCore::SVGTests::handleAttributeChange): Centralized handling of SVGElement validity changes.
+ * svg/SVGTests.h:
+ * svg/SVGTextContentElement.cpp:
+ (WebCore::SVGTextContentElement::svgAttributeChanged):
+ (WebCore::SVGTextContentElement::isKnownAttribute):
+ * svg/SVGTextContentElement.h:
+ * svg/SVGUseElement.cpp:
+ (WebCore::SVGUseElement::svgAttributeChanged):
+
+2010-11-13 Andrey Kosyakov <caseq@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: [refactoring] support Views in TabbedPane and streamline tab selection in resource view
+ https://bugs.webkit.org/show_bug.cgi?id=49493
+
+ * inspector/front-end/NetworkPanel.js:
+ (WebInspector.NetworkPanel.prototype._showResource):
+ * inspector/front-end/ResourceView.js:
+ (WebInspector.ResourceView):
+ (WebInspector.ResourceView.prototype.selectContentTab):
+ (WebInspector.ResourceView.prototype._selectTab):
+ (WebInspector.ResourceView.prototype._refreshCookies):
+ (WebInspector.ResourceCookiesTab.prototype.show):
+ * inspector/front-end/StoragePanel.js:
+ (WebInspector.StoragePanel.prototype.showResource):
+ * inspector/front-end/TabbedPane.js:
+ (WebInspector.TabbedPane.prototype.appendTab):
+ (WebInspector.TabbedPane.prototype.hasTab):
+ (WebInspector.TabbedPane.prototype.selectTabById):
+ (WebInspector.TabbedPane.prototype._hideTab):
+ (WebInspector.TabbedPane.prototype._showTab):
+ * inspector/front-end/inspector.css:
+ (.resource-view-cookies):
+ (.resource-view-cookies.visible):
+
+2010-11-13 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ REGRESSION(71515): Web Inspector: Safari crash calling console.log when Log JavaScript Exceptions to Console is checked
+ https://bugs.webkit.org/show_bug.cgi?id=49362
+
+ * page/Console.cpp:
+ (WebCore::Console::addMessage): avoid accessing ScriptArguments and ScriptCallStack after their ownership
+ has been passed to the inspector.
+
+2010-11-13 Yury Semikhatsky <yurys@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: DOM event listener name is cropped in Elements panel
+ https://bugs.webkit.org/show_bug.cgi?id=49387
+
+ * inspector/front-end/inspector.css:
+ (.event-bar): use margin-left instead of left to fit child node into its parent
+
+2010-11-13 Ilya Sherman <isherman@chromium.org>
+
+ Reviewed by Shinichiro Hamaji.
+
+ Fixes regression from previous patch -- computes y offsets for elements
+ that are scrolled out of the window.
+ https://bugs.webkit.org/show_bug.cgi?id=49306
+
+ * manual-tests/select-scroll.html: Added.
+ * platform/chromium/PopupMenuChromium.cpp:
+ (WebCore::PopupListBox::layout):
+
+2010-11-12 Daniel Bates <dbates@rim.com>
+
+ Reviewed by Adam Barth.
+
+ Transferred <iframe>s may not have a unique internal name
+ https://bugs.webkit.org/show_bug.cgi?id=48768
+
+ Fixes an issue where an <iframe> that is transferred from
+ document A to document B, where A != B, may not have a
+ unique internal name in B.
+
+ Test: fast/frames/iframe-reparenting-unique-name.html
+
+ * html/HTMLFrameElementBase.cpp:
+ (WebCore::HTMLFrameElementBase::setNameAndOpenURL): Inlined code from
+ HTMLFrameElementBase::setName() so that we can remove setName(), which
+ was only called being called by HTMLFrameElementBase::setNameAndOpenURL().
+ * html/HTMLFrameElementBase.h: Removed HTMLFrameElementBase::setName().
+ * html/HTMLFrameOwnerElement.h: Removed HTMLFrameOwnerElement::setName().
+ * page/Frame.cpp:
+ (WebCore::Frame::transferChildFrameToNewDocument): Modified to call FrameTree::transferChild().
+ * page/FrameTree.cpp:
+ (WebCore::FrameTree::transferChild): Added.
+ (WebCore::FrameTree::appendChild): Moved the majority of the code into FrameTree::actuallyAppendChild().
+ (WebCore::FrameTree::actuallyAppendChild): Added.
+ * page/FrameTree.h:
+
+2010-11-12 Joseph Pecoraro <joepeck@webkit.org>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Some FrameLoader.h Cleanup
+ https://bugs.webkit.org/show_bug.cgi?id=49484
+
+ Removed function signatures without any implementation. The functions
+ used to exist, and were nicely refactored into PageCache in r60688 and
+ the signatures were left behind.
+
+ Removed function signature setLoadType. Added in r17238 back when the
+ file was named WebFrameLoader, and the implementation was lost during
+ the transition from its mm implementation.
+
+ Removed function signature updateHistoryAfterClientRedirect. Implementation
+ and call points were removed in r18541 but the signature was left behind,
+ and jumped files!
+
+ Removed unused debug variable m_didDispatchDidCommitLoad. It was added
+ and used in Assertions in r28399. It was removed soon after, in r28464
+ because they were, "firing like crazy. Not sure why yet." It was
+ never used again.
+
+ Added const qualifier and moved interruptionForPolicyChangeError to
+ be more like its buddies.
+
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::FrameLoader):
+ (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
+ (WebCore::FrameLoader::interruptionForPolicyChangeError):
+ (WebCore::FrameLoader::dispatchDidCommitLoad):
+ * loader/FrameLoader.h:
+
+2010-11-12 Yael Aharon <yael.aharon@nokia.com>
+
+ Reviewed by David Hyatt.
+
+ Spatial Navigation: Cannot focus on some ContainerNode
+ https://bugs.webkit.org/show_bug.cgi?id=48393
+
+ ContainerNode::getLowerRightCorner() assumes that the lowest right corner of its last child
+ is its own lowest right corner. If that child is an empty text node after an image, it does
+ not have size and position information, so we should go to the previous child.
+
+ Tests: fast/events/spatial-navigation/snav-container-only-white-space.html
+ fast/events/spatial-navigation/snav-container-white-space.html
+
+ * dom/ContainerNode.cpp:
+ (WebCore::ContainerNode::getLowerRightCorner):
+
+2010-11-12 James Simonsen <simonjam@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [Web Timing] Rename interfaces:
+ - Navigation -> PerformanceNavigation
+ - Timing -> PerformanceTiming
+ https://bugs.webkit.org/show_bug.cgi?id=48919
+
+ * DerivedSources.cpp:
+ * DerivedSources.make:
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * page/Performance.cpp:
+ (WebCore::Performance::navigation):
+ (WebCore::Performance::timing):
+ * page/Performance.h:
+ * page/Performance.idl:
+ * page/PerformanceNavigation.cpp: Renamed from WebCore/page/Navigation.cpp.
+ (WebCore::PerformanceNavigation::PerformanceNavigation):
+ (WebCore::PerformanceNavigation::frame):
+ (WebCore::PerformanceNavigation::disconnectFrame):
+ (WebCore::PerformanceNavigation::type):
+ (WebCore::PerformanceNavigation::redirectCount):
+ * page/PerformanceNavigation.h: Renamed from WebCore/page/Navigation.h.
+ (WebCore::PerformanceNavigation::create):
+ * page/PerformanceNavigation.idl: Renamed from WebCore/page/Navigation.idl.
+ * page/PerformanceTiming.cpp: Renamed from WebCore/page/Timing.cpp.
+ (WebCore::toIntegerMilliseconds):
+ (WebCore::getPossiblySkewedTimeInKnownRange):
+ (WebCore::PerformanceTiming::PerformanceTiming):
+ (WebCore::PerformanceTiming::frame):
+ (WebCore::PerformanceTiming::disconnectFrame):
+ (WebCore::PerformanceTiming::navigationStart):
+ (WebCore::PerformanceTiming::unloadEventEnd):
+ (WebCore::PerformanceTiming::redirectStart):
+ (WebCore::PerformanceTiming::redirectEnd):
+ (WebCore::PerformanceTiming::fetchStart):
+ (WebCore::PerformanceTiming::domainLookupStart):
+ (WebCore::PerformanceTiming::domainLookupEnd):
+ (WebCore::PerformanceTiming::connectStart):
+ (WebCore::PerformanceTiming::connectEnd):
+ (WebCore::PerformanceTiming::requestStart):
+ (WebCore::PerformanceTiming::requestEnd):
+ (WebCore::PerformanceTiming::responseStart):
+ (WebCore::PerformanceTiming::responseEnd):
+ (WebCore::PerformanceTiming::domLoading):
+ (WebCore::PerformanceTiming::domInteractive):
+ (WebCore::PerformanceTiming::domContentLoaded):
+ (WebCore::PerformanceTiming::domComplete):
+ (WebCore::PerformanceTiming::loadEventStart):
+ (WebCore::PerformanceTiming::loadEventEnd):
+ (WebCore::PerformanceTiming::documentLoader):
+ (WebCore::PerformanceTiming::documentTiming):
+ (WebCore::PerformanceTiming::documentLoadTiming):
+ (WebCore::PerformanceTiming::resourceLoadTiming):
+ (WebCore::PerformanceTiming::resourceLoadTimeRelativeToAbsolute):
+ * page/PerformanceTiming.h: Renamed from WebCore/page/Timing.h.
+ (WebCore::PerformanceTiming::create):
+ * page/PerformanceTiming.idl: Renamed from WebCore/page/Timing.idl.
+
+2010-11-12 Eric Carlson <eric.carlson@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ Remove unused code from HTMLMediaElement
+ https://bugs.webkit.org/show_bug.cgi?id=49451
+
+ Just removing code, so no new tests.
+
+ * html/HTMLMediaElement.cpp: Removed unused functions.
+ * html/HTMLMediaElement.h:
+
+2010-11-12 Ryosuke Niwa <rniwa@webkit.org>
+
+ Unreviewed Xcode project fix.
+
+ * WebCore.xcodeproj/project.pbxproj:
+
+2010-11-12 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49473
+ WebKitCSSMatrix shouldn't inherit from StyleBase
+
+ No change in behavior, so no tests.
+
+ * css/WebKitCSSMatrix.cpp:
+ (WebCore::WebKitCSSMatrix::WebKitCSSMatrix): We don't inherit from StyleBase any more, so
+ no need to initialize always-null parent.
+ (WebCore::WebKitCSSMatrix::setMatrixValue): Since there was never a parent, useStrictParsing()
+ just returned true.
+
+ * css/WebKitCSSMatrix.h: Just inherit from RefCounted<WebKitCSSMatrix>. Removed unused default
+ constructor and copy constructor.
+
+ * html/canvas/WebGLRenderingContext.h: Removed an unnneded forward declaration.
+
+2010-11-12 Helder Correia <helder@sencha.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Path::addArc() does not set right angle direction on full arcs
+ https://bugs.webkit.org/show_bug.cgi?id=49138
+
+ Ensure correctness of nonzero winding rule for full arc paths.
+ Invert the sign of the span if the direction is counterclockwise.
+
+ Test: fast/canvas/canvas-arc-360-winding.html
+
+ * platform/graphics/qt/PathQt.cpp:
+ (WebCore::Path::addArc):
+
+2010-11-05 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Implement shadow DOM-aware event targeting and introduce EventContext to track the context of each event dispatch.
+ https://bugs.webkit.org/show_bug.cgi?id=46015
+
+ Test: fast/events/shadow-boundary-crossing-2.html
+
+ This patch adds the notion of EventContext (and a very similar-acting WindowEventContext, specifically
+ for DOMWindow), an abstraction that carries information around dispatching an event for any given Node.
+
+ This abstraction is necessary to ensure that events, fired from shadow DOM nodes are properly retargeted to
+ appear as if they are coming from their host, thus never exposing the shadow DOM nodes to the world outside.
+
+ * Android.mk: Added EventContext, WindowEventContext files.
+ * CMakeLists.txt: Ditto.
+ * GNUmakefile.am: Ditto.
+ * WebCore.gypi: Ditto.
+ * WebCore.pro: Ditto.
+ * WebCore.xcodeproj/project.pbxproj: Ditto.
+ * WebCore.vcproj/WebCore.vcproj: Ditto.
+ * dom/ContainerNode.cpp:
+ (WebCore::notifyChildInserted): Changed to be shadow DOM-aware.
+ * dom/EventContext.cpp: Added.
+ * dom/EventContext.h: Added.
+ * dom/Node.cpp:
+ (WebCore::Node::markAncestorsWithChildNeedsStyleRecalc): Changed to be shadow DOM-aware.
+ (WebCore::Node::createRendererIfNeeded): Ditto.
+ (WebCore::Node::parentOrHostNode): Added new helper method.
+ (WebCore::Node::enclosingLinkEventParentOrSelf): Changed to be shadow DOM-aware.
+ (WebCore::eventTargetRespectingSVGTargetRules): Collapsed two helper methods into one.
+ (WebCore::Node::getEventAncestors): Renamed and refactored to collect a vector of EventContexts.
+ (WebCore::Node::topEventContext): Added.
+ (WebCore::eventHasListeners): Changed to use EventContexts.
+ (WebCore::Node::dispatchGenericEvent): Ditto.
+ * dom/Node.h: Removed eventParentNode that's no longer needed, added parentOrHostNode decl,
+ and changed signature of eventAncestors to use EventContexts.
+ * dom/Text.cpp:
+ (WebCore::Text::createRenderer): Changed to be shadow DOM-aware.
+ * dom/WindowEventContext.cpp: Added.
+ * dom/WindowEventContext.h: Added.
+ * inspector/InspectorDOMAgent.cpp:
+ (WebCore::InspectorDOMAgent::getEventListenersForNode): Changed to use EventContexts.
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::updateMouseEventTargetNode): Removed code that's no longer necessary.
+ * rendering/RenderTextControlMultiLine.cpp:
+ (WebCore::RenderTextControlMultiLine::subtreeHasChanged): Removed event invocation that's
+ no longer necessary.
+ * rendering/ShadowElement.h: Made m_shadowParent a RefPtr to avoid stale references when parent
+ is deleted.
+ * rendering/TextControlInnerElements.cpp:
+ (WebCore::TextControlInnerTextElement::defaultEventHandler): Flipped the condition back
+ from where it was prior to r60418.
+ * svg/SVGElement.cpp: Removed eventParentNode that's no longer needed.
+ * svg/SVGElement.h: Ditto.
+
+2010-11-12 Ryuan Choi <ryuan.choi@samsung.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Remove unnecessary header for FontPlatformDataPango.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=46029
+
+ Remove unnecessary header includes.
+ No new tests, as there's no functionality.
+
+ * platform/graphics/pango/FontPlatformDataPango.cpp:
+
+2010-11-11 Abhishek Arya <inferno@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Not allow drag and drop across different origins.
+ https://bugs.webkit.org/show_bug.cgi?id=49098
+
+ Test: http/tests/security/drag-drop-different-origin.html
+
+ * page/DragController.cpp:
+ (WebCore::DragController::tryDocumentDrag):
+ * page/SecurityOrigin.cpp:
+ (WebCore::SecurityOrigin::canDropOnTarget):
+ * page/SecurityOrigin.h:
+
+2010-11-11 Alexander Pavlov <apavlov@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: Inspect element tooltip obscures element metrics
+ https://bugs.webkit.org/show_bug.cgi?id=47822
+
+ * inspector/InspectorController.cpp:
+ (WebCore::InspectorController::drawNodeHighlight):
+ (WebCore::InspectorController::drawElementTitle):
+
+2010-11-12 Luiz Agostini <luiz.agostini@openbossa.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Button's background style from default Qt Mobile Theme is overriding facebook's button style
+ https://bugs.webkit.org/show_bug.cgi?id=48198
+
+ Instead of creating gradients that goes from white to grey and cover the whole element the gradients
+ are created by varying the alpha channel of a dark color. This way the effect will not override the
+ background color of the elements.
+
+ * css/themeQtMobile.css:
+
+2010-11-12 Justin Schuh <jschuh@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Use a RefPtr inside ContainerNode::willRemove loop
+ https://bugs.webkit.org/show_bug.cgi?id=49237
+
+ Test: fast/innerHTML/innerHTML-iframe.html
+
+ * dom/ContainerNode.cpp:
+ (WebCore::ContainerNode::willRemove):
+
+2010-11-12 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: add more event listener breakpoint types, add support for regular breakpoint hit state, beautify hit rendering.
+ https://bugs.webkit.org/show_bug.cgi?id=49130
+
+ * English.lproj/localizedStrings.js:
+ * inspector/front-end/BreakpointManager.js:
+ (WebInspector.BreakpointManager.prototype.debuggerPaused):
+ (WebInspector.Breakpoint.jsBreakpointId):
+ (WebInspector.Breakpoint.prototype.get id):
+ * inspector/front-end/BreakpointsSidebarPane.js:
+ (WebInspector.EventListenerBreakpointsSidebarPane):
+ (WebInspector.EventListenerBreakpointsSidebarPane.prototype._createCategory):
+ * inspector/front-end/CallStackSidebarPane.js:
+ (WebInspector.CallStackSidebarPane.prototype._breakpointHit): don't call populateStatusMessage for JS breakpoints
+ since there is no specific message in that case.
+ * inspector/front-end/ScriptsPanel.js:
+ (WebInspector.ScriptsPanel):
+ (WebInspector.ScriptsPanel.prototype.reset):
+ * inspector/front-end/inspector.css:
+ (#elements-sidebar):
+ (.pane > .body):
+ (#scripts-sidebar):
+ (li.breakpoint-hit .breakpoint-hit-marker):
+
+2010-11-12 Andrey Kosyakov <caseq@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: [Extensions API] [refactoring] generate public API interfaces automatically
+ https://bugs.webkit.org/show_bug.cgi?id=49441
+
+ * inspector/front-end/ExtensionAPI.js:
+ (WebInspector.injectedExtensionAPI.PanelImpl):
+ (WebInspector.injectedExtensionAPI):
+ (WebInspector.injectedExtensionAPI.WatchExpressionSidebarPane):
+ (WebInspector.injectedExtensionAPI.AuditCategoryImpl):
+ (WebInspector.injectedExtensionAPI.AuditResultImpl):
+ (WebInspector.injectedExtensionAPI.AuditResultImpl.prototype.get Severity):
+ (WebInspector.injectedExtensionAPI.):
+
+2010-11-12 Renata Hodovan <reni@webkit.org>
+
+ Reviewed by Nikolas Zimmermann.
+
+ SVGFEDisplacementMapElement doesn't support dynamic invalidation
+ https://bugs.webkit.org/show_bug.cgi?id=49430
+
+ The dynamic changes are captured by the svgAttributeChanged function. Invalidate the filter primitive if necessary.
+
+ Tests: svg/dynamic-updates/SVGFEDisplacementMapElement-dom-in-attr.html
+ svg/dynamic-updates/SVGFEDisplacementMapElement-dom-in2-attr.html
+ svg/dynamic-updates/SVGFEDisplacementMapElement-dom-scale-attr.html
+ svg/dynamic-updates/SVGFEDisplacementMapElement-dom-xChannelSelector-attr.html
+ svg/dynamic-updates/SVGFEDisplacementMapElement-dom-yChannelSelector-attr.html
+ svg/dynamic-updates/SVGFEDisplacementMapElement-svgdom-in-prop.html
+ svg/dynamic-updates/SVGFEDisplacementMapElement-svgdom-in2-prop.html
+ svg/dynamic-updates/SVGFEDisplacementMapElement-svgdom-scale-prop.html
+ svg/dynamic-updates/SVGFEDisplacementMapElement-svgdom-xChannelSelector-prop.html
+ svg/dynamic-updates/SVGFEDisplacementMapElement-svgdom-yChannelSelector-prop.html
+
+ * svg/SVGFEDisplacementMapElement.cpp:
+ (WebCore::SVGFEDisplacementMapElement::svgAttributeChanged):
+ * svg/SVGFEDisplacementMapElement.h:
+
+2010-11-12 Andrey Kosyakov <caseq@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: [refactoring] do not use absolute positioning for tabbed panes
+ https://bugs.webkit.org/show_bug.cgi?id=49439
+
+ * inspector/front-end/TabbedPane.js:
+ (WebInspector.TabbedPane):
+ (WebInspector.TabbedPane.prototype.appendTab):
+ * inspector/front-end/inspector.css:
+ (.resource-view.visible):
+ (.resource-view .tabbed-pane-header):
+ (.resource-view-cookies):
+ (.tabbed-pane):
+ (.tabbed-pane-content):
+ * inspector/front-end/networkPanel.css:
+
+2010-11-12 John Knottenbelt <jknotten@chromium.org>
+
+ Reviewed by Steve Block.
+
+ Rename GeolocationControllerClient to GeolocationClient.
+ https://bugs.webkit.org/show_bug.cgi?id=49259
+
+ No new tests, renaming only.
+
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.order:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * page/GeolocationClient.h: Renamed from WebCore/page/GeolocationControllerClient.h.
+ (WebCore::GeolocationClient::~GeolocationClient):
+ * page/GeolocationController.cpp:
+ (WebCore::GeolocationController::GeolocationController):
+ * page/GeolocationController.h:
+ * page/Page.h:
+
+2010-11-12 Ilya Sherman <isherman@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ Remove some trailing whitespace
+ https://bugs.webkit.org/show_bug.cgi?id=49433
+
+ * platform/PopupMenuClient.h:
+ * platform/chromium/PopupMenuChromium.cpp:
+ (WebCore::PopupContainer::show):
+ (WebCore::PopupListBox::paintRow):
+ (WebCore::PopupListBox::scrollToRevealRow):
+ * platform/chromium/PopupMenuChromium.h:
+ * platform/chromium/SearchPopupMenuChromium.cpp:
+ * rendering/RenderMenuList.h:
+ (WebCore::RenderMenuList::toRenderMenuList):
+ * rendering/RenderTextControlSingleLine.h:
+ (WebCore::toRenderTextControlSingleLine):
+
+2010-11-12 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Csaba Osztrogonác.
+
+ [qt] script-clone tests added in r71895 fails on qt platform
+ https://bugs.webkit.org/show_bug.cgi?id=49429
+
+ Fixed parseEndElement to call ScriptElement's executeScript as supposed to that of ScriptController.
+
+ * dom/XMLDocumentParserQt.cpp:
+ (WebCore::XMLDocumentParser::parseEndElement):
+
+2010-11-05 MORITA Hajime <morrita@google.com>
+
+ Reviewed by Kent Tamura.
+
+ Refactoring: Return values of TextCheckingHelper::paragraphAlignedRange should form a class.
+ https://bugs.webkit.org/show_bug.cgi?id=49053
+
+ Replaced paragraphAlignedRange() function call into
+ TextCheckingParagraph class. The class encapsulates a range of a
+ paragraph, and its relation within associated checking range.
+ Instance variables of the class are computed lazily. So we can save unnecessary
+ memory allocation and DOM tree traversal.
+
+ No new tests, no behavior change.
+
+ * editing/Editor.cpp:
+ (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Replaced paragraphAlignedRange() call.
+ (WebCore::Editor::changeBackToReplacedString): Replaced paragraphAlignedRange() call.
+ * editing/TextCheckingHelper.cpp:
+ (WebCore::expandToParagraphBoundary):
+ (WebCore::TextCheckingParagraph::TextCheckingParagraph):
+ (WebCore::TextCheckingParagraph::~TextCheckingParagraph):
+ (WebCore::TextCheckingParagraph::expandRangeToNextEnd):
+ (WebCore::TextCheckingParagraph::invalidateParagraphRangeValues):
+ (WebCore::TextCheckingParagraph::rangeLength):
+ (WebCore::TextCheckingParagraph::paragraphRange):
+ (WebCore::TextCheckingParagraph::subrange):
+ (WebCore::TextCheckingParagraph::offsetTo):
+ (WebCore::TextCheckingParagraph::isEmpty):
+ (WebCore::TextCheckingParagraph::offsetAsRange):
+ (WebCore::TextCheckingParagraph::text):
+ (WebCore::TextCheckingParagraph::checkingStart):
+ (WebCore::TextCheckingParagraph::checkingEnd):
+ (WebCore::TextCheckingParagraph::checkingLength):
+ (WebCore::TextCheckingHelper::findFirstBadGrammar): Replaced paragraphAlignedRange() call.
+ (WebCore::TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange): Replaced paragraphAlignedRange() call.
+ * editing/TextCheckingHelper.h:
+ (WebCore::TextCheckingParagraph::textLength):
+ (WebCore::TextCheckingParagraph::textSubstring):
+ (WebCore::TextCheckingParagraph::textCharacters):
+ (WebCore::TextCheckingParagraph::textCharAt):
+ (WebCore::TextCheckingParagraph::checkingSubstring):
+ (WebCore::TextCheckingParagraph::checkingRangeMatches):
+ (WebCore::TextCheckingParagraph::isCheckingRangeCoveredBy):
+ (WebCore::TextCheckingParagraph::checkingRangeCovers):
+ (WebCore::TextCheckingParagraph::checkingRange):
+ (WebCore::TextCheckingParagraph::isTextEmpty):
+ (WebCore::TextCheckingParagraph::isRangeEmpty):
+
+2010-11-11 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Script runs more than once after a clone
+ https://bugs.webkit.org/show_bug.cgi?id=48966
+
+ The bug was caused by cloneElementWithoutChildren's not propagating isEvaluated flag,
+ which indicates whether or not the script has already started, and the fact
+ neither HTMLScriptRunner nor XMLDocumentParser was setting isEvaluated flag to true.
+
+ Fixed the bug by making cloneElementWithoutChildren call a virtual cloneElementWithoutAttributesAndChildren,
+ and override it in HTMLScriptElement and SVGScriptElement to propagate isEvaluated flag,
+ and replacing direct access to ScriptController by a call to new ScriptElementData::executeScript,
+ which updates the isEvaluated flag properly.
+
+ See also: http://www.whatwg.org/specs/web-apps/current-work/#already-started
+
+ Tests: fast/dom/script-clone-rerun-self.html
+ fast/dom/script-clone-rerun.html
+ svg/dom/SVGScriptElement/script-clone-rerun-self.svg
+ svg/dom/SVGScriptElement/script-clone-rerun.svg
+
+ * dom/Element.cpp:
+ (WebCore::Element::cloneElementWithoutChildren): Calls cloneElementWithoutChildren.
+ (WebCore::Element::cloneElementWithoutAttributesAndChildren): Extracted from cloneElementWithoutChildren.
+ * dom/Element.h:
+ * dom/ScriptElement.cpp:
+ (WebCore::ScriptElementData::ScriptElementData): Added isEvaluated flag to the argument list.
+ (WebCore::ScriptElementData::evaluateScript): Extracted from HTMLScriptRunner::executeScript.
+ (WebCore::ScriptElementData::executeScript): Renamed evaluated to isEvaluated.
+ (WebCore::ScriptElementData::ignoresLoadRequest): Renamed evaluated to isEvaluated.
+ * dom/ScriptElement.h: Renamed evaluated to isEvaluated.
+ (WebCore::ScriptElementData::isEvaluated): Added.
+ * dom/XMLDocumentParserLibxml2.cpp:
+ (WebCore::XMLDocumentParser::endElementNs): Calls ScriptElement::executeScript.
+ * html/HTMLScriptElement.cpp:
+ (WebCore::HTMLScriptElement::HTMLScriptElement): Added isEvaluated flag to the argument list.
+ (WebCore::HTMLScriptElement::create): Calls the constructor with the isEvaluated flag set to false.
+ (WebCore::HTMLScriptElement::cloneElementWithoutAttributesAndChildren): Propagates isEvaluated.
+ (WebCore::HTMLScriptElement::executeScript): Added; calls ScriptElementData::executeScript.
+ * html/HTMLScriptElement.h:
+ * html/parser/HTMLScriptRunner.cpp:
+ (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent): Added an assertion that was lost
+ in extracting ScriptElementData::executeScript.
+ (WebCore::HTMLScriptRunner::runScript): Calls ScriptElementData::executeScript.
+ * html/parser/HTMLScriptRunner.h:
+ * svg/SVGScriptElement.cpp:
+ (WebCore::SVGScriptElement::SVGScriptElement): Added isEvaluated flag to the argument list.
+ (WebCore::SVGScriptElement::create): Calls the constructor with the isEvaluated flag set to false.
+ (WebCore::SVGScriptElement::cloneElementWithoutAttributesAndChildren): Propagates isEvaluated.
+ (WebCore::SVGScriptElement::executeScript): Added; calls ScriptElementData::executeScript.
+ * svg/SVGScriptElement.h:
+
+2010-11-11 Shinichiro Hamaji <hamaji@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ REGRESSION: window.print in onload doesn't fire if there's an img
+ https://bugs.webkit.org/show_bug.cgi?id=48195
+
+ This issue was introduced in
+ https://bugs.webkit.org/show_bug.cgi?id=43658
+ This happens because FrameLoader::isLoading() is false while an
+ image is still loading. Now, window.print() happens after all
+ resources are loaded.
+
+ Also changed the name of a member variable as Darin suggested in Bug 43658.
+
+ Added a manual test as DRT doesn't support window.print() yet.
+
+ * loader/DocumentLoader.cpp:
+ (WebCore::DocumentLoader::DocumentLoader):
+ (WebCore::DocumentLoader::updateLoading):
+ * loader/DocumentLoader.h:
+ * page/DOMWindow.cpp:
+ (WebCore::DOMWindow::DOMWindow):
+ (WebCore::DOMWindow::print):
+ (WebCore::DOMWindow::finishedLoading):
+ * page/DOMWindow.h:
+
+2010-11-11 James Simonsen <simonjam@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ [chromium] Support letter spacing and fix whitespace wrapping on linux
+
+ When lines wrapped on RTL text, the whitespace was inserted before
+ the first character on the new line instead of at the end of the
+ previous line. This has been fixed.
+
+ The missing cluster information needed for letter spacing was hidden in
+ harfbuzz's attributes struct.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49405
+
+ * platform/graphics/chromium/FontLinux.cpp:
+ (WebCore::TextRunWalker::letterSpacing): Added.
+ (WebCore::TextRunWalker::isWordBreak): No need for isRTL.
+ (WebCore::TextRunWalker::setPadding): Ditto.
+ (WebCore::TextRunWalker::setGlyphXPositions): Support letter spacing. No whitespace before RTL text on new line.
+ (WebCore::glyphIndexForXPositionInScriptRun): Support letter spacing.
+
+2010-11-11 Kavita Kanetkar <kkanetkar@chromium.org>
+
+ Reviewed by Dumitru Daniliuc.
+
+ FileSystem: Fix a link error for non-chromium WebKit build
+ https://bugs.webkit.org/show_bug.cgi?id=49296
+
+ * WebCore.xcodeproj/project.pbxproj:
+ * inspector/InspectorFileSystemAgent.cpp:
+ (WebCore::InspectorFileSystemAgentCallbacks::didOpenFileSystem):
+ (WebCore::InspectorFileSystemAgentCallbacks::didReadDirectoryEntry):
+ (WebCore::InspectorFileSystemAgentCallbacks::didReadDirectoryEntries):
+ (WebCore::InspectorFileSystemAgentCallbacks::didCreateFileWriter):
+ (WebCore::InspectorFileSystemAgentCallbacks::didFail):
+ (WebCore::InspectorFileSystemAgent::revealFolderInOS):
+
+2010-11-11 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Antti Koivisto.
+
+ Cleanup after http://trac.webkit.org/changeset/71562, namely:
+ Make deferred request handle simpler.
+ Don't perform callbacks associated with network load starting
+ (e.g., willSendRequest) until the load is in fact sent to the network.
+ Make ResourceLoadScheduler a friend of ResourceLoader and make
+ ResourceLoader::start() protected to try to ensure loads actually
+ go through the scheduler.
+ https://bugs.webkit.org/show_bug.cgi?id=49351
+
+ Behavior should be covered by existing tests.
+
+ * loader/NetscapePlugInStreamLoader.cpp:
+ (WebCore::NetscapePlugInStreamLoader::create):
+ * loader/ResourceLoadScheduler.cpp:
+ (WebCore::ResourceLoadScheduler::servePendingRequests):
+ * loader/ResourceLoadScheduler.h:
+ (WebCore::ResourceLoadScheduler::HostInformation::limitRequests):
+ * loader/ResourceLoader.cpp:
+ (WebCore::ResourceLoader::init):
+ (WebCore::ResourceLoader::start):
+ (WebCore::ResourceLoader::setDefersLoading):
+ (WebCore::ResourceLoader::didCancel):
+ * loader/ResourceLoader.h:
+ (WebCore::ResourceLoader::reachedTerminalState):
+ (WebCore::ResourceLoader::request):
+ * loader/SubresourceLoader.cpp:
+ (WebCore::SubresourceLoader::create):
+ * loader/loader.cpp:
+ (WebCore::Loader::load):
+ (WebCore::Loader::willSendRequest):
+ * loader/loader.h:
+
+2010-11-11 Carol Szabo <carol.szabo@nokia.com>
+
+ Reviewed by Kent Tamura.
+
+ css2:order of counters in out-of flow content
+ https://bugs.webkit.org/show_bug.cgi?id=32412
+
+ Tests: fast/css/content/content-none.html
+ fast/css/content/content-normal.html
+
+ * css/CSSParser.cpp:
+ (WebCore::CSSParser::parseContent):
+ Added support for none, normal, open-quote, no-open-quote, etc.
+ identifiers in terms of parsing only, as this has effect on the
+ evaluation of counters. No further implementation needed for
+ none and normal, the others are parsed but do not work as expected.
+
+2010-11-11 Julie-Jeongeun-Kim <jiyuluna@gmail.com>
+
+ Reviewed by Kent Tamura.
+
+ SelectionStart, selectionEnd properties return wrong values when the selection is in a read-only input or textarea element
+ https://bugs.webkit.org/show_bug.cgi?id=25444
+
+ 'rootEditableElement()' is checked on RenderTextControl::indexForVisiblePosition.
+ It means that just editable elements can get selection information.
+ ReadOnly element is not editable element. So, it just returns and can't get correct selection information.
+ INPUT and TEXTAREA elements can be read-only but 'indexForVisiblePosition' doesn't accept them.
+ So, Selectable elements, INPUT and TEXTAREA, checking is added for that case.
+ Even if they are read-only, they are selectable.
+
+ new tests:fast/forms/selection-start-end-readonly.html
+
+ * html/HTMLInputElement.idl:
+ * rendering/RenderTextControl.cpp:
+ (WebCore::RenderTextControl::isSelectableElement):
+ (WebCore::RenderTextControl::indexForVisiblePosition):
+ * rendering/RenderTextControl.h:
+
+2010-11-11 Adam Barth <abarth@webkit.org>
+
+ Reviewed by David Levin.
+
+ Add some RefPtrs to be on the safe side
+ https://bugs.webkit.org/show_bug.cgi?id=49301
+
+ Hopefully no behavior change.
+
+ * html/parser/HTMLTreeBuilder.cpp:
+ (WebCore::HTMLTreeBuilder::processIsindexStartTagForInBody):
+
+2010-11-11 Chris Rogers <crogers@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Fix Accelerate.framework issues in VectorMath 32-bit ppc & i386 vs. other architectures (64-bit, ARM, etc.).
+ On the Mac we use the highly optimized versions in Accelerate.framework
+ In 32-bit mode (__ppc__ or __i386__) <Accelerate/Accelerate.h> includes <vecLib/vDSP_translate.h> which defines macros
+ of the same name as our namespaced function names, so we must handle this case differently.
+ Other architectures (64bit, ARM, etc.) do not include this header file.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49112
+
+ No new tests since audio API is not yet implemented.
+
+ * platform/audio/VectorMath.cpp:
+ (WebCore::VectorMath::vsmul):
+ (WebCore::VectorMath::vadd):
+
+2010-11-11 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Darin Adler.
+
+ <rdar://problem/8657116> fast/text/justification-padding-mid-word.html fails on Windows
+ https://bugs.webkit.org/show_bug.cgi?id=49378
+
+ * platform/graphics/win/UniscribeController.cpp:
+ (WebCore::UniscribeController::shapeAndPlaceItem): For all characters that need to be treated
+ as zero-width spaces, substitute the space glyph with zero advance. Apply justification padding
+ and word spacing only at characters treated as (non-zero-width) spaces.
+
+2010-11-11 Darin Adler <darin@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Harden some string functions against large lengths
+ https://bugs.webkit.org/show_bug.cgi?id=49293
+
+ * rendering/RenderText.cpp:
+ (WebCore::makeCapitalized): Check before incrementing length.
+
+2010-11-10 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ bufferData/bufferSubData should not crash with null data input
+ https://bugs.webkit.org/show_bug.cgi?id=49350
+
+ * html/canvas/WebGLRenderingContext.cpp: return early if input data is null.
+ (WebCore::WebGLRenderingContext::bufferData):
+ (WebCore::WebGLRenderingContext::bufferSubData):
+
+2010-11-10 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Implement UNPACK_COLORSPACE_CONVERSION_WEBGL
+ https://bugs.webkit.org/show_bug.cgi?id=47196
+
+ This is the first patch for this bug. We add constants and methods, but haven't hooked it up with texture uploading yet. Also, in order to check in constants.html, we need to remove out-dated constants, and update affected tests correspondingly.
+
+ Test: fast/canvas/webgl/constants.html
+
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::WebGLRenderingContext): Move init code to initializeNewContext.
+ (WebCore::WebGLRenderingContext::initializeNewContext): Ditto.
+ (WebCore::WebGLRenderingContext::getParameter): Implement UNPACK_COLORSPACE_CONVERSION_WEBGL.
+ (WebCore::WebGLRenderingContext::pixelStorei): Ditto.
+ * html/canvas/WebGLRenderingContext.h: Add a member to track UNPACK_COLORSPACE_CONVERSION_WEBGL setting.
+ * html/canvas/WebGLRenderingContext.idl: Update constants.
+ * platform/graphics/GraphicsContext3D.h: Update constants.
+
+2010-11-11 Chris Marrin <cmarrin@apple.com>
+
+ Reviewed by James Robinson.
+
+ Add multisampling support to DrawingBuffer.
+ https://bugs.webkit.org/show_bug.cgi?id=49206
+
+ Added support for the GL_ANGLE_framebuffer_blit and GL_ANGLE_framebuffer_multisample
+ extensions to Extensions3D. Then I use these to add multisample support to DrawingBuffer.
+
+ This re-lands changes rolled out by http://trac.webkit.org/changeset/71839. It includes
+ the change from http://trac.webkit.org/changeset/71831 and additional changes to
+ DrawingBufferChromium.cpp which cause the broken canvas tests to pass.
+
+ * platform/graphics/Extensions3D.h:
+ * platform/graphics/chromium/DrawingBufferChromium.cpp:
+ (WebCore::DrawingBuffer::DrawingBuffer):
+ (WebCore::DrawingBuffer::~DrawingBuffer):
+ (WebCore::DrawingBuffer::publishToPlatformLayer):
+ (WebCore::DrawingBuffer::didReset):
+ (WebCore::DrawingBuffer::platformColorBuffer):
+ * platform/graphics/chromium/Extensions3DChromium.h:
+ (WebCore::Extensions3DChromium::blitFramebuffer):
+ (WebCore::Extensions3DChromium::renderbufferStorageMultisample):
+ * platform/graphics/gpu/DrawingBuffer.cpp:
+ (WebCore::DrawingBuffer::create):
+ (WebCore::DrawingBuffer::clear):
+ (WebCore::DrawingBuffer::reset):
+ (WebCore::DrawingBuffer::commit):
+ (WebCore::DrawingBuffer::bind):
+ * platform/graphics/gpu/DrawingBuffer.h:
+ (WebCore::DrawingBuffer::multisample):
+ * platform/graphics/gpu/mac/DrawingBufferMac.mm:
+ (WebCore::DrawingBuffer::DrawingBuffer):
+ (WebCore::DrawingBuffer::didReset):
+ (WebCore::DrawingBuffer::platformColorBuffer):
+ * platform/graphics/opengl/Extensions3DOpenGL.cpp:
+ (WebCore::Extensions3DOpenGL::supports):
+ (WebCore::Extensions3DOpenGL::blitFramebuffer):
+ (WebCore::Extensions3DOpenGL::renderbufferStorageMultisample):
+ * platform/graphics/opengl/Extensions3DOpenGL.h:
+ * platform/graphics/skia/ImageBufferSkia.cpp:
+ (WebCore::ImageBuffer::draw):
+
+2010-11-11 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ https://bugs.webkit.org/show_bug.cgi?id=48664
+
+ Make repaint invalidation work with flipped blocks ("rl" and "bt" writing modes).
+
+ This patch disables the layout state for flipped blocks, since the paint offset isn't right.
+
+ Bugs in the overflow sides for lines have been fixed. before/AfterSideVisible/LayoutOverflowForLine
+ now respect flipping (and don't incorrectly change sides). This is a very confusing aspect of
+ the overflow stuff (and at some point we should consider renaming top/left/right/bottom since they
+ aren't physical).
+
+ offsetFromContainer and mapLocalToContainer remain physical and refer to the top left offset.
+ This means at every step up you convert to the correct physical coordinate. It also means these
+ functions will be unreliable during layout for flipped blocks. At first glance, this seems to be
+ more or less ok.
+
+ computeRectForRepaint now delays flipping conversions until you cross a writing-mode boundary. This
+ allows for documents to be fully flipped and repaint during layout can still be reliable. This is
+ critical for incremental line layout repainting.
+
+ Added new tests in fast/repaint and also rebaselined the tests in that directory because I'm tired
+ of all the stale results and failures.
+
+ * editing/SelectionController.cpp:
+ (WebCore::SelectionController::absoluteBoundsForLocalRect):
+ (WebCore::SelectionController::paintCaret):
+ * rendering/InlineTextBox.cpp:
+ (WebCore::InlineTextBox::selectionRect):
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::layoutBlock):
+ (WebCore::RenderBlock::layoutOnlyPositionedObjects):
+ (WebCore::RenderBlock::paintSelection):
+ * rendering/RenderBlockLineLayout.cpp:
+ (WebCore::RenderBlock::beforeSideVisibleOverflowForLine):
+ (WebCore::RenderBlock::afterSideVisibleOverflowForLine):
+ (WebCore::RenderBlock::beforeSideLayoutOverflowForLine):
+ (WebCore::RenderBlock::afterSideLayoutOverflowForLine):
+ * rendering/RenderBox.cpp:
+ (WebCore::RenderBox::layout):
+ (WebCore::RenderBox::mapLocalToContainer):
+ (WebCore::RenderBox::offsetFromContainer):
+ (WebCore::RenderBox::clippedOverflowRectForRepaint):
+ (WebCore::RenderBox::computeRectForRepaint):
+ (WebCore::RenderBox::flipForWritingMode):
+ (WebCore::RenderBox::locationOffsetIncludingFlipping):
+ * rendering/RenderBox.h:
+ * rendering/RenderFlexibleBox.cpp:
+ (WebCore::RenderFlexibleBox::layoutBlock):
+ * rendering/RenderInline.cpp:
+ (WebCore::RenderInline::clippedOverflowRectForRepaint):
+ * rendering/RenderSlider.cpp:
+ (WebCore::RenderSlider::layout):
+ * rendering/RenderTable.cpp:
+ (WebCore::RenderTable::layout):
+ * rendering/RenderTableRow.cpp:
+ (WebCore::RenderTableRow::layout):
+ * rendering/RenderTableSection.cpp:
+ (WebCore::RenderTableSection::layout):
+ (WebCore::RenderTableSection::layoutRows):
+ * rendering/RenderView.cpp:
+ (WebCore::RenderView::computeRectForRepaint):
+ * rendering/ShadowElement.cpp:
+ (WebCore::ShadowBlockElement::layoutAsPart):
+
+2010-11-11 Chris Marrin <cmarrin@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ Share code between Mac (CA) and Windows (CACF) GraphicsLayer implementations
+ https://bugs.webkit.org/show_bug.cgi?id=49388
+
+ Renamed GraphicsLayerCA.* to GraphicsLayerMac.*
+
+ * WebCore.xcodeproj/project.pbxproj:
+ * platform/graphics/mac/GraphicsLayerCA.h: Removed.
+ * platform/graphics/mac/GraphicsLayerCA.mm: Removed.
+ * platform/graphics/mac/GraphicsLayerMac.h: Copied from WebCore/platform/graphics/mac/GraphicsLayerCA.h.
+ * platform/graphics/mac/GraphicsLayerMac.mm: Copied from WebCore/platform/graphics/mac/GraphicsLayerCA.mm.
+
+2010-11-11 Kenneth Russell <kbr@google.com>
+
+ Reviewed by James Robinson.
+
+ [chromium] Missing adoptPtr in GraphicsContext3DSkia.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=49359
+
+ * platform/graphics/skia/GraphicsContext3DSkia.cpp:
+ (WebCore::GraphicsContext3D::getImageData):
+
+2010-11-11 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Adam Roben.
+
+ <rdar://problem/8113511> Enable auto-hyphenation
+
+ * WebCore.vcproj/WebCore.vcproj: Included HyphenationCF.cpp instead of Hyphenation.cpp.
+ * platform/text/cf/HyphenationCF.cpp: Added functions and definitions for Windows to look up CFStringGetHyphenationLocationBeforeIndex
+ and CFStringIsHyphenationAvailableForLocale at runtime.
+ (wkCFStringGetHyphenationLocationBeforeIndex):
+ (wkCFStringIsHyphenationAvailableForLocale):
+ (WebCore::lastHyphenLocation): Added a cast.
+
+2010-11-11 Eric Carlson <eric.carlson@apple.com>
+
+ Reviewed by Eric Seidel.
+
+ video-pause-immediately.html sometimes fails
+ https://bugs.webkit.org/show_bug.cgi?id=49397
+
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::playInternal): Don't bother calling invalidateCachedTime, it
+ will be called from updatePlayState.
+ (WebCore::HTMLMediaElement::pauseInternal): Don't bother calling refreshCachedTime, it
+ will be called from updatePlayState.
+ (WebCore::HTMLMediaElement::updatePlayState): Call refreshCachedTime after telling the media
+ engine to pause so we cache the post-paused time.
+
+2010-11-11 Mihai Parparita <mihaip@chromium.org>
+
+ Unreviewed rollout.
+
+ Roll out r71827 and r71831, which caused many GPU canvas test failures.
+
+ * platform/graphics/Extensions3D.h:
+ * platform/graphics/chromium/DrawingBufferChromium.cpp:
+ (WebCore::DrawingBuffer::reset):
+ (WebCore::DrawingBuffer::getRenderingResultsAsTexture):
+ * platform/graphics/chromium/Extensions3DChromium.h:
+ * platform/graphics/gpu/DrawingBuffer.cpp:
+ (WebCore::DrawingBuffer::create):
+ (WebCore::DrawingBuffer::clear):
+ (WebCore::DrawingBuffer::bind):
+ * platform/graphics/gpu/DrawingBuffer.h:
+ * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
+ (WebCore::SharedGraphicsContext3D::create):
+ * platform/graphics/gpu/mac/DrawingBufferMac.mm:
+ (WebCore::DrawingBuffer::DrawingBuffer):
+ (WebCore::DrawingBuffer::reset):
+ * platform/graphics/opengl/Extensions3DOpenGL.cpp:
+ (WebCore::Extensions3DOpenGL::supports):
+ * platform/graphics/opengl/Extensions3DOpenGL.h:
+ * platform/graphics/skia/ImageBufferSkia.cpp:
+ (WebCore::ImageBuffer::draw):
+
+2010-11-11 Eric Carlson <eric.carlson@apple.com>
+
+ Restore the portion of the ChangeLog removed in my last commit.
+
+2010-11-11 Eric Carlson <eric.carlson@apple.com>
+
+ Unreviewed Leoaprd build fix.
+
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::invalidateCachedTime): Make the const a double.
+
+2010-11-11 Dirk Schulze <krit@webkit.org>
+
+ Unreviewed Qt build fix.
+
+ SVGAnimation calcMode 'spline' should be useable for from-to and from-by animations
+ https://bugs.webkit.org/show_bug.cgi?id=49284
+
+ * svg/SVGAnimationElement.cpp:
+ (WebCore::SVGAnimationElement::calculatePercentFromKeyPoints):
+ (WebCore::SVGAnimationElement::startedActiveInterval):
+
+2010-11-11 Hans Wennborg <hans@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ IndexedDB: signal IDBFactoryBackendInterface destruction to embedder
+ https://bugs.webkit.org/show_bug.cgi?id=49313
+
+ Define IDBFactoryBackendInterface destructor out-of-line to allow
+ for embedder-specific implementation. For Chromium, have the
+ destructor call ChromiumBridge::idbShutdown().
+
+ * platform/chromium/ChromiumBridge.h:
+ * storage/IDBFactoryBackendInterface.cpp:
+ (WebCore::IDBFactoryBackendInterface::~IDBFactoryBackendInterface):
+ * storage/IDBFactoryBackendInterface.h:
+ * storage/chromium/IDBFactoryBackendInterface.cpp:
+ (WebCore::IDBFactoryBackendInterface::~IDBFactoryBackendInterface):
+
+2010-11-11 Dirk Schulze <krit@webkit.org>
+
+ Reviewed by Nikolas Zimmermann.
+
+ SVGAnimation calcMode 'spline' should be useable for from-to and from-by animations
+ https://bugs.webkit.org/show_bug.cgi?id=49284
+
+ Add support for from-to and from-by animations in combination with calcMode 'spline' for SVGAnimations.
+
+ Tests: svg/animations/animate-calcMode-spline-by.html
+ svg/animations/animate-calcMode-spline-from-by.html
+ svg/animations/animate-calcMode-spline-from-to.html
+ svg/animations/animate-calcMode-spline-to.html
+ svg/animations/animate-calcMode-spline-values.html
+
+ * svg/SVGAnimationElement.cpp:
+ (WebCore::SVGAnimationElement::calculateKeyTimesIndex): Added to share more code.
+ (WebCore::SVGAnimationElement::calculatePercentFromKeyPoints):
+ (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
+ (WebCore::SVGAnimationElement::startedActiveInterval):
+ (WebCore::SVGAnimationElement::updateAnimation):
+ * svg/SVGAnimationElement.h:
+
+2010-11-10 Chris Marrin <cmarrin@apple.com>
+
+ Reviewed by James Robinson.
+
+ Add multisampling support to DrawingBuffer.
+ https://bugs.webkit.org/show_bug.cgi?id=49206
+
+ Added support for the GL_ANGLE_framebuffer_blit and GL_ANGLE_framebuffer_multisample
+ extensions to Extensions3D. Then I use these to add multisample support to DrawingBuffer.
+
+ * platform/graphics/Extensions3D.h:
+ * platform/graphics/chromium/DrawingBufferChromium.cpp:
+ (WebCore::DrawingBuffer::platformColorBuffer):
+ * platform/graphics/chromium/Extensions3DChromium.h:
+ (WebCore::Extensions3DChromium::blitFramebuffer):
+ (WebCore::Extensions3DChromium::renderbufferStorageMultisample):
+ * platform/graphics/gpu/DrawingBuffer.cpp:
+ (WebCore::DrawingBuffer::create):
+ (WebCore::DrawingBuffer::clear):
+ (WebCore::DrawingBuffer::reset):
+ (WebCore::DrawingBuffer::commit):
+ (WebCore::DrawingBuffer::bind):
+ * platform/graphics/gpu/DrawingBuffer.h:
+ (WebCore::DrawingBuffer::multisample):
+ * platform/graphics/gpu/mac/DrawingBufferMac.mm:
+ (WebCore::DrawingBuffer::DrawingBuffer):
+ (WebCore::DrawingBuffer::platformLayer):
+ (WebCore::DrawingBuffer::platformColorBuffer):
+ * platform/graphics/opengl/Extensions3DOpenGL.cpp:
+ (WebCore::Extensions3DOpenGL::supports):
+ (WebCore::Extensions3DOpenGL::blitFramebuffer):
+ (WebCore::Extensions3DOpenGL::renderbufferStorageMultisample):
+ * platform/graphics/opengl/Extensions3DOpenGL.h:
+ * platform/graphics/skia/ImageBufferSkia.cpp:
+ (WebCore::ImageBuffer::draw):
+
+2010-11-11 Eric Carlson <eric.carlson@apple.com>
+
+ Build fix after r71824.
+
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::invalidateCachedTime): Use an explicit cast from double to float.
+ (WebCore::HTMLMediaElement::currentTime): Ditto.
+
+2010-11-11 Eric Carlson <eric.carlson@apple.com>
+
+ Reviewed by Antti Koivisto.
+
+ Lots of time spent in MediaPlayerPrivate::currentTime() when playing multiple videos.
+ https://bugs.webkit.org/show_bug.cgi?id=49009
+
+ Make it possible for HTMLMediaElement to cache the movie time and report 'currentTime'
+ as [cached time + elapsed wall time]. The media engine returns the maximum duration it
+ is safe to calculate time before resampling the actual movie time with the new
+ maximumDurationToCacheMovieTime method. Because this may be different for different media
+ engines the default return value is 0, making it an opt-in feature.
+
+ No new tests were added because the existing tests already check currentTime, and because
+ it is only possible to look for drift between the calculated and actual media time by
+ calculating the time AND getting the actual media time - which the defeats the purpose of
+ the change. Building with LOG_CACHED_TIME_WARNINGS defined enables code that does both
+ and logs warnings when the delta between calculated and observed is greater than 0.01.
+
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize new member variables.
+ (WebCore::HTMLMediaElement::prepareForLoad): Force a time resync before setting m_paused.
+ (WebCore::HTMLMediaElement::seek): Force a time resync before getting the current time before
+ seeking so there is no drift.
+ (WebCore::HTMLMediaElement::refreshCachedTime): New, update the cached movie time and the
+ wall clock time it was recorded.
+ (WebCore::HTMLMediaElement::invalidateCachedTime): New, flag the cached time as invalid.
+ (WebCore::HTMLMediaElement::currentTime): Use a cached movie time for as long as the media
+ engine says it is safe. Lots of optional logging can be enabled to help ports fine tune
+ the maximum cache interval.
+ (WebCore::HTMLMediaElement::ended): Force a time resync before setting m_paused.
+ (WebCore::HTMLMediaElement::endScrubbing): Fix a typo in the logging.
+ (WebCore::HTMLMediaElement::scheduleTimeupdateEvent): Call currentTime() instead of calling
+ MediaPlayer so we use the cached time as much as it possible.
+ (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Invalidate cached time because the engine
+ seeked.
+ (WebCore::HTMLMediaElement::mediaPlayerRateChanged): Ditto.
+ (WebCore::HTMLMediaElement::updatePlayState): Invalidate cached time before changing m_paused.
+ * html/HTMLMediaElement.h:
+
+ * platform/graphics/MediaPlayer.cpp:
+ (WebCore::MediaPlayer::maximumDurationToCacheMovieTime): New.
+ * platform/graphics/MediaPlayer.h:
+ * platform/graphics/MediaPlayerPrivate.h:
+ (WebCore::MediaPlayerPrivateInterface::maximumDurationToCacheMovieTime): New.
+
+ * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
+ (WebCore::MediaPlayerPrivate::maximumDurationToCacheMovieTime): New, say it is safe to cache
+ time for five seconds (based on lots of experimenting with LOG_CACHED_TIME_WARNINGS enabled).
+
+2010-11-11 Adam Roben <aroben@apple.com>
+
+ Windows build fix after r71816
+
+ r71816 renamed
+ WebCore/platform/graphics/cairo/FontPlatformDataCairoWin.h to
+ WebCore/platform/graphics/win/FontPlatformData.h. This made Apple's
+ Windows port pick up this header in preference to
+ WebCore/platform/cg/FontPlatformData.h, thus breaking the build. I
+ moved the file to
+ WebCore/platform/graphics/win/cairo/FontPlatformData.h so it won't be
+ picked up by Apple's Windows build.
+
+ * WebCore.vcproj/WebCore.vcproj: Updated for file move and let VS
+ re-sort the files.
+
+ * WebCore.vcproj/WebCoreCairo.vsprops: Added
+ platform/graphics/win/cairo to the include path.
+
+ * WebCore.vcproj/copyForwardingHeaders.cmd: Copy files from
+ platform/graphics/win/cairo to $WebKitOutputDir.
+
+ * platform/graphics/cg/FontPlatformData.h: Touched to force this file
+ to be recopied for Apple's build.
+
+ * platform/graphics/win/cairo/FontPlatformData.h: Renamed from
+ WebCore/platform/graphics/win/FontPlatformData.h.
+
+2010-11-11 Balazs Kelemen <kbalazs@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt][WK2] Implement BackingStore
+ https://bugs.webkit.org/show_bug.cgi?id=49377
+ No change in functionality so no tests.
+
+ Add a way to hand off ownership of the QPainter and the underlying
+ QPaintDevice to the GraphicsContext.
+ * platform/graphics/GraphicsContext.h:
+ * platform/graphics/qt/GraphicsContextQt.cpp:
+ (WebCore::GraphicsContextPlatformPrivate::takeOwnershipOfPlatformContext):
+ (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
+ (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
+ (WebCore::GraphicsContext::takeOwnershipOfPlatformContext):
+
+2010-11-11 Ryuan Choi <ryuan.choi@samsung.com>
+
+ Reviewed by Adam Barth.
+
+ [GTK] Move font related files.
+ https://bugs.webkit.org/show_bug.cgi?id=48116
+
+ Move pango and freetype related files to share non-GTK+ platforms.
+
+ No new tests because this is pure refactoring.
+
+ * CMakeListsEfl.txt:
+ * GNUmakefile.am:
+ * WebCore.vcproj/WebCore.vcproj:
+ * platform/graphics/cairo/FontCacheFreeType.cpp: Removed.
+ * platform/graphics/cairo/FontCustomPlatformData.cpp: Removed.
+ * platform/graphics/cairo/FontPlatformData.h: Removed.
+ * platform/graphics/cairo/FontPlatformDataFreeType.cpp: Removed.
+ * platform/graphics/cairo/FontPlatformDataFreeType.h: Removed.
+ * platform/graphics/cairo/GlyphPageTreeNodeCairo.cpp: Removed.
+ * platform/graphics/cairo/SimpleFontDataCairo.cpp: Removed.
+ * platform/graphics/freetype: Added.
+ * platform/graphics/freetype/FontCacheFreeType.cpp: Copied from WebCore/platform/graphics/cairo/FontCacheFreeType.cpp.
+ * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp: Copied from WebCore/platform/graphics/cairo/FontCustomPlatformData.cpp.
+ * platform/graphics/freetype/FontPlatformData.h: Copied from WebCore/platform/graphics/cairo/FontPlatformDataFreeType.h.
+ * platform/graphics/freetype/FontPlatformDataFreeType.cpp: Copied from WebCore/platform/graphics/cairo/FontPlatformDataFreeType.cpp.
+ * platform/graphics/freetype/GlyphPageTreeNodeFreeType.cpp: Copied from WebCore/platform/graphics/cairo/GlyphPageTreeNodeCairo.cpp.
+ * platform/graphics/freetype/SimpleFontDataFreeType.cpp: Copied from WebCore/platform/graphics/cairo/SimpleFontDataCairo.cpp.
+ * platform/graphics/gtk/FontCachePango.cpp: Removed.
+ * platform/graphics/gtk/FontCustomPlatformDataPango.cpp: Removed.
+ * platform/graphics/gtk/FontPlatformDataPango.cpp: Removed.
+ * platform/graphics/gtk/FontPlatformDataPango.h: Removed.
+ * platform/graphics/gtk/GlyphPageTreeNodePango.cpp: Removed.
+ * platform/graphics/gtk/SimpleFontDataPango.cpp: Removed.
+ * platform/graphics/pango: Added.
+ * platform/graphics/pango/FontCachePango.cpp: Copied from WebCore/platform/graphics/gtk/FontCachePango.cpp.
+ * platform/graphics/pango/FontCustomPlatformDataPango.cpp: Copied from WebCore/platform/graphics/gtk/FontCustomPlatformDataPango.cpp.
+ * platform/graphics/pango/FontPlatformData.h: Copied from WebCore/platform/graphics/gtk/FontPlatformDataPango.h.
+ * platform/graphics/pango/FontPlatformDataPango.cpp: Copied from WebCore/platform/graphics/gtk/FontPlatformDataPango.cpp.
+ * platform/graphics/pango/GlyphPageTreeNodePango.cpp: Copied from WebCore/platform/graphics/gtk/GlyphPageTreeNodePango.cpp.
+ * platform/graphics/pango/SimpleFontDataPango.cpp: Copied from WebCore/platform/graphics/gtk/SimpleFontDataPango.cpp.
+ * platform/graphics/win/FontPlatformData.h: Copied from WebCore/platform/graphics/win/FontPlatformDataCairoWin.h.
+ * platform/graphics/win/FontPlatformDataCairoWin.h: Removed.
+
+2010-11-11 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: size of resources in summary is 0
+ when there are redirects.
+ https://bugs.webkit.org/show_bug.cgi?id=49242
+
+ * inspector/front-end/NetworkPanel.js:
+ (WebInspector.NetworkPanel.prototype._updateSummaryBar):
+
+2010-11-11 Ben Murdoch <benm@google.com>
+
+ Reviewed by Darin Fisher.
+
+ document.createTouch and document.createTouchList should specify EnabledAtRuntime
+ https://bugs.webkit.org/show_bug.cgi?id=49324
+
+ The createTouch and createTouchList APIs added to Document.idl in
+ http://trac.webkit.org/changeset/70047 should have EnabledAtRuntime
+ specified as touch related features are controlled by a
+ RuntimeEnabledFeature flag in addition to a compile time guard.
+
+ No new tests. This should have been part of r70047 and
+ that revision provided adequate tests of the new feature.
+
+ * bindings/generic/RuntimeEnabledFeatures.h:
+ (WebCore::RuntimeEnabledFeatures::createTouchEnabled):
+ (WebCore::RuntimeEnabledFeatures::createTouchListEnabled):
+ * dom/Document.idl: Add EnabledAtRuntime specifier to the
+ idl methods.
+
+2010-11-09 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: Provide context menu item 'Reveal in Elements Panel'
+ on elements in inspector UI.
+ https://bugs.webkit.org/show_bug.cgi?id=49161
+
+ * English.lproj/localizedStrings.js:
+ * inspector/front-end/ElementsTreeOutline.js:
+ (WebInspector.ElementsTreeOutline.prototype._contextMenuEventFired.focusElement):
+ (WebInspector.ElementsTreeOutline.prototype._contextMenuEventFired):
+ * inspector/front-end/ObjectPropertiesSection.js:
+ (WebInspector.ObjectPropertyTreeElement.prototype.update):
+ (WebInspector.ObjectPropertyTreeElement.prototype._contextMenuEventFired):
+ (WebInspector.ObjectPropertyTreeElement.prototype._contextMenuEventFired.revealElement):
+
+2010-11-11 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: Audit panel toolbar icon shifts left when clicked.
+ https://bugs.webkit.org/show_bug.cgi?id=48766
+
+ * inspector/front-end/Images/auditsIcon.png:
+
+2010-11-11 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ Reviewed by Dirk Schulze.
+
+ chrome.dll!WebCore::SVGLengthInternal::valueInSpecifiedUnitsAttrGetter ReadAV@NULL (4cf97a4f3ebe8006a2f5ffcc5bc10aeb)
+ https://bugs.webkit.org/show_bug.cgi?id=49331
+
+ Test: svg/dom/SVGPolygonElement-baseVal-list-removal-crash.html
+
+ * svg/properties/SVGListProperty.h:
+ (WebCore::SVGListProperty::replaceItemValuesAndWrappers): Avoid premature deletion of 'oldItem'.
+ (WebCore::SVGListProperty::removeItemValuesAndWrappers): Ditto.
+
+2010-11-11 Kenneth Rohde Christiansen <kenneth@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ Make it possible to override the visibleContentRect in the case the
+ client is handling the scrolling. This is similar to what the iPhone does.
+
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::visibleContentRect):
+ * platform/ScrollView.h:
+ (WebCore::ScrollView::setActualVisibleContentRect):
+
+2010-11-11 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ FrameView: Don't clip to visibleContentRect in paintEntireContents mode
+ https://bugs.webkit.org/show_bug.cgi?id=49375
+
+ In paintEntireContents mode (used in combination with tiling) we
+ cannot clip to the actual visibleContentRect as the clipped regions
+ will not be updated again on scroll. If paintsEntireContents is
+ enabled, return the actual content rect.
+
+ * page/FrameView.cpp:
+ (WebCore::FrameView::windowClipRect):
+
+2010-11-10 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ Reviewed by Dirk Schulze.
+
+ Convert SVGMatrix/SVGTransform/SVGTransformList to the new SVGPropertyTearOff concept
+ https://bugs.webkit.org/show_bug.cgi?id=49311
+
+ Move the last list type, SVGTransformList, and the last POD types, SVGMatrix & SVGTransform, over to the new SVGPropertyTearOff concept.
+ Removes the need for a custom JSSVGMatrix/V8SVGMatrix implementation, it's all integrated within the bindings now.
+
+ Tests: svg/W3C-SVG-1.1-SE/coords-dom-01-f.svg
+ svg/W3C-SVG-1.1-SE/coords-dom-02-f.svg
+ svg/W3C-SVG-1.1-SE/coords-dom-03-f.svg
+ svg/W3C-SVG-1.1-SE/coords-dom-04-f.svg
+ svg/W3C-SVG-1.1-SE/types-dom-01-b.svg
+ svg/W3C-SVG-1.1-SE/types-dom-02-f.svg
+ svg/W3C-SVG-1.1-SE/types-dom-03-b.svg
+ svg/W3C-SVG-1.1-SE/types-dom-04-b.svg
+ svg/W3C-SVG-1.1-SE/types-dom-05-b.svg
+ svg/dom/SVGMatrix.html
+ svg/dom/SVGTransform.html
+ svg/dom/SVGTransformList.html
+
+ * Android.jscbindings.mk: Removed JSSVGMatrixCustom.cpp.
+ * Android.v8bindings.mk: Removed V8SVGMatrixCustom.cpp.
+ * CMakeLists.txt: Remove JSSVGMatrixCustom.cpp.
+ * GNUmakefile.am: Ditto. Add SVGAnimatedTransformListPropertyTearOff.h/SVGStaticPropertyWithParentTearOff.h/SVGTransformListPropertyTearOff.h/SVGAnimatedTransformList.h/SVGMatrix.h to build.
+ * WebCore.gypi: Ditto.
+ * WebCore.pro: Ditto.
+ * WebCore.vcproj/WebCore.vcproj: Ditto.
+ * WebCore.xcodeproj/project.pbxproj: Ditto.
+ * bindings/js/JSBindingsAllInOne.cpp: Remove JSSVGMatrixCustom.cpp
+ * bindings/js/JSSVGMatrixCustom.cpp: Removed.
+ * bindings/scripts/CodeGenerator.pm: Convert SVGMatrix/SVGTransform/SVGTransformList to the new concept.
+ * bindings/scripts/CodeGeneratorJS.pm: Ditto.
+ * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
+ * bindings/scripts/CodeGeneratorV8.pm: Ditto.
+ * bindings/v8/custom/V8SVGMatrixCustom.cpp: Removed.
+ * svg/DeprecatedSVGAnimatedPropertyTraits.h: Remove SVGTransformList handling.
+ * svg/DeprecatedSVGAnimatedTemplate.h: Ditto.
+ * svg/SVGAnimateTransformElement.cpp: Adapt to SVGTransformList API changes.
+ (WebCore::transformListFor):
+ (WebCore::SVGAnimateTransformElement::resetToBaseValue):
+ (WebCore::SVGAnimateTransformElement::calculateAnimatedValue):
+ (WebCore::SVGAnimateTransformElement::applyResultsToTarget):
+ * svg/SVGAnimatedTransformList.h: Added.
+ * svg/SVGGradientElement.cpp: Ditto.
+ (WebCore::SVGGradientElement::SVGGradientElement):
+ (WebCore::SVGGradientElement::parseMappedAttribute):
+ * svg/SVGGradientElement.h: Ditto.
+ * svg/SVGLinearGradientElement.cpp: Ditto.
+ (WebCore::SVGLinearGradientElement::collectGradientAttributes):
+ * svg/SVGMatrix.h: Added. SVGMatrix inherits from AffineTransform, and is only used in the bindings. It implements SVGs special requirements.
+ (WebCore::SVGMatrix::translate): Returns a copy of the matrix, not affecting the original matrix.
+ (WebCore::SVGMatrix::scale): Ditto.
+ (WebCore::SVGMatrix::scaleNonUniform): Ditto.
+ (WebCore::SVGMatrix::rotate): Ditto.
+ (WebCore::SVGMatrix::flipX): Ditto.
+ (WebCore::SVGMatrix::flipY): Ditto.
+ (WebCore::SVGMatrix::skewX): Ditto.
+ (WebCore::SVGMatrix::skewY): Ditto.
+ (WebCore::SVGMatrix::multiply): Ditto.
+ (WebCore::SVGMatrix::inverse): Ditto.
+ (WebCore::SVGMatrix::rotateFromVector): Dittto.
+ * svg/SVGMatrix.idl: Enable StrictTypeChecking/RequiresAllArguments=Raise on all attributes/functions.
+ * svg/SVGPatternElement.cpp: Adapt to SVGTransformList API changes.
+ (WebCore::SVGPatternElement::SVGPatternElement):
+ (WebCore::SVGPatternElement::parseMappedAttribute):
+ (WebCore::SVGPatternElement::collectPatternAttributes):
+ * svg/SVGPatternElement.h: Ditto.
+ * svg/SVGPoint.idl: Enable StrictTypeChecking/RequiresAllArguments=Raise for 'matrixTransform', now that SVGMatrix has been converted to the new scheme.
+ * svg/SVGRadialGradientElement.cpp: Adapt to SVGTransformList API changes.
+ (WebCore::SVGRadialGradientElement::collectGradientAttributes):
+ * svg/SVGSVGElement.cpp: Ditto.
+ (WebCore::SVGSVGElement::createSVGTransformFromMatrix):
+ (WebCore::SVGSVGElement::viewBoxToViewTransform):
+ * svg/SVGSVGElement.h: Ditto.
+ * svg/SVGStyledTransformableElement.cpp: Ditto.
+ (WebCore::SVGStyledTransformableElement::SVGStyledTransformableElement):
+ (WebCore::SVGStyledTransformableElement::animatedLocalTransform):
+ (WebCore::SVGStyledTransformableElement::parseMappedAttribute):
+ * svg/SVGStyledTransformableElement.h: Ditto.
+ * svg/SVGTextElement.cpp: Ditto.
+ (WebCore::SVGTextElement::SVGTextElement):
+ (WebCore::SVGTextElement::parseMappedAttribute):
+ (WebCore::SVGTextElement::animatedLocalTransform):
+ * svg/SVGTextElement.h: Ditto.
+ * svg/SVGTransform.cpp: Modernize code, inlined some getters.
+ (WebCore::SVGTransform::SVGTransform):
+ (WebCore::SVGTransform::setMatrix):
+ * svg/SVGTransform.h: Reindent header.
+ (WebCore::SVGTransform::type):
+ (WebCore::SVGTransform::svgMatrix):
+ (WebCore::SVGTransform::matrix):
+ (WebCore::SVGTransform::angle):
+ (WebCore::SVGTransform::rotationCenter):
+ (WebCore::SVGTransform::isValid):
+ (WebCore::operator==): Avoid function calls, make operator== a friend of SVGTransform, and compare members directly.
+ (WebCore::operator!=):
+ * svg/SVGTransform.idl:
+ * svg/SVGTransformList.cpp: Rewritten as plain Vector<SVGTransform>.
+ (WebCore::SVGTransformList::createSVGTransformFromMatrix):
+ (WebCore::SVGTransformList::consolidate):
+ (WebCore::SVGTransformList::concatenate):
+ (WebCore::SVGTransformList::valueAsString):
+ * svg/SVGTransformList.h:
+ (WebCore::SVGTransformList::SVGTransformList):
+ * svg/SVGTransformList.idl: Enable StrictTypeChecking/RequiresAllArguments=Raise on all attributes/functions.
+ * svg/SVGTransformable.cpp: Adapt to SVGTransformList API changes.
+ (WebCore::SVGTransformable::parseTransformAttribute):
+ * svg/SVGTransformable.h: Ditto.
+ * svg/SVGViewSpec.cpp: Ditto.
+ (WebCore::SVGViewSpec::SVGViewSpec):
+ (WebCore::SVGViewSpec::setTransform):
+ (WebCore::SVGViewSpec::parseViewSpec):
+ * svg/SVGViewSpec.h: Ditto.
+ (WebCore::SVGViewSpec::transform):
+ * svg/properties/SVGAnimatedListPropertyTearOff.h: Made constructor and members protected.
+ * svg/properties/SVGAnimatedPropertyMacros.h: Add new helper macro DECLARE_ANIMATED_TRANSFORM_LIST_PROPERTY. This is needed until we expand all macros.
+ * svg/properties/SVGAnimatedTransformListPropertyTearOff.h: Added. Extends SVGAnimatedListPropertyTearOff, returning SVGTransformListPropertyTearOff objects.
+ (WebCore::SVGAnimatedTransformListPropertyTearOff::baseVal):
+ (WebCore::SVGAnimatedTransformListPropertyTearOff::animVal):
+ (WebCore::SVGAnimatedTransformListPropertyTearOff::create):
+ (WebCore::SVGAnimatedTransformListPropertyTearOff::SVGAnimatedTransformListPropertyTearOff):
+ * svg/properties/SVGListPropertyTearOff.h: Made construct and members protected.
+ * svg/properties/SVGProperty.h: Declare commitChange() as pure virtual method.
+ * svg/properties/SVGPropertyTraits.h: Handle SVGTransformList.
+ * svg/properties/SVGStaticPropertyWithParentTearOff.h: Added. Same concept as JSSVGStaticPODTypeWrapperWithParent, used to expose SVGPropertyTearOffs for types
+ that are using this concept themselves. (SVGMatrix attribute of SVGTransform, both are POD types, using SVGPropertyTearOff).
+ (WebCore::SVGStaticPropertyWithParentTearOff::create):
+ (WebCore::SVGStaticPropertyWithParentTearOff::commitChange):
+ (WebCore::SVGStaticPropertyWithParentTearOff::SVGStaticPropertyWithParentTearOff):
+ * svg/properties/SVGTransformListPropertyTearOff.h: Added. Extends SVGListPropertyTearOff by two special SVGTransformList methods: consolidate and createSVGTransformFromMatrix.
+ (WebCore::SVGTransformListPropertyTearOff::create):
+ (WebCore::SVGTransformListPropertyTearOff::createSVGTransformFromMatrix):
+ (WebCore::SVGTransformListPropertyTearOff::consolidate):
+ (WebCore::SVGTransformListPropertyTearOff::SVGTransformListPropertyTearOff):
+
+2010-11-11 Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed by Nikolas Zimmermann.
+
+ Fixed WebKitGTK gtk3 compilation.
+
+ * platform/gtk/WidgetRenderingContextGtk3.cpp:
+ (WebCore::WidgetRenderingContext::WidgetRenderingContext):
+
+2010-11-11 Dan Bernstein <mitz@apple.com>
+
+ Reverted r71975:71976. That change was wrong, and the tests caught it.
+
+ * platform/graphics/mac/ComplexTextController.h:
+ (WebCore::ComplexTextController::ComplexTextRun::create):
+ * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
+ (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
+ (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText):
+
+2010-11-11 Matthew Delaney <mdelaney@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Fix LayoutTests/canvas/philip/tests/2d.drawImage.null.html
+ https://bugs.webkit.org/show_bug.cgi?id=48307
+
+ There are no new tests because this is a fix for a pre-existing failing test.)
+
+ * bindings/js/JSCanvasRenderingContext2DCustom.cpp: Corrected expection throwing cases to match up with spec.
+
+2010-11-10 Ryosuke Niwa <rniwa@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ [HTML5] 10.2.8.4 Scripts that modify the page as it is being parsed
+ https://bugs.webkit.org/show_bug.cgi?id=49364
+
+ Fixed HTMLScriptRunner's executeScript to use the ScriptController of the frame to which script element belongs
+ as supposed to that of the frame associated with the HTMLScriptRunner.
+
+ See also: http://www.whatwg.org/specs/web-apps/current-work/#scripts-that-modify-the-page-as-it-is-being-parsed
+
+ Test: fast/parser/script-modify-page-outer.html
+
+ * html/parser/HTMLScriptRunner.cpp:
+ (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent): Calls executeScript.
+ (WebCore::HTMLScriptRunner::executeScript): Uses the correct ScriptController instance.
+ (WebCore::HTMLScriptRunner::runScript): Call executeScript.
+ * html/parser/HTMLScriptRunner.h:
+
+2010-11-10 Dan Bernstein <mitz@apple.com>
+
+ Style fix I said I’d make then forgot to make.
+
+ * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
+ (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
+
+2010-11-10 Ned Holbrook <nholbrook@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Allow for the possibility of CoreText generating multiple runs for a single text run.
+ https://bugs.webkit.org/show_bug.cgi?id=49353
+
+ * platform/graphics/mac/ComplexTextController.h:
+ (WebCore::ComplexTextController::ComplexTextRun::create):
+ * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
+ (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
+ (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText):
+
+2010-10-15 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] Widgets do not support CSS transformations
+ https://bugs.webkit.org/show_bug.cgi?id=40139
+
+ Instead of rendering directly onto the target drawable when rendering
+ form controls on GTK+ 2.0, render onto an intermediate surface and use
+ cairo to blit the result back to the target surface. This has two
+ benefits. The first is that it always honors the current Cairo
+ transformation. The second is that since the intermediate drawable is
+ always a 32-bit GdkPixmap, we do not have to have a set of widgets
+ per-colormap any longer.
+
+ This change also begins the abstraction of widget rendering so that GTK+
+ 2 and GTK+ 3 can use the same code path. The WidgetRenderingContext will
+ eventually hide all version differences from RenderThemeGtk, which can
+ just focus on interpreting the GtkStyle properties.
+
+ * GNUmakefile.am: Add WidgetRenderinContext source files to the sources list.
+ * platform/graphics/cairo/PlatformRefPtrCairo.cpp:
+ (WTF::refPlatformPtr): Add a specialization for Cairo patterns.
+ (WTF::derefPlatformPtr): Ditto.
+ * platform/graphics/cairo/PlatformRefPtrCairo.h: Ditto.
+ * platform/gtk/RenderThemeGtk.cpp:
+ (WebCore::RenderThemeGtk::RenderThemeGtk): No longer keep a set of
+ widgets per-colormap for GTK+, instead just determine if we can use RGBA
+ colormaps and go from there.
+ (WebCore::RenderThemeGtk::~RenderThemeGtk): Ditto.
+ (WebCore::RenderThemeGtk::getIndicatorMetrics): Put the logic for
+ getting toggle button indicator metrics into this helper.
+ (WebCore::RenderThemeGtk::paintRenderObject): Now uses
+ WidgetRenderingContext to do widget rendering.
+ (WebCore::setToggleSize): Use the new getIndicatorMetrics helper.
+ * platform/gtk/RenderThemeGtk.h: Added a member to track whether or not
+ the widgets are using a RGBA colormap. Also remove a defunct Page*
+ member.
+ * platform/gtk/ScrollbarThemeGtk.cpp: Switch all widget drawing
+ operations to use WidgetRenderingContext.
+ (WebCore::ScrollbarThemeGtk::paintTrackBackground): Ditto.
+ (WebCore::ScrollbarThemeGtk::paintScrollbarBackground): Ditto.
+ (WebCore::ScrollbarThemeGtk::paintThumb): Ditto.
+ (WebCore::ScrollbarThemeGtk::paint): Ditto.
+ (WebCore::ScrollbarThemeGtk::paintButton): Ditto.
+ * platform/gtk/WidgetRenderingContext.h: Added.
+ * platform/gtk/WidgetRenderingContextGtk2.cpp: Added.
+ (WebCore::purgeScratchBuffer): Added, this is similar to the scratch
+ buffer implementation from ContextShadow.
+ (WebCore::PurgeScratchBufferTimer::fired): Ditto.
+ (WebCore::scheduleScratchBufferPurge): Ditto.
+ (WebCore::getExtraSpaceForWidget):
+ (WebCore::WidgetRenderingContext::WidgetRenderingContext): Added.
+ (WebCore::WidgetRenderingContext::~WidgetRenderingContext): Added.
+ (WebCore::WidgetRenderingContext::paintMozillaWidget): Added.
+ * platform/gtk/WidgetRenderingContextGtk3.cpp: Added.
+ (WebCore::WidgetRenderingContext::WidgetRenderingContext): Added.
+ (WebCore::~WidgetRenderingContext::WidgetRenderingContext): Added.
+ (WebCore::WidgetRenderingContext::paintMozillaWidget): Added.
+
+2010-11-10 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ Fix for https://bugs.webkit.org/show_bug.cgi?id=49356
+ -[WebView _scaleWebView:] should take and origin and scroll the
+ document
+ -and corresponding-
+ <rdar://problem/8643921>
+
+ Apply the scale to the origin, and set a new scroll position.
+ * page/Frame.cpp:
+ (WebCore::Frame::scalePage):
+ * page/Frame.h:
+ * WebCore.exp.in:
+
+2010-11-10 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Darin Adler.
+
+ REGRESSION (r71566): r71566 breaks bidi-control-chars-treated-as-ZWS.html
+ https://bugs.webkit.org/show_bug.cgi?id=49295
+
+ * platform/graphics/mac/ComplexTextControllerATSUI.cpp: Reverted to r71565. Eliding bidi
+ control characters from ATSUI is no longer necessary since ComplexTextController removes
+ any glyphs corresponding to them.
+ (WebCore::ComplexTextController::ComplexTextRun::overrideLayoutOperation):
+ (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
+
+2010-11-10 Pascal Massimino <pascal.massimino@gmail.com>
+
+ Reviewed by Adam Barth.
+
+ Simplify the alpha-detection code in png's decoding loop.
+ https://bugs.webkit.org/show_bug.cgi?id=49333
+
+ Added a special test for this case: png_per_row_alpha_decoding.html
+
+ * platform/image-decoders/png/PNGImageDecoder.cpp:
+ (WebCore::PNGImageDecoder::rowAvailable): modified loop.
+
+2010-11-10 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ <rdar://problem/8647848> REGRESSION (r68551): Spaces shown at soft hyphens with complex justification
+ https://bugs.webkit.org/show_bug.cgi?id=49352
+
+ Test: fast/text/justification-padding-mid-word.html
+
+ * platform/graphics/mac/ComplexTextController.cpp:
+ (WebCore::ComplexTextController::adjustGlyphsAndAdvances): Changed to add justification padding
+ and word spacing only at characters that are treated as space, instead of all characters that
+ use the space glyph (which includes characters treated as zero-width space as well).
+
+2010-11-10 Matthew Delaney <mdelaney@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Crash in documentWillBecomeInactive() when closing window with Reader showing content with SVG
+ https://bugs.webkit.org/show_bug.cgi?id=49084
+
+ Manual test added.
+
+ * manual-tests/svg-deep-clone-to-new-doc.html: Added manual test for reproducing bug since an automated version proved to be a bit tough to craft up.
+ * svg/SVGSVGElement.cpp: Added in necessary document ownership transfer calls.
+ * svg/SVGSVGElement.h:
+
+2010-11-10 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: Red error bubbles don't fit content.
+ https://bugs.webkit.org/show_bug.cgi?id=49305
+
+ * inspector/front-end/textViewer.css:
+ (.webkit-html-message-bubble):
+
+2010-11-10 Alexey Proskuryakov <ap@apple.com>
+
+ Release build fix.
+
+ * css/StyleSheet.cpp: isAcceptableStyleSheetParent() is a debug-only function.
+
+2010-11-08 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=45205
+ <rdar://problem/8391455> Detached elements shouldn't have style sheets.
+
+ Tests: fast/dom/StyleSheet/detached-style-2.html
+ fast/dom/StyleSheet/detached-style-pi.xhtml
+ fast/dom/StyleSheet/detached-style.html
+ fast/dom/StyleSheet/detached-style-pi-2.xhtml
+
+ * bindings/js/JSStyleSheetCustom.cpp: (WebCore::JSStyleSheet::markChildren):
+ There is no longer a need to mark owner nodes - StyleSheet->ownerNode() is only non-null when
+ the node is in document.
+
+ * css/StyleSheet.cpp: (WebCore::StyleSheet::StyleSheet): Added an assertion checking that
+ all nodes that can be StyleSheet parents have been verified.
+
+ * css/StyleSheet.h: (WebCore::StyleSheet::clearOwnerNode): Added.
+
+ * dom/ProcessingInstruction.cpp:
+ (WebCore::ProcessingInstruction::~ProcessingInstruction): Clear stylesheet's owner node. This
+ shouldn't have observable effect, since a processing instruction that is in document can only
+ be destroyed with document, and a reachable stylsheet keeps document alive.
+ (WebCore::ProcessingInstruction::removedFromDocument): Clear the relationship between node and style sheet when removed.
+ (WebCore::ProcessingInstruction::setCSSStyleSheet): If the element was removed during load, we still
+ don't want to create a style sheet.
+
+ * dom/StyleElement.cpp:
+ (WebCore::StyleElement::sheet): There is no reason for lazy creation. It was a wrong fix for
+ bug 14462, whose regression test still passes.
+ (WebCore::StyleElement::removedFromDocument): Clear the relationship between node and style sheet when removed.
+ (WebCore::StyleElement::finishParsingChildren): Don't call sheet(), it doens't have side effects any more.
+ (WebCore::StyleElement::createSheet): Assert that the element is in document. We never want
+ to create a style sheet for an element that isn't.
+
+ * dom/StyleElement.h: (WebCore::StyleElement::sheet): Made implementation inline, now that
+ it's a simple getter.
+
+ * html/HTMLLinkElement.cpp:
+ (WebCore::HTMLLinkElement::~HTMLLinkElement): Clear stylesheet's owner node.
+ (WebCore::HTMLLinkElement::process): Assert that there is no style sheet lingering for any reason.
+ (WebCore::HTMLLinkElement::removedFromDocument): Clear the relationship between node and style sheet when removed.
+ (WebCore::HTMLLinkElement::setCSSStyleSheet): If the element was removed during load, we still
+ don't want to create a style sheet.
+
+ * html/HTMLStyleElement.cpp: (WebCore::HTMLStyleElement::~HTMLStyleElement):
+ * html/HTMLStyleElement.h:
+ * svg/SVGStyleElement.cpp: (WebCore::SVGStyleElement::~SVGStyleElement):
+ * svg/SVGStyleElement.h:
+ Clear stylesheet's owner node. As above, this shouldn't have observable effect.
+
+ * xml/XSLTProcessor.h:
+ * xml/XSLTProcessor.cpp: (WebCore::XSLTProcessor::~XSLTProcessor):
+ * dom/Document.cpp: (WebCore::Document::~Document):
+ * css/CSSParser.cpp: (WebCore::CSSParser::parseSelector):
+ Assert that stylesheet won't outlive its owner node. We don't really use refcounting here.
+
+2010-11-10 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Dave Hyatt.
+
+ REGRESSION (r71566): r71566 breaks bidi-control-chars-treated-as-ZWS.html
+ https://bugs.webkit.org/show_bug.cgi?id=49295
+
+ * platform/graphics/mac/ComplexTextController.h: Added m_indexOffset.
+ * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
+ (WebCore::ComplexTextController::ComplexTextRun::overrideLayoutOperation): Use m_indexOffset
+ instead of computing the offset based on m_directionalOverride.
+ (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Set m_indexOffset to
+ the offset between indices in m_characters and indices in the text passed to ATSUI.
+
+2010-11-10 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: Gear menu floats to right edge and expands
+ to bottom of "Styles" section.
+ https://bugs.webkit.org/show_bug.cgi?id=49303
+
+ This fixes computed style's option wrapping to the next line.
+
+ * inspector/front-end/inspector.css:
+ (.sidebar-pane-subtitle):
+
+2010-11-10 Stephen White <senorblanco@chromium.org>
+
+ Reviewed by James Robinson.
+
+ Fix canvas.putImageData(canvas.getImageData(...)) to be lossless.
+ https://bugs.webkit.org/show_bug.cgi?id=49330
+
+ These cycles should be lossless for valid colours. A similar fix went
+ into the CG port at r32878.
+
+ Covered by canvas/philip/tests/2d.imageData.put.unchanged.html.
+
+ * platform/graphics/skia/ImageBufferSkia.cpp:
+ (WebCore::mulDiv255Ceil):
+ A helper function to do (a + b + 254) / 255 without a divide.
+ (WebCore::putImageData):
+ Use the above helper to round up when premultiplying alpha.
+
+2010-11-10 Csaba Osztrogonác <ossy@webkit.org>
+
+ Reviewed by David Hyatt.
+
+ HTML5 Ruby support should be mandatory feature
+ https://bugs.webkit.org/show_bug.cgi?id=49272
+
+ Remove Ruby as optional feature.
+
+ * Configurations/FeatureDefines.xcconfig:
+ * DerivedSources.make:
+ * GNUmakefile.am:
+ * WebCorePrefix.h: Touch WebCorePrefix.h to avoid incremental build failure on Windows.
+ * config.h: Touch config.h to avoid incremental build failure on Windows.
+ * features.pri:
+ * html/HTMLTagNames.in:
+ * rendering/RenderBlock.cpp: Remove ENABLE_RUBY guard.
+ (WebCore::canMergeContiguousAnonymousBlocks):
+ * rendering/RenderObject.cpp: Remove ENABLE_RUBY guard.
+ (WebCore::RenderObject::createObject):
+ * rendering/RenderRuby.cpp: Remove ENABLE_RUBY guard.
+ * rendering/RenderRuby.h: Remove ENABLE_RUBY guard.
+ * rendering/RenderRubyBase.cpp: Remove ENABLE_RUBY guard.
+ * rendering/RenderRubyBase.h: Remove ENABLE_RUBY guard.
+ * rendering/RenderRubyRun.cpp: Remove ENABLE_RUBY guard.
+ * rendering/RenderRubyRun.h: Remove ENABLE_RUBY guard.
+ * rendering/RenderRubyText.cpp: Remove ENABLE_RUBY guard.
+ * rendering/RenderRubyText.h: Remove ENABLE_RUBY guard.
+
+2010-11-10 Martin Robinson <mrobinson@igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] Complex text does not have full CSS text-shadow support
+ https://bugs.webkit.org/show_bug.cgi?id=45597
+
+ Add ContextShadow support to FontGtk, which enables non-solid shadows
+ for complex text rendering.
+
+ Test: platform/gtk/fonts/complex-text-shadows.html
+
+ * platform/graphics/gtk/FontGtk.cpp:
+ (WebCore::destroyPangoRegion): Added this helper, which helps reduce
+ the number of #ifdefs when dealing with GTK+ region type differences.
+ (WebCore::getPangoRegionExtents): Ditto.
+ (WebCore::drawGlyphsShadow): Added this helper which either renders
+ a solid shadow manually or uses ContextShadow to render a blurry shadow.
+ (WebCore::Font::drawComplexText): Use the new helpers.
+
+2010-11-10 Alejandro G. Castro <alex@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [gtk] The revision r71528 causes crashes in GObjectEventListener
+ https://bugs.webkit.org/show_bug.cgi?id=49314
+
+ Moved the addition of the event listener to the node after calling
+ the constructor of the event listener. This is required beacuse
+ the addEventListener API receives the EventListener inside a
+ PassRefPtr.
+
+ * bindings/gobject/GObjectEventListener.cpp:
+ (WebCore::GObjectEventListener::GObjectEventListener):
+ * bindings/gobject/GObjectEventListener.h:
+ (WebCore::GObjectEventListener::addEventListener):
+
+2010-11-02 Alexander Pavlov <apavlov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Web Inspector: Enable InspectorCSSAgent (not used by frontend for CSS editing yet)
+ https://bugs.webkit.org/show_bug.cgi?id=48834
+
+ Drive-by fix: use a single API method to retrieve all node-related styles instead of a bunch of separate calls.
+
+ Test: inspector/styles-new-API.html
+
+ * inspector/CodeGeneratorInspector.pm:
+ * inspector/Inspector.idl:
+ * inspector/InspectorCSSAgent.cpp:
+ (WebCore::InspectorCSSAgent::InspectorCSSAgent):
+ (WebCore::InspectorCSSAgent::setDOMAgent):
+ (WebCore::InspectorCSSAgent::reset):
+ (WebCore::InspectorCSSAgent::getStylesForNode2):
+ (WebCore::InspectorCSSAgent::getComputedStyleForNode2):
+ (WebCore::InspectorCSSAgent::addRule2):
+ (WebCore::InspectorCSSAgent::querySelectorAll):
+ * inspector/InspectorCSSAgent.h:
+ * inspector/InspectorController.cpp:
+ (WebCore::InspectorController::InspectorController):
+ (WebCore::InspectorController::connectFrontend):
+ (WebCore::InspectorController::releaseFrontendLifetimeAgents):
+ (WebCore::InspectorController::didCommitLoad):
+ * inspector/InspectorController.h:
+ (WebCore::InspectorController::cssAgent):
+ * inspector/InspectorDOMAgent.cpp:
+ * inspector/InspectorDOMAgent.h:
+ * inspector/InspectorStyleSheet.cpp:
+ (WebCore::InspectorStyle::setPropertyText):
+ (WebCore::InspectorStyle::styleText):
+ (WebCore::InspectorStyle::disableProperty):
+ (WebCore::InspectorStyle::populateAllProperties):
+ (WebCore::InspectorStyle::populateObjectWithStyleProperties):
+ (WebCore::InspectorStyleSheet::buildObjectForRule):
+ (WebCore::InspectorStyleSheet::fixUnparsedPropertyRanges):
+ (WebCore::InspectorStyleSheet::ensureSourceData):
+ (WebCore::InspectorStyleSheetForInlineStyle::text):
+ * inspector/InspectorStyleSheet.h:
+ (WebCore::InspectorStyleProperty::setRawTextFromStyleDeclaration):
+ (WebCore::InspectorStyleProperty::hasRawText):
+
+2010-11-10 Alexander Pavlov <apavlov@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Web Inspector: Move CSSStyleDeclaration from DOMAgent.js into CSSStyleModel.js
+ https://bugs.webkit.org/show_bug.cgi?id=49312
+
+ No new tests, as it's just code motion.
+
+ * inspector/front-end/CSSStyleModel.js:
+ (WebInspector.CSSStyleDeclaration):
+ (WebInspector.CSSStyleDeclaration.parsePayload):
+ (WebInspector.CSSStyleDeclaration.prototype.get allProperties):
+ (WebInspector.CSSStyleDeclaration.prototype.getLiveProperty):
+ (WebInspector.CSSStyleDeclaration.prototype.getPropertyValue):
+ (WebInspector.CSSStyleDeclaration.prototype.getPropertyPriority):
+ (WebInspector.CSSStyleDeclaration.prototype.getPropertyShorthand):
+ (WebInspector.CSSStyleDeclaration.prototype.isPropertyImplicit):
+ (WebInspector.CSSStyleDeclaration.prototype.styleTextWithShorthands):
+ (WebInspector.CSSStyleDeclaration.prototype.getLonghandProperties):
+ (WebInspector.CSSStyleDeclaration.prototype.getShorthandValue):
+ (WebInspector.CSSStyleDeclaration.prototype.getShorthandPriority):
+ (WebInspector.CSSStyleDeclaration.prototype.appendProperty):
+ (WebInspector.CSSStyleDeclaration.prototype.propertyAt):
+ (WebInspector.CSSRule):
+ (WebInspector.CSSRule.parsePayload):
+ (WebInspector.CSSRule.prototype.get isUserAgent):
+ (WebInspector.CSSRule.prototype.get isUser):
+ (WebInspector.CSSRule.prototype.get isViaInspector):
+ (WebInspector.CSSRule.prototype.get isRegular):
+ (WebInspector.CSSProperty):
+ (WebInspector.CSSProperty.parsePayload):
+ (WebInspector.CSSProperty.prototype.get propertyText):
+ (WebInspector.CSSProperty.prototype.get isLive):
+ (WebInspector.CSSProperty.prototype.get active):
+ (WebInspector.CSSProperty.prototype.get styleBased):
+ (WebInspector.CSSProperty.prototype.get inactive):
+ (WebInspector.CSSProperty.prototype.get disabled):
+ (WebInspector.CSSProperty.prototype.setText):
+ (WebInspector.CSSProperty.prototype.setValue):
+ (WebInspector.CSSProperty.prototype.setDisabled.callback):
+ (WebInspector.CSSProperty.prototype.setDisabled):
+ * inspector/front-end/DOMAgent.js:
+
+2010-11-10 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r71733.
+ http://trac.webkit.org/changeset/71733
+ https://bugs.webkit.org/show_bug.cgi?id=49319
+
+ made qt bot crashy and sad (Requested by kling on #webkit).
+
+ * page/FrameView.cpp:
+ (WebCore::FrameView::windowClipRect):
+
+2010-11-10 Peter Rybin <peter.rybin@gmail.com>
+
+ Reviewed by Adam Barth.
+
+ HTML parser should provide script column position within HTML document to JavaScript engine
+ https://bugs.webkit.org/show_bug.cgi?id=45271
+
+ Replaces line number with TextPosition struct so that script engine
+ gets script starting line/column.
+
+ * ForwardingHeaders/wtf/text/TextPosition.h: Added.
+ * bindings/js/ScriptSourceCode.h:
+ (WebCore::ScriptSourceCode::ScriptSourceCode):
+ * bindings/v8/ScheduledAction.cpp:
+ (WebCore::ScheduledAction::ScheduledAction):
+ * bindings/v8/ScriptController.cpp:
+ (WebCore::ScriptController::eventHandlerPosition):
+ * bindings/v8/ScriptController.h:
+ * bindings/v8/ScriptEventListener.cpp:
+ (WebCore::createAttributeEventListener):
+ * bindings/v8/ScriptSourceCode.h:
+ (WebCore::ScriptSourceCode::ScriptSourceCode):
+ (WebCore::ScriptSourceCode::startLine):
+ (WebCore::ScriptSourceCode::startPosition):
+ * bindings/v8/V8LazyEventListener.cpp:
+ (WebCore::V8LazyEventListener::V8LazyEventListener):
+ (WebCore::V8LazyEventListener::prepareListenerObject):
+ * bindings/v8/V8LazyEventListener.h:
+ (WebCore::V8LazyEventListener::create):
+ * bindings/v8/V8Proxy.cpp:
+ (WebCore::V8Proxy::compileScript):
+ (WebCore::V8Proxy::evaluate):
+ (WebCore::V8Proxy::runScript):
+ * bindings/v8/V8Proxy.h:
+ * bindings/v8/WorkerContextExecutionProxy.cpp:
+ (WebCore::WorkerContextExecutionProxy::evaluate):
+ (WebCore::WorkerContextExecutionProxy::runScript):
+ * bindings/v8/WorkerContextExecutionProxy.h:
+ * bindings/v8/WorkerScriptController.cpp:
+ (WebCore::WorkerScriptController::evaluate):
+ * dom/PendingScript.cpp:
+ (WebCore::PendingScript::releaseElementAndClear):
+ * dom/PendingScript.h:
+ (WebCore::PendingScript::PendingScript):
+ (WebCore::PendingScript::operator=):
+ (WebCore::PendingScript::startingPosition):
+ * dom/ScriptableDocumentParser.h:
+ * dom/XMLDocumentParser.h:
+ * dom/XMLDocumentParserLibxml2.cpp:
+ (WebCore::XMLDocumentParser::XMLDocumentParser):
+ (WebCore::XMLDocumentParser::startElementNs):
+ (WebCore::XMLDocumentParser::endElementNs):
+ (WebCore::XMLDocumentParser::lineNumber):
+ (WebCore::XMLDocumentParser::columnNumber):
+ (WebCore::XMLDocumentParser::textPosition):
+ (WebCore::XMLDocumentParser::textPositionOneBased):
+ * dom/XMLDocumentParserQt.cpp:
+ (WebCore::XMLDocumentParser::XMLDocumentParser):
+ (WebCore::XMLDocumentParser::textPosition):
+ (WebCore::XMLDocumentParser::parseStartElement):
+ (WebCore::XMLDocumentParser::parseEndElement):
+ * html/parser/HTMLDocumentParser.cpp:
+ (WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder):
+ (WebCore::HTMLDocumentParser::textPosition):
+ * html/parser/HTMLDocumentParser.h:
+ * html/parser/HTMLScriptRunner.cpp:
+ (WebCore::HTMLScriptRunner::sourceFromPendingScript):
+ (WebCore::HTMLScriptRunner::execute):
+ (WebCore::HTMLScriptRunner::runScript):
+ * html/parser/HTMLScriptRunner.h:
+ * html/parser/HTMLTreeBuilder.cpp:
+ (WebCore::uninitializedPositionValue1):
+ (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
+ (WebCore::HTMLTreeBuilder::takeScriptToProcess):
+ (WebCore::HTMLTreeBuilder::processEndTag):
+ (WebCore::HTMLTreeBuilder::processScriptStartTag):
+ * html/parser/HTMLTreeBuilder.h:
+
+2010-11-10 Ilya Sherman <isherman@chromium.org>
+
+ Reviewed by Shinichiro Hamaji.
+
+ Fix autofill popup height computation -- take icon heights into account.
+ https://bugs.webkit.org/show_bug.cgi?id=49306
+
+ * platform/chromium/PopupMenuChromium.cpp:
+ (WebCore::PopupListBox::layout):
+
+2010-11-10 Kenneth Rohde Christiansen <kenneth@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ In paintEntireContents mode (used in combination with tiling) we
+ cannot clip to the actual visibleContentRect as the clipped regions
+ will not be updated again on scroll. If paintsEntireContents is
+ enabled, return the actual content rect.
+
+ * page/FrameView.cpp:
+ (WebCore::FrameView::windowClipRect):
+
+2010-11-10 Shinichiro Hamaji <hamaji@chromium.org>
+
+ Adding a manual test which I forgot to add in r71618.
+
+ [Chromium] display:none has no effect on <option> element
+ https://bugs.webkit.org/show_bug.cgi?id=49169
+
+ * manual-tests/display-none-option.html: Added.
+
+2010-11-10 Shane Stephens <shanestephens@google.com>
+
+ Reviewed by Dirk Schulze.
+
+ SVGTextElement supplemental transforms pre-multiplied but should be
+ post-multiplied in animatedLocalTransform
+ https://bugs.webkit.org/show_bug.cgi?id=48215
+
+ Test: svg/animations/animate-text-nested-transforms.svg
+
+ * svg/SVGTextElement.cpp:
+ (WebCore::SVGTextElement::animatedLocalTransform):
+
+ Switched order of multiplication. Note that due to a bug in
+ AffineTransform's operator* implementation the order of arguments is
+ reversed (see http://bugs.webkit.org/show_bug.cgi?id=48031).
+
+2010-11-09 Abhishek Arya <inferno@chromium.org>
+
+ Reviewed by Dan Bernstein.
+
+ Fieldsets avoid floats. Legend elements are expected to have their parent
+ as fieldset. When this not the case, floats get added incorrectly added to the
+ legend blocks. This patch tries to prevent those floats addition.
+ https://bugs.webkit.org/show_bug.cgi?id=49214
+
+ Test: fast/blockflow/overhanging-float-legend-crash.html
+
+ * rendering/RenderBox.cpp:
+ (WebCore::RenderBox::avoidsFloats):
+ * rendering/RenderObject.cpp:
+ (WebCore::RenderObject::isLegend):
+ * rendering/RenderObject.h:
+
+2010-11-10 Cris Neckar <cdn@chromium.org>
+
+ Reviewed by Nikolas Zimmermann.
+
+ Added check to ensure that svg viewport containers are not treated in the same way as generic svg containers.
+ https://bugs.webkit.org/show_bug.cgi?id=49188
+
+ Test: svg/dom/viewport-container-crash.svg
+
+ * rendering/SVGImageBufferTools.cpp:
+ (WebCore::SVGImageBufferTools::renderSubtreeToImageBuffer):
+
+2010-11-09 Gyuyoung Kim <gyuyoung.kim@samsung.com>
+
+ Reviewed by Eric Seidel.
+
+ [WML] Fix build breaks when WML is enabled.
+ https://bugs.webkit.org/show_bug.cgi?id=49168
+
+ The backForward() of Page class returns BackForwarddController class type.
+ So, WML classes need to include the BackForwardController.h file. And, select()
+ of RenderTextControl.h was removed. Thus, the select() should be replaced by
+ setSelectionRange().
+
+ * wml/WMLDoElement.cpp: Includes BackForwardController.h.
+ * wml/WMLDocument.cpp: ditto.
+ * wml/WMLInputElement.cpp:
+ (WebCore::WMLInputElement::select): Replaced by setSelectionRange().
+ * wml/WMLPageState.cpp: Includes BackForwardController.h.
+ * wml/WMLPrevElement.cpp: ditto.
+
+2010-11-09 Chris Rogers <crogers@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Add JavaScriptAudioNode files
+ https://bugs.webkit.org/show_bug.cgi?id=48875
+
+ No new tests since audio API is not yet implemented.
+
+ * webaudio/JavaScriptAudioNode.cpp: Added.
+ (WebCore::JavaScriptAudioNode::create):
+ (WebCore::JavaScriptAudioNode::JavaScriptAudioNode):
+ (WebCore::JavaScriptAudioNode::~JavaScriptAudioNode):
+ (WebCore::JavaScriptAudioNode::initialize):
+ (WebCore::JavaScriptAudioNode::uninitialize):
+ (WebCore::JavaScriptAudioNode::toJavaScriptAudioNode):
+ (WebCore::JavaScriptAudioNode::process):
+ (WebCore::JavaScriptAudioNode::fireProcessEventDispatch):
+ (WebCore::JavaScriptAudioNode::fireProcessEvent):
+ (WebCore::JavaScriptAudioNode::reset):
+ (WebCore::JavaScriptAudioNode::scriptExecutionContext):
+ * webaudio/JavaScriptAudioNode.h: Added.
+ (WebCore::JavaScriptAudioNode::eventTargetData):
+ (WebCore::JavaScriptAudioNode::ensureEventTargetData):
+ (WebCore::JavaScriptAudioNode::bufferSize):
+ (WebCore::JavaScriptAudioNode::doubleBufferIndex):
+ (WebCore::JavaScriptAudioNode::swapBuffers):
+ (WebCore::JavaScriptAudioNode::refEventTarget):
+ (WebCore::JavaScriptAudioNode::derefEventTarget):
+ * webaudio/JavaScriptAudioNode.idl: Added.
+
+2010-11-09 Nico Weber <thakis@chromium.org>
+
+ Reviewed by Kenneth Russell.
+
+ [Chromium] Text jitter during 2D CSS transform
+ https://bugs.webkit.org/show_bug.cgi?id=49224
+
+ Text subpixel rendering only works in AlphaPremultipliedFirst |
+ kCGBitmapByteOrder32Host contexts:
+ http://www.cocoabuilder.com/archive/cocoa/228931-sub-pixel-font-smoothing-with-cgbitmapcontext.html
+
+ Changing this has the added benefit that the data layout now matches
+ skia.
+
+ * platform/graphics/chromium/ContentLayerChromium.cpp:
+ (WebCore::ContentLayerChromium::SharedValues::SharedValues):
+ (WebCore::ContentLayerChromium::updateContents):
+ * platform/graphics/chromium/ImageLayerChromium.cpp:
+ (WebCore::ImageLayerChromium::updateContents):
+ * platform/graphics/chromium/LayerRendererChromium.cpp:
+ (WebCore::LayerRendererChromium::setRootLayerCanvasSize):
+
+2010-11-09 Helder Correia <helder@sencha.com>
+
+ Reviewed by Darin Adler.
+
+ Philip Canvas test 2d.path.rect.winding fails
+ https://bugs.webkit.org/show_bug.cgi?id=49225
+
+ Rect path direction is important for nonzero winding rule.
+
+ The rect(x, y, w, h) method must create a new subpath containing just the four points
+ (x, y), (x+w, y), (x+w, y+h), (x, y+h), with those four points connected by straight
+ lines, and must then mark the subpath as closed.
+
+ * html/canvas/CanvasRenderingContext2D.cpp:
+ (WebCore::CanvasRenderingContext2D::rect):
+
+2010-11-09 Fumitoshi Ukai <ukai@chromium.org>
+
+ Unreviewed build fix on Chromium/Win at r71711
+
+ RefCound.h reported an error that it cannot access private member
+ declared in class 'WebCore::FileWriterSync' at
+ WebCore::FileWriterSync::~FileWriterSync.
+
+ * fileapi/FileWriterSync.h: make destructor public
+
+2010-11-09 Chris Rogers <crogers@google.com>
+
+ Reviewed by James Robinson.
+
+ AudioFileReaderMac.cpp must include <CoreServices/CoreServices.h>
+ https://bugs.webkit.org/show_bug.cgi?id=49270
+
+ * platform/audio/mac/AudioFileReaderMac.cpp:
+
+2010-11-09 Eric Uhrhane <ericu@chromium.org>
+
+ Reviewed by David Levin.
+
+ Add idl and mock classes for FileWriterSync.
+ https://bugs.webkit.org/show_bug.cgi?id=48693
+
+ No new tests, as there's no functionality.
+
+ Build file additions.
+ * CMakeLists.txt:
+ * DerivedSources.cpp:
+ * DerivedSources.make:
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * bindings/scripts/CodeGeneratorV8.pm:
+
+ * fileapi/FileWriterSync.cpp: Added.
+ * fileapi/FileWriterSync.h: Added.
+ * fileapi/FileWriterSync.idl: Added.
+
+2010-11-09 Mario Sanchez Prada <msanchez@igalia.com>
+
+ Reviewed by Chris Fleizach.
+
+ [GTK] Improve accessibility of focusable lists
+ https://bugs.webkit.org/show_bug.cgi?id=25679
+
+ Emit the 'selected' and 'focused' events as needed.
+
+ This is the last bit of a series of patches to fix bug 25679,
+ which just ensures that the right signals are emmited whenever a
+ selection inside a listbox object changes, that is, the signals
+ 'state-changed::selected', 'state-changed::focused' and
+ 'focus-event', along with the right detail for each of them to
+ report if the focus/selection has been activated or not.
+
+ * accessibility/gtk/AXObjectCacheAtk.cpp:
+ (WebCore::notifyChildrenSelectionChange): New, takes care of
+ emitting all the needed signals when children selection has
+ changed, both from the point of view of the container and the
+ selected/unselected items inside of it. It currently supports
+ listboxes (html 'select' controls) only.
+ (WebCore::AXObjectCache::postPlatformNotification): Replaced some
+ old code with a simple call to notifyChildrenSelectionChange().
+
+2010-11-09 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49202
+
+ Make lists work with vertical text.
+
+ (1) Patch all the CSS rules in html.css so that the margins are directionally abstract.
+ (2) Add a transposedRect and transposedSize method to IntRect and IntSize for swapping x/y and width/height.
+ (3) Add adjustLineDirectionPosition as a helper for moving a line box only in the line direction.
+ (4) Fix a bug in addIntrudingFLoats uncovered by list test cases where the top margin of an element was being
+ incorrectly added to a float's physical left side instead of its top side.
+ (5) Make positioning and painting and selection of list markers account for all writing modes.
+ (6) Add helpers for setting the start and end margins directly in a RenderStyle, since lists do this to hack
+ marker margins before they have been calculated and set on the box.
+
+ Cloned a bunch of fast/lists tests into fast/lists/*-vertical.html versions.
+
+ * css/html.css:
+ * platform/graphics/IntRect.h:
+ (WebCore::IntRect::transposedRect):
+ * platform/graphics/IntSize.h:
+ (WebCore::IntSize::transposedSize):
+ * rendering/InlineBox.h:
+ (WebCore::InlineBox::adjustLineDirectionPosition):
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::addIntrudingFloats):
+ * rendering/RenderListItem.cpp:
+ (WebCore::getParentOfFirstLineBox):
+ (WebCore::RenderListItem::positionListMarker):
+ (WebCore::RenderListItem::paint):
+ * rendering/RenderListMarker.cpp:
+ (WebCore::RenderListMarker::localSelectionRect):
+ (WebCore::RenderListMarker::paint):
+ (WebCore::RenderListMarker::layout):
+ (WebCore::RenderListMarker::computePreferredLogicalWidths):
+ (WebCore::RenderListMarker::updateMargins):
+ (WebCore::RenderListMarker::getRelativeMarkerRect):
+ * rendering/style/RenderStyle.cpp:
+ (WebCore::RenderStyle::setMarginStart):
+ (WebCore::RenderStyle::setMarginEnd):
+ * rendering/style/RenderStyle.h:
+
+2010-11-09 Abhishek Arya <inferno@chromium.org>
+
+ Reviewed by Antti Koivisto.
+
+ Call to SVGSMILElement::applyResultsToTarget can blow away the SVGSMILElement.
+ Refptr the SVGSMILElement in the ResultElementMap to protect it.
+ https://bugs.webkit.org/show_bug.cgi?id=49274
+
+ Test: svg/animations/animate-update-crash.xhtml
+
+ * svg/animation/SMILTimeContainer.cpp:
+ (WebCore::SMILTimeContainer::updateAnimations):
+
+2010-11-09 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49281
+ Remove broken code for embedded CSS xml-stylesheet
+
+ * dom/Document.cpp: (WebCore::Document::recalcStyleSelector): This made no sense, was untested,
+ and didn't match Firefox.
+
+2010-11-09 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Darin Adler.
+
+ <rdar://problem/8613727> and https://bugs.webkit.org/show_bug.cgi?id=48720
+ Customizable context menu support in WebKit2.
+
+ Various WebCore support to allow WebKit2 to create new ContextMenuItems with
+ the information it has.
+
+ * WebCore.exp.in:
+
+ * platform/ContextMenu.h:
+ * platform/ContextMenuItem.h:
+
+ * platform/mac/ContextMenuItemMac.mm:
+ (WebCore::ContextMenuItem::ContextMenuItem):
+ (WebCore::ContextMenuItem::setSubMenu):
+ * platform/mac/ContextMenuMac.mm:
+ (WebCore::platformMenuDescription):
+
+ * platform/qt/ContextMenuItemQt.cpp:
+ (WebCore::ContextMenuItem::ContextMenuItem):
+ (WebCore::ContextMenuItem::setSubMenu):
+ * platform/qt/ContextMenuQt.cpp:
+ (WebCore::platformMenuDescription):
+
+ * platform/win/ContextMenuItemWin.cpp:
+ (WebCore::ContextMenuItem::ContextMenuItem):
+ (WebCore::ContextMenuItem::setSubMenu):
+ * platform/win/ContextMenuWin.cpp:
+ (WebCore::platformMenuDescription):
+
+2010-11-09 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Need WebKit2 mechanism for getting the visible page text
+ <rdar://problem/8646928>
+ https://bugs.webkit.org/show_bug.cgi?id=49275
+
+ * WebCore.exp.in: Add necessary exports.
+
+2010-11-09 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by James Robinson.
+
+ Make showLayerTree() more useful for debugging
+ https://bugs.webkit.org/show_bug.cgi?id=49273
+
+ Three things to make showLayerTree() more useful when called from gdb:
+ 1. Add showLayerTree(RenderObject*)
+ 2. Make it not update layout, so you can call it when debugging layout code.
+ 3. Add output of the 'needs layout' flags for each renderer.
+
+ * rendering/RenderLayer.cpp:
+ (showLayerTree):
+ * rendering/RenderLayer.h:
+ * rendering/RenderTreeAsText.cpp:
+ (WebCore::RenderTreeAsText::writeRenderObject):
+ (WebCore::externalRepresentation):
+ * rendering/RenderTreeAsText.h:
+
+2010-11-09 Chris Rogers <crogers@google.com>
+
+ Reviewed by James Robinson.
+
+ AudioChannel.h is including AudioFloatArray.h instead of AudioArray.h
+ https://bugs.webkit.org/show_bug.cgi?id=49269
+
+ * platform/audio/AudioChannel.h:
+
+2010-11-09 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Dave Hyatt.
+
+ Made tables hit-test correctly in all writing modes.
+
+ Part of: Make tables work with vertical text
+ https://bugs.webkit.org/show_bug.cgi?id=46417
+
+ Test: fast/blockflow/table-hit-test.html
+
+ * rendering/RenderTable.cpp:
+ (WebCore::RenderTable::nodeAtPoint):
+ * rendering/RenderTableRow.cpp:
+ (WebCore::RenderTableRow::nodeAtPoint):
+ * rendering/RenderTableSection.cpp:
+ (WebCore::RenderTableSection::nodeAtPoint):
+
+2010-11-09 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Caret fails to render with some combination of iframes and compositing
+ https://bugs.webkit.org/show_bug.cgi?id=49079
+
+ Because it's possible for the caret to jump between different
+ compositing layers and the view, caret repainting currently dirties
+ both the view and all compositing layers that intersect the caret rect,
+ via repaintRectangleInViewAndCompositedLayers().
+
+ When an iframe contained compositing layers, we erroneously skipped
+ invalidating the compositing layer inside the iframe, which caused
+ the caret to fail to blink.
+
+ * manual-tests/compositing/caret-in-compositing-frame.html: Added.
+ * manual-tests/compositing/resources/editable-compositing-subframe.html: Added.
+ * rendering/RenderView.cpp:
+ (WebCore::RenderView::repaintRectangleInViewAndCompositedLayers):
+
+2010-11-09 Peter Rybin <peter.rybin@gmail.com>
+
+ Reviewed by Adam Barth.
+
+ XMLDocumentParser gets deleted and then used in LayoutTest/fast/frames/set-parent-src-synchronously.xhtml on QT/Linux
+ https://bugs.webkit.org/show_bug.cgi?id=48643
+
+ * dom/XMLDocumentParserQt.cpp:
+ (WebCore::XMLDocumentParser::doWrite):
+
+2010-11-09 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dave Hyatt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49197
+ <rdar://problem/8642746>
+
+ When starting an accelerated transform animation on a renderer, check
+ that it's a RenderBox before allow transform animations (and before
+ calling borderBoxRect()), because transforms are currently disallowed
+ on inline elements.
+
+ Test: animations/animation-on-inline-crash.html
+
+ * rendering/RenderLayerBacking.cpp:
+ (WebCore::RenderLayerBacking::startAnimation):
+
+2010-11-09 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dave Hyatt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49204
+ <rdar://problem/8643412>
+
+ Add checks to the CSSStyleSelector code to ensure that the
+ casts to the various CSSValue types are safe, and do more
+ rigorous checking of the lengths of CSSValueLists, and
+ non-null members of Pair in some cases.
+
+ * css/CSSBorderImageValue.h:
+ (WebCore::CSSBorderImageValue::isBorderImageValue):
+ * css/CSSCursorImageValue.h:
+ (WebCore::CSSCursorImageValue::isCursorImageValue):
+ * css/CSSImageValue.h:
+ (WebCore::CSSImageValue::isImageValue):
+ * css/CSSReflectValue.h:
+ (WebCore::CSSReflectValue::isReflectValue):
+ * css/CSSStyleSelector.cpp:
+ (WebCore::CSSStyleSelector::resolveVariablesForDeclaration):
+ (WebCore::CSSRuleSet::addRulesFromSheet):
+ (WebCore::CSSRuleSet::addStyleRule):
+ (WebCore::applyCounterList):
+ (WebCore::CSSStyleSelector::applyProperty):
+ (WebCore::CSSStyleSelector::mapFillSize):
+ (WebCore::CSSStyleSelector::mapAnimationDelay):
+ (WebCore::CSSStyleSelector::mapAnimationDirection):
+ (WebCore::CSSStyleSelector::mapAnimationFillMode):
+ (WebCore::CSSStyleSelector::mapAnimationName):
+ (WebCore::CSSStyleSelector::mapAnimationPlayState):
+ (WebCore::CSSStyleSelector::mapNinePieceImage):
+ (WebCore::CSSStyleSelector::createTransformOperations):
+ * css/CSSValue.h:
+ (WebCore::CSSValue::isBorderImageValue):
+ (WebCore::CSSValue::isCursorImageValue):
+ (WebCore::CSSValue::isFontFamilyValue):
+ (WebCore::CSSValue::isReflectValue):
+ (WebCore::CSSValue::isShadowValue):
+ * css/FontFamilyValue.h:
+ (WebCore::FontFamilyValue::isFontFamilyValue):
+ * css/SVGCSSStyleSelector.cpp:
+ (WebCore::CSSStyleSelector::applySVGProperty):
+ * css/ShadowValue.h:
+ (WebCore::ShadowValue::isShadowValue):
+ * platform/graphics/transforms/TransformOperations.h:
+ (WebCore::TransformOperations::clear):
+
+2010-11-09 Ben Murdoch <benm@google.com>
+
+ Reviewed by Steve Block.
+
+ Android is missing implementation of V8GCController::checkMemoryUsage
+ https://bugs.webkit.org/show_bug.cgi?id=49255
+
+ This patch adds the necessary code to WebCore to implement the
+ functionality. The implementation of the PlatformBridge on Android
+ does not live upstream yet, so not patching that here.
+
+ No new test as this is a platform specific change on Android.
+
+ * bindings/v8/V8GCController.cpp:
+ (WebCore::V8GCController::checkMemoryUsage): Implement on Android.
+ * platform/android/PlatformBridge.h: Add necessary methods to read
+ device specific memory usage and constraints.
+
+2010-11-09 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ ScrollView::updateScrollbars() shouldn't do anything when scrolling is delegated.
+
+ * platform/ScrollView.cpp:
+ (WebCore::ScrollView::updateScrollbars):
+
+2010-11-09 Steve Block <steveblock@google.com>
+
+ Reviewed by Andreas Kling.
+
+ Unused parameter warning causes JSC build failure with deviceorientation
+ https://bugs.webkit.org/show_bug.cgi?id=49251
+
+ No new tests, build fix only.
+
+ * bindings/js/JSDeviceMotionEventCustom.cpp:
+ (WebCore::JSDeviceMotionEvent::interval):
+ * bindings/js/JSDeviceOrientationEventCustom.cpp:
+ (WebCore::JSDeviceOrientationEvent::alpha):
+ (WebCore::JSDeviceOrientationEvent::beta):
+ (WebCore::JSDeviceOrientationEvent::gamma):
+
+2010-11-09 Renata Hodovan <reni@webkit.org>
+
+ Reviewed by Nikolas Zimmermann.
+
+ SVGFETileElement doesn't support dynamic invalidation, when attributes change.
+ https://bugs.webkit.org/show_bug.cgi?id=49247
+
+ The dynamic changes are captured by the svgAttributeChanged function. Invalidate the filter primitive if necessary.
+
+ Tests: svg/dynamic-updates/SVGFETileElement-dom-in-attr.html
+ svg/dynamic-updates/SVGFETileElement-svgdom-in-prop.html
+
+ * svg/SVGFETileElement.cpp:
+ (WebCore::SVGFETileElement::svgAttributeChanged):
+ * svg/SVGFETileElement.h:
+
+2010-11-09 Jenn Braithwaite <jennb@chromium.org>
+
+ Reviewed by Dmitry Titov.
+
+ Update ProgressTracker when moving a frame between documents
+ https://bugs.webkit.org/show_bug.cgi?id=48368
+
+ No new tests. andersca informs me it's not possible to test
+ ProgressTracker changes via layouttests. Review extra carefully...
+
+ * loader/DocumentLoader.cpp:
+ (WebCore::DocumentLoader::transferLoadingResourcesFromPage):
+ Changed to use FrameLoader to deliver the notification to the
+ client via the notifier.
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader:;transferLoadingResourcesFromPage):
+ Update old and new progress tracker about frame progress.
+ (WebCore::FrameLoader::dispatchTransferLoadingResourceFromPage):
+ Added to route notification via the notifier.
+ * loader/FrameLoader.h:
+ * loader/ProgressTracker.cpp:
+ (WebCore::ProgressTracker::completeProgress):
+ Comment change only.
+ * loader/ResourceLoadNotifier.cpp:
+ (WebCore::ResourceLoadNotifier::dispatchTransferLoadingResourceFromPage):
+ Added to provide one place to notify client and progress tracker -
+ and probably inspector controller (separate patch).
+ * loader/ResourceLoadNotifier.h:
+
+2010-11-09 Dai Mikurube <dmikurube@google.com>
+
+ Reviewed by Kent Tamura.
+
+ Too precise serialization from floating point number to string for "number" input elements
+ https://bugs.webkit.org/show_bug.cgi?id=48308
+
+ Modified to consider decimal places when handling step and base in applyStep().
+
+ * html/HTMLInputElement.cpp: Considering decimal places of the given "step" attribtue.
+ (WebCore::HTMLInputElement::getAllowedValueStep):
+ (WebCore::HTMLInputElement::getAllowedValueStepWithDecimalPlaces):
+ (WebCore::HTMLInputElement::applyStep):
+ * html/HTMLInputElement.h:
+ * html/InputType.cpp: Added virtual functions for decimal places and an acceptable error.
+ (WebCore::InputType::stepBaseWithDecimalPlaces):
+ (WebCore::InputType::acceptableError):
+ (WebCore::InputType::parseToDoubleWithDecimalPlaces):
+ * html/InputType.h:
+ * html/NumberInputType.cpp:
+ (WebCore::NumberInputType::stepMismatch): Using the virtual function acceptableError().
+ (WebCore::NumberInputType::stepBaseWithDecimalPlaces): Considering decimal places of the given "base" attribute.
+ (WebCore::NumberInputType::parseToDoubleWithDecimalPlaces):
+ (WebCore::NumberInputType::acceptableError): Concrete acceptableError() for the number type.
+ * html/NumberInputType.h:
+ * html/parser/HTMLParserIdioms.cpp:
+ (WebCore::parseToDoubleForNumberTypeWithDecimalPlaces): Parsing numbers with decimal places.
+ * html/parser/HTMLParserIdioms.h:
+
+2010-11-09 Yuzo Fujishima <yuzo@google.com>
+
+ Reviewed by Shinichiro Hamaji.
+
+ Fix for Bug 48984 - [Chromium] @media print crash due to paged media support
+ Page context has been inheriting from document element style that becomes null if display property is none.
+ It should inherit from document style instead to properly handle direction property (and to avoid the null reference).
+ https://bugs.webkit.org/show_bug.cgi?id=48984
+
+ Test: printing/page-format-data-display-none.html
+
+ * css/CSSStyleSelector.cpp:
+ (WebCore::CSSStyleSelector::styleForPage): Page context inherits from
+ document style.
+
+2010-11-09 Chris Rogers <crogers@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Add custom bindings for AudioContext
+ https://bugs.webkit.org/show_bug.cgi?id=49115
+
+ No new tests since audio API is not yet implemented.
+
+ * bindings/js/JSAudioContextCustom.cpp: Added.
+ (WebCore::JSAudioContextConstructor::constructJSAudioContext):
+ * bindings/v8/custom/V8AudioContextCustom.cpp: Added.
+ (WebCore::V8AudioContext::constructorCallback):
+
+2010-11-09 Shinichiro Hamaji <hamaji@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ [Chromium] display:none has no effect on <option> element
+ https://bugs.webkit.org/show_bug.cgi?id=49169
+
+ Added a manual test because it's hard to test the content of
+ <option> element.
+
+ * manual-tests/display-none-option.html: Added.
+ * platform/PopupMenuStyle.h:
+ (WebCore::PopupMenuStyle::PopupMenuStyle):
+ (WebCore::PopupMenuStyle::isDisplayNone):
+ * platform/chromium/PopupMenuChromium.cpp:
+ (WebCore::PopupListBox::getRowHeight):
+ (WebCore::PopupListBox::layout):
+ * rendering/RenderMenuList.cpp:
+ (WebCore::RenderMenuList::itemStyle):
+ (WebCore::RenderMenuList::menuStyle):
+ * rendering/RenderTextControlSingleLine.cpp:
+ (WebCore::RenderTextControlSingleLine::menuStyle):
+
+2010-11-09 Chris Rogers <crogers@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ audio engine: add audio resources abstraction
+ https://bugs.webkit.org/show_bug.cgi?id=34660
+
+ No new tests since audio API is not yet implemented.
+
+ * platform/audio/AudioBus.h:
+ * platform/audio/HRTFElevation.cpp:
+ (WebCore::HRTFElevation::calculateKernelsForAzimuthElevation):
+ (WebCore::HRTFElevation::createByInterpolatingSlices):
+ * platform/audio/mac/AudioBusMac.mm: Added.
+ (WebCore::AudioBus::loadPlatformResource):
+
+2010-11-09 James Simonsen <simonjam@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ [Web Timing] Remove requestEnd
+ https://bugs.webkit.org/show_bug.cgi?id=48924
+
+ * page/Timing.cpp:
+ * page/Timing.h:
+ * page/Timing.idl:
+
+2010-11-09 Sam Magnuson <smagnuson@netflix.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] image borders do not render correctly
+ https://bugs.webkit.org/show_bug.cgi?id=49191
+
+ Test: fast/borders/border-image-01.html
+
+ * platform/graphics/qt/ImageQt.cpp:
+ (WebCore::Image::drawPattern):
+
+2010-11-08 James Simonsen <simonjam@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ [Web Timing] Split domContentLoaded into start/end
+ https://bugs.webkit.org/show_bug.cgi?id=48920
+
+ * dom/Document.cpp:
+ (WebCore::Document::finishedParsing):
+ * dom/DocumentTiming.h:
+ (WebCore::DocumentTiming::DocumentTiming):
+ * page/Timing.cpp:
+ (WebCore::Timing::domContentLoadedStart):
+ (WebCore::Timing::domContentLoadedEnd):
+ * page/Timing.h:
+ * page/Timing.idl:
+
+2010-11-08 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Call ApplicationCacheHost::maybeLoadResource() in
+ ResourceLoader::start() instead of ResourceLoader::load().
+ maybeLoadResource() might mutate the ResourceRequest, and
+ in its current location any modifications are lost.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49221
+
+ Fixes a couple of http/tests/appcache tests
+ failing on chromium.
+
+ * loader/ResourceLoader.cpp:
+ (WebCore::ResourceLoader::load):
+ (WebCore::ResourceLoader::start):
+
+2010-11-08 Chang Shu <chang.shu@nokia.com>
+
+ Reviewed by Antonio Gomes.
+
+ [GTK] Use Space to toggle arrow key handling for selection change or
+ spatial navigation. Put the logic in common code to pass both Qt and
+ GTK. Mac won't work because arrow keys trigger the popup.
+ https://bugs.webkit.org/show_bug.cgi?id=49150
+
+ Existing test: fast/events/spatial-navigation/snav-single-select.html
+
+ * dom/SelectElement.cpp:
+ (WebCore::SelectElement::menuListDefaultEventHandler):
+
+2010-11-08 Jenn Braithwaite <jennb@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ _bindResourceURL in ResourceManager.js may not add resource to map
+ https://bugs.webkit.org/show_bug.cgi?id=49088
+
+ No new tests. pfeldman working on better test harness and tests.
+
+ * inspector/front-end/ResourceManager.js:
+ (WebInspector.ResourceManager.prototype._bindResourceURL):
+
+2010-11-08 John Knottenbelt <jknotten@chromium.org>
+
+ Reviewed by Steve Block.
+
+ Convert to and from DOMTimeStamp with converter functions.
+ This is a refactoring only, covered by existing layout tests.
+ https://bugs.webkit.org/show_bug.cgi?id=49066
+
+ * GNUmakefile.am:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * dom/DOMTimeStamp.h: Added.
+ (WebCore::convertSecondsToDOMTimeStamp):
+ (WebCore::convertDOMTimeStampToSeconds):
+ * dom/Event.cpp:
+ (WebCore::Event::Event):
+ * dom/Event.h:
+ * page/Geolocation.cpp:
+ (WebCore::Geolocation::haveSuitableCachedPosition):
+ * platform/android/GeolocationServiceAndroid.cpp:
+ (WebCore::GeolocationServiceAndroid::isPositionMoreTimely):
+
+2010-11-08 Ryosuke Niwa <rniwa@webkit.org>
+
+ Unreviewed build fix for Chromium Mac for r71590.
+
+ * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
+ (WebCore::provideStringAndAttributes):
+
+2010-11-08 Anton Muhin <antonm@chromium.org>
+
+ Reviewed by Nate Chapin.
+
+ [v8] Get rid of automatically generated named property getter for classes with namedItem method
+ https://bugs.webkit.org/show_bug.cgi?id=48770
+
+ * bindings/scripts/CodeGeneratorV8.pm:
+ * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
+
+2010-11-08 Ned Holbrook <nholbrook@apple.com>
+
+ Reviewed by Adam Barth.
+
+ Avoid CFAttributedString creation in ComplexTextController by adopting UniChar provider SPI.
+ https://bugs.webkit.org/show_bug.cgi?id=48886
+
+ * WebCore.exp.in:
+ * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
+ (WebCore::provideStringAndAttributes):
+ (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText):
+ * platform/mac/WebCoreSystemInterface.h:
+ * platform/mac/WebCoreSystemInterface.mm:
+
+2010-11-08 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49228
+
+ REGRESSION: caret too short when a positive line height is specified. Now that lineTop no longer
+ accidentally incorporates the top leading, we need to use selectionTop/Bottom for the caret rect.
+
+ * rendering/RenderText.cpp:
+ (WebCore::RenderText::localCaretRect):
+
+2010-11-08 Pierre-Antoine LaFayette <pierre.lafayette@gmail.com>
+
+ Reviewed by Darin Fisher.
+
+ [chromium] Adding hasUserGesture flag to the ResourceRequest
+ https://bugs.webkit.org/show_bug.cgi?id=37057
+
+ This flag is to be used on the browser side to indicate when a
+ download has been user initiated.
+
+ No new tests. This change will be tested through a browser UI test.
+
+ * platform/network/chromium/ResourceRequest.h:
+ (WebCore::ResourceRequest::ResourceRequest):
+ (WebCore::ResourceRequest::hasUserGesture):
+ (WebCore::ResourceRequest::setHasUserGesture):
+
+2010-11-08 Chris Rogers <crogers@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Remove obsolete PASSTHROUGH and MATRIXMIX panner mode
+ https://bugs.webkit.org/show_bug.cgi?id=49087
+
+ No new tests since audio API is not yet implemented.
+
+ * platform/audio/Panner.cpp:
+ (WebCore::Panner::create):
+ * platform/audio/Panner.h:
+ * webaudio/AudioPannerNode.h:
+ * webaudio/AudioPannerNode.idl:
+
+2010-11-08 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Adam Roben.
+
+ Merge EditorWinCE.cpp into EditorWin.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=49095
+
+ * platform/win/EditorWin.cpp:
+ (WebCore::Editor::newGeneralClipboard):
+ * platform/wince/EditorWinCE.cpp: Removed.
+
+2010-11-08 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49217
+
+ Fix coordinate space mismatch in RenderReplaced and make sure RenderText retains its old behavior of
+ preferring later lines when there is overlap.
+
+ * rendering/RenderReplaced.cpp:
+ (WebCore::RenderReplaced::positionForPoint):
+ * rendering/RenderText.cpp:
+ (WebCore::RenderText::positionForPoint):
+
+2010-11-08 Steve Block <steveblock@google.com>
+
+ Reviewed by David Levin.
+
+ Building for Android generates several compiler warnings
+ https://bugs.webkit.org/show_bug.cgi?id=49175
+
+ Fixes these warnings, most of which are trivial.
+ - PREFIX_FOR_WEBCORE was previously required for STL's algorithm, but is no
+ longer. See
+ http://android.git.kernel.org/?p=platform/external/webkit.git;a=commit;h=a47ab5294213cca2741f453b450b02666e08cac8
+ - The definition of EXPORT is required only for the JNI entry point in
+ WebKit/android, so does not need to be in WebCorePrefix.h
+
+ No new tests, fixes compile warnings only.
+
+ * WebCorePrefix.h:
+ * bridge/jni/jsc/JNIUtilityPrivate.cpp:
+ (JSC::Bindings::convertValueToJValue):
+ * platform/android/FileSystemAndroid.cpp:
+ (WebCore::listDirectory):
+
+2010-11-08 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Darin Adler.
+
+ <rdar://problem/8119781> Crash zooming into Word document at office.live.com
+ https://bugs.webkit.org/show_bug.cgi?id=49203
+
+ Test: fast/css/zoom-change-triggering-layout.html
+
+ RenderBox::styleDidChange() was calling scrollLeft() and scrollTop(), whose RenderTextControlSingleLine
+ overrides can trigger layout.
+
+ * rendering/RenderBox.cpp:
+ (WebCore::RenderBox::styleDidChange): Use the layer directly for updating the scroll offsets when
+ the zoom factor changes.
+
+2010-11-08 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ https://bugs.webkit.org/show_bug.cgi?id=48587
+
+ Make Ruby work with vertical text. Ruby already nearly does work. The only big issue I found was with
+ flipped lines writing modes. Make sure to mutate the writing-mode of the RenderRubyRun to ensure that
+ the ruby text is on the correct side of the ruby base.
+
+ Added fast/blockflow tests of the various writing modes.
+
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::baselinePosition):
+ (WebCore::RenderBlock::firstLineBoxBaseline):
+ (WebCore::RenderBlock::lastLineBoxBaseline):
+ * rendering/RenderRubyRun.cpp:
+ (WebCore::RenderRubyRun::staticCreateRubyRun):
+
+2010-11-08 Brent Fulgham <bfulgham@webkit.org>
+
+ Unreviewed build correction after @70369/@70846.
+
+ Please use PLATFORM(CG) to define CG-specific code, not
+ PLATFORM(CF).
+
+ * platform/image-decoders/ImageDecoder.cpp:
+ * platform/image-decoders/ImageDecoder.h:
+
+2010-11-08 James Robinson <jamesr@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Input element with inner spin button set to display:none causes crash
+ https://bugs.webkit.org/show_bug.cgi?id=49121
+
+ Null check the inner spin button's renderer before dereferencing it.
+
+ Test: fast/forms/input-number-spinbutton-crash.html
+
+ * rendering/RenderTextControlSingleLine.cpp:
+ (WebCore::RenderTextControlSingleLine::forwardEvent):
+
+2010-11-08 Xiaomei Ji <xji@chromium.org>
+
+ Reviewed by Dan Bernstein.
+
+ Fix Unicode explicit bidi control characters are removed in editing operations,
+ such as insert/copy/cut/paste.
+ https://bugs.webkit.org/show_bug.cgi?id=25321
+
+ Unicode explicit bidi control characters were excluded in BidiRun and
+ consequently from InlineTextBoxes due to their effect on rendering complex
+ text with ATSUI.
+ The fix is including those characters in BidiRun and remove them from
+ ComplexTextRun with ATSUI.
+
+ Test: editing/inserting/insert-paste-bidi-control.html
+ fast/text/atsui-bidi-control.html
+
+ * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
+ (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
+ * platform/text/BidiResolver.h:
+ (WebCore::::checkDirectionInLowerRaiseEmbeddingLevel):
+ (WebCore::::lowerExplicitEmbeddingLevel):
+ (WebCore::::raiseExplicitEmbeddingLevel):
+ (WebCore::::createBidiRunsForLine):
+
+2010-11-08 David Hyatt <hyatt@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49126
+
+ RenderBlock::positionForPoint is not writing-mode aware. Patch the function to examine lines in the correct
+ writing-mode direction. Patched and renamed a number of helpers used by positionForPoint.
+
+ Fixed a bug with RenderReplaced's positionForPoint. There was a coordinate space mismatch between what the
+ function expected (local coordinates) and what was passed in (containing block coords), which meant the function didn't even work.
+
+ Fixed a bug with the propagation of selection state on RenderReplaced to its containing block. The bit double propagated
+ because both the base class function and the derived class function did the propagation, and the setter function did not
+ do the right thing if this happened.
+
+ Patched the localSelectionRect method on RenderReplaced so that selection draws in the right place in all writing modes.
+
+ Added new tests of positionForPoint and replaced elements in fast/blockflow.
+
+ * editing/visible_units.cpp:
+ (WebCore::previousLinePosition):
+ (WebCore::nextLinePosition):
+ * platform/graphics/IntPoint.h:
+ (WebCore::IntPoint::transpose):
+ * rendering/InlineBox.cpp:
+ (WebCore::InlineBox::paint):
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::nodeAtPoint):
+ (WebCore::RenderBlock::hitTestFloats):
+ (WebCore::positionForPointRespectingEditingBoundaries):
+ (WebCore::RenderBlock::positionForPointWithInlineChildren):
+ (WebCore::RenderBlock::positionForPoint):
+ * rendering/RenderReplaced.cpp:
+ (WebCore::RenderReplaced::positionForPoint):
+ (WebCore::RenderReplaced::localSelectionRect):
+ (WebCore::RenderReplaced::setSelectionState):
+ * rendering/RenderReplaced.h:
+ * rendering/RenderText.cpp:
+ (WebCore::RenderText::positionForPoint):
+ * rendering/RootInlineBox.cpp:
+ (WebCore::RootInlineBox::closestLeafChildForLogicalLeftPosition):
+ * rendering/RootInlineBox.h:
+
+2010-11-08 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Move connection-per-host counting and request prioritization out
+ of Loader and down to the ResourceLoader level.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27165
+
+ Refactor only, so no new tests.
+
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * WebCore.exp.in:
+ * WebCore.gypi:
+ * WebCore.pro:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * dom/ContainerNode.cpp:
+ (WebCore::ContainerNode::suspendPostAttachCallbacks):
+ (WebCore::ContainerNode::resumePostAttachCallbacks):
+ * loader/DocumentThreadableLoader.cpp:
+ (WebCore::DocumentThreadableLoader::loadRequest):
+ * loader/MainResourceLoader.cpp:
+ (WebCore::MainResourceLoader::loadNow):
+ * loader/NetscapePlugInStreamLoader.cpp:
+ (WebCore::NetscapePlugInStreamLoader::create):
+ * loader/NetscapePlugInStreamLoader.h:
+ * loader/ResourceLoadScheduler.cpp: Added.
+ (WebCore::ResourceLoadScheduler::hostForURL):
+ (WebCore::resourceLoadScheduler): Returns the single ResourceLoadScheduler instance
+ (WebCore::ResourceLoadScheduler::ResourceLoadScheduler):
+ (WebCore::ResourceLoadScheduler::scheduleSubresourceLoad):
+ (WebCore::ResourceLoadScheduler::schedulePluginStreamLoad):
+ (WebCore::ResourceLoadScheduler::addMainResourceLoad):
+ (WebCore::ResourceLoadScheduler::scheduleLoad):
+ (WebCore::ResourceLoadScheduler::remove):
+ (WebCore::ResourceLoadScheduler::crossOriginRedirectReceived):
+ (WebCore::ResourceLoadScheduler::servePendingRequests):
+ (WebCore::ResourceLoadScheduler::suspendPendingRequests):
+ (WebCore::ResourceLoadScheduler::resumePendingRequests):
+ (WebCore::ResourceLoadScheduler::scheduleServePendingRequests):
+ (WebCore::ResourceLoadScheduler::requestTimerFired):
+ (WebCore::ResourceLoadScheduler::assertLoaderBeingCounted):
+ (WebCore::ResourceLoadScheduler::HostInformation::assertLoaderBeingCounted):
+ (WebCore::ResourceLoadScheduler::HostInformation::HostInformation):
+ (WebCore::ResourceLoadScheduler::HostInformation::~HostInformation):
+ (WebCore::ResourceLoadScheduler::HostInformation::schedule):
+ (WebCore::ResourceLoadScheduler::HostInformation::addLoadInProgress):
+ (WebCore::ResourceLoadScheduler::HostInformation::remove):
+ (WebCore::ResourceLoadScheduler::HostInformation::hasRequests):
+ * loader/ResourceLoadScheduler.h: Added.
+ (WebCore::ResourceLoadScheduler::HostInformation::name):
+ (WebCore::ResourceLoadScheduler::HostInformation::limitRequests):
+ (WebCore::ResourceLoadScheduler::HostInformation::requestsPending):
+ * loader/ResourceLoader.cpp:
+ (WebCore::ResourceLoader::releaseResources): Remove this from ResourceLoadScheduler's counting.
+ (WebCore::ResourceLoader::load):
+ (WebCore::ResourceLoader::start): Create the ResourceHandle, called by ResourceLoadScheduler.
+ (WebCore::ResourceLoader::willSendRequest): Ensure ResourceLoadScheduler counts redirects
+ correctly.
+ * loader/ResourceLoader.h:
+ (WebCore::ResourceLoader::url):
+ * loader/icon/IconLoader.cpp:
+ (WebCore::IconLoader::startLoading):
+ * loader/loader.cpp: Move scheduling to ResourceLoadScheduler, remove Host subclass
+ and make Loader the SubresourceLoaderClient instead.
+ (WebCore::determinePriority):
+ (WebCore::Loader::load): Schedule the creation of the ResourceHandle, rather than
+ doing it immediately.
+ (WebCore::Loader::cancelRequests):
+ (WebCore::Loader::didFinishLoading):
+ (WebCore::Loader::didFail):
+ (WebCore::Loader::didReceiveResponse):
+ (WebCore::Loader::didReceiveData):
+ (WebCore::Loader::didReceiveCachedMetadata):
+ * loader/loader.h:
+ * page/EventSource.cpp:
+ (WebCore::EventSource::connect):
+ (WebCore::EventSource::endRequest):
+ * plugins/PluginStream.cpp:
+ (WebCore::PluginStream::start):
+ * xml/XMLHttpRequest.cpp:
+ (WebCore::XMLHttpRequest::XMLHttpRequest):
+ (WebCore::XMLHttpRequest::~XMLHttpRequest):
+ (WebCore::XMLHttpRequest::createRequest):
+ (WebCore::XMLHttpRequest::didFail):
+ (WebCore::XMLHttpRequest::didFinishLoading):
+ * xml/XMLHttpRequest.h:
+
2010-11-08 Ryosuke Niwa <rniwa@webkit.org>
Reviewed by Darin Adler.
@@ -1655,7 +7423,7 @@
where some elements have their own layers, and cells whose writing mode differs from the
table’s are not supported yet.
- Make tables work with vertical text
+ Part of: Make tables work with vertical text
https://bugs.webkit.org/show_bug.cgi?id=46417
Tests: fast/table/027-vertical.html
diff --git a/WebCore/Configurations/FeatureDefines.xcconfig b/WebCore/Configurations/FeatureDefines.xcconfig
index d08fadf..46d5de4 100644
--- a/WebCore/Configurations/FeatureDefines.xcconfig
+++ b/WebCore/Configurations/FeatureDefines.xcconfig
@@ -91,9 +91,6 @@ ENABLE_NOTIFICATIONS = ;
ENABLE_OFFLINE_WEB_APPLICATIONS = ENABLE_OFFLINE_WEB_APPLICATIONS;
ENABLE_PROGRESS_TAG = ENABLE_PROGRESS_TAG;
-ENABLE_RUBY = $(ENABLE_RUBY_$(REAL_PLATFORM_NAME));
-ENABLE_RUBY_macosx = ENABLE_RUBY;
-
ENABLE_SHARED_WORKERS = $(ENABLE_SHARED_WORKERS_$(REAL_PLATFORM_NAME));
ENABLE_SHARED_WORKERS_macosx = ENABLE_SHARED_WORKERS;
@@ -124,4 +121,4 @@ ENABLE_XHTMLMP = ;
ENABLE_XPATH = ENABLE_XPATH;
ENABLE_XSLT = ENABLE_XSLT;
-FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_3D_CANVAS) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PROGRESS_TAG) $(ENABLE_RUBY) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);
+FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_3D_CANVAS) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PROGRESS_TAG) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);
diff --git a/WebCore/Configurations/Version.xcconfig b/WebCore/Configurations/Version.xcconfig
index 0a75fe6..2f559cc 100644
--- a/WebCore/Configurations/Version.xcconfig
+++ b/WebCore/Configurations/Version.xcconfig
@@ -22,7 +22,7 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MAJOR_VERSION = 534;
-MINOR_VERSION = 12;
+MINOR_VERSION = 13;
TINY_VERSION = 0;
FULL_VERSION = $(MAJOR_VERSION).$(MINOR_VERSION);
diff --git a/WebCore/DerivedSources.cpp b/WebCore/DerivedSources.cpp
index dcd0e22..5d2d10a 100644
--- a/WebCore/DerivedSources.cpp
+++ b/WebCore/DerivedSources.cpp
@@ -63,8 +63,6 @@
#include "JSCSSStyleSheet.cpp"
#include "JSCSSValue.cpp"
#include "JSCSSValueList.cpp"
-#include "JSCSSVariablesDeclaration.cpp"
-#include "JSCSSVariablesRule.cpp"
#include "JSCustomEvent.cpp"
#include "JSDatabase.cpp"
#include "JSDatabaseCallback.cpp"
@@ -123,6 +121,7 @@
#include "JSFileSystemCallback.cpp"
#include "JSFileWriter.cpp"
#include "JSFileWriterCallback.cpp"
+#include "JSFileWriterSync.cpp"
#include "JSFlags.cpp"
#include "JSGeolocation.cpp"
#include "JSGeoposition.cpp"
@@ -234,7 +233,6 @@
#include "JSMouseEvent.cpp"
#include "JSMutationEvent.cpp"
#include "JSNamedNodeMap.cpp"
-#include "JSNavigation.cpp"
#include "JSNavigator.cpp"
#include "JSNode.cpp"
#include "JSNodeFilter.cpp"
@@ -246,6 +244,8 @@
#include "JSOverflowEvent.cpp"
#include "JSPageTransitionEvent.cpp"
#include "JSPerformance.cpp"
+#include "JSPerformanceNavigation.cpp"
+#include "JSPerformanceTiming.cpp"
#include "JSPopStateEvent.cpp"
#include "JSPositionError.cpp"
#include "JSProcessingInstruction.cpp"
@@ -414,7 +414,6 @@
#include "JSTextEvent.cpp"
#include "JSTextMetrics.cpp"
#include "JSTimeRanges.cpp"
-#include "JSTiming.cpp"
#include "JSTouch.cpp"
#include "JSTouchEvent.cpp"
#include "JSTouchList.cpp"
diff --git a/WebCore/DerivedSources.make b/WebCore/DerivedSources.make
index ef22c83..1b6a266 100644
--- a/WebCore/DerivedSources.make
+++ b/WebCore/DerivedSources.make
@@ -73,8 +73,6 @@ DOM_CLASSES = \
CSSUnknownRule \
CSSValue \
CSSValueList \
- CSSVariablesRule \
- CSSVariablesDeclaration \
WebGLActiveInfo \
ArrayBufferView \
ArrayBuffer \
@@ -168,6 +166,7 @@ DOM_CLASSES = \
FileReaderSync \
FileWriter \
FileWriterCallback \
+ FileWriterSync \
FileSystemCallback \
Flags \
Geolocation \
@@ -278,7 +277,6 @@ DOM_CLASSES = \
MouseEvent \
MutationEvent \
NamedNodeMap \
- Navigation \
Navigator \
Node \
NodeFilter \
@@ -290,6 +288,8 @@ DOM_CLASSES = \
OverflowEvent \
PageTransitionEvent \
Performance \
+ PerformanceNavigation \
+ PerformanceTiming \
PopStateEvent \
PositionError \
ProcessingInstruction \
@@ -469,7 +469,6 @@ DOM_CLASSES = \
TextEvent \
TextMetrics \
TimeRanges \
- Timing \
Touch \
TouchEvent \
TouchList \
@@ -715,10 +714,6 @@ ifeq ($(findstring ENABLE_VIDEO,$(FEATURE_DEFINES)), ENABLE_VIDEO)
HTML_FLAGS := $(HTML_FLAGS) ENABLE_VIDEO=1
endif
-ifeq ($(findstring ENABLE_RUBY,$(FEATURE_DEFINES)), ENABLE_RUBY)
- HTML_FLAGS := $(HTML_FLAGS) ENABLE_RUBY=1
-endif
-
ifdef HTML_FLAGS
HTMLElementFactory.cpp HTMLNames.cpp : dom/make_names.pl html/HTMLTagNames.in html/HTMLAttributeNames.in
diff --git a/WebCore/English.lproj/localizedStrings.js b/WebCore/English.lproj/localizedStrings.js
index 02e2143..4eb11b9 100644
--- a/WebCore/English.lproj/localizedStrings.js
+++ b/WebCore/English.lproj/localizedStrings.js
Binary files differ
diff --git a/WebCore/ForwardingHeaders/wtf/text/TextPosition.h b/WebCore/ForwardingHeaders/wtf/text/TextPosition.h
new file mode 100644
index 0000000..1600984
--- /dev/null
+++ b/WebCore/ForwardingHeaders/wtf/text/TextPosition.h
@@ -0,0 +1,4 @@
+#ifndef WebCore_FWD_TextPosition_h
+#define WebCore_FWD_TextPosition_h
+#include <JavaScriptCore/TextPosition.h>
+#endif
diff --git a/WebCore/GNUmakefile.am b/WebCore/GNUmakefile.am
index 63d0455..5dcc468 100644
--- a/WebCore/GNUmakefile.am
+++ b/WebCore/GNUmakefile.am
@@ -182,10 +182,6 @@ webcore_built_sources += \
DerivedSources/WebCore/JSCSSValue.h \
DerivedSources/WebCore/JSCSSValueList.cpp \
DerivedSources/WebCore/JSCSSValueList.h \
- DerivedSources/WebCore/JSCSSVariablesDeclaration.cpp \
- DerivedSources/WebCore/JSCSSVariablesDeclaration.h \
- DerivedSources/WebCore/JSCSSVariablesRule.cpp \
- DerivedSources/WebCore/JSCSSVariablesRule.h \
DerivedSources/WebCore/JSCustomEvent.cpp \
DerivedSources/WebCore/JSCustomEvent.h \
DerivedSources/WebCore/JSDataGridColumn.cpp \
@@ -447,8 +443,6 @@ webcore_built_sources += \
DerivedSources/WebCore/JSMutationEvent.h \
DerivedSources/WebCore/JSNamedNodeMap.cpp \
DerivedSources/WebCore/JSNamedNodeMap.h \
- DerivedSources/WebCore/JSNavigation.cpp \
- DerivedSources/WebCore/JSNavigation.h \
DerivedSources/WebCore/JSNavigator.cpp \
DerivedSources/WebCore/JSNavigator.h \
DerivedSources/WebCore/JSNode.cpp \
@@ -471,6 +465,10 @@ webcore_built_sources += \
DerivedSources/WebCore/JSPageTransitionEvent.h \
DerivedSources/WebCore/JSPerformance.cpp \
DerivedSources/WebCore/JSPerformance.h \
+ DerivedSources/WebCore/JSPerformanceNavigation.cpp \
+ DerivedSources/WebCore/JSPerformanceNavigation.h \
+ DerivedSources/WebCore/JSPerformanceTiming.cpp \
+ DerivedSources/WebCore/JSPerformanceTiming.h \
DerivedSources/WebCore/JSPopStateEvent.cpp \
DerivedSources/WebCore/JSPopStateEvent.h \
DerivedSources/WebCore/JSPositionError.cpp \
@@ -512,8 +510,6 @@ webcore_built_sources += \
DerivedSources/WebCore/JSTextMetrics.h \
DerivedSources/WebCore/JSTimeRanges.cpp \
DerivedSources/WebCore/JSTimeRanges.h \
- DerivedSources/WebCore/JSTiming.cpp \
- DerivedSources/WebCore/JSTiming.h \
DerivedSources/WebCore/JSTouch.cpp \
DerivedSources/WebCore/JSTouchEvent.cpp \
DerivedSources/WebCore/JSTouchEvent.h \
@@ -798,7 +794,6 @@ webcore_sources += \
WebCore/bindings/js/JSSVGContextCache.h \
WebCore/bindings/js/JSSVGElementInstanceCustom.cpp \
WebCore/bindings/js/JSSVGLengthCustom.cpp \
- WebCore/bindings/js/JSSVGMatrixCustom.cpp \
WebCore/bindings/js/JSSVGPathSegCustom.cpp \
WebCore/bindings/js/JSSVGPathSegListCustom.cpp \
WebCore/bindings/js/JSSVGPODListCustom.h \
@@ -988,12 +983,6 @@ webcore_sources += \
WebCore/css/CSSValue.h \
WebCore/css/CSSValueList.cpp \
WebCore/css/CSSValueList.h \
- WebCore/css/CSSVariableDependentValue.cpp \
- WebCore/css/CSSVariableDependentValue.h \
- WebCore/css/CSSVariablesDeclaration.cpp \
- WebCore/css/CSSVariablesDeclaration.h \
- WebCore/css/CSSVariablesRule.cpp \
- WebCore/css/CSSVariablesRule.h \
WebCore/css/DashboardRegion.h \
WebCore/css/FontFamilyValue.cpp \
WebCore/css/FontFamilyValue.h \
@@ -1121,6 +1110,7 @@ webcore_sources += \
WebCore/dom/DOMStringList.h \
WebCore/dom/DOMStringMap.cpp \
WebCore/dom/DOMStringMap.h \
+ WebCore/dom/DOMTimeStamp.h \
WebCore/dom/DynamicNodeList.cpp \
WebCore/dom/DynamicNodeList.h \
WebCore/dom/EditingText.cpp \
@@ -1135,8 +1125,10 @@ webcore_sources += \
WebCore/dom/ErrorEvent.cpp \
WebCore/dom/ErrorEvent.h \
WebCore/dom/Event.cpp \
- WebCore/dom/EventException.h \
WebCore/dom/Event.h \
+ WebCore/dom/EventContext.cpp \
+ WebCore/dom/EventContext.h \
+ WebCore/dom/EventException.h \
WebCore/dom/EventListener.h \
WebCore/dom/EventNames.cpp \
WebCore/dom/EventNames.h \
@@ -1264,6 +1256,8 @@ webcore_sources += \
WebCore/dom/WebKitTransitionEvent.h \
WebCore/dom/WheelEvent.cpp \
WebCore/dom/WheelEvent.h \
+ WebCore/dom/WindowEventContext.cpp \
+ WebCore/dom/WindowEventContext.h \
WebCore/dom/XMLDocumentParser.cpp \
WebCore/dom/XMLDocumentParser.h \
WebCore/dom/XMLDocumentParserLibxml2.cpp \
@@ -1443,6 +1437,8 @@ webcore_sources += \
WebCore/fileapi/FileWriterCallback.h \
WebCore/fileapi/FileWriter.cpp \
WebCore/fileapi/FileWriter.h \
+ WebCore/fileapi/FileWriterSync.cpp \
+ WebCore/fileapi/FileWriterSync.h \
WebCore/fileapi/Flags.h \
WebCore/fileapi/LocalFileSystem.cpp \
WebCore/fileapi/LocalFileSystem.h \
@@ -1999,6 +1995,8 @@ webcore_sources += \
WebCore/loader/ResourceLoader.h \
WebCore/loader/ResourceLoadNotifier.cpp \
WebCore/loader/ResourceLoadNotifier.h \
+ WebCore/loader/ResourceLoadScheduler.cpp \
+ WebCore/loader/ResourceLoadScheduler.h \
WebCore/loader/SinkDocument.cpp \
WebCore/loader/SinkDocument.h \
WebCore/loader/SubframeLoader.cpp \
@@ -2098,15 +2096,15 @@ webcore_sources += \
WebCore/page/FrameTree.h \
WebCore/page/FrameView.cpp \
WebCore/page/FrameView.h \
- WebCore/page/GeolocationControllerClient.h \
- WebCore/page/GeolocationController.cpp \
- WebCore/page/GeolocationController.h \
WebCore/page/Geolocation.cpp \
- WebCore/page/GeolocationError.h \
WebCore/page/Geolocation.h \
+ WebCore/page/GeolocationClient.h \
+ WebCore/page/GeolocationError.h \
+ WebCore/page/GeolocationController.cpp \
+ WebCore/page/GeolocationController.h \
+ WebCore/page/GeolocationPosition.h \
WebCore/page/GeolocationPositionCache.cpp \
WebCore/page/GeolocationPositionCache.h \
- WebCore/page/GeolocationPosition.h \
WebCore/page/Geoposition.h \
WebCore/page/GroupSettings.cpp \
WebCore/page/GroupSettings.h \
@@ -2120,8 +2118,6 @@ webcore_sources += \
WebCore/page/MemoryInfo.h \
WebCore/page/MouseEventWithHitTestResults.cpp \
WebCore/page/MouseEventWithHitTestResults.h \
- WebCore/page/Navigation.cpp \
- WebCore/page/Navigation.h \
WebCore/page/NavigatorBase.cpp \
WebCore/page/NavigatorBase.h \
WebCore/page/Navigator.cpp \
@@ -2136,6 +2132,10 @@ webcore_sources += \
WebCore/page/Page.h \
WebCore/page/Performance.cpp \
WebCore/page/Performance.h \
+ WebCore/page/PerformanceNavigation.cpp \
+ WebCore/page/PerformanceNavigation.h \
+ WebCore/page/PerformanceTiming.cpp \
+ WebCore/page/PerformanceTiming.h \
WebCore/page/PluginHalterClient.h \
WebCore/page/PluginHalter.cpp \
WebCore/page/PluginHalter.h \
@@ -2162,8 +2162,6 @@ webcore_sources += \
WebCore/page/SpeechInputResult.h \
WebCore/page/SuspendableTimer.cpp \
WebCore/page/SuspendableTimer.h \
- WebCore/page/Timing.cpp \
- WebCore/page/Timing.h \
WebCore/page/UserContentTypes.h \
WebCore/page/UserContentURLPattern.cpp \
WebCore/page/UserContentURLPattern.h \
@@ -3055,6 +3053,7 @@ webcore_sources += \
WebCore/svg/properties/SVGAnimatedPropertySynchronizer.h \
WebCore/svg/properties/SVGAnimatedPropertyTearOff.h \
WebCore/svg/properties/SVGAnimatedStaticPropertyTearOff.h \
+ WebCore/svg/properties/SVGAnimatedTransformListPropertyTearOff.h \
WebCore/svg/properties/SVGListProperty.h \
WebCore/svg/properties/SVGListPropertyTearOff.h \
WebCore/svg/properties/SVGProperty.h \
@@ -3062,6 +3061,8 @@ webcore_sources += \
WebCore/svg/properties/SVGPropertyTraits.h \
WebCore/svg/properties/SVGStaticListPropertyTearOff.h \
WebCore/svg/properties/SVGStaticPropertyTearOff.h \
+ WebCore/svg/properties/SVGStaticPropertyWithParentTearOff.h \
+ WebCore/svg/properties/SVGTransformListPropertyTearOff.h \
WebCore/svg/RadialGradientAttributes.h \
WebCore/svg/SVGAElement.cpp \
WebCore/svg/SVGAElement.h \
@@ -3084,6 +3085,7 @@ webcore_sources += \
WebCore/svg/SVGAnimatedPreserveAspectRatio.h \
WebCore/svg/SVGAnimatedRect.h \
WebCore/svg/SVGAnimatedString.h \
+ WebCore/svg/SVGAnimatedTransformList.h \
WebCore/svg/SVGAnimateElement.cpp \
WebCore/svg/SVGAnimateElement.h \
WebCore/svg/SVGAnimateMotionElement.cpp \
@@ -3226,6 +3228,7 @@ webcore_sources += \
WebCore/svg/SVGMarkerElement.h \
WebCore/svg/SVGMaskElement.cpp \
WebCore/svg/SVGMaskElement.h \
+ WebCore/svg/SVGMatrix.h \
WebCore/svg/SVGMetadataElement.cpp \
WebCore/svg/SVGMetadataElement.h \
WebCore/svg/SVGMissingGlyphElement.cpp \
@@ -3531,7 +3534,6 @@ webcoregtk_sources += \
WebCore/platform/graphics/cairo/FloatRectCairo.cpp \
WebCore/platform/graphics/cairo/FontCairo.cpp \
WebCore/platform/graphics/cairo/FontCustomPlatformData.h \
- WebCore/platform/graphics/cairo/FontPlatformData.h \
WebCore/platform/graphics/cairo/GradientCairo.cpp \
WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp \
WebCore/platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h \
@@ -3626,6 +3628,9 @@ webcoregtk_sources += \
WebCore/platform/gtk/TemporaryLinkStubs.cpp \
WebCore/platform/gtk/WheelEventGtk.cpp \
WebCore/platform/gtk/WidgetGtk.cpp \
+ WebCore/platform/gtk/WidgetRenderingContextGtk2.cpp \
+ WebCore/platform/gtk/WidgetRenderingContextGtk3.cpp \
+ WebCore/platform/gtk/WidgetRenderingContext.h \
WebCore/platform/image-decoders/bmp/BMPImageDecoder.cpp \
WebCore/platform/image-decoders/bmp/BMPImageDecoder.h \
WebCore/platform/image-decoders/bmp/BMPImageReader.cpp \
@@ -3742,28 +3747,34 @@ endif # END ENABLE_FAST_MOBILE_SCROLLING
# FreeType font backend
# ---
if USE_FREETYPE
-webcoregtk_cppflags += -DUSE_FREETYPE=1
+webcoregtk_cppflags += \
+ -DUSE_FREETYPE=1 \
+ -I$(srcdir)/WebCore/platform/graphics/freetype
+
webcoregtk_sources += \
- WebCore/platform/graphics/cairo/FontCacheFreeType.cpp \
- WebCore/platform/graphics/cairo/FontCustomPlatformData.cpp \
- WebCore/platform/graphics/cairo/FontPlatformDataFreeType.cpp \
- WebCore/platform/graphics/cairo/FontPlatformDataFreeType.h \
- WebCore/platform/graphics/cairo/GlyphPageTreeNodeCairo.cpp \
- WebCore/platform/graphics/cairo/SimpleFontDataCairo.cpp
+ WebCore/platform/graphics/freetype/FontCacheFreeType.cpp \
+ WebCore/platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp \
+ WebCore/platform/graphics/freetype/FontPlatformDataFreeType.cpp \
+ WebCore/platform/graphics/freetype/FontPlatformData.h \
+ WebCore/platform/graphics/freetype/GlyphPageTreeNodeFreeType.cpp \
+ WebCore/platform/graphics/freetype/SimpleFontDataFreeType.cpp
endif # END USE_FREETYPE
# ---
# Pango font backend
# ---
if USE_PANGO
-webcoregtk_cppflags += -DUSE_PANGO=1
+webcoregtk_cppflags += \
+ -DUSE_PANGO=1 \
+ -I$(srcdir)/WebCore/platform/graphics/pango
+
webcoregtk_sources += \
- WebCore/platform/graphics/gtk/FontCachePango.cpp \
- WebCore/platform/graphics/gtk/FontCustomPlatformDataPango.cpp \
- WebCore/platform/graphics/gtk/FontPlatformDataPango.cpp \
- WebCore/platform/graphics/gtk/FontPlatformDataPango.h \
- WebCore/platform/graphics/gtk/GlyphPageTreeNodePango.cpp \
- WebCore/platform/graphics/gtk/SimpleFontDataPango.cpp
+ WebCore/platform/graphics/pango/FontCachePango.cpp \
+ WebCore/platform/graphics/pango/FontCustomPlatformDataPango.cpp \
+ WebCore/platform/graphics/pango/FontPlatformDataPango.cpp \
+ WebCore/platform/graphics/pango/FontPlatformData.h \
+ WebCore/platform/graphics/pango/GlyphPageTreeNodePango.cpp \
+ WebCore/platform/graphics/pango/SimpleFontDataPango.cpp
endif # END USE_PANGO
# ----
@@ -3930,30 +3941,46 @@ webcore_cppflags += -DENABLE_FILE_SYSTEM=1
webcore_built_sources += \
DerivedSources/WebCore/JSDirectoryEntry.cpp \
DerivedSources/WebCore/JSDirectoryEntry.h \
+ DerivedSources/WebCore/JSDirectoryEntrySync.cpp \
+ DerivedSources/WebCore/JSDirectoryEntrySync.h \
DerivedSources/WebCore/JSDirectoryReader.cpp \
DerivedSources/WebCore/JSDirectoryReader.h \
+ DerivedSources/WebCore/JSDirectoryReaderSync.cpp \
+ DerivedSources/WebCore/JSDirectoryReaderSync.h \
DerivedSources/WebCore/JSDOMFileSystem.cpp \
DerivedSources/WebCore/JSDOMFileSystem.h \
+ DerivedSources/WebCore/JSDOMFileSystemSync.cpp \
+ DerivedSources/WebCore/JSDOMFileSystemSync.h \
DerivedSources/WebCore/JSEntriesCallback.cpp \
DerivedSources/WebCore/JSEntriesCallback.h \
DerivedSources/WebCore/JSEntry.cpp \
DerivedSources/WebCore/JSEntry.h \
DerivedSources/WebCore/JSEntryArray.cpp \
DerivedSources/WebCore/JSEntryArray.h \
+ DerivedSources/WebCore/JSEntryArraySync.cpp \
+ DerivedSources/WebCore/JSEntryArraySync.h \
DerivedSources/WebCore/JSEntryCallback.cpp \
DerivedSources/WebCore/JSEntryCallback.h \
+ DerivedSources/WebCore/JSEntrySync.cpp \
+ DerivedSources/WebCore/JSEntrySync.h \
DerivedSources/WebCore/JSErrorCallback.cpp \
DerivedSources/WebCore/JSErrorCallback.h \
DerivedSources/WebCore/JSFileCallback.cpp \
DerivedSources/WebCore/JSFileCallback.h \
DerivedSources/WebCore/JSFileEntry.cpp \
DerivedSources/WebCore/JSFileEntry.h \
+ DerivedSources/WebCore/JSFileEntrySync.cpp \
+ DerivedSources/WebCore/JSFileEntrySync.h \
+ DerivedSources/WebCore/JSFileException.cpp \
+ DerivedSources/WebCore/JSFileException.h \
DerivedSources/WebCore/JSFileSystemCallback.cpp \
DerivedSources/WebCore/JSFileSystemCallback.h \
DerivedSources/WebCore/JSFileWriter.cpp \
DerivedSources/WebCore/JSFileWriter.h \
DerivedSources/WebCore/JSFileWriterCallback.cpp \
DerivedSources/WebCore/JSFileWriterCallback.h \
+ DerivedSources/WebCore/JSFileWriterSync.cpp \
+ DerivedSources/WebCore/JSFileWriterSync.h \
DerivedSources/WebCore/JSFlags.cpp \
DerivedSources/WebCore/JSFlags.h \
DerivedSources/WebCore/JSMetadata.cpp \
@@ -4028,14 +4055,6 @@ webcore_cppflags += -DENABLE_XHTMLMP=1
endif # END ENABLE_XHTMLMP
# ----
-# Ruby Support
-# ----
-if ENABLE_RUBY
-HTML_FEATURES += ENABLE_RUBY=1
-webcore_cppflags += -DENABLE_RUBY=1
-endif # END ENABLE_RUBY
-
-# ----
# XPath Support
# ----
if ENABLE_XPATH
diff --git a/WebCore/WebCore.exp.in b/WebCore/WebCore.exp.in
index 217f328..4862394 100644
--- a/WebCore/WebCore.exp.in
+++ b/WebCore/WebCore.exp.in
@@ -200,8 +200,8 @@ __ZN7WebCore11HistoryItemC1ERKN3WTF6StringES4_d
__ZN7WebCore11HistoryItemC1ERKNS_4KURLERKN3WTF6StringES7_S7_
__ZN7WebCore11HistoryItemC1Ev
__ZN7WebCore11HistoryItemD1Ev
-__ZN7WebCore11MemoryCache13getStatisticsEv
__ZN7WebCore11MemoryCache11setDisabledEb
+__ZN7WebCore11MemoryCache13getStatisticsEv
__ZN7WebCore11MemoryCache13setCapacitiesEjjj
__ZN7WebCore11RenderLayer19scrollRectToVisibleERKNS_7IntRectEbRKNS_15ScrollAlignmentES6_
__ZN7WebCore11globalPointERK8_NSPointP8NSWindow
@@ -383,7 +383,7 @@ __ZN7WebCore16DeviceMotionData12Acceleration6createEbdbdbd
__ZN7WebCore16DeviceMotionData12RotationRate6createEbdbdbd
__ZN7WebCore16DeviceMotionData6createEN3WTF10PassRefPtrINS0_12AccelerationEEES4_NS2_INS0_12RotationRateEEEbd
__ZN7WebCore16FontFallbackList15releaseFontDataEv
-__ZN7WebCore16FontPlatformDataC1EP6NSFontbbNS_15FontOrientationE
+__ZN7WebCore16FontPlatformDataC1EP6NSFontfbbNS_15FontOrientationE
__ZN7WebCore16FontPlatformDataD1Ev
__ZN7WebCore16HTMLInputElement13setAutofilledEb
__ZN7WebCore16LegacyWebArchive19createFromSelectionEPNS_5FrameE
@@ -481,6 +481,8 @@ __ZN7WebCore20protocolIsJavaScriptERKN3WTF6StringE
__ZN7WebCore21BackForwardController11itemAtIndexEi
__ZN7WebCore21PlatformKeyboardEvent24disambiguateKeyDownEventENS0_4TypeEb
__ZN7WebCore21PlatformKeyboardEventC1EP7NSEvent
+__ZN7WebCore21ResourceLoadScheduler20servePendingRequestsENS0_8PriorityE
+__ZN7WebCore21ResourceLoadScheduler24schedulePluginStreamLoadEPNS_5FrameEPNS_32NetscapePlugInStreamLoaderClientERKNS_15ResourceRequestE
__ZN7WebCore21SVGDocumentExtensions21sampleAnimationAtTimeERKN3WTF6StringEPNS_14SVGSMILElementEd
__ZN7WebCore21SerializedScriptValue11deserializeEPK15OpaqueJSContextPPK13OpaqueJSValue
__ZN7WebCore21SerializedScriptValue6createEPK15OpaqueJSContextPK13OpaqueJSValuePS6_
@@ -493,6 +495,7 @@ __ZN7WebCore21isBackForwardLoadTypeENS_13FrameLoadTypeE
__ZN7WebCore21mainThreadNormalWorldEv
__ZN7WebCore21markerTextForListItemEPNS_7ElementE
__ZN7WebCore21reportThreadViolationEPKcNS_20ThreadViolationRoundE
+__ZN7WebCore21resourceLoadSchedulerEv
__ZN7WebCore21setPlatformStrategiesEPNS_18PlatformStrategiesE
__ZN7WebCore22ScriptExecutionContext26canSuspendActiveDOMObjectsEv
__ZN7WebCore22applicationIsAppleMailEv
@@ -525,7 +528,6 @@ __ZN7WebCore25PluginMainThreadScheduler9schedulerEv
__ZN7WebCore25addLanguageChangeObserverEPvPFvS0_E
__ZN7WebCore25contextMenuItemTagOutlineEv
__ZN7WebCore26CSSMutableStyleDeclarationC1Ev
-__ZN7WebCore26NetscapePlugInStreamLoader6createEPNS_5FrameEPNS_32NetscapePlugInStreamLoaderClientE
__ZN7WebCore26UserTypingGestureIndicator27processingUserTypingGestureEv
__ZN7WebCore26UserTypingGestureIndicator28focusedElementAtGestureStartEv
__ZN7WebCore26contextMenuItemTagFontMenuEv
@@ -643,10 +645,11 @@ __ZN7WebCore5Frame28searchForLabelsBeforeElementEP7NSArrayPNS_7ElementEPmPb
__ZN7WebCore5Frame6createEPNS_4PageEPNS_21HTMLFrameOwnerElementEPNS_17FrameLoaderClientE
__ZN7WebCore5Frame7setViewEN3WTF10PassRefPtrINS_9FrameViewEEE
__ZN7WebCore5Frame9nodeImageEPNS_4NodeE
-__ZN7WebCore5Frame9scalePageEf
+__ZN7WebCore5Frame9scalePageEfRKNS_8IntPointE
__ZN7WebCore5FrameD1Ev
__ZN7WebCore5Image12supportsTypeERKN3WTF6StringE
__ZN7WebCore5Image20loadPlatformResourceEPKc
+__ZN7WebCore5Range10selectNodeEPNS_4NodeERi
__ZN7WebCore5Range6createEN3WTF10PassRefPtrINS_8DocumentEEENS2_INS_4NodeEEEiS6_i
__ZN7WebCore5Range6setEndEN3WTF10PassRefPtrINS_4NodeEEEiRi
__ZN7WebCore5Range8setStartEN3WTF10PassRefPtrINS_4NodeEEEiRi
@@ -699,7 +702,6 @@ __ZN7WebCore6Editor6indentEv
__ZN7WebCore6Editor7CommandC1Ev
__ZN7WebCore6Editor7commandERKN3WTF6StringE
__ZN7WebCore6Editor7outdentEv
-__ZN7WebCore6Loader20servePendingRequestsENS0_8PriorityE
__ZN7WebCore6Widget12setFrameRectERKNS_7IntRectE
__ZN7WebCore6Widget16removeFromParentEv
__ZN7WebCore6Widget17frameRectsChangedEv
@@ -902,6 +904,7 @@ __ZN7WebCore9closeFileERi
__ZN7WebCore9fontCacheEv
__ZN7WebCore9makeRangeERKNS_15VisiblePositionES2_
__ZN7WebCore9pageCacheEv
+__ZN7WebCore9plainTextEPKNS_5RangeENS_20TextIteratorBehaviorE
__ZN7WebCore9toElementEN3JSC7JSValueE
__ZNK3JSC8Bindings10RootObject12globalObjectEv
__ZNK3WTF6String14createCFStringEv
@@ -929,6 +932,7 @@ __ZNK7WebCore11HistoryItem10visitCountEv
__ZNK7WebCore11HistoryItem11hasChildrenEv
__ZNK7WebCore11HistoryItem11scrollPointEv
__ZNK7WebCore11HistoryItem12isTargetItemEv
+__ZNK7WebCore11HistoryItem11originalURLEv
__ZNK7WebCore11HistoryItem12redirectURLsEv
__ZNK7WebCore11HistoryItem14alternateTitleEv
__ZNK7WebCore11HistoryItem15lastVisitedTimeEv
@@ -1019,6 +1023,7 @@ __ZNK7WebCore16VisibleSelection5isAllENS_21StayInEditableContentE
__ZNK7WebCore17ResourceErrorBase8lazyInitEv
__ZNK7WebCore19AnimationController24numberOfActiveAnimationsEv
__ZNK7WebCore19ResourceRequestBase10httpMethodEv
+__ZNK7WebCore19ResourceRequestBase15httpHeaderFieldEPKc
__ZNK7WebCore19ResourceRequestBase3urlEv
__ZNK7WebCore19ResourceRequestBase7isEmptyEv
__ZNK7WebCore19SelectionController11currentFormEv
@@ -1157,6 +1162,7 @@ _wkCGContextGetShouldSmoothFonts
_wkCopyCFLocalizationPreferredName
_wkCopyCONNECTProxyResponse
_wkCopyNSURLResponseStatusLine
+_wkCreateCTLineWithUniCharProvider
_wkCreateCustomCFReadStream
_wkCreateNSURLConnectionDelegateProxy
_wkCreateURLNPasteboardFlavorTypeName
@@ -1212,6 +1218,10 @@ _wkSignalCFReadStreamEnd
_wkSignalCFReadStreamError
_wkSignalCFReadStreamHasBytes
+#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
+_wkCreateCTTypesetterWithUniCharProviderAndOptions
+#endif
+
#if ENABLE(3D_RENDERING)
_WebCoreHas3DRendering
#endif
@@ -1227,11 +1237,14 @@ __ZN7WebCore11ContextMenu22setPlatformDescriptionEP14NSMutableArray
__ZN7WebCore12EventHandler20sendContextMenuEventEP7NSEvent
__ZN7WebCore12EventHandler20sendContextMenuEventERKNS_18PlatformMouseEventE
__ZN7WebCore15ContextMenuItem26releasePlatformDescriptionEv
+__ZN7WebCore15ContextMenuItemC1ENS_17ContextMenuActionERKN3WTF6StringEbbRNS2_6VectorIS0_Lm0EEE
__ZN7WebCore15ContextMenuItemC1ENS_19ContextMenuItemTypeENS_17ContextMenuActionERKN3WTF6StringEPNS_11ContextMenuE
+__ZN7WebCore15ContextMenuItemC1ENS_19ContextMenuItemTypeENS_17ContextMenuActionERKN3WTF6StringEbb
__ZN7WebCore15ContextMenuItemD1Ev
__ZN7WebCore21ContextMenuController16clearContextMenuEv
__ZN7WebCore21ContextMenuController23contextMenuItemSelectedEPNS_15ContextMenuItemE
__ZN7WebCore21contextMenuItemVectorEP14NSMutableArray
+__ZN7WebCore23platformMenuDescriptionERN3WTF6VectorINS_15ContextMenuItemELm0EEE
__ZN7WebCore6Chrome15showContextMenuEv
__ZNK7WebCore11ContextMenu19platformDescriptionEv
__ZNK7WebCore11ContextMenu21checkOrEnableIfNeededERNS_15ContextMenuItemE
diff --git a/WebCore/WebCore.gypi b/WebCore/WebCore.gypi
index faa339a..4dfefc0 100644
--- a/WebCore/WebCore.gypi
+++ b/WebCore/WebCore.gypi
@@ -15,8 +15,6 @@
'css/CSSUnknownRule.idl',
'css/CSSValue.idl',
'css/CSSValueList.idl',
- 'css/CSSVariablesDeclaration.idl',
- 'css/CSSVariablesRule.idl',
'css/Counter.idl',
'css/MediaList.idl',
'css/Rect.idl',
@@ -113,6 +111,7 @@
'fileapi/FileSystemCallback.idl',
'fileapi/FileWriter.idl',
'fileapi/FileWriterCallback.idl',
+ 'fileapi/FileWriterSync.idl',
'fileapi/Flags.idl',
'fileapi/Metadata.idl',
'fileapi/MetadataCallback.idl',
@@ -245,12 +244,12 @@
'page/History.idl',
'page/Location.idl',
'page/MemoryInfo.idl',
- 'page/Navigation.idl',
'page/Navigator.idl',
'page/Performance.idl',
+ 'page/PerformanceNavigation.idl',
+ 'page/PerformanceTiming.idl',
'page/PositionError.idl',
'page/Screen.idl',
- 'page/Timing.idl',
'page/WebKitPoint.idl',
'page/WorkerNavigator.idl',
'plugins/DOMMimeType.idl',
@@ -676,7 +675,6 @@
'bindings/js/JSSVGContextCache.h',
'bindings/js/JSSVGElementInstanceCustom.cpp',
'bindings/js/JSSVGLengthCustom.cpp',
- 'bindings/js/JSSVGMatrixCustom.cpp',
'bindings/js/JSSVGPathSegCustom.cpp',
'bindings/js/JSSVGPathSegListCustom.cpp',
'bindings/js/JSSVGPODListCustom.h',
@@ -836,7 +834,6 @@
'bindings/v8/custom/V8SVGDocumentCustom.cpp',
'bindings/v8/custom/V8SVGElementCustom.cpp',
'bindings/v8/custom/V8SVGLengthCustom.cpp',
- 'bindings/v8/custom/V8SVGMatrixCustom.cpp',
'bindings/v8/custom/V8SVGPathSegCustom.cpp',
'bindings/v8/custom/V8SharedWorkerCustom.cpp',
'bindings/v8/custom/V8StyleSheetCustom.cpp',
@@ -1053,12 +1050,6 @@
'css/CSSValue.h',
'css/CSSValueList.cpp',
'css/CSSValueList.h',
- 'css/CSSVariableDependentValue.cpp',
- 'css/CSSVariableDependentValue.h',
- 'css/CSSVariablesDeclaration.cpp',
- 'css/CSSVariablesDeclaration.h',
- 'css/CSSVariablesRule.cpp',
- 'css/CSSVariablesRule.h',
'css/Counter.h',
'css/DashboardRegion.h',
'css/FontFamilyValue.cpp',
@@ -1157,6 +1148,7 @@
'dom/DOMStringList.h',
'dom/DOMStringMap.cpp',
'dom/DOMStringMap.h',
+ 'dom/DOMTimeStamp.h',
'dom/DatasetDOMStringMap.cpp',
'dom/DatasetDOMStringMap.h',
'dom/DecodedDataDocumentParser.cpp',
@@ -1202,6 +1194,8 @@
'dom/ErrorEvent.h',
'dom/Event.cpp',
'dom/Event.h',
+ 'dom/EventContext.cpp',
+ 'dom/EventContext.h',
'dom/EventException.h',
'dom/EventListener.h',
'dom/EventNames.cpp',
@@ -1337,6 +1331,8 @@
'dom/WebKitTransitionEvent.h',
'dom/WheelEvent.cpp',
'dom/WheelEvent.h',
+ 'dom/WindowEventContext.cpp',
+ 'dom/WindowEventContext.h',
'dom/XMLDocumentParser.cpp',
'dom/XMLDocumentParser.h',
'dom/XMLDocumentParserLibxml2.cpp',
@@ -1526,6 +1522,8 @@
'fileapi/FileWriter.cpp',
'fileapi/FileWriter.h',
'fileapi/FileWriterCallback.h',
+ 'fileapi/FileWriterSync.cpp',
+ 'fileapi/FileWriterSync.h',
'fileapi/Flags.h',
'fileapi/LocalFileSystem.h',
'fileapi/Metadata.h',
@@ -2102,6 +2100,8 @@
'loader/ResourceLoader.h',
'loader/ResourceLoadNotifier.cpp',
'loader/ResourceLoadNotifier.h',
+ 'loader/ResourceLoadScheduler.cpp',
+ 'loader/ResourceLoadScheduler.h',
'loader/SinkDocument.cpp',
'loader/SinkDocument.h',
'loader/SubframeLoader.cpp',
@@ -2234,9 +2234,9 @@
'page/FrameView.h',
'page/Geolocation.cpp',
'page/Geolocation.h',
+ 'page/GeolocationClient.h',
'page/GeolocationController.cpp',
'page/GeolocationController.h',
- 'page/GeolocationControllerClient.h',
'page/GeolocationError.h',
'page/GeolocationPosition.h',
'page/GeolocationPositionCache.cpp',
@@ -2253,8 +2253,6 @@
'page/MemoryInfo.h',
'page/MouseEventWithHitTestResults.cpp',
'page/MouseEventWithHitTestResults.h',
- 'page/Navigation.cpp',
- 'page/Navigation.h',
'page/Navigator.cpp',
'page/Navigator.h',
'page/NavigatorBase.cpp',
@@ -2269,6 +2267,10 @@
'page/PageGroupLoadDeferrer.h',
'page/Performance.cpp',
'page/Performance.h',
+ 'page/PerformanceNavigation.cpp',
+ 'page/PerformanceNavigation.h',
+ 'page/PerformanceTiming.cpp',
+ 'page/PerformanceTiming.h',
'page/PluginHalter.cpp',
'page/PluginHalter.h',
'page/PluginHalterClient.h',
@@ -2295,8 +2297,6 @@
'page/SpeechInputResult.h',
'page/SuspendableTimer.cpp',
'page/SuspendableTimer.h',
- 'page/Timing.cpp',
- 'page/Timing.h',
'page/UserContentURLPattern.cpp',
'page/UserContentURLPattern.h',
'page/UserContentTypes.h',
@@ -2471,6 +2471,8 @@
'platform/graphics/chromium/PlatformIcon.h',
'platform/graphics/chromium/PluginLayerChromium.cpp',
'platform/graphics/chromium/PluginLayerChromium.h',
+ 'platform/graphics/chromium/RenderSurfaceChromium.h',
+ 'platform/graphics/chromium/RenderSurfaceChromium.cpp',
'platform/graphics/chromium/SimpleFontDataChromiumWin.cpp',
'platform/graphics/chromium/SimpleFontDataLinux.cpp',
'platform/graphics/chromium/TransparencyWin.cpp',
@@ -3968,6 +3970,7 @@
'svg/properties/SVGAnimatedPropertySynchronizer.h',
'svg/properties/SVGAnimatedPropertyTearOff.h',
'svg/properties/SVGAnimatedStaticPropertyTearOff.h',
+ 'svg/properties/SVGAnimatedTransformListPropertyTearOff.h',
'svg/properties/SVGListProperty.h',
'svg/properties/SVGListPropertyTearOff.h',
'svg/properties/SVGProperty.h',
@@ -3975,6 +3978,8 @@
'svg/properties/SVGPropertyTraits.h',
'svg/properties/SVGStaticListPropertyTearOff.h',
'svg/properties/SVGStaticPropertyTearOff.h',
+ 'svg/properties/SVGStaticPropertyWithParentTearOff.h',
+ 'svg/properties/SVGTransformListPropertyTearOff.h',
'svg/ColorDistance.cpp',
'svg/ColorDistance.h',
'svg/DeprecatedSVGAnimatedProperty.h',
@@ -4013,6 +4018,7 @@
'svg/SVGAnimatedPreserveAspectRatio.h',
'svg/SVGAnimatedRect.h',
'svg/SVGAnimatedString.h',
+ 'svg/SVGAnimatedTransformList.h',
'svg/SVGAnimationElement.cpp',
'svg/SVGAnimationElement.h',
'svg/SVGCircleElement.cpp',
@@ -4151,6 +4157,7 @@
'svg/SVGMarkerElement.h',
'svg/SVGMaskElement.cpp',
'svg/SVGMaskElement.h',
+ 'svg/SVGMatrix.h',
'svg/SVGMetadataElement.cpp',
'svg/SVGMetadataElement.h',
'svg/SVGMissingGlyphElement.cpp',
@@ -4471,6 +4478,7 @@
'inspector/front-end/ResourceCategory.js',
'inspector/front-end/ResourceManager.js',
'inspector/front-end/ResourceView.js',
+ 'inspector/front-end/ResourcesPanel.js',
'inspector/front-end/ScopeChainSidebarPane.js',
'inspector/front-end/Script.js',
'inspector/front-end/ScriptsPanel.js',
@@ -4487,7 +4495,6 @@
'inspector/front-end/SourceTokenizer.js',
'inspector/front-end/SourceView.js',
'inspector/front-end/StatusBarButton.js',
- 'inspector/front-end/StoragePanel.js',
'inspector/front-end/StylesSidebarPane.js',
'inspector/front-end/SummaryBar.js',
'inspector/front-end/TabbedPane.js',
@@ -4623,7 +4630,6 @@
'inspector/front-end/Images/statusbarMenuButtonSelected.png',
'inspector/front-end/Images/statusbarResizerHorizontal.png',
'inspector/front-end/Images/statusbarResizerVertical.png',
- 'inspector/front-end/Images/storageIcon.png',
'inspector/front-end/Images/successGreenDot.png',
'inspector/front-end/Images/thumbActiveHoriz.png',
'inspector/front-end/Images/thumbActiveVert.png',
diff --git a/WebCore/WebCore.order b/WebCore/WebCore.order
index 0c852e1..76f3275 100644
--- a/WebCore/WebCore.order
+++ b/WebCore/WebCore.order
@@ -168,8 +168,8 @@ __ZN7WebCore16InspectorBackendC1EPNS_19InspectorControllerE
__ZN7WebCore16InspectorBackendC2EPNS_19InspectorControllerE
__ZN7WebCore18InjectedScriptHostC1EPNS_19InspectorControllerE
__ZN7WebCore18InjectedScriptHostC2EPNS_19InspectorControllerE
-__ZN7WebCore21GeolocationControllerC1EPNS_4PageEPNS_27GeolocationControllerClientE
-__ZN7WebCore21GeolocationControllerC2EPNS_4PageEPNS_27GeolocationControllerClientE
+__ZN7WebCore21GeolocationControllerC1EPNS_4PageEPNS_27GeolocationClientE
+__ZN7WebCore21GeolocationControllerC2EPNS_4PageEPNS_27GeolocationClientE
__ZN7WebCore8SettingsC1EPNS_4PageE
__ZN7WebCore8SettingsC2EPNS_4PageE
__ZN7WebCore15ProgressTrackerC1Ev
diff --git a/WebCore/WebCore.pri b/WebCore/WebCore.pri
index 9d9906a..ec213d6 100644
--- a/WebCore/WebCore.pri
+++ b/WebCore/WebCore.pri
@@ -83,8 +83,6 @@ IDL_BINDINGS += \
css/CSSStyleSheet.idl \
css/CSSValue.idl \
css/CSSValueList.idl \
- css/CSSVariablesDeclaration.idl \
- css/CSSVariablesRule.idl \
css/MediaList.idl \
css/Rect.idl \
css/RGBColor.idl \
@@ -307,12 +305,12 @@ IDL_BINDINGS += \
page/History.idl \
page/Location.idl \
page/MemoryInfo.idl \
- page/Navigation.idl \
page/Navigator.idl \
page/Performance.idl \
+ page/PerformanceNavigation.idl \
+ page/PerformanceTiming.idl \
page/PositionError.idl \
page/Screen.idl \
- page/Timing.idl \
page/WebKitPoint.idl \
page/WorkerNavigator.idl \
plugins/DOMPlugin.idl \
diff --git a/WebCore/WebCore.pro b/WebCore/WebCore.pro
index 7a98a1f..3d0626a 100644
--- a/WebCore/WebCore.pro
+++ b/WebCore/WebCore.pro
@@ -2,10 +2,6 @@
CONFIG += building-libs
CONFIG += depend_includepath
-meegotouch {
- DEFINES += WTF_USE_MEEGOTOUCH=1
-}
-
v8:exists($$[QT_INSTALL_PREFIX]/src/3rdparty/v8/include/v8.h) {
message(Using V8 with QtScript)
QT += script
@@ -471,7 +467,6 @@ v8 {
bindings/v8/custom/V8SVGDocumentCustom.cpp \
bindings/v8/custom/V8SVGElementCustom.cpp \
bindings/v8/custom/V8SVGLengthCustom.cpp \
- bindings/v8/custom/V8SVGMatrixCustom.cpp \
bindings/v8/custom/V8SVGPathSegCustom.cpp \
\
bindings/v8/specialization/V8BindingState.cpp\
@@ -649,9 +644,6 @@ SOURCES += \
css/CSSTimingFunctionValue.cpp \
css/CSSUnicodeRangeValue.cpp \
css/CSSValueList.cpp \
- css/CSSVariableDependentValue.cpp \
- css/CSSVariablesDeclaration.cpp \
- css/CSSVariablesRule.cpp \
css/FontFamilyValue.cpp \
css/FontValue.cpp \
css/MediaFeatureNames.cpp \
@@ -714,6 +706,7 @@ SOURCES += \
dom/EntityReference.cpp \
dom/ErrorEvent.cpp \
dom/Event.cpp \
+ dom/EventContext.cpp \
dom/EventNames.cpp \
dom/EventTarget.cpp \
dom/ExceptionBase.cpp \
@@ -774,6 +767,7 @@ SOURCES += \
dom/WebKitAnimationEvent.cpp \
dom/WebKitTransitionEvent.cpp \
dom/WheelEvent.cpp \
+ dom/WindowEventContext.cpp \
dom/XMLDocumentParser.cpp \
dom/XMLDocumentParserQt.cpp \
dom/default/PlatformMessagePortChannel.cpp \
@@ -1069,6 +1063,7 @@ SOURCES += \
loader/Request.cpp \
loader/ResourceLoader.cpp \
loader/ResourceLoadNotifier.cpp \
+ loader/ResourceLoadScheduler.cpp \
loader/SinkDocument.cpp \
loader/SubframeLoader.cpp \
loader/SubresourceLoader.cpp \
@@ -1088,7 +1083,6 @@ SOURCES += \
page/DOMSelection.cpp \
page/DOMTimer.cpp \
page/DOMWindow.cpp \
- page/Navigation.cpp \
page/Navigator.cpp \
page/NavigatorBase.cpp \
page/DragController.cpp \
@@ -1111,6 +1105,8 @@ SOURCES += \
page/PageGroup.cpp \
page/PageGroupLoadDeferrer.cpp \
page/Performance.cpp \
+ page/PerformanceNavigation.cpp \
+ page/PerformanceTiming.cpp \
page/PluginHalter.cpp \
page/PrintContext.cpp \
page/SecurityOrigin.cpp \
@@ -1118,7 +1114,6 @@ SOURCES += \
page/Settings.cpp \
page/SpatialNavigation.cpp \
page/SuspendableTimer.cpp \
- page/Timing.cpp \
page/UserContentURLPattern.cpp \
page/WindowFeatures.cpp \
page/XSSAuditor.cpp \
@@ -1565,9 +1560,6 @@ HEADERS += \
css/CSSTimingFunctionValue.h \
css/CSSUnicodeRangeValue.h \
css/CSSValueList.h \
- css/CSSVariableDependentValue.h \
- css/CSSVariablesDeclaration.h \
- css/CSSVariablesRule.h \
css/FontFamilyValue.h \
css/FontValue.h \
css/MediaFeatureNames.h \
@@ -1621,6 +1613,7 @@ HEADERS += \
dom/DOMImplementation.h \
dom/DOMStringList.h \
dom/DOMStringMap.h \
+ dom/DOMTimeStamp.h \
dom/DatasetDOMStringMap.h \
dom/DynamicNodeList.h \
dom/EditingText.h \
@@ -2369,6 +2362,7 @@ HEADERS += \
svg/properties/SVGAnimatedPropertySynchronizer.h \
svg/properties/SVGAnimatedPropertyTearOff.h \
svg/properties/SVGAnimatedStaticPropertyTearOff.h \
+ svg/properties/SVGAnimatedTransformListPropertyTearOff.h \
svg/properties/SVGListProperty.h \
svg/properties/SVGListPropertyTearOff.h \
svg/properties/SVGProperty.h \
@@ -2376,6 +2370,8 @@ HEADERS += \
svg/properties/SVGPropertyTraits.h \
svg/properties/SVGStaticListPropertyTearOff.h \
svg/properties/SVGStaticPropertyTearOff.h \
+ svg/properties/SVGStaticPropertyWithParentTearOff.h \
+ svg/properties/SVGTransformListPropertyTearOff.h \
svg/SVGAElement.h \
svg/SVGAltGlyphElement.h \
svg/SVGAngle.h \
@@ -2392,6 +2388,7 @@ HEADERS += \
svg/SVGAnimatedPreserveAspectRatio.h \
svg/SVGAnimatedRect.h \
svg/SVGAnimatedString.h \
+ svg/SVGAnimatedTransformList.h \
svg/SVGAnimateElement.h \
svg/SVGAnimateMotionElement.h \
svg/SVGAnimateTransformElement.h \
@@ -2461,6 +2458,7 @@ HEADERS += \
svg/SVGLocatable.h \
svg/SVGMarkerElement.h \
svg/SVGMaskElement.h \
+ svg/SVGMatrix.h \
svg/SVGMetadataElement.h \
svg/SVGMissingGlyphElement.h \
svg/SVGMPathElement.h \
@@ -3052,6 +3050,7 @@ contains(DEFINES, ENABLE_FILE_SYSTEM=1) {
fileapi/FileWriter.h \
fileapi/FileWriterCallback.h \
fileapi/FileWriterClient.h \
+ fileapi/FileWriterSync.h \
fileapi/Flags.h \
fileapi/LocalFileSystem.h \
fileapi/Metadata.h \
@@ -3081,6 +3080,7 @@ contains(DEFINES, ENABLE_FILE_SYSTEM=1) {
fileapi/FileEntrySync.cpp \
fileapi/FileSystemCallbacks.cpp \
fileapi/FileWriter.cpp \
+ fileapi/FileWriterSync.cpp \
fileapi/LocalFileSystem.cpp \
platform/AsyncFileSystem.cpp
}
@@ -3155,31 +3155,58 @@ contains(DEFINES, ENABLE_VIDEO=1) {
bindings/js/JSAudioConstructor.cpp
}
- contains(MOBILITY_CONFIG, multimedia) {
- HEADERS += platform/graphics/qt/MediaPlayerPrivateQt.h
- SOURCES += platform/graphics/qt/MediaPlayerPrivateQt.cpp
-
- CONFIG *= mobility
- MOBILITY += multimedia
- DEFINES += WTF_USE_QT_MULTIMEDIA
- } else:contains(QT_CONFIG, phonon) {
- HEADERS += \
- platform/graphics/qt/MediaPlayerPrivatePhonon.h
-
- SOURCES += \
- platform/graphics/qt/MediaPlayerPrivatePhonon.cpp
-
- # Add phonon manually to prevent it from coming first in
- # the include paths, as Phonon's path.h conflicts with
- # WebCore's Path.h on case-insensitive filesystems.
- qtAddLibrary(phonon)
- INCLUDEPATH -= $$QMAKE_INCDIR_QT/phonon
- INCLUDEPATH += $$QMAKE_INCDIR_QT/phonon
- mac {
- INCLUDEPATH -= $$QMAKE_LIBDIR_QT/phonon.framework/Headers
- INCLUDEPATH += $$QMAKE_LIBDIR_QT/phonon.framework/Headers
- }
+ contains(DEFINES, USE_GSTREAMER=1) {
+ HEADERS += \
+ platform/graphics/gstreamer/DataSourceGStreamer.h \
+ platform/graphics/gstreamer/GOwnPtrGStreamer.h \
+ platform/graphics/gstreamer/GStreamerGWorld.h \
+ platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h \
+ platform/graphics/gstreamer/VideoSinkGStreamer.h \
+ platform/graphics/gstreamer/WebKitWebSourceGStreamer.h \
+ platform/graphics/gstreamer/PlatformVideoWindow.h \
+ platform/graphics/gstreamer/PlatformVideoWindowPrivate.h \
+ platform/graphics/gstreamer/ImageGStreamer.h
+ SOURCES += \
+ platform/graphics/gstreamer/DataSourceGStreamer.cpp \
+ platform/graphics/gstreamer/GOwnPtrGStreamer.cpp \
+ platform/graphics/gstreamer/GStreamerGWorld.cpp \
+ platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp \
+ platform/graphics/gstreamer/VideoSinkGStreamer.cpp \
+ platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp \
+ platform/graphics/gstreamer/PlatformVideoWindowQt.cpp \
+ platform/graphics/gstreamer/ImageGStreamerQt.cpp
+
+ DEFINES += WTF_USE_GSTREAMER=1
+ DEFINES += ENABLE_GLIB_SUPPORT=1
+
+ INCLUDEPATH += $$PWD/platform/graphics/gstreamer
+
+ PKGCONFIG += glib-2.0 gio-2.0 gstreamer-0.10 gstreamer-app-0.10 gstreamer-base-0.10 gstreamer-interfaces-0.10 gstreamer-pbutils-0.10 gstreamer-plugins-base-0.10 gstreamer-video-0.10
+ } else:contains(MOBILITY_CONFIG, multimedia) {
+ HEADERS += platform/graphics/qt/MediaPlayerPrivateQt.h
+ SOURCES += platform/graphics/qt/MediaPlayerPrivateQt.cpp
+
+ CONFIG *= mobility
+ MOBILITY += multimedia
+ DEFINES += WTF_USE_QT_MULTIMEDIA
+ } else:contains(QT_CONFIG, phonon) {
+ HEADERS += \
+ platform/graphics/qt/MediaPlayerPrivatePhonon.h
+
+ SOURCES += \
+ platform/graphics/qt/MediaPlayerPrivatePhonon.cpp
+
+ # Add phonon manually to prevent it from coming first in
+ # the include paths, as Phonon's path.h conflicts with
+ # WebCore's Path.h on case-insensitive filesystems.
+ qtAddLibrary(phonon)
+ INCLUDEPATH -= $$QMAKE_INCDIR_QT/phonon
+ INCLUDEPATH += $$QMAKE_INCDIR_QT/phonon
+ mac {
+ INCLUDEPATH -= $$QMAKE_LIBDIR_QT/phonon.framework/Headers
+ INCLUDEPATH += $$QMAKE_LIBDIR_QT/phonon.framework/Headers
}
+ }
}
contains(DEFINES, ENABLE_XPATH=1) {
@@ -3365,7 +3392,6 @@ contains(DEFINES, ENABLE_SVG=1) {
# TODO: this-one-is-not-auto-added! FIXME! tmp/SVGElementFactory.cpp \
bindings/js/JSSVGElementInstanceCustom.cpp \
bindings/js/JSSVGLengthCustom.cpp \
- bindings/js/JSSVGMatrixCustom.cpp \
bindings/js/JSSVGPathSegCustom.cpp \
bindings/js/JSSVGPathSegListCustom.cpp
}
diff --git a/WebCore/WebCore.vcproj/QTMovieWin.vcproj b/WebCore/WebCore.vcproj/QTMovieWin.vcproj
index 73e287e..efc6128 100644
--- a/WebCore/WebCore.vcproj/QTMovieWin.vcproj
+++ b/WebCore/WebCore.vcproj/QTMovieWin.vcproj
@@ -18,12 +18,11 @@
<Configuration
Name="Debug|Win32"
ConfigurationType="2"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;.\QTMovieWinCommon.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;&#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="VCCustomBuildTool"
@@ -39,27 +38,18 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(ProjectDir)..\&quot;;&quot;$(ProjectDir)..\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\private\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\private&quot;;&quot;$(WebKitLibrariesDir)\QTInternalSDK\CIncludes&quot;;&quot;$(WebKitLibrariesDir)\QuickTime SDK\CIncludes&quot;;&quot;$(ProgramFiles)/QuickTime SDK/cincludes&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;"
- PreprocessorDefinitions="_USRDLL;QTMOVIEWIN_EXPORTS;TARGET_OS_WIN32"
- DisableSpecificWarnings="4819"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
- AdditionalIncludeDirectories=""
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="QTMLClient.lib CVClient.lib JavaScriptCore$(WebKitDLLConfigSuffix).lib winmm.lib pthreadVC2$(LibraryConfigSuffix).lib Msimg32.lib user32.lib advapi32.lib"
- OutputFile="$(OutDir)\$(ProjectName)$(WebKitConfigSuffix).dll"
- AdditionalLibraryDirectories="&quot;$(WebKitLibrariesDir)\QTInternalSDK\Libraries&quot;;&quot;$(WebKitLibrariesDir)\QuickTime SDK\Libraries&quot;;&quot;$(ProgramFiles)\QuickTime SDK\Libraries&quot;"
- IgnoreDefaultLibraryNames="LIBCMT"
- DelayLoadDLLs=""
/>
<Tool
Name="VCALinkTool"
@@ -84,19 +74,16 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\QTMovieWin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\QTMovieWin.h&quot; &quot;$(WebKitOutputDir)\include\QTMovieWin&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"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\QTMovieWinCommon.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;&#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="VCCustomBuildTool"
@@ -112,27 +99,18 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(ProjectDir)..\&quot;;&quot;$(ProjectDir)..\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\private\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\private&quot;;&quot;$(WebKitLibrariesDir)\QTInternalSDK\CIncludes&quot;;&quot;$(WebKitLibrariesDir)\QuickTime SDK\CIncludes&quot;;&quot;$(ProgramFiles)/QuickTime SDK/cincludes&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;"
- PreprocessorDefinitions="_USRDLL;QTMOVIEWIN_EXPORTS;TARGET_OS_WIN32"
- DisableSpecificWarnings="4819"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
- AdditionalIncludeDirectories=""
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="QTMLClient.lib CVClient.lib JavaScriptCore$(WebKitDLLConfigSuffix).lib winmm.lib pthreadVC2$(LibraryConfigSuffix).lib Msimg32.lib user32.lib advapi32.lib"
- OutputFile="$(OutDir)\$(ProjectName)$(WebKitConfigSuffix).dll"
- AdditionalLibraryDirectories="&quot;$(WebKitLibrariesDir)\QTInternalSDK\Libraries&quot;;&quot;$(WebKitLibrariesDir)\QuickTime SDK\Libraries&quot;;&quot;$(ProgramFiles)\QuickTime SDK\Libraries&quot;"
- IgnoreDefaultLibraryNames="LIBCMT"
- DelayLoadDLLs=""
/>
<Tool
Name="VCALinkTool"
@@ -157,18 +135,16 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\QTMovieWin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\QTMovieWin.h&quot; &quot;$(WebKitOutputDir)\include\QTMovieWin&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"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_internal.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_internal.vsprops;.\QTMovieWinCommon.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;&#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="VCCustomBuildTool"
@@ -184,27 +160,18 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(ProjectDir)..\&quot;;&quot;$(ProjectDir)..\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\private\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\private&quot;;&quot;$(WebKitLibrariesDir)\QTInternalSDK\CIncludes&quot;;&quot;$(WebKitLibrariesDir)\QuickTime SDK\CIncludes&quot;;&quot;$(ProgramFiles)/QuickTime SDK/cincludes&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;"
- PreprocessorDefinitions="_USRDLL;QTMOVIEWIN_EXPORTS;TARGET_OS_WIN32"
- DisableSpecificWarnings="4819"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
- AdditionalIncludeDirectories=""
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="QTMLClient.lib CVClient.lib JavaScriptCore$(WebKitDLLConfigSuffix).lib winmm.lib pthreadVC2$(LibraryConfigSuffix).lib Msimg32.lib user32.lib advapi32.lib"
- OutputFile="$(OutDir)\$(ProjectName)$(WebKitConfigSuffix).dll"
- AdditionalLibraryDirectories="&quot;$(WebKitLibrariesDir)\QTInternalSDK\Libraries&quot;;&quot;$(WebKitLibrariesDir)\QuickTime SDK\Libraries&quot;;&quot;$(ProgramFiles)\QuickTime SDK\Libraries&quot;"
- IgnoreDefaultLibraryNames="LIBCMT"
- DelayLoadDLLs=""
/>
<Tool
Name="VCALinkTool"
@@ -229,18 +196,16 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\QTMovieWin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\QTMovieWin.h&quot; &quot;$(WebKitOutputDir)\include\QTMovieWin&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"
- 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"
+ 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;.\QTMovieWinCommon.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;&#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="VCCustomBuildTool"
@@ -256,27 +221,18 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(ProjectDir)..\&quot;;&quot;$(ProjectDir)..\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\private\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\private&quot;;&quot;$(WebKitLibrariesDir)\QTInternalSDK\CIncludes&quot;;&quot;$(WebKitLibrariesDir)\QuickTime SDK\CIncludes&quot;;&quot;$(ProgramFiles)/QuickTime SDK/cincludes&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;"
- PreprocessorDefinitions="_USRDLL;QTMOVIEWIN_EXPORTS;TARGET_OS_WIN32"
- DisableSpecificWarnings="4819"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
- AdditionalIncludeDirectories=""
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="QTMLClient.lib CVClient.lib JavaScriptCore$(WebKitDLLConfigSuffix).lib winmm.lib pthreadVC2$(LibraryConfigSuffix).lib Msimg32.lib user32.lib advapi32.lib"
- OutputFile="$(OutDir)\$(ProjectName)$(WebKitConfigSuffix).dll"
- AdditionalLibraryDirectories="&quot;$(WebKitLibrariesDir)\QTInternalSDK\Libraries&quot;;&quot;$(WebKitLibrariesDir)\QuickTime SDK\Libraries&quot;;&quot;$(ProgramFiles)\QuickTime SDK\Libraries&quot;"
- IgnoreDefaultLibraryNames="LIBCMT"
- DelayLoadDLLs=""
/>
<Tool
Name="VCALinkTool"
@@ -301,7 +257,68 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\QTMovieWin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\QTMovieCFDictionary.h&quot; &quot;$(WebKitOutputDir)\include\QTMovieWin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\QTMovie.h&quot; &quot;$(WebKitOutputDir)\include\QTMovieWin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\QTMovieGWorld.h&quot; &quot;$(WebKitOutputDir)\include\QTMovieWin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\QTMovieTask.h&quot; &quot;$(WebKitOutputDir)\include\QTMovieWin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\QTMovieVisualContext.h&quot; &quot;$(WebKitOutputDir)\include\QTMovieWin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\QTMovieWinTimer.h&quot; &quot;$(WebKitOutputDir)\include\QTMovieWin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\QTMoviePixelBuffer.h&quot; &quot;$(WebKitOutputDir)\include\QTMovieWin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\QTMovieWinCommon.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
diff --git a/WebCore/WebCore.vcproj/QTMovieWinCommon.vsprops b/WebCore/WebCore.vcproj/QTMovieWinCommon.vsprops
new file mode 100644
index 0000000..6b373b6
--- /dev/null
+++ b/WebCore/WebCore.vcproj/QTMovieWinCommon.vsprops
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="QTMovieWinCommon"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(ProjectDir)..\&quot;;&quot;$(ProjectDir)..\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\private\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\private&quot;;&quot;$(WebKitLibrariesDir)\QTInternalSDK\CIncludes&quot;;&quot;$(WebKitLibrariesDir)\QuickTime SDK\CIncludes&quot;;&quot;$(ProgramFiles)/QuickTime SDK/cincludes&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;"
+ PreprocessorDefinitions="_USRDLL;QTMOVIEWIN_EXPORTS;TARGET_OS_WIN32"
+ DisableSpecificWarnings="4819"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="QTMLClient.lib CVClient.lib JavaScriptCore$(WebKitDLLConfigSuffix).lib winmm.lib pthreadVC2$(LibraryConfigSuffix).lib Msimg32.lib user32.lib advapi32.lib"
+ OutputFile="$(OutDir)\$(ProjectName)$(WebKitConfigSuffix).dll"
+ AdditionalLibraryDirectories="&quot;$(WebKitLibrariesDir)\QTInternalSDK\Libraries&quot;;&quot;$(WebKitLibrariesDir)\QuickTime SDK\Libraries&quot;;&quot;$(ProgramFiles)\QuickTime SDK\Libraries&quot;"
+ IgnoreDefaultLibraryNames="LIBCMT"
+ />
+ <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;&#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="VCPostBuildEventTool"
+ CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\QTMovieWin&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\QTMovieWin.h&quot; &quot;$(WebKitOutputDir)\include\QTMovieWin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
+ />
+</VisualStudioPropertySheet>
diff --git a/WebCore/WebCore.vcproj/WebCore.make b/WebCore/WebCore.vcproj/WebCore.make
index 84b9661..ff5dd22 100644
--- a/WebCore/WebCore.vcproj/WebCore.make
+++ b/WebCore/WebCore.vcproj/WebCore.make
@@ -1,7 +1,7 @@
-!IF !defined(BUILDSTYLE)
-BUILDSTYLE=Release
-!ELSEIF "$(BUILDSTYLE)"=="DEBUG"
+!IF "$(BUILDSTYLE)"=="DEBUG"
BUILDSTYLE=Debug_All
+!ELSE
+BUILDSTYLE=Release_LTCG
!ENDIF
install:
diff --git a/WebCore/WebCore.vcproj/WebCore.sln b/WebCore/WebCore.vcproj/WebCore.sln
index aeb4d5c..cf001a8 100644
--- a/WebCore/WebCore.vcproj/WebCore.sln
+++ b/WebCore/WebCore.vcproj/WebCore.sln
@@ -16,6 +16,7 @@ Global
Debug_All|Win32 = Debug_All|Win32
Debug_Internal|Win32 = Debug_Internal|Win32
Debug|Win32 = Debug|Win32
+ Release_LTCG|Win32 = Release_LTCG|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
@@ -25,6 +26,8 @@ Global
{1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Debug|Win32.ActiveCfg = Debug|Win32
{1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Debug|Win32.Build.0 = Debug|Win32
+ {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
+ {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
{1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Release|Win32.ActiveCfg = Release|Win32
{1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Release|Win32.Build.0 = Release|Win32
{0A324352-B3B6-496C-9E5B-4C7E923E628B}.Debug_All|Win32.ActiveCfg = all|Win32
@@ -33,6 +36,8 @@ Global
{0A324352-B3B6-496C-9E5B-4C7E923E628B}.Debug_Internal|Win32.Build.0 = all|Win32
{0A324352-B3B6-496C-9E5B-4C7E923E628B}.Debug|Win32.ActiveCfg = all|Win32
{0A324352-B3B6-496C-9E5B-4C7E923E628B}.Debug|Win32.Build.0 = all|Win32
+ {0A324352-B3B6-496C-9E5B-4C7E923E628B}.Release_LTCG|Win32.ActiveCfg = all|Win32
+ {0A324352-B3B6-496C-9E5B-4C7E923E628B}.Release_LTCG|Win32.Build.0 = all|Win32
{0A324352-B3B6-496C-9E5B-4C7E923E628B}.Release|Win32.ActiveCfg = all|Win32
{0A324352-B3B6-496C-9E5B-4C7E923E628B}.Release|Win32.Build.0 = all|Win32
{E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
@@ -41,6 +46,8 @@ Global
{E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Debug|Win32.ActiveCfg = Debug|Win32
{E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Debug|Win32.Build.0 = Debug|Win32
+ {E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
+ {E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
{E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Release|Win32.ActiveCfg = Release|Win32
{E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
diff --git a/WebCore/WebCore.vcproj/WebCore.vcproj b/WebCore/WebCore.vcproj/WebCore.vcproj
index 4dd2c30..5be9d22 100644
--- a/WebCore/WebCore.vcproj/WebCore.vcproj
+++ b/WebCore/WebCore.vcproj/WebCore.vcproj
@@ -74,7 +74,6 @@
ConfigurationType="4"
InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\WebCoreCommon.vsprops;.\WebCoreCG.vsprops;.\WebCoreCFNetwork.vsprops;.\WebCorePthreads.vsprops;.\WebCoreMediaQT.vsprops;.\WebCoreQuartzCore.vsprops"
CharacterSet="1"
- WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -342,6 +341,61 @@
Name="VCPostBuildEventTool"
/>
</Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\WebCoreCommon.vsprops;.\WebCoreCG.vsprops;.\WebCoreCFNetwork.vsprops;.\WebCorePthreads.vsprops;.\WebCoreMediaQT.vsprops;.\WebCoreQuartzCore.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ ForcedIncludeFiles=""
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
</Configurations>
<References>
</References>
@@ -416,6 +470,16 @@
ForcedIncludeFiles="$(NOINHERIT);ICUVersion.h"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ DisableSpecificWarnings="4065;4273;4565;4701;4702"
+ ForcedIncludeFiles="$(NOINHERIT);ICUVersion.h"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\CSSGrammar.h"
@@ -486,6 +550,15 @@
DisableSpecificWarnings="4819"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ DisableSpecificWarnings="4819"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\DocTypeStrings.cpp"
@@ -546,6 +619,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\HTMLElementFactory.h"
@@ -626,6 +707,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\WebCore\DerivedSources\JSAbstractWorker.h"
@@ -682,6 +771,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSAttr.h"
@@ -738,6 +835,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSBarInfo.h"
@@ -794,6 +899,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSBeforeLoadEvent.h"
@@ -850,6 +963,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSBeforeProcessEvent.h"
@@ -906,6 +1027,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSBlob.h"
@@ -962,6 +1091,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSBlobBuilder.h"
@@ -1018,6 +1155,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCanvasGradient.h"
@@ -1074,6 +1219,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCanvasPattern.h"
@@ -1130,6 +1283,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCanvasRenderingContext.h"
@@ -1186,6 +1347,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCanvasRenderingContext2D.h"
@@ -1242,6 +1411,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCDATASection.h"
@@ -1298,6 +1475,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCharacterData.h"
@@ -1354,6 +1539,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSClientRect.h"
@@ -1410,6 +1603,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSClientRectList.h"
@@ -1466,6 +1667,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSClipboard.h"
@@ -1522,6 +1731,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSComment.h"
@@ -1578,6 +1795,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCompositionEvent.h"
@@ -1634,6 +1859,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSConsole.h"
@@ -1690,6 +1923,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCoordinates.h"
@@ -1746,6 +1987,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCounter.h"
@@ -1802,6 +2051,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCSSCharsetRule.h"
@@ -1858,6 +2115,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCSSFontFaceRule.h"
@@ -1914,6 +2179,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCSSImportRule.h"
@@ -1970,6 +2243,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCSSMediaRule.h"
@@ -2026,6 +2307,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCSSPageRule.h"
@@ -2082,6 +2371,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCSSPrimitiveValue.h"
@@ -2138,6 +2435,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCSSRule.h"
@@ -2194,6 +2499,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCSSRuleList.h"
@@ -2250,6 +2563,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCSSStyleDeclaration.h"
@@ -2306,6 +2627,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCSSStyleRule.h"
@@ -2362,6 +2691,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCSSStyleSheet.h"
@@ -2418,6 +2755,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCSSValue.h"
@@ -2474,56 +2819,8 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
- </File>
- <File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCSSValueList.h"
- >
- </File>
- <File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCSSVariablesDeclaration.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"
+ Name="Release_LTCG|Win32"
ExcludedFromBuild="true"
>
<Tool
@@ -2532,11 +2829,11 @@
</FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCSSVariablesDeclaration.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCSSValueList.h"
>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCSSVariablesRule.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCustomEvent.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -2586,56 +2883,8 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
- </File>
- <File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCSSVariablesRule.h"
- >
- </File>
- <File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSCustomEvent.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"
+ Name="Release_LTCG|Win32"
ExcludedFromBuild="true"
>
<Tool
@@ -2698,6 +2947,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDatabase.h"
@@ -2754,6 +3011,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDatabaseSync.h"
@@ -2810,6 +3075,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDataGridColumn.h"
@@ -2866,6 +3139,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDataGridColumnList.h"
@@ -2922,6 +3203,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\WebCore\DerivedSources\JSDedicatedWorkerContext.h"
@@ -2978,6 +3267,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\WebCore\DerivedSources\JSDeviceMotionEvent.h"
@@ -3034,6 +3331,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\WebCore\DerivedSources\JSDeviceOrientationEvent.h"
@@ -3090,6 +3395,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDirectoryEntry.h"
@@ -3154,6 +3467,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDirectoryReader.h"
@@ -3218,6 +3539,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDocument.h"
@@ -3274,6 +3603,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDocumentFragment.h"
@@ -3330,6 +3667,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDocumentType.h"
@@ -3386,6 +3731,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMApplicationCache.h"
@@ -3442,6 +3795,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMCoreException.h"
@@ -3498,6 +3859,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMFileSystem.h"
@@ -3562,6 +3931,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMFormData.h"
@@ -3618,6 +3995,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMImplementation.h"
@@ -3674,6 +4059,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMMimeType.h"
@@ -3730,6 +4123,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMMimeTypeArray.h"
@@ -3786,6 +4187,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMParser.h"
@@ -3842,6 +4251,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMPlugin.h"
@@ -3898,6 +4315,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMPluginArray.h"
@@ -3954,6 +4379,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMSelection.h"
@@ -4010,6 +4443,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMSettableTokenList.h"
@@ -4066,6 +4507,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMStringList.h"
@@ -4122,6 +4571,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMStringMap.h"
@@ -4178,6 +4635,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMTokenList.h"
@@ -4234,6 +4699,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMWindow.h"
@@ -4294,6 +4767,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSElement.h"
@@ -4350,6 +4831,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSEntity.h"
@@ -4406,6 +4895,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSEntityReference.h"
@@ -4462,6 +4959,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSEntriesCallback.h"
@@ -4518,6 +5023,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSEntry.h"
@@ -4574,6 +5087,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSEntryArray.h"
@@ -4638,6 +5159,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSEntryCallback.h"
@@ -4702,6 +5231,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSErrorCallback.h"
@@ -4758,6 +5295,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSErrorEvent.h"
@@ -4814,6 +5359,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSEvent.h"
@@ -4870,6 +5423,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSEventException.h"
@@ -4926,6 +5487,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSEventSource.h"
@@ -4982,6 +5551,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSFile.h"
@@ -5062,6 +5639,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSFileError.h"
@@ -5126,6 +5711,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSFileList.h"
@@ -5182,6 +5775,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSFileReader.h"
@@ -5246,6 +5847,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSFileSystemCallback.h"
@@ -5302,6 +5911,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSFileWriter.h"
@@ -5316,6 +5933,70 @@
>
</File>
<File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSFileWriterSync.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>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSFileWriterSync.h"
+ >
+ </File>
+ <File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSFlags.cpp"
>
<FileConfiguration
@@ -5366,6 +6047,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSFlags.h"
@@ -5422,6 +6111,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSGeolocation.h"
@@ -5478,6 +6175,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSGeoposition.h"
@@ -5534,6 +6239,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHashChangeEvent.h"
@@ -5590,6 +6303,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHistory.h"
@@ -5646,6 +6367,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLAllCollection.h"
@@ -5702,6 +6431,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLAnchorElement.h"
@@ -5758,6 +6495,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLAppletElement.h"
@@ -5814,6 +6559,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLAreaElement.h"
@@ -5870,6 +6623,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLAudioElement.h"
@@ -5926,6 +6687,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLBaseElement.h"
@@ -5982,6 +6751,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLBaseFontElement.h"
@@ -6038,6 +6815,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLBlockquoteElement.h"
@@ -6094,6 +6879,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLBodyElement.h"
@@ -6150,6 +6943,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLBRElement.h"
@@ -6206,6 +7007,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLButtonElement.h"
@@ -6262,6 +7071,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLCanvasElement.h"
@@ -6318,6 +7135,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLCollection.h"
@@ -6374,6 +7199,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLDataGridCellElement.h"
@@ -6430,6 +7263,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLDataGridColElement.h"
@@ -6486,6 +7327,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLDataGridElement.h"
@@ -6542,6 +7391,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLDataGridRowElement.h"
@@ -6598,6 +7455,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLDataListElement.h"
@@ -6654,6 +7519,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLDirectoryElement.h"
@@ -6710,6 +7583,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLDivElement.h"
@@ -6766,6 +7647,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLDListElement.h"
@@ -6822,6 +7711,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLDocument.h"
@@ -6878,6 +7775,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLElement.h"
@@ -6934,6 +7839,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLElementWrapperFactory.h"
@@ -6990,6 +7903,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLEmbedElement.h"
@@ -7046,6 +7967,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLFieldSetElement.h"
@@ -7102,6 +8031,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLFormElement.h"
@@ -7158,6 +8095,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLFrameElement.h"
@@ -7214,6 +8159,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLFrameSetElement.h"
@@ -7270,6 +8223,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLHeadElement.h"
@@ -7326,6 +8287,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLHeadingElement.h"
@@ -7382,6 +8351,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLHRElement.h"
@@ -7438,6 +8415,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLHtmlElement.h"
@@ -7494,6 +8479,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLIFrameElement.h"
@@ -7550,6 +8543,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLImageElement.h"
@@ -7606,6 +8607,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLInputElement.h"
@@ -7662,6 +8671,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLIsIndexElement.h"
@@ -7718,6 +8735,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLLabelElement.h"
@@ -7774,6 +8799,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLLegendElement.h"
@@ -7830,6 +8863,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLLIElement.h"
@@ -7886,6 +8927,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLLinkElement.h"
@@ -7942,6 +8991,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLMapElement.h"
@@ -7998,6 +9055,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLMarqueeElement.h"
@@ -8054,6 +9119,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLMediaElement.h"
@@ -8110,6 +9183,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLMenuElement.h"
@@ -8166,6 +9247,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLMetaElement.h"
@@ -8222,6 +9311,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLMeterElement.h"
@@ -8278,6 +9375,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLModElement.h"
@@ -8334,6 +9439,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLObjectElement.h"
@@ -8390,6 +9503,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLOListElement.h"
@@ -8446,6 +9567,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLOptGroupElement.h"
@@ -8502,6 +9631,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLOptionElement.h"
@@ -8558,6 +9695,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLOptionsCollection.h"
@@ -8614,6 +9759,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLOutputElement.h"
@@ -8670,6 +9823,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLParagraphElement.h"
@@ -8726,6 +9887,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLParamElement.h"
@@ -8782,6 +9951,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLPreElement.h"
@@ -8838,6 +10015,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLProgressElement.h"
@@ -8894,6 +10079,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLQuoteElement.h"
@@ -8950,6 +10143,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLScriptElement.h"
@@ -9006,6 +10207,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLSelectElement.h"
@@ -9062,6 +10271,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLSourceElement.h"
@@ -9118,6 +10335,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLStyleElement.h"
@@ -9174,6 +10399,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLTableCaptionElement.h"
@@ -9230,6 +10463,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLTableCellElement.h"
@@ -9286,6 +10527,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLTableColElement.h"
@@ -9342,6 +10591,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLTableElement.h"
@@ -9398,6 +10655,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLTableRowElement.h"
@@ -9454,6 +10719,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLTableSectionElement.h"
@@ -9510,6 +10783,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLTextAreaElement.h"
@@ -9566,6 +10847,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLTitleElement.h"
@@ -9622,6 +10911,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLUListElement.h"
@@ -9678,6 +10975,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSHTMLVideoElement.h"
@@ -9734,6 +11039,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSImageData.h"
@@ -9790,6 +11103,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSInjectedScriptHost.h"
@@ -9846,6 +11167,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSInspectorFrontendHost.h"
@@ -9902,6 +11231,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSJavaScriptCallFrame.h"
@@ -9958,6 +11295,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSKeyboardEvent.h"
@@ -10014,6 +11359,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSLocation.h"
@@ -10070,6 +11423,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSMediaError.h"
@@ -10126,6 +11487,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSMediaList.h"
@@ -10182,6 +11551,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSMemoryInfo.h"
@@ -10238,6 +11615,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSMessageChannel.h"
@@ -10294,6 +11679,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSMessageEvent.h"
@@ -10350,6 +11743,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSMessagePort.h"
@@ -10406,6 +11807,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSMetadata.h"
@@ -10462,6 +11871,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSMetadataCallback.h"
@@ -10518,6 +11935,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSMouseEvent.h"
@@ -10574,6 +11999,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSMutationEvent.h"
@@ -10630,13 +12063,21 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNamedNodeMap.h"
>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNavigation.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNavigator.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -10686,13 +12127,21 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNavigation.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNavigator.h"
>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNavigator.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNode.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -10742,13 +12191,21 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNavigator.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNode.h"
>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNode.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNodeFilter.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -10798,13 +12255,21 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNode.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNodeFilter.h"
>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNodeFilter.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNodeIterator.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -10854,13 +12319,21 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNodeFilter.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNodeIterator.h"
>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNodeIterator.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNodeList.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -10910,13 +12383,21 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNodeIterator.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNodeList.h"
>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNodeList.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNotation.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -10966,13 +12447,21 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNodeList.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNotation.h"
>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNotation.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNotification.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -11022,13 +12511,21 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNotation.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNotification.h"
>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNotification.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNotificationCenter.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -11078,13 +12575,21 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNotification.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNotificationCenter.h"
>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNotificationCenter.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSOverflowEvent.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -11134,13 +12639,85 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSNotificationCenter.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSOverflowEvent.h"
>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSOverflowEvent.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPageTransitionEvent.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>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPageTransitionEvent.h"
+ >
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPerformance.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -11190,13 +12767,21 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSOverflowEvent.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPerformance.h"
>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPageTransitionEvent.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPerformanceNavigation.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -11246,13 +12831,21 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPageTransitionEvent.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPerformanceNavigation.h"
>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPerformance.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPerformanceTiming.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -11302,9 +12895,17 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPerformance.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPerformanceTiming.h"
>
</File>
<File
@@ -11358,6 +12959,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPopStateEvent.h"
@@ -11414,6 +13023,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPositionError.h"
@@ -11470,6 +13087,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSProcessingInstruction.h"
@@ -11526,6 +13151,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSProgressEvent.h"
@@ -11582,6 +13215,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSRange.h"
@@ -11638,6 +13279,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSRangeException.h"
@@ -11694,6 +13343,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSRect.h"
@@ -11750,6 +13407,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSRGBColor.h"
@@ -11806,6 +13471,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSScreen.h"
@@ -11862,6 +13535,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\WebCore\DerivedSources\JSSharedWorker.h"
@@ -11918,6 +13599,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\WebCore\DerivedSources\JSSharedWorkerContext.h"
@@ -11974,6 +13663,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSQLError.h"
@@ -12030,6 +13727,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSQLResultSet.h"
@@ -12086,6 +13791,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSQLResultSetRowList.h"
@@ -12142,6 +13855,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\WebCore\DerivedSources\JSSQLTransaction.h"
@@ -12198,6 +13919,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\WebCore\DerivedSources\JSSQLTransactionSync.h"
@@ -12254,6 +13983,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSStorage.h"
@@ -12310,6 +14047,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSStorageEvent.h"
@@ -12366,6 +14111,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSStyleMedia.h"
@@ -12422,6 +14175,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSStyleSheet.h"
@@ -12478,6 +14239,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSStyleSheetList.h"
@@ -12534,6 +14303,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGAElement.h"
@@ -12590,6 +14367,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGAltGlyphElement.h"
@@ -12646,6 +14431,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGAngle.h"
@@ -12702,6 +14495,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGAnimateColorElement.h"
@@ -12758,6 +14559,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGAnimatedAngle.h"
@@ -12814,6 +14623,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGAnimatedBoolean.h"
@@ -12870,6 +14687,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGAnimatedEnumeration.h"
@@ -12926,6 +14751,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGAnimatedInteger.h"
@@ -12982,6 +14815,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGAnimatedLength.h"
@@ -13038,6 +14879,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGAnimatedLengthList.h"
@@ -13094,6 +14943,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGAnimatedNumber.h"
@@ -13150,6 +15007,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGAnimatedNumberList.h"
@@ -13206,6 +15071,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGAnimatedPreserveAspectRatio.h"
@@ -13262,6 +15135,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGAnimatedRect.h"
@@ -13318,6 +15199,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGAnimatedString.h"
@@ -13374,6 +15263,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGAnimatedTransformList.h"
@@ -13430,6 +15327,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGAnimateElement.h"
@@ -13486,6 +15391,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGAnimateTransformElement.h"
@@ -13542,6 +15455,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGAnimationElement.h"
@@ -13598,6 +15519,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGCircleElement.h"
@@ -13654,6 +15583,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGClipPathElement.h"
@@ -13710,6 +15647,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGColor.h"
@@ -13766,6 +15711,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGComponentTransferFunctionElement.h"
@@ -13822,6 +15775,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGCursorElement.h"
@@ -13878,6 +15839,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGDefsElement.h"
@@ -13934,6 +15903,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGDescElement.h"
@@ -13990,6 +15967,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGDocument.h"
@@ -14046,6 +16031,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGElement.h"
@@ -14102,6 +16095,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGElementInstance.h"
@@ -14158,6 +16159,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGElementInstanceList.h"
@@ -14222,6 +16231,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGEllipseElement.h"
@@ -14278,6 +16295,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGException.h"
@@ -14334,6 +16359,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFEBlendElement.h"
@@ -14390,6 +16423,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFEColorMatrixElement.h"
@@ -14446,6 +16487,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFEComponentTransferElement.h"
@@ -14502,6 +16551,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFECompositeElement.h"
@@ -14558,6 +16615,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFEConvolveMatrixElement.h"
@@ -14614,6 +16679,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFEDiffuseLightingElement.h"
@@ -14670,6 +16743,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFEDisplacementMapElement.h"
@@ -14726,6 +16807,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFEDistantLightElement.h"
@@ -14782,6 +16871,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFEFloodElement.h"
@@ -14838,6 +16935,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFEFuncAElement.h"
@@ -14894,6 +16999,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFEFuncBElement.h"
@@ -14950,6 +17063,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFEFuncGElement.h"
@@ -15006,6 +17127,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFEFuncRElement.h"
@@ -15062,6 +17191,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFEGaussianBlurElement.h"
@@ -15118,6 +17255,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFEImageElement.h"
@@ -15174,6 +17319,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFEMergeElement.h"
@@ -15230,6 +17383,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFEMergeNodeElement.h"
@@ -15286,6 +17447,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFEOffsetElement.h"
@@ -15342,6 +17511,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFEPointLightElement.h"
@@ -15398,6 +17575,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFESpecularLightingElement.h"
@@ -15454,6 +17639,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFESpotLightElement.h"
@@ -15510,6 +17703,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFETileElement.h"
@@ -15566,6 +17767,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFETurbulenceElement.h"
@@ -15622,6 +17831,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFilterElement.h"
@@ -15678,6 +17895,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFontElement.h"
@@ -15734,6 +17959,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFontFaceElement.h"
@@ -15790,6 +18023,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFontFaceFormatElement.h"
@@ -15846,6 +18087,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFontFaceNameElement.h"
@@ -15902,6 +18151,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFontFaceSrcElement.h"
@@ -15958,6 +18215,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGFontFaceUriElement.h"
@@ -16014,6 +18279,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGForeignObjectElement.h"
@@ -16070,6 +18343,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGGElement.h"
@@ -16126,6 +18407,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGGlyphElement.h"
@@ -16182,6 +18471,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGGradientElement.h"
@@ -16238,6 +18535,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGHKernElement.h"
@@ -16294,6 +18599,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGImageElement.h"
@@ -16350,6 +18663,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGLength.h"
@@ -16406,6 +18727,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGLengthList.h"
@@ -16462,6 +18791,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGLinearGradientElement.h"
@@ -16518,6 +18855,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGLineElement.h"
@@ -16574,6 +18919,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGMarkerElement.h"
@@ -16630,6 +18983,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGMaskElement.h"
@@ -16686,6 +19047,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGMatrix.h"
@@ -16742,6 +19111,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGMetadataElement.h"
@@ -16798,6 +19175,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGMissingGlyphElement.h"
@@ -16854,6 +19239,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGNumber.h"
@@ -16910,6 +19303,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGNumberList.h"
@@ -16966,6 +19367,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPaint.h"
@@ -17022,6 +19431,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathElement.h"
@@ -17078,6 +19495,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSeg.h"
@@ -17134,6 +19559,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSegArcAbs.h"
@@ -17190,6 +19623,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSegArcRel.h"
@@ -17246,6 +19687,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSegClosePath.h"
@@ -17302,6 +19751,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSegCurvetoCubicAbs.h"
@@ -17358,6 +19815,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSegCurvetoCubicRel.h"
@@ -17414,6 +19879,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSegCurvetoCubicSmoothAbs.h"
@@ -17470,6 +19943,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSegCurvetoCubicSmoothRel.h"
@@ -17526,6 +20007,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSegCurvetoQuadraticAbs.h"
@@ -17582,6 +20071,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSegCurvetoQuadraticRel.h"
@@ -17638,6 +20135,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSegCurvetoQuadraticSmoothAbs.h"
@@ -17694,6 +20199,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSegCurvetoQuadraticSmoothRel.h"
@@ -17750,6 +20263,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSegLinetoAbs.h"
@@ -17806,6 +20327,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSegLinetoHorizontalAbs.h"
@@ -17862,6 +20391,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSegLinetoHorizontalRel.h"
@@ -17918,6 +20455,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSegLinetoRel.h"
@@ -17974,6 +20519,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSegLinetoVerticalAbs.h"
@@ -18030,6 +20583,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSegLinetoVerticalRel.h"
@@ -18086,6 +20647,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSegList.h"
@@ -18142,6 +20711,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSegMovetoAbs.h"
@@ -18198,6 +20775,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPathSegMovetoRel.h"
@@ -18254,6 +20839,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPatternElement.h"
@@ -18310,6 +20903,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPoint.h"
@@ -18366,6 +20967,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPointList.h"
@@ -18422,6 +21031,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPolygonElement.h"
@@ -18478,6 +21095,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPolylineElement.h"
@@ -18534,6 +21159,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGPreserveAspectRatio.h"
@@ -18590,6 +21223,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGRadialGradientElement.h"
@@ -18646,6 +21287,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGRect.h"
@@ -18702,6 +21351,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGRectElement.h"
@@ -18758,6 +21415,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGRenderingIntent.h"
@@ -18814,6 +21479,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGScriptElement.h"
@@ -18870,6 +21543,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGSetElement.h"
@@ -18926,6 +21607,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGStopElement.h"
@@ -18982,6 +21671,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGStringList.h"
@@ -19038,6 +21735,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGStyleElement.h"
@@ -19094,6 +21799,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGSVGElement.h"
@@ -19150,6 +21863,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGSwitchElement.h"
@@ -19206,6 +21927,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGSymbolElement.h"
@@ -19262,6 +21991,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGTextContentElement.h"
@@ -19318,6 +22055,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGTextElement.h"
@@ -19374,6 +22119,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGTextPathElement.h"
@@ -19430,6 +22183,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGTextPositioningElement.h"
@@ -19486,6 +22247,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGTitleElement.h"
@@ -19542,6 +22311,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGTransform.h"
@@ -19598,6 +22375,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGTransformList.h"
@@ -19654,6 +22439,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGTRefElement.h"
@@ -19710,6 +22503,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGTSpanElement.h"
@@ -19766,6 +22567,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGUnitTypes.h"
@@ -19822,6 +22631,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGUseElement.h"
@@ -19878,6 +22695,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGViewElement.h"
@@ -19934,6 +22759,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGVKernElement.h"
@@ -19990,6 +22823,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSSVGZoomEvent.h"
@@ -20046,6 +22887,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSText.h"
@@ -20102,6 +22951,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSTextEvent.h"
@@ -20158,6 +23015,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSTextMetrics.h"
@@ -20214,56 +23079,8 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
- </File>
- <File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSTimeRanges.h"
- >
- </File>
- <File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSTiming.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"
+ Name="Release_LTCG|Win32"
ExcludedFromBuild="true"
>
<Tool
@@ -20272,7 +23089,7 @@
</FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSTiming.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSTimeRanges.h"
>
</File>
<File
@@ -20326,6 +23143,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSTreeWalker.h"
@@ -20382,6 +23207,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSUIEvent.h"
@@ -20438,6 +23271,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSValidityState.h"
@@ -20494,6 +23335,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSWebKitAnimationEvent.h"
@@ -20550,6 +23399,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSWebKitCSSKeyframeRule.h"
@@ -20606,6 +23463,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSWebKitCSSKeyframesRule.h"
@@ -20662,6 +23527,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSWebKitCSSMatrix.h"
@@ -20718,6 +23591,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSWebKitCSSTransformValue.h"
@@ -20774,6 +23655,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSWebKitPoint.h"
@@ -20830,6 +23719,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSWebKitTransitionEvent.h"
@@ -20886,6 +23783,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\WebCore\DerivedSources\JSWebSocket.h"
@@ -20942,6 +23847,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSWheelEvent.h"
@@ -20998,6 +23911,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\WebCore\DerivedSources\JSWorker.h"
@@ -21054,6 +23975,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\WebCore\DerivedSources\JSWorkerContext.h"
@@ -21114,6 +24043,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\WebCore\DerivedSources\JSWorkerLocation.h"
@@ -21170,6 +24107,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\WebCore\DerivedSources\JSWorkerNavigator.h"
@@ -21226,6 +24171,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSXMLHttpRequest.h"
@@ -21282,6 +24235,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSXMLHttpRequestException.h"
@@ -21338,6 +24299,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSXMLHttpRequestProgressEvent.h"
@@ -21394,6 +24363,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSXMLHttpRequestUpload.h"
@@ -21450,6 +24427,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSXMLSerializer.h"
@@ -21506,6 +24491,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSXPathEvaluator.h"
@@ -21562,6 +24555,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSXPathException.h"
@@ -21618,6 +24619,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSXPathExpression.h"
@@ -21674,6 +24683,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSXPathNSResolver.h"
@@ -21730,6 +24747,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSXPathResult.h"
@@ -21786,6 +24811,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSXSLTProcessor.h"
@@ -21882,6 +24915,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\WMLElementFactory.h"
@@ -21938,6 +24979,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\WMLNames.h"
@@ -22026,6 +25075,16 @@
ForcedIncludeFiles="$(NOINHERIT);ICUVersion.h"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ DisableSpecificWarnings="4065;4273;4565;4701;4702"
+ ForcedIncludeFiles="$(NOINHERIT);ICUVersion.h"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\XPathGrammar.h"
@@ -22090,6 +25149,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\accessibility\AccessibilityARIAGrid.h"
@@ -22146,6 +25213,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\accessibility\AccessibilityARIAGridCell.h"
@@ -22202,6 +25277,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\accessibility\AccessibilityARIAGridRow.h"
@@ -22258,6 +25341,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\accessibility\AccessibilityImageMapLink.h"
@@ -22314,6 +25405,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\accessibility\AccessibilityList.h"
@@ -22370,6 +25469,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\accessibility\AccessibilityListBox.h"
@@ -22426,6 +25533,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\accessibility\AccessibilityListBoxOption.h"
@@ -22482,6 +25597,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\accessibility\AccessibilityMediaControls.h"
@@ -22562,6 +25685,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\accessibility\AccessibilityObject.h"
@@ -22618,6 +25749,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\accessibility\AccessibilityProgressIndicator.h"
@@ -22674,6 +25813,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\accessibility\AccessibilityRenderObject.h"
@@ -22730,6 +25877,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\accessibility\AccessibilityScrollbar.h"
@@ -22786,6 +25941,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\accessibility\AccessibilitySlider.h"
@@ -22842,6 +26005,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\accessibility\AccessibilityTable.h"
@@ -22898,6 +26069,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\accessibility\AccessibilityTableCell.h"
@@ -22954,6 +26133,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\accessibility\AccessibilityTableColumn.h"
@@ -23010,6 +26197,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\accessibility\AccessibilityTableHeaderContainer.h"
@@ -23066,6 +26261,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\accessibility\AccessibilityTableRow.h"
@@ -23122,6 +26325,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\accessibility\AXObjectCache.h"
@@ -23360,15 +26571,15 @@
>
</File>
<File
- RelativePath="..\page\GeolocationController.cpp"
+ RelativePath="..\page\GeolocationClient.h"
>
</File>
<File
- RelativePath="..\page\GeolocationController.h"
+ RelativePath="..\page\GeolocationController.cpp"
>
</File>
<File
- RelativePath="..\page\GeolocationControllerClient.h"
+ RelativePath="..\page\GeolocationController.h"
>
</File>
<File
@@ -23444,14 +26655,6 @@
>
</File>
<File
- RelativePath="..\page\Navigation.cpp"
- >
- </File>
- <File
- RelativePath="..\page\Navigation.h"
- >
- </File>
- <File
RelativePath="..\page\Navigator.cpp"
>
</File>
@@ -23504,6 +26707,22 @@
>
</File>
<File
+ RelativePath="..\page\PerformanceNavigation.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\page\PerformanceNavigation.h"
+ >
+ </File>
+ <File
+ RelativePath="..\page\PerformanceTiming.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\page\PerformanceTiming.h"
+ >
+ </File>
+ <File
RelativePath="..\page\PluginHalter.cpp"
>
</File>
@@ -23596,14 +26815,6 @@
>
</File>
<File
- RelativePath="..\page\Timing.cpp"
- >
- </File>
- <File
- RelativePath="..\page\Timing.h"
- >
- </File>
- <File
RelativePath="..\page\UserContentURLPattern.cpp"
>
</File>
@@ -23693,6 +26904,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\page\win\FrameCGWin.cpp"
@@ -23728,6 +26947,10 @@
Name="loader"
>
<File
+ RelativePath="..\loader\ ResourceLoadScheduler.h"
+ >
+ </File>
+ <File
RelativePath="..\loader\CrossOriginAccessControl.cpp"
>
</File>
@@ -23968,6 +27191,10 @@
>
</File>
<File
+ RelativePath="..\loader\ResourceLoadScheduler.cpp"
+ >
+ </File>
+ <File
RelativePath="..\loader\SinkDocument.cpp"
>
</File>
@@ -24183,6 +27410,86 @@
Name="cache"
>
<File
+ RelativePath="..\loader\cache\CachedCSSStyleSheet.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\loader\cache\CachedCSSStyleSheet.h"
+ >
+ </File>
+ <File
+ RelativePath="..\loader\cache\CachedFont.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\loader\cache\CachedFont.h"
+ >
+ </File>
+ <File
+ RelativePath="..\loader\cache\CachedImage.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\loader\cache\CachedImage.h"
+ >
+ </File>
+ <File
+ RelativePath="..\loader\cache\CachedResource.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\loader\cache\CachedResource.h"
+ >
+ </File>
+ <File
+ RelativePath="..\loader\cache\CachedResourceClient.h"
+ >
+ </File>
+ <File
+ RelativePath="..\loader\cache\CachedResourceClientWalker.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\loader\cache\CachedResourceClientWalker.h"
+ >
+ </File>
+ <File
+ RelativePath="..\loader\cache\CachedResourceHandle.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\loader\cache\CachedResourceHandle.h"
+ >
+ </File>
+ <File
+ RelativePath="..\loader\cache\CachedResourceLoader.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\loader\cache\CachedResourceLoader.h"
+ >
+ </File>
+ <File
+ RelativePath="..\loader\cache\CachedScript.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\loader\cache\CachedScript.h"
+ >
+ </File>
+ <File
+ RelativePath="..\loader\cache\CachedXSLStyleSheet.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\loader\cache\CachedXSLStyleSheet.h"
+ >
+ </File>
+ <File
+ RelativePath="..\loader\cache\CachePolicy.h"
+ >
+ </File>
+ <File
RelativePath="..\loader\cache\MemoryCache.cpp"
>
</File>
@@ -24190,86 +27497,6 @@
RelativePath="..\loader\cache\MemoryCache.h"
>
</File>
- <File
- RelativePath="..\loader\cache\CachedCSSStyleSheet.cpp"
- >
- </File>
- <File
- RelativePath="..\loader\cache\CachedCSSStyleSheet.h"
- >
- </File>
- <File
- RelativePath="..\loader\cache\CachedFont.cpp"
- >
- </File>
- <File
- RelativePath="..\loader\cache\CachedFont.h"
- >
- </File>
- <File
- RelativePath="..\loader\cache\CachedImage.cpp"
- >
- </File>
- <File
- RelativePath="..\loader\cache\CachedImage.h"
- >
- </File>
- <File
- RelativePath="..\loader\cache\CachedResource.cpp"
- >
- </File>
- <File
- RelativePath="..\loader\cache\CachedResource.h"
- >
- </File>
- <File
- RelativePath="..\loader\cache\CachedResourceClient.h"
- >
- </File>
- <File
- RelativePath="..\loader\cache\CachedResourceClientWalker.cpp"
- >
- </File>
- <File
- RelativePath="..\loader\cache\CachedResourceClientWalker.h"
- >
- </File>
- <File
- RelativePath="..\loader\cache\CachedResourceHandle.cpp"
- >
- </File>
- <File
- RelativePath="..\loader\cache\CachedResourceHandle.h"
- >
- </File>
- <File
- RelativePath="..\loader\cache\CachedResourceLoader.cpp"
- >
- </File>
- <File
- RelativePath="..\loader\cache\CachedResourceLoader.h"
- >
- </File>
- <File
- RelativePath="..\loader\cache\CachedScript.cpp"
- >
- </File>
- <File
- RelativePath="..\loader\cache\CachedScript.h"
- >
- </File>
- <File
- RelativePath="..\loader\cache\CachedXSLStyleSheet.cpp"
- >
- </File>
- <File
- RelativePath="..\loader\cache\CachedXSLStyleSheet.h"
- >
- </File>
- <File
- RelativePath="..\loader\cache\CachePolicy.h"
- >
- </File>
</Filter>
</Filter>
<Filter
@@ -24809,6 +28036,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\win\DragImageCGWin.cpp"
@@ -25011,6 +28246,15 @@
ForcedIncludeFiles="$(NOINHERIT);ICUVersion.h"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ ForcedIncludeFiles="$(NOINHERIT);ICUVersion.h"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\win\WCDataObject.h"
@@ -25081,6 +28325,15 @@
DisableSpecificWarnings="4819"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ DisableSpecificWarnings="4819"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\WebCorePrefix.h"
@@ -25197,6 +28450,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\ContextShadow.h"
@@ -25233,6 +28494,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\FloatPoint.cpp"
@@ -25325,6 +28594,14 @@
AdditionalOptions="$(AnalyzeWithLargeStack)"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="$(AnalyzeWithLargeStack)"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\Font.h"
@@ -25517,6 +28794,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\ImageSource.h"
@@ -25700,6 +28985,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\win\FontPlatformDataCairoWin.cpp"
@@ -25736,6 +29029,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\win\FontPlatformDataCGWin.cpp"
@@ -25812,6 +29113,14 @@
AdditionalOptions="$(AnalyzeWithLargeStack)"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="$(AnalyzeWithLargeStack)"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\win\GlyphPageTreeNodeCairoWin.cpp"
@@ -25848,6 +29157,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\win\GlyphPageTreeNodeCGWin.cpp"
@@ -25904,6 +29221,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\win\GraphicsContextCGWin.cpp"
@@ -26008,6 +29333,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\win\ImageCGWin.cpp"
@@ -26224,6 +29557,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\win\SimpleFontDataCGWin.cpp"
@@ -26501,6 +29842,54 @@
/>
</FileConfiguration>
</File>
+ <Filter
+ Name="cairo"
+ >
+ <File
+ RelativePath="..\platform\graphics\win\cairo\FontPlatformData.h"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Internal|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_All|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
</Filter>
<Filter
Name="cg"
@@ -26964,6 +30353,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\cairo\CairoUtilities.cpp"
@@ -27000,6 +30397,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\cairo\CairoUtilities.h"
@@ -27036,6 +30441,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\cairo\ContextShadowCairo.cpp"
@@ -27072,6 +30485,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\cairo\DrawErrorUnderline.h"
@@ -27108,6 +30529,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\cairo\FontCairo.cpp"
@@ -27144,40 +30573,12 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
- </File>
- <File
- RelativePath="..\platform\graphics\cairo\FontPlatformData.h"
- >
- <FileConfiguration
- Name="Debug|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCustomBuildTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCustomBuildTool"
- />
- </FileConfiguration>
<FileConfiguration
- Name="Debug_Internal|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCustomBuildTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug_All|Win32"
+ Name="Release_LTCG|Win32"
ExcludedFromBuild="true"
>
<Tool
- Name="VCCustomBuildTool"
+ Name="VCCLCompilerTool"
/>
</FileConfiguration>
</File>
@@ -27216,6 +30617,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\cairo\GraphicsContextCairo.cpp"
@@ -27252,6 +30661,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\cairo\GraphicsContextPlatformPrivateCairo.h"
@@ -27288,6 +30705,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\cairo\ImageBufferCairo.cpp"
@@ -27324,6 +30749,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\cairo\ImageCairo.cpp"
@@ -27360,6 +30793,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\cairo\OwnPtrCairo.cpp"
@@ -27396,6 +30837,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\cairo\OwnPtrCairo.h"
@@ -27432,6 +30881,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\cairo\PathCairo.cpp"
@@ -27468,6 +30925,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\cairo\PatternCairo.cpp"
@@ -27504,6 +30969,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\cairo\RefPtrCairo.cpp"
@@ -27540,6 +31013,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\cairo\RefPtrCairo.h"
@@ -27576,6 +31057,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\graphics\cairo\TransformationMatrixCairo.cpp"
@@ -27612,6 +31101,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
</Filter>
<Filter
@@ -28576,6 +32073,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\network\curl\CookieJarCurl.cpp"
@@ -28612,6 +32117,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\network\curl\DNSCurl.cpp"
@@ -28648,6 +32161,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\network\curl\FormDataStreamCurl.cpp"
@@ -28684,6 +32205,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\network\curl\FormDataStreamCurl.h"
@@ -28720,6 +32249,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\network\curl\ProxyServerCurl.cpp"
@@ -28756,6 +32293,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\network\curl\ResourceError.h"
@@ -28792,6 +32337,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\network\curl\ResourceHandleCurl.cpp"
@@ -28828,6 +32381,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\network\curl\ResourceHandleManager.cpp"
@@ -28864,6 +32425,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\network\curl\ResourceHandleManager.h"
@@ -28900,6 +32469,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\network\curl\ResourceRequest.h"
@@ -28936,6 +32513,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\network\curl\ResourceResponse.h"
@@ -28972,6 +32557,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\network\curl\SocketStreamHandleCurl.cpp"
@@ -29008,6 +32601,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
</Filter>
</Filter>
@@ -29091,10 +32692,6 @@
>
</File>
<File
- RelativePath="..\platform\text\Hyphenation.cpp"
- >
- </File>
- <File
RelativePath="..\platform\text\Hyphenation.h"
>
</File>
@@ -29233,6 +32830,14 @@
AdditionalOptions="$(AnalyzeWithLargeStack)"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="$(AnalyzeWithLargeStack)"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\text\TextCodecICU.h"
@@ -29318,6 +32923,10 @@
Name="cf"
>
<File
+ RelativePath="..\platform\text\cf\HyphenationCF.cpp"
+ >
+ </File>
+ <File
RelativePath="..\platform\text\cf\StringCF.cpp"
>
</File>
@@ -29385,6 +32994,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\image-decoders\ImageDecoder.h"
@@ -29421,6 +33038,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<Filter
Name="cairo"
@@ -29460,6 +33085,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
</Filter>
<Filter
@@ -29500,6 +33133,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\image-decoders\gif\GIFImageDecoder.h"
@@ -29536,6 +33177,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\image-decoders\gif\GIFImageReader.cpp"
@@ -29572,6 +33221,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\image-decoders\gif\GIFImageReader.h"
@@ -29608,6 +33265,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
</Filter>
<Filter
@@ -29664,6 +33329,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\image-decoders\jpeg\JPEGImageDecoder.h"
@@ -29700,6 +33373,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
</Filter>
<Filter
@@ -29756,6 +33437,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\image-decoders\png\PNGImageDecoder.h"
@@ -29792,6 +33481,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
</Filter>
<Filter
@@ -29832,6 +33529,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\image-decoders\bmp\BMPImageDecoder.h"
@@ -29868,6 +33573,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\image-decoders\bmp\BMPImageReader.cpp"
@@ -29904,6 +33617,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\image-decoders\bmp\BMPImageReader.h"
@@ -29940,6 +33661,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
</Filter>
<Filter
@@ -29980,6 +33709,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\image-decoders\ico\ICOImageDecoder.h"
@@ -30016,6 +33753,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
</Filter>
</Filter>
@@ -30079,6 +33824,15 @@
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\$(InputName)1.obj"
+ XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\animation\Animation.h"
@@ -30141,6 +33895,15 @@
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\$(InputName)1.obj"
+ XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\platform\animation\AnimationList.h"
@@ -30548,30 +34311,6 @@
>
</File>
<File
- RelativePath="..\css\CSSVariableDependentValue.cpp"
- >
- </File>
- <File
- RelativePath="..\css\CSSVariableDependentValue.h"
- >
- </File>
- <File
- RelativePath="..\css\CSSVariablesDeclaration.cpp"
- >
- </File>
- <File
- RelativePath="..\css\CSSVariablesDeclaration.h"
- >
- </File>
- <File
- RelativePath="..\css\CSSVariablesRule.cpp"
- >
- </File>
- <File
- RelativePath="..\css\CSSVariablesRule.h"
- >
- </File>
- <File
RelativePath="..\css\DashboardRegion.h"
>
</File>
@@ -30810,6 +34549,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\AutoTableLayout.h"
@@ -30866,6 +34613,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\BidiRun.h"
@@ -30922,6 +34677,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\break_lines.h"
@@ -30978,6 +34741,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\CounterNode.h"
@@ -31034,6 +34805,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\EllipsisBox.h"
@@ -31090,6 +34869,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\FixedTableLayout.h"
@@ -31154,6 +34941,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\HitTestResult.h"
@@ -31210,6 +35005,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\InlineBox.h"
@@ -31266,6 +35069,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\InlineFlowBox.h"
@@ -31326,6 +35137,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\InlineTextBox.h"
@@ -31382,6 +35201,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\LayoutState.h"
@@ -31438,6 +35265,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\MediaControlElements.h"
@@ -31502,6 +35337,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\PointerEventsHitRules.h"
@@ -31558,6 +35401,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderApplet.h"
@@ -31614,6 +35465,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderArena.h"
@@ -31670,6 +35529,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderBlock.h"
@@ -31726,6 +35593,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderBox.cpp"
@@ -31778,6 +35653,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderBox.h"
@@ -31834,6 +35717,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderBoxModelObject.h"
@@ -31890,6 +35781,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderBR.h"
@@ -31946,6 +35845,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderButton.h"
@@ -32002,6 +35909,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderCounter.h"
@@ -32058,6 +35973,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderDataGrid.h"
@@ -32114,6 +36037,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderEmbeddedObject.h"
@@ -32170,6 +36101,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderFieldset.h"
@@ -32226,6 +36165,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderFileUploadControl.h"
@@ -32282,6 +36229,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderFlexibleBox.h"
@@ -32338,6 +36293,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderForeignObject.h"
@@ -32394,6 +36357,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderFrame.h"
@@ -32450,6 +36421,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderFrameBase.h"
@@ -32506,6 +36485,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderFrameSet.h"
@@ -32562,6 +36549,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderHTMLCanvas.h"
@@ -32618,6 +36613,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderIFrame.h"
@@ -32674,6 +36677,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderImage.h"
@@ -32730,6 +36741,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderImageResource.h"
@@ -32786,6 +36805,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderImageResourceStyleImage.h"
@@ -32842,6 +36869,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderIndicator.h"
@@ -32902,6 +36937,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderInline.h"
@@ -32958,6 +37001,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderLayer.h"
@@ -33022,6 +37073,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderLayerCompositor.h"
@@ -33078,6 +37137,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderLineBoxList.h"
@@ -33134,6 +37201,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderListBox.h"
@@ -33190,6 +37265,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderListItem.h"
@@ -33246,6 +37329,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderListMarker.h"
@@ -33302,6 +37393,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderMarquee.h"
@@ -33358,6 +37457,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderMedia.h"
@@ -33414,6 +37521,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderMediaControls.h"
@@ -33486,6 +37601,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderMenuList.h"
@@ -33542,6 +37665,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderMeter.h"
@@ -33598,6 +37729,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderObject.h"
@@ -33654,6 +37793,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderObjectChildList.h"
@@ -33710,6 +37857,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderPart.h"
@@ -33766,6 +37921,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderProgress.h"
@@ -33822,6 +37985,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderReplaced.h"
@@ -33878,6 +38049,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderReplica.h"
@@ -33934,6 +38113,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderRuby.h"
@@ -33990,6 +38177,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderRubyBase.h"
@@ -34046,6 +38241,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderRubyRun.h"
@@ -34102,6 +38305,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderRubyText.h"
@@ -34158,6 +38369,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderScrollbar.h"
@@ -34214,6 +38433,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderScrollbarPart.h"
@@ -34270,6 +38497,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderScrollbarTheme.h"
@@ -34330,6 +38565,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSlider.h"
@@ -34390,6 +38633,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGBlock.h"
@@ -34446,6 +38697,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGContainer.h"
@@ -34502,6 +38761,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGGradientStop.h"
@@ -34558,6 +38825,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGHiddenContainer.h"
@@ -34614,6 +38889,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGImage.h"
@@ -34670,6 +38953,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGModelObject.h"
@@ -34726,6 +39017,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGResource.h"
@@ -34782,6 +39081,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGResourceClipper.h"
@@ -34838,6 +39145,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGResourceContainer.h"
@@ -34894,6 +39209,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGResourceFilter.h"
@@ -34950,6 +39273,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGResourceFilterPrimitive.h"
@@ -35006,6 +39337,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGResourceGradient.h"
@@ -35062,6 +39401,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGResourceLinearGradient.h"
@@ -35118,6 +39465,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGResourceMarker.h"
@@ -35174,6 +39529,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGResourceMasker.h"
@@ -35230,6 +39593,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGResourcePattern.h"
@@ -35286,6 +39657,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGResourceRadialGradient.h"
@@ -35342,6 +39721,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGResourceSolidColor.h"
@@ -35398,6 +39785,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGRoot.h"
@@ -35454,6 +39849,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGShadowTreeRootContainer.h"
@@ -35510,6 +39913,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderSVGTransformableContainer.h"
@@ -35566,6 +39977,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderTable.cpp"
@@ -35618,6 +40037,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderTable.h"
@@ -35674,6 +40101,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderTableCell.h"
@@ -35730,6 +40165,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderTableCol.h"
@@ -35786,6 +40229,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderTableRow.h"
@@ -35842,6 +40293,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderTableSection.h"
@@ -35898,6 +40357,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderText.h"
@@ -35954,6 +40421,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderTextControl.h"
@@ -36010,6 +40485,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderTextControlMultiLine.h"
@@ -36066,6 +40549,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderTextControlSingleLine.h"
@@ -36122,6 +40613,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderTextFragment.h"
@@ -36178,6 +40677,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderTheme.h"
@@ -36274,6 +40781,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderThemeWin.h"
@@ -36320,6 +40835,13 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderTreeAsText.cpp"
@@ -36372,6 +40894,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderTreeAsText.h"
@@ -36428,6 +40958,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderVideo.h"
@@ -36484,6 +41022,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderView.h"
@@ -36540,6 +41086,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderWidget.h"
@@ -36596,6 +41150,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RenderWordBreak.h"
@@ -36652,6 +41214,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\RootInlineBox.h"
@@ -36708,6 +41278,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\ScrollBehavior.h"
@@ -36764,6 +41342,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\ShadowElement.h"
@@ -36824,6 +41410,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\SVGMarkerLayoutInfo.h"
@@ -36880,6 +41474,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\SVGRenderSupport.h"
@@ -36936,6 +41538,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\SVGRenderTreeAsText.h"
@@ -36992,6 +41602,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\SVGResources.h"
@@ -37048,6 +41666,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\SVGResourcesCache.h"
@@ -37104,6 +41730,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\SVGResourcesCycleSolver.h"
@@ -37160,6 +41794,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\SVGShadowTreeElements.h"
@@ -37220,6 +41862,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\TextControlInnerElements.h"
@@ -37280,6 +41930,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\TransformState.h"
@@ -37351,6 +42009,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\ContentData.h"
@@ -37411,6 +42077,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\CounterDirectives.h"
@@ -37479,6 +42153,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\FillLayer.h"
@@ -37535,6 +42217,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\KeyframeList.h"
@@ -37591,6 +42281,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\NinePieceImage.h"
@@ -37651,6 +42349,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\RenderStyle.h"
@@ -37711,6 +42417,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\ShadowData.h"
@@ -37771,6 +42485,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\StyleBackgroundData.h"
@@ -37827,6 +42549,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\StyleBoxData.h"
@@ -37883,6 +42613,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\StyleCachedImage.h"
@@ -37939,6 +42677,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\StyleFlexibleBoxData.h"
@@ -37995,6 +42741,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\StyleGeneratedImage.h"
@@ -38055,6 +42809,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\StyleInheritedData.h"
@@ -38111,6 +42873,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\StyleMarqueeData.h"
@@ -38167,6 +42937,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\StyleMultiColData.h"
@@ -38227,6 +43005,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\StyleRareInheritedData.h"
@@ -38283,6 +43069,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\StyleRareNonInheritedData.h"
@@ -38343,6 +43137,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\StyleSurroundData.h"
@@ -38399,6 +43201,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\StyleTransformData.h"
@@ -38455,6 +43265,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\StyleVisualData.h"
@@ -38511,6 +43329,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\SVGRenderStyle.h"
@@ -38567,6 +43393,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\style\SVGRenderStyleDefs.h"
@@ -38627,6 +43461,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\svg\RenderSVGInline.h"
@@ -38683,6 +43525,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\svg\RenderSVGInlineText.h"
@@ -38747,6 +43597,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\svg\RenderSVGText.h"
@@ -38803,6 +43661,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\svg\RenderSVGTextPath.h"
@@ -38859,6 +43725,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\svg\RenderSVGTSpan.h"
@@ -38915,6 +43789,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\svg\SVGInlineFlowBox.h"
@@ -38971,6 +43853,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\svg\SVGInlineTextBox.h"
@@ -39027,6 +43917,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\svg\SVGRootInlineBox.h"
@@ -39083,6 +43981,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\svg\SVGTextChunk.h"
@@ -39139,6 +44045,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\svg\SVGTextChunkBuilder.h"
@@ -39199,6 +44113,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\svg\SVGTextLayoutAttributes.h"
@@ -39255,6 +44177,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\svg\SVGTextLayoutAttributesBuilder.h"
@@ -39311,6 +44241,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\svg\SVGTextLayoutEngine.h"
@@ -39367,6 +44305,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\svg\SVGTextLayoutEngineBaseline.h"
@@ -39423,6 +44369,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\svg\SVGTextLayoutEngineSpacing.h"
@@ -39479,6 +44433,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\svg\SVGTextMetrics.h"
@@ -39535,6 +44497,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\rendering\svg\SVGTextQuery.h"
@@ -39722,6 +44692,15 @@
ForcedIncludeFiles="$(NOINHERIT);ICUVersion.h"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ ForcedIncludeFiles="$(NOINHERIT);ICUVersion.h"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\xml\XPathParser.h"
@@ -39882,6 +44861,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\ActiveDOMObject.h"
@@ -39938,6 +44925,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\AsyncScriptRunner.h"
@@ -39998,6 +44993,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\Attr.h"
@@ -40054,6 +45057,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\Attribute.h"
@@ -40114,6 +45125,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\BeforeProcessEvent.h"
@@ -40170,6 +45189,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\BeforeTextInsertedEvent.h"
@@ -40226,6 +45253,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\BeforeUnloadEvent.h"
@@ -40282,6 +45317,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\CDATASection.h"
@@ -40338,6 +45381,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\CharacterData.h"
@@ -40394,6 +45445,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\CheckedRadioButtons.h"
@@ -40450,6 +45509,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\ChildNodeList.h"
@@ -40506,6 +45573,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\ClassNodeList.h"
@@ -40562,6 +45637,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\ClientRect.h"
@@ -40618,6 +45701,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\ClientRectList.h"
@@ -40674,6 +45765,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\Clipboard.h"
@@ -40734,6 +45833,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\ClipboardEvent.h"
@@ -40790,6 +45897,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\Comment.h"
@@ -40846,6 +45961,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\CompositionEvent.h"
@@ -40902,6 +46025,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\ContainerNode.h"
@@ -40962,6 +46093,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\CSSMappedAttributeDeclaration.h"
@@ -41018,6 +46157,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\CustomEvent.h"
@@ -41074,6 +46221,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\DatasetDOMStringMap.h"
@@ -41130,6 +46285,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\DecodedDataDocumentParser.h"
@@ -41190,6 +46353,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\DeviceMotionController.h"
@@ -41246,6 +46417,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\DeviceMotionData.h"
@@ -41302,6 +46481,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\DeviceMotionEvent.h"
@@ -41358,6 +46545,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\DeviceOrientation.h"
@@ -41418,6 +46613,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\DeviceOrientationController.h"
@@ -41474,6 +46677,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\DeviceOrientationEvent.h"
@@ -41530,6 +46741,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\Document.h"
@@ -41586,6 +46805,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\DocumentFragment.h"
@@ -41646,6 +46873,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\DocumentMarkerController.h"
@@ -41702,6 +46937,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\DocumentParser.h"
@@ -41762,6 +47005,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\DocumentType.h"
@@ -41826,6 +47077,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\DOMImplementation.h"
@@ -41882,6 +47141,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\DOMStringList.h"
@@ -41938,12 +47205,24 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\DOMStringMap.h"
>
</File>
<File
+ RelativePath="..\dom\DOMTimeStamp.h"
+ >
+ </File>
+ <File
RelativePath="..\dom\DynamicNodeList.cpp"
>
<FileConfiguration
@@ -41994,6 +47273,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\DynamicNodeList.h"
@@ -42050,6 +47337,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\EditingText.h"
@@ -42106,6 +47401,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\Element.h"
@@ -42162,6 +47465,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\Entity.h"
@@ -42218,6 +47529,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\EntityReference.h"
@@ -42274,6 +47593,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\ErrorEvent.h"
@@ -42330,12 +47657,84 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\Event.h"
>
</File>
<File
+ RelativePath="..\dom\EventContext.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>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\dom\EventContext.h"
+ >
+ </File>
+ <File
RelativePath="..\dom\EventException.h"
>
</File>
@@ -42394,6 +47793,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\EventNames.h"
@@ -42450,6 +47857,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\EventTarget.h"
@@ -42506,6 +47921,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\ExceptionBase.h"
@@ -42562,6 +47985,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\ExceptionCode.h"
@@ -42626,6 +48057,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\InputElement.h"
@@ -42682,6 +48121,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\KeyboardEvent.h"
@@ -42742,6 +48189,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\MessageChannel.h"
@@ -42798,6 +48253,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\MessageEvent.h"
@@ -42854,6 +48317,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\MessagePort.h"
@@ -42910,6 +48381,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\MessagePortChannel.h"
@@ -42966,6 +48445,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\MouseEvent.h"
@@ -43022,6 +48509,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\MouseRelatedEvent.h"
@@ -43078,6 +48573,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\MutationEvent.h"
@@ -43142,6 +48645,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\NameNodeList.h"
@@ -43206,6 +48717,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\NodeFilter.h"
@@ -43262,6 +48781,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\NodeFilterCondition.h"
@@ -43318,6 +48845,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\NodeIterator.h"
@@ -43374,6 +48909,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\Notation.h"
@@ -43430,6 +48973,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\OptionElement.h"
@@ -43486,6 +49037,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\OptionGroupElement.h"
@@ -43542,6 +49101,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\OverflowEvent.h"
@@ -43598,6 +49165,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\PageTransitionEvent.h"
@@ -43654,6 +49229,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\PendingScript.h"
@@ -43718,6 +49301,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\PopStateEvent.h"
@@ -43774,6 +49365,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\Position.h"
@@ -43830,6 +49429,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\PositionIterator.h"
@@ -43886,6 +49493,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\ProcessingInstruction.h"
@@ -43942,6 +49557,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\ProgressEvent.h"
@@ -44006,6 +49629,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\Range.h"
@@ -44070,6 +49701,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\RegisteredEventListener.h"
@@ -44126,6 +49765,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\ScriptableDocumentParser.h"
@@ -44182,6 +49829,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\ScriptElement.h"
@@ -44238,6 +49893,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\ScriptExecutionContext.h"
@@ -44294,6 +49957,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\SelectElement.h"
@@ -44350,6 +50021,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\SelectorNodeList.h"
@@ -44406,6 +50085,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\SpaceSplitString.h"
@@ -44462,6 +50149,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\StaticHashSetNodeList.h"
@@ -44518,6 +50213,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\StaticNodeList.h"
@@ -44574,6 +50277,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\StyledElement.h"
@@ -44630,6 +50341,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\StyleElement.h"
@@ -44686,6 +50405,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\TagNodeList.h"
@@ -44742,6 +50469,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\Text.h"
@@ -44798,6 +50533,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\TextEvent.h"
@@ -44858,6 +50601,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\Traversal.cpp"
@@ -44910,6 +50661,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\Traversal.h"
@@ -44970,6 +50729,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\TreeWalker.h"
@@ -45026,6 +50793,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\UIEvent.h"
@@ -45082,6 +50857,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\UIEventWithKeyState.h"
@@ -45138,6 +50921,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\UserGestureIndicator.h"
@@ -45194,6 +50985,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\UserTypingGestureIndicator.h"
@@ -45250,6 +51049,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\ViewportArguments.h"
@@ -45306,6 +51113,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\WebKitAnimationEvent.h"
@@ -45362,6 +51177,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\WebKitTransitionEvent.h"
@@ -45418,12 +51241,84 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\WheelEvent.h"
>
</File>
<File
+ RelativePath="..\dom\WindowEventContext.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>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\dom\WindowEventContext.h"
+ >
+ </File>
+ <File
RelativePath="..\dom\XMLDocumentParser.cpp"
>
<FileConfiguration
@@ -45474,6 +51369,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\XMLDocumentParser.h"
@@ -45534,6 +51437,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\dom\XMLDocumentParserScope.h"
@@ -45762,6 +51673,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\AppendNodeCommand.h"
@@ -45818,6 +51737,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\ApplyStyleCommand.h"
@@ -45874,6 +51801,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\BreakBlockquoteCommand.h"
@@ -45930,13 +51865,21 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\CompositeEditCommand.h"
>
</File>
<File
- RelativePath="..\editing\CorrectionPanelInfo.h"
+ RelativePath="..\editing\CorrectionPanelInfo.h"
>
</File>
<File
@@ -45990,6 +51933,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\CreateLinkCommand.h"
@@ -46046,6 +51997,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\DeleteButton.h"
@@ -46102,6 +52061,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\DeleteButtonController.h"
@@ -46158,6 +52125,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\DeleteFromTextNodeCommand.h"
@@ -46214,6 +52189,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\DeleteSelectionCommand.h"
@@ -46274,6 +52257,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\EditCommand.h"
@@ -46292,10 +52283,6 @@
>
</File>
<File
- RelativePath="..\editing\EditingStyle.h"
- >
- </File>
- <File
RelativePath="..\editing\EditingStyle.cpp"
>
<FileConfiguration
@@ -46346,6 +52333,18 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\editing\EditingStyle.h"
+ >
</File>
<File
RelativePath="..\editing\Editor.cpp"
@@ -46398,6 +52397,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\Editor.h"
@@ -46454,6 +52461,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\EditorDeleteAction.h"
@@ -46514,6 +52529,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\FormatBlockCommand.h"
@@ -46570,6 +52593,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\htmlediting.h"
@@ -46626,6 +52657,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\HTMLInterchange.h"
@@ -46682,6 +52721,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\IndentOutdentCommand.h"
@@ -46738,6 +52785,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\InsertIntoTextNodeCommand.h"
@@ -46794,6 +52849,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\InsertLineBreakCommand.h"
@@ -46850,6 +52913,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\InsertListCommand.h"
@@ -46906,6 +52977,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\InsertNodeBeforeCommand.h"
@@ -46962,6 +53041,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\InsertParagraphSeparatorCommand.h"
@@ -47018,6 +53105,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\InsertTextCommand.h"
@@ -47074,6 +53169,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\JoinTextNodesCommand.h"
@@ -47130,6 +53233,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\markup.h"
@@ -47186,6 +53297,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\MarkupAccumulator.h"
@@ -47242,6 +53361,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\MergeIdenticalElementsCommand.h"
@@ -47298,6 +53425,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\ModifySelectionListLevel.h"
@@ -47354,6 +53489,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\MoveSelectionCommand.h"
@@ -47410,6 +53553,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\RemoveCSSPropertyCommand.h"
@@ -47466,6 +53617,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\RemoveNodeCommand.cpp"
@@ -47518,6 +53677,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\RemoveNodeCommand.h"
@@ -47574,6 +53741,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\RemoveNodePreservingChildrenCommand.h"
@@ -47630,6 +53805,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\ReplaceNodeWithSpanCommand.h"
@@ -47686,6 +53869,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\ReplaceSelectionCommand.h"
@@ -47742,6 +53933,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\SelectionController.h"
@@ -47798,6 +53997,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\SetNodeAttributeCommand.h"
@@ -47854,6 +54061,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\SmartReplace.h"
@@ -47910,6 +54125,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\SplitElementCommand.cpp"
@@ -47962,6 +54185,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\SplitElementCommand.h"
@@ -48018,6 +54249,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\SplitTextNodeCommand.h"
@@ -48074,6 +54313,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\SplitTextNodeContainingElementCommand.h"
@@ -48134,6 +54381,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\TextCheckingHelper.h"
@@ -48194,6 +54449,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\TextIterator.h"
@@ -48250,6 +54513,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\TypingCommand.h"
@@ -48306,6 +54577,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\UnlinkCommand.h"
@@ -48362,6 +54641,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\visible_units.h"
@@ -48418,6 +54705,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\VisiblePosition.h"
@@ -48474,6 +54769,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\VisibleSelection.h"
@@ -48530,6 +54833,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\editing\WrapContentsInDummySpanCommand.h"
@@ -49044,6 +55355,14 @@
>
</File>
<File
+ RelativePath="..\fileapi\FileWriterSync.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\fileapi\FileWriterSync.h"
+ >
+ </File>
+ <File
RelativePath="..\fileapi\Flags.h"
>
</File>
@@ -49134,6 +55453,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLAnchorElement.h"
@@ -49190,6 +55517,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLAppletElement.h"
@@ -49246,6 +55581,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLAreaElement.h"
@@ -49302,6 +55645,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLAudioElement.h"
@@ -49358,6 +55709,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLBaseElement.h"
@@ -49414,6 +55773,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLBaseFontElement.h"
@@ -49470,6 +55837,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLBlockquoteElement.h"
@@ -49526,6 +55901,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLBodyElement.h"
@@ -49582,6 +55965,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLBRElement.h"
@@ -49638,6 +56029,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLButtonElement.h"
@@ -49694,6 +56093,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLCanvasElement.h"
@@ -49758,6 +56165,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLDataGridCellElement.h"
@@ -49814,6 +56229,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLDataGridColElement.h"
@@ -49870,6 +56293,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLDataGridElement.h"
@@ -49926,6 +56357,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLDataGridRowElement.h"
@@ -49982,6 +56421,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLDataListElement.h"
@@ -50038,6 +56485,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLDirectoryElement.h"
@@ -50094,6 +56549,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLDivElement.h"
@@ -50150,6 +56613,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLDListElement.h"
@@ -50214,6 +56685,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLElement.h"
@@ -50274,6 +56753,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLEmbedElement.h"
@@ -50330,6 +56817,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLFieldSetElement.h"
@@ -50386,6 +56881,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLFontElement.h"
@@ -50450,6 +56953,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLFormControlElement.h"
@@ -50506,6 +57017,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLFormElement.h"
@@ -50562,6 +57081,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLFrameElement.h"
@@ -50618,6 +57145,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLFrameElementBase.h"
@@ -50674,6 +57209,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLFrameOwnerElement.h"
@@ -50730,6 +57273,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLFrameSetElement.h"
@@ -50786,6 +57337,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLHeadElement.h"
@@ -50842,6 +57401,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLHeadingElement.h"
@@ -50898,6 +57465,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLHRElement.h"
@@ -50954,6 +57529,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLHtmlElement.h"
@@ -51010,6 +57593,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLIFrameElement.h"
@@ -51066,6 +57657,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLImageElement.h"
@@ -51130,6 +57729,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLInputElement.h"
@@ -51186,6 +57793,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLIsIndexElement.h"
@@ -51242,6 +57857,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLKeygenElement.h"
@@ -51298,6 +57921,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLLabelElement.h"
@@ -51354,6 +57985,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLLegendElement.h"
@@ -51410,6 +58049,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLLIElement.h"
@@ -51466,6 +58113,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLLinkElement.h"
@@ -51522,6 +58177,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLMapElement.h"
@@ -51578,6 +58241,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLMarqueeElement.h"
@@ -51634,6 +58305,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLMediaElement.h"
@@ -51690,6 +58369,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLMenuElement.h"
@@ -51746,6 +58433,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLMetaElement.h"
@@ -51802,6 +58497,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLMeterElement.h"
@@ -51858,6 +58561,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLModElement.h"
@@ -51923,6 +58634,14 @@
/>
</FileConfiguration>
<FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
Name="Release_PGO|Win32"
>
<Tool
@@ -51986,6 +58705,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLObjectElement.h"
@@ -52042,6 +58769,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLOListElement.h"
@@ -52098,6 +58833,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLOptGroupElement.h"
@@ -52154,6 +58897,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLOptionElement.h"
@@ -52226,6 +58977,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLParagraphElement.h"
@@ -52282,6 +59041,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLParamElement.h"
@@ -52346,6 +59113,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLPlugInElement.h"
@@ -52402,6 +59177,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLPlugInImageElement.h"
@@ -52458,6 +59241,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLPreElement.h"
@@ -52514,6 +59305,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLProgressElement.h"
@@ -52570,6 +59369,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLQuoteElement.h"
@@ -52626,6 +59433,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLScriptElement.h"
@@ -52682,6 +59497,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLSelectElement.h"
@@ -52738,6 +59561,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLSourceElement.h"
@@ -52794,6 +59625,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLStyleElement.h"
@@ -52850,6 +59689,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLTableCaptionElement.h"
@@ -52906,6 +59753,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLTableCellElement.h"
@@ -52962,6 +59817,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLTableColElement.h"
@@ -53018,6 +59881,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLTableElement.h"
@@ -53074,6 +59945,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLTablePartElement.h"
@@ -53130,6 +60009,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLTableRowElement.h"
@@ -53194,6 +60081,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLTableSectionElement.h"
@@ -53250,6 +60145,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLTextAreaElement.h"
@@ -53306,6 +60209,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLTitleElement.h"
@@ -53362,6 +60273,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLUListElement.h"
@@ -53418,6 +60337,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\html\HTMLVideoElement.h"
@@ -53945,6 +60872,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\DOMObjectHashTableMap.h"
@@ -54005,6 +60940,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\DOMWrapperWorld.h"
@@ -54061,6 +61004,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\GCController.h"
@@ -54117,6 +61068,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\IDBBindingUtilities.h"
@@ -54173,6 +61132,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSAudioConstructor.cpp"
@@ -54225,6 +61192,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSAudioConstructor.h"
@@ -54289,6 +61264,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\specialization\JSBindingState.h"
@@ -54345,6 +61328,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSCallbackData.h"
@@ -54401,6 +61392,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSCanvasRenderingContextCustom.cpp"
@@ -54453,6 +61452,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSCDATASectionCustom.cpp"
@@ -54505,6 +61512,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSClipboardCustom.cpp"
@@ -54557,6 +61572,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSConsoleCustom.cpp"
@@ -54609,6 +61632,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSCoordinatesCustom.cpp"
@@ -54661,6 +61692,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSCSSRuleCustom.cpp"
@@ -54713,6 +61752,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSCSSRuleListCustom.cpp"
@@ -54765,6 +61812,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSCSSStyleDeclarationCustom.cpp"
@@ -54817,6 +61872,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSCSSValueCustom.cpp"
@@ -54869,6 +61932,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSCustomPositionCallback.cpp"
@@ -54921,6 +61992,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSCustomPositionErrorCallback.cpp"
@@ -54973,6 +62052,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSCustomSQLStatementErrorCallback.cpp"
@@ -55025,6 +62112,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSCustomVoidCallback.cpp"
@@ -55077,6 +62172,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSCustomVoidCallback.h"
@@ -55133,6 +62236,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSCustomXPathNSResolver.h"
@@ -55189,6 +62300,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSDataGridDataSource.cpp"
@@ -55241,6 +62360,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSDebugWrapperSet.cpp"
@@ -55293,6 +62420,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSDebugWrapperSet.h"
@@ -55349,6 +62484,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSDesktopNotificationsCustom.cpp"
@@ -55401,6 +62544,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSDeviceMotionEventCustom.cpp"
@@ -55453,6 +62604,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSDeviceOrientationEventCustom.cpp"
@@ -55505,6 +62664,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSDirectoryEntryCustom.cpp"
@@ -55565,6 +62732,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSDOMApplicationCacheCustom.cpp"
@@ -55617,6 +62792,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSDOMBinding.cpp"
@@ -55669,6 +62852,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSDOMBinding.h"
@@ -55725,6 +62916,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSDOMGlobalObject.cpp"
@@ -55777,6 +62976,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSDOMGlobalObject.h"
@@ -55833,6 +63040,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSDOMPluginArrayCustom.cpp"
@@ -55885,6 +63100,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSDOMPluginCustom.cpp"
@@ -55937,6 +63160,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSDOMStringMapCustom.cpp"
@@ -55989,6 +63220,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSDOMStringMapCustom.h"
@@ -56045,6 +63284,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSDOMWindowBase.h"
@@ -56101,6 +63348,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSDOMWindowCustom.h"
@@ -56157,6 +63412,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSDOMWindowShell.h"
@@ -56213,6 +63476,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSDOMWrapper.h"
@@ -56269,6 +63540,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSEntryCustom.cpp"
@@ -56329,6 +63608,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSEventListener.cpp"
@@ -56381,6 +63668,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSEventListener.h"
@@ -56437,6 +63732,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSEventTarget.cpp"
@@ -56489,6 +63792,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSEventTarget.h"
@@ -56545,6 +63856,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSExceptionBase.h"
@@ -56605,6 +63924,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSHistoryCustom.cpp"
@@ -56657,6 +63984,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSHTMLAllCollectionCustom.cpp"
@@ -56709,6 +64044,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSHTMLAppletElementCustom.cpp"
@@ -56761,6 +64104,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSHTMLCanvasElementCustom.cpp"
@@ -56813,6 +64164,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSHTMLCollectionCustom.cpp"
@@ -56865,6 +64224,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSHTMLDataGridElementCustom.cpp"
@@ -56917,6 +64284,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSHTMLDocumentCustom.cpp"
@@ -56969,6 +64344,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSHTMLElementCustom.cpp"
@@ -57021,6 +64404,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSHTMLEmbedElementCustom.cpp"
@@ -57073,6 +64464,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSHTMLFormElementCustom.cpp"
@@ -57125,6 +64524,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSHTMLFrameElementCustom.cpp"
@@ -57177,6 +64584,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSHTMLFrameSetElementCustom.cpp"
@@ -57229,6 +64644,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSHTMLInputElementCustom.cpp"
@@ -57281,6 +64704,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSHTMLInputElementCustom.h"
@@ -57337,6 +64768,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSHTMLOptionsCollectionCustom.cpp"
@@ -57389,6 +64828,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSHTMLOutputElementCustom.cpp"
@@ -57441,6 +64888,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSHTMLSelectElementCustom.cpp"
@@ -57493,6 +64948,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSHTMLSelectElementCustom.h"
@@ -57549,6 +65012,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBAny.h"
@@ -57605,6 +65076,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBCursor.cpp"
@@ -57657,6 +65136,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBCursor.h"
@@ -57709,6 +65196,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBDatabase.cpp"
@@ -57761,6 +65256,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBDatabase.cpp"
@@ -57813,6 +65316,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBDatabase.h"
@@ -57873,6 +65384,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBDatabaseError.h"
@@ -57929,6 +65448,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBDatabaseException.h"
@@ -57985,6 +65512,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBErrorEvent.h"
@@ -58045,6 +65580,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBFactory.h"
@@ -58101,6 +65644,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBIndex.h"
@@ -58157,6 +65708,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBKey.h"
@@ -58213,6 +65772,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBKeyRange.cpp"
@@ -58265,6 +65832,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBKeyRange.h"
@@ -58321,6 +65896,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBObjectStore.cpp"
@@ -58373,6 +65956,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBObjectStore.h"
@@ -58429,6 +66020,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBRequest.h"
@@ -58485,6 +66084,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBSuccessEvent.h"
@@ -58541,6 +66148,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBTransaction.h"
@@ -58597,6 +66212,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSImageConstructor.h"
@@ -58653,6 +66276,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSInjectedScriptHostCustom.cpp"
@@ -58705,6 +66336,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSInspectorFrontendHostCustom.cpp"
@@ -58757,6 +66396,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSJavaScriptCallFrameCustom.cpp"
@@ -58809,6 +66456,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSLazyEventListener.cpp"
@@ -58861,6 +66516,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSLazyEventListener.h"
@@ -58917,6 +66580,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSMainThreadExecState.cpp"
@@ -58969,6 +66640,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSMainThreadExecState.h"
@@ -59025,6 +66704,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSMessageEventCustom.cpp"
@@ -59077,6 +66764,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSMessagePortCustom.cpp"
@@ -59129,6 +66824,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSMessagePortCustom.h"
@@ -59185,6 +66888,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSNavigatorCustom.cpp"
@@ -59237,6 +66948,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSNodeCustom.cpp"
@@ -59289,6 +67008,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSNodeCustom.h"
@@ -59345,6 +67072,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSNodeFilterCondition.h"
@@ -59401,6 +67136,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSNodeIteratorCustom.cpp"
@@ -59453,6 +67196,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSNodeListCustom.cpp"
@@ -59505,6 +67256,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSOptionConstructor.cpp"
@@ -59557,6 +67316,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSOptionConstructor.h"
@@ -59613,6 +67380,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSPluginElementFunctions.h"
@@ -59669,6 +67444,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSScriptProfileNodeCustom.cpp"
@@ -59721,6 +67504,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSSharedWorkerCustom.cpp"
@@ -59773,6 +67564,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSSQLResultSetRowListCustom.cpp"
@@ -59825,6 +67624,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSSQLTransactionCustom.cpp"
@@ -59877,6 +67684,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSSQLTransactionSyncCustom.cpp"
@@ -59929,6 +67744,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSStorageCustom.cpp"
@@ -59981,6 +67804,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSStyleSheetCustom.cpp"
@@ -60033,6 +67864,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSStyleSheetListCustom.cpp"
@@ -60085,6 +67924,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSSVGContextCache.h"
@@ -60141,6 +67988,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSSVGLengthCustom.cpp"
@@ -60193,52 +68048,8 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
- </File>
- <File
- RelativePath="..\bindings\js\JSSVGMatrixCustom.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"
+ Name="Release_LTCG|Win32"
ExcludedFromBuild="true"
>
<Tool
@@ -60297,6 +68108,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSSVGPathSegListCustom.cpp"
@@ -60349,6 +68168,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSSVGPODListCustom.h"
@@ -60409,6 +68236,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSTreeWalkerCustom.cpp"
@@ -60461,6 +68296,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSWebKitCSSMatrixCustom.cpp"
@@ -60513,6 +68356,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSWebKitPointCustom.cpp"
@@ -60565,6 +68416,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSWebSocketCustom.cpp"
@@ -60617,6 +68476,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSWorkerContextBase.cpp"
@@ -60669,6 +68536,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSWorkerContextBase.h"
@@ -60725,6 +68600,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSWorkerContextErrorHandler.cpp"
@@ -60777,6 +68660,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSWorkerContextErrorHandler.h"
@@ -60833,6 +68724,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSXMLHttpRequestUploadCustom.cpp"
@@ -60885,6 +68784,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\JSXSLTProcessorCustom.cpp"
@@ -60937,6 +68844,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\ScheduledAction.cpp"
@@ -60989,6 +68904,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\ScheduledAction.h"
@@ -61045,6 +68968,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\ScriptCachedFrameData.h"
@@ -61101,6 +69032,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\ScriptCallStackFactory.h"
@@ -61157,6 +69096,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\ScriptController.h"
@@ -61213,6 +69160,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\ScriptEventListener.cpp"
@@ -61265,6 +69220,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\ScriptEventListener.h"
@@ -61321,6 +69284,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\ScriptFunctionCall.h"
@@ -61377,6 +69348,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\ScriptGCEvent.h"
@@ -61461,6 +69440,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\ScriptState.h"
@@ -61533,6 +69520,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\SerializedScriptValue.h"
@@ -61597,6 +69592,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\bindings\js\WorkerScriptController.h"
@@ -61828,6 +69831,10 @@
>
</File>
<File
+ RelativePath="..\svg\SVGAnimatedTransformList.h"
+ >
+ </File>
+ <File
RelativePath="..\svg\SVGAnimateElement.h"
>
</File>
@@ -62074,6 +70081,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\svg\SVGFontFaceElement.h"
@@ -62154,6 +70169,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\svg\SVGGlyphElement.h"
@@ -62218,6 +70241,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\svg\SVGHKernElement.h"
@@ -62318,12 +70349,24 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\svg\SVGMaskElement.h"
>
</File>
<File
+ RelativePath="..\svg\SVGMatrix.h"
+ >
+ </File>
+ <File
RelativePath="..\svg\SVGMetadataElement.h"
>
</File>
@@ -62562,6 +70605,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\svg\SVGStyledElement.h"
@@ -62626,6 +70677,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\svg\SVGStyleElement.h"
@@ -62762,6 +70821,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\svg\SVGVKernElement.h"
@@ -62875,6 +70942,10 @@
>
</File>
<File
+ RelativePath="..\svg\properties\SVGAnimatedTransformListPropertyTearOff.h"
+ >
+ </File>
+ <File
RelativePath="..\svg\properties\SVGListProperty.h"
>
</File>
@@ -62902,6 +70973,14 @@
RelativePath="..\svg\properties\SVGStaticPropertyTearOff.h"
>
</File>
+ <File
+ RelativePath="..\svg\properties\SVGStaticPropertyWithParentTearOff.h"
+ >
+ </File>
+ <File
+ RelativePath="..\svg\properties\SVGTransformListPropertyTearOff.h"
+ >
+ </File>
</Filter>
</Filter>
<Filter
@@ -63944,11 +72023,11 @@
>
</File>
<File
- RelativePath="..\inspector\InspectorFileSystemAgent.h"
+ RelativePath="..\inspector\InspectorFileSystemAgent.cpp"
>
</File>
<File
- RelativePath="..\inspector\InspectorFileSystemAgent.cpp"
+ RelativePath="..\inspector\InspectorFileSystemAgent.h"
>
</File>
<File
@@ -64391,6 +72470,10 @@
>
</File>
<File
+ RelativePath="..\inspector\front-end\ResourcesPanel.js"
+ >
+ </File>
+ <File
RelativePath="..\inspector\front-end\ResourceView.js"
>
</File>
@@ -64459,10 +72542,6 @@
>
</File>
<File
- RelativePath="..\inspector\front-end\StoragePanel.js"
- >
- </File>
- <File
RelativePath="..\inspector\front-end\StylesSidebarPane.js"
>
</File>
@@ -64830,6 +72909,14 @@
DisableSpecificWarnings="4819"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ DisableSpecificWarnings="4819"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\wml\WMLSelectElement.h"
diff --git a/WebCore/WebCore.vcproj/WebCoreCairo.vsprops b/WebCore/WebCore.vcproj/WebCoreCairo.vsprops
index 8c2e770..adc4548 100644
--- a/WebCore/WebCore.vcproj/WebCoreCairo.vsprops
+++ b/WebCore/WebCore.vcproj/WebCoreCairo.vsprops
@@ -6,6 +6,6 @@
>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(ProjectDir)..\platform\graphics\cairo&quot;;&quot;$(ProjectDir)..\svg\graphics\cairo&quot;;&quot;$(ProjectDir)..\platform\image-decoders&quot;;&quot;$(ProjectDir)..\platform\image-decoders\bmp&quot;;&quot;$(ProjectDir)..\platform\image-decoders\cairo&quot;;&quot;$(ProjectDir)..\platform\image-decoders\gif&quot;;&quot;$(ProjectDir)..\platform\image-decoders\ico&quot;;&quot;$(ProjectDir)..\platform\image-decoders\jpeg&quot;;&quot;$(ProjectDir)..\platform\image-decoders\png&quot;;&quot;$(ProjectDir)..\platform\image-decoders\webp&quot;;&quot;$(WebKitLibrariesDir)\include\cairo&quot;"
+ AdditionalIncludeDirectories="&quot;$(ProjectDir)..\platform\graphics\cairo&quot;;&quot;$(ProjectDir)..\platform\graphics\win\cairo&quot;;&quot;$(ProjectDir)..\svg\graphics\cairo&quot;;&quot;$(ProjectDir)..\platform\image-decoders&quot;;&quot;$(ProjectDir)..\platform\image-decoders\bmp&quot;;&quot;$(ProjectDir)..\platform\image-decoders\cairo&quot;;&quot;$(ProjectDir)..\platform\image-decoders\gif&quot;;&quot;$(ProjectDir)..\platform\image-decoders\ico&quot;;&quot;$(ProjectDir)..\platform\image-decoders\jpeg&quot;;&quot;$(ProjectDir)..\platform\image-decoders\png&quot;;&quot;$(ProjectDir)..\platform\image-decoders\webp&quot;;&quot;$(WebKitLibrariesDir)\include\cairo&quot;"
/>
</VisualStudioPropertySheet>
diff --git a/WebCore/WebCore.vcproj/copyForwardingHeaders.cmd b/WebCore/WebCore.vcproj/copyForwardingHeaders.cmd
index d9d45b5..57ccb7b 100755
--- a/WebCore/WebCore.vcproj/copyForwardingHeaders.cmd
+++ b/WebCore/WebCore.vcproj/copyForwardingHeaders.cmd
@@ -39,6 +39,7 @@ xcopy /y /d "%ProjectDir%..\platform\graphics\*.h" "%WebKitOutputDir%\include\We
xcopy /y /d "%ProjectDir%..\platform\graphics\%1\*.h" "%WebKitOutputDir%\include\WebCore"
xcopy /y /d "%ProjectDir%..\platform\graphics\transforms\*.h" "%WebKitOutputDir%\include\WebCore"
xcopy /y /d "%ProjectDir%..\platform\graphics\win\*.h" "%WebKitOutputDir%\include\WebCore"
+xcopy /y /d "%ProjectDir%..\platform\graphics\win\%1\*.h" "%WebKitOutputDir%\include\WebCore"
xcopy /y /d "%ProjectDir%..\platform\graphics\opentype\*.h" "%WebKitOutputDir%\include\WebCore"
xcopy /y /d "%ProjectDir%..\platform\text\*.h" "%WebKitOutputDir%\include\WebCore"
xcopy /y /d "%ProjectDir%..\platform\text\transcoder\*.h" "%WebKitOutputDir%\include\WebCore"
diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj
index b7e5d48..8ac2d7e 100644
--- a/WebCore/WebCore.xcodeproj/project.pbxproj
+++ b/WebCore/WebCore.xcodeproj/project.pbxproj
@@ -36,6 +36,7 @@
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, ); }; };
+ 05FD69E012845D4300B2BEB3 /* DOMTimeStamp.h in Headers */ = {isa = PBXBuildFile; fileRef = 05FD69DF12845D4300B2BEB3 /* DOMTimeStamp.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, ); }; };
@@ -59,6 +60,7 @@
080081970ED3B2DD00C53BC0 /* WMLAnchorElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 080081950ED3B2DD00C53BC0 /* WMLAnchorElement.h */; };
0804BF6E0EE09C3B0006C000 /* WMLDoElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0804BF6C0EE09C3B0006C000 /* WMLDoElement.cpp */; };
0804BF6F0EE09C3B0006C000 /* WMLDoElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 0804BF6D0EE09C3B0006C000 /* WMLDoElement.h */; };
+ 0806E57A12893045007CED32 /* SVGMatrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 0806E57912893045007CED32 /* SVGMatrix.h */; settings = {ATTRIBUTES = (Private, ); }; };
08082373117987C100241DE8 /* RenderSVGResourceContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 08082372117987C100241DE8 /* RenderSVGResourceContainer.h */; };
080AEC810ED8708B00DF4CCE /* WMLIntrinsicEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 080AEC7D0ED8708A00DF4CCE /* WMLIntrinsicEvent.cpp */; };
080AEC820ED8708B00DF4CCE /* WMLIntrinsicEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 080AEC7E0ED8708B00DF4CCE /* WMLIntrinsicEvent.h */; };
@@ -94,6 +96,7 @@
082341C50FCF3A9500D75BD6 /* WMLSelectElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 082341C30FCF3A9400D75BD6 /* WMLSelectElement.cpp */; };
082341C60FCF3A9500D75BD6 /* WMLSelectElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 082341C40FCF3A9400D75BD6 /* WMLSelectElement.h */; };
0823D159127AD6AC000EBC95 /* SVGAnimatedInteger.h in Headers */ = {isa = PBXBuildFile; fileRef = 0823D158127AD6AC000EBC95 /* SVGAnimatedInteger.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 08250939128BD4D800E2ED8E /* SVGAnimatedTransformList.h in Headers */ = {isa = PBXBuildFile; fileRef = 08250938128BD4D800E2ED8E /* SVGAnimatedTransformList.h */; settings = {ATTRIBUTES = (Private, ); }; };
082FCAC4110927CE00CC4821 /* JSSVGContextCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 082FCAC3110927CE00CC4821 /* JSSVGContextCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
083192AA112B43050083C3B9 /* RenderSVGResource.h in Headers */ = {isa = PBXBuildFile; fileRef = 083192A7112B43050083C3B9 /* RenderSVGResource.h */; };
083192AB112B43050083C3B9 /* RenderSVGResourceMasker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 083192A8112B43050083C3B9 /* RenderSVGResourceMasker.cpp */; };
@@ -142,6 +145,7 @@
08563BD0117865F50012B578 /* RenderSVGResource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08563BCF117865F50012B578 /* RenderSVGResource.cpp */; };
085797091278394C00A8EC5F /* SVGAnimatedBoolean.h in Headers */ = {isa = PBXBuildFile; fileRef = 085797081278394C00A8EC5F /* SVGAnimatedBoolean.h */; settings = {ATTRIBUTES = (Private, ); }; };
08591AA50F085C4E009BACB1 /* InputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 08591AA40F085C4E009BACB1 /* InputElement.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 085A15931289A8DD002710E3 /* SVGAnimatedTransformListPropertyTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 085A15921289A8DD002710E3 /* SVGAnimatedTransformListPropertyTearOff.h */; settings = {ATTRIBUTES = (Private, ); }; };
085AFDC80F2977350061F2B3 /* WMLFormControlElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 085AFDC60F2977350061F2B3 /* WMLFormControlElement.cpp */; };
085AFDC90F2977350061F2B3 /* WMLFormControlElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 085AFDC70F2977350061F2B3 /* WMLFormControlElement.h */; settings = {ATTRIBUTES = (); }; };
085B05C211FAE16C004D65F6 /* SVGResourcesCycleSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 085B05C011FAE16C004D65F6 /* SVGResourcesCycleSolver.cpp */; };
@@ -233,10 +237,12 @@
08C4C51B0EF19A4000E4840F /* WMLImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C4C5170EF19A4000E4840F /* WMLImageLoader.h */; };
08C6A7AB117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08C6A7A9117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.cpp */; };
08C6A7AC117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C6A7AA117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.h */; };
+ 08C7136E128956A3001B107E /* SVGTransformListPropertyTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C7136D128956A3001B107E /* SVGTransformListPropertyTearOff.h */; settings = {ATTRIBUTES = (Private, ); }; };
08C7A2C710DC7462002D368B /* SVGNames.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 656581E909D1508D000E61D7 /* SVGNames.h */; };
08C859C01274575400A5728D /* SVGAnimatedRect.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C859BF1274575300A5728D /* SVGAnimatedRect.h */; settings = {ATTRIBUTES = (Private, ); }; };
08C925190FCC7C4A00480DEC /* FilterEffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08C925170FCC7C4A00480DEC /* FilterEffect.cpp */; };
08C9251A0FCC7C4A00480DEC /* FilterEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C925180FCC7C4A00480DEC /* FilterEffect.h */; };
+ 08CA3D4412894A3800FFF260 /* SVGStaticPropertyWithParentTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 08CA3D4312894A3800FFF260 /* SVGStaticPropertyWithParentTearOff.h */; settings = {ATTRIBUTES = (Private, ); }; };
08CD61BC0ED3929C002DDF51 /* WMLTaskElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08CD61B80ED3929C002DDF51 /* WMLTaskElement.cpp */; };
08CD61BD0ED3929C002DDF51 /* WMLTaskElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 08CD61B90ED3929C002DDF51 /* WMLTaskElement.h */; };
08D46CE3127AD5FC0089694B /* SVGAnimatedEnumeration.h in Headers */ = {isa = PBXBuildFile; fileRef = 08D46CE2127AD5FC0089694B /* SVGAnimatedEnumeration.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -280,8 +286,6 @@
0F500AB10F54DB3100EEF928 /* TransformState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F500AB00F54DB3100EEF928 /* TransformState.cpp */; };
0F56028F0E4B76580065B038 /* RenderMarquee.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F56028D0E4B76580065B038 /* RenderMarquee.h */; };
0F5602900E4B76580065B038 /* RenderMarquee.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F56028E0E4B76580065B038 /* RenderMarquee.cpp */; };
- 0F580B050F12A2550051D689 /* GraphicsLayerCA.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0F580B030F12A2540051D689 /* GraphicsLayerCA.mm */; };
- 0F580B060F12A2550051D689 /* GraphicsLayerCA.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F580B040F12A2550051D689 /* GraphicsLayerCA.h */; };
0F580B0C0F12A2690051D689 /* GraphicsLayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F580B090F12A2690051D689 /* GraphicsLayer.cpp */; };
0F580B0D0F12A2690051D689 /* GraphicsLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F580B0A0F12A2690051D689 /* GraphicsLayer.h */; settings = {ATTRIBUTES = (Private, ); }; };
0F580B0E0F12A2690051D689 /* GraphicsLayerClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F580B0B0F12A2690051D689 /* GraphicsLayerClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -891,12 +895,18 @@
37F818FD0D657606005E1F05 /* WebCoreURLResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 37F818FB0D657606005E1F05 /* WebCoreURLResponse.h */; settings = {ATTRIBUTES = (Private, ); }; };
37F818FE0D657606005E1F05 /* WebCoreURLResponse.mm in Sources */ = {isa = PBXBuildFile; fileRef = 37F818FC0D657606005E1F05 /* WebCoreURLResponse.mm */; };
37FD4298118368460093C029 /* TreeDepthLimit.h in Headers */ = {isa = PBXBuildFile; fileRef = 37FD4297118368460093C029 /* TreeDepthLimit.h */; };
+ 3888F6EE128C9889000CA8E0 /* InspectorFileSystemAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3888F6EC128C9889000CA8E0 /* InspectorFileSystemAgent.cpp */; };
+ 3888F6EF128C9889000CA8E0 /* InspectorFileSystemAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3888F6ED128C9889000CA8E0 /* InspectorFileSystemAgent.h */; };
41002CCD0F66EDEF009E660D /* ScriptFunctionCall.h in Headers */ = {isa = PBXBuildFile; fileRef = 41002CCB0F66EDEF009E660D /* ScriptFunctionCall.h */; };
41002CCE0F66EDEF009E660D /* ScriptFunctionCall.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41002CCC0F66EDEF009E660D /* ScriptFunctionCall.cpp */; };
410B7E721045FAB000D8224F /* JSMessageEventCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 410B7E711045FAB000D8224F /* JSMessageEventCustom.cpp */; };
411046410FA222A600BA436A /* ScriptEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 4110463F0FA222A600BA436A /* ScriptEventListener.h */; };
411046420FA222A600BA436A /* ScriptEventListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 411046400FA222A600BA436A /* ScriptEventListener.cpp */; };
+ 4123E569127B3041000FEEA7 /* WindowEventContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 4123E567127B3041000FEEA7 /* WindowEventContext.h */; };
+ 4123E56A127B3041000FEEA7 /* WindowEventContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4123E568127B3041000FEEA7 /* WindowEventContext.cpp */; };
4127D5370F8AAB1D00E424F5 /* ScriptState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4127D5360F8AAB1D00E424F5 /* ScriptState.cpp */; };
+ 4138D3351244054800323D33 /* EventContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 4138D3331244054800323D33 /* EventContext.h */; };
+ 4138D3361244054800323D33 /* EventContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4138D3341244054800323D33 /* EventContext.cpp */; };
4162A450101145AE00DFF3ED /* DedicatedWorkerContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4162A44D101145AE00DFF3ED /* DedicatedWorkerContext.cpp */; };
4162A451101145AE00DFF3ED /* DedicatedWorkerContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 4162A44E101145AE00DFF3ED /* DedicatedWorkerContext.h */; };
4162A454101145E300DFF3ED /* JSDedicatedWorkerContextCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4162A453101145E300DFF3ED /* JSDedicatedWorkerContextCustom.cpp */; };
@@ -961,6 +971,8 @@
4614A1FE0B23A8D600446E1C /* copyCursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 4614A1FD0B23A8D600446E1C /* copyCursor.png */; };
464EA2730B8A350B00A8E6E3 /* crossHairCursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 464EA2710B8A350B00A8E6E3 /* crossHairCursor.png */; };
464EA2740B8A350B00A8E6E3 /* notAllowedCursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 464EA2720B8A350B00A8E6E3 /* notAllowedCursor.png */; };
+ 46700ED0127B96CB00F5D5D6 /* FileWriterSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 46700ECE127B96CB00F5D5D6 /* FileWriterSync.cpp */; };
+ 46700ED1127B96CB00F5D5D6 /* FileWriterSync.h in Headers */ = {isa = PBXBuildFile; fileRef = 46700ECF127B96CB00F5D5D6 /* FileWriterSync.h */; };
4689F1AF1267BAE100E8D380 /* FileMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 4689F1AE1267BAE100E8D380 /* FileMetadata.h */; };
46BD16E30B279473001F0839 /* noneCursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 46BD16E20B279473001F0839 /* noneCursor.png */; };
46D4F2490AF97E810035385A /* cellCursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 46D4F2460AF97E810035385A /* cellCursor.png */; };
@@ -1014,6 +1026,8 @@
498770F21242C535002226BA /* TilingData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 498770D91242C535002226BA /* TilingData.cpp */; };
498770F31242C535002226BA /* TilingData.h in Headers */ = {isa = PBXBuildFile; fileRef = 498770DA1242C535002226BA /* TilingData.h */; };
498771531243F9FA002226BA /* DrawingBufferMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 498771521243F9FA002226BA /* DrawingBufferMac.mm */; };
+ 499B3C59128C641E00E726C2 /* GraphicsLayerMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 499B3C57128C641E00E726C2 /* GraphicsLayerMac.h */; };
+ 499B3C5A128C641E00E726C2 /* GraphicsLayerMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 499B3C58128C641E00E726C2 /* GraphicsLayerMac.mm */; };
49B69E5E1254FEED007D57EB /* LoopBlinnClassifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49B69E551254FEED007D57EB /* LoopBlinnClassifier.cpp */; };
49B69E5F1254FEED007D57EB /* LoopBlinnClassifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 49B69E561254FEED007D57EB /* LoopBlinnClassifier.h */; };
49B69E601254FEED007D57EB /* LoopBlinnConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 49B69E571254FEED007D57EB /* LoopBlinnConstants.h */; };
@@ -2627,17 +2641,17 @@
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 */; };
+ 8A9A587011E84C36008ACFD1 /* JSPerformanceNavigation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8A9A586E11E84C35008ACFD1 /* JSPerformanceNavigation.cpp */; };
+ 8A9A587111E84C36008ACFD1 /* JSPerformanceNavigation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A9A586F11E84C36008ACFD1 /* JSPerformanceNavigation.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 */; };
+ 8A9A588711E84F37008ACFD1 /* JSPerformanceTiming.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8A9A587611E84C98008ACFD1 /* JSPerformanceTiming.cpp */; };
+ 8A9A588811E84F37008ACFD1 /* JSPerformanceTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A9A587711E84C98008ACFD1 /* JSPerformanceTiming.h */; };
8AB4BC77126FDB7100DEB727 /* IgnoreDestructiveWriteCountIncrementer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AB4BC76126FDB7100DEB727 /* IgnoreDestructiveWriteCountIncrementer.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 */; };
- 8AF4E55C11DC5A63000ED3DE /* Timing.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AF4E55911DC5A63000ED3DE /* Timing.h */; };
+ 8AF4E55511DC5A36000ED3DE /* PerformanceNavigation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8AF4E55211DC5A36000ED3DE /* PerformanceNavigation.cpp */; };
+ 8AF4E55611DC5A36000ED3DE /* PerformanceNavigation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AF4E55311DC5A36000ED3DE /* PerformanceNavigation.h */; };
+ 8AF4E55B11DC5A63000ED3DE /* PerformanceTiming.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8AF4E55811DC5A63000ED3DE /* PerformanceTiming.cpp */; };
+ 8AF4E55C11DC5A63000ED3DE /* PerformanceTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AF4E55911DC5A63000ED3DE /* PerformanceTiming.h */; };
8C6EA61911EF7E0400FD8EE3 /* RuntimeEnabledFeatures.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C6EA61711EF7E0400FD8EE3 /* RuntimeEnabledFeatures.cpp */; };
8C6EA61A11EF7E0400FD8EE3 /* RuntimeEnabledFeatures.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C6EA61811EF7E0400FD8EE3 /* RuntimeEnabledFeatures.h */; };
8FAC774D119872CB0015AE94 /* JSMainThreadExecState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F934D841189F1EE00508D5D /* JSMainThreadExecState.cpp */; };
@@ -4223,7 +4237,6 @@
B25599A30D00D8BA00BB825C /* SVGImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B255990B0D00D8B900BB825C /* SVGImage.cpp */; };
B25599A40D00D8BA00BB825C /* SVGImage.h in Headers */ = {isa = PBXBuildFile; fileRef = B255990C0D00D8B900BB825C /* SVGImage.h */; };
B25599A50D00D8BA00BB825C /* EmptyClients.h in Headers */ = {isa = PBXBuildFile; fileRef = B255990D0D00D8B900BB825C /* EmptyClients.h */; };
- B25DFAAF0B2E2929000E6510 /* JSSVGMatrixCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B25DFAAE0B2E2929000E6510 /* JSSVGMatrixCustom.cpp */; };
B262B8040D1F32D000158F09 /* SVGFont.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B262B8030D1F32D000158F09 /* SVGFont.cpp */; };
B266CD4D0C3AEC6500EB08D2 /* JSSVGException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B266CD4B0C3AEC6500EB08D2 /* JSSVGException.cpp */; };
B266CD4E0C3AEC6500EB08D2 /* JSSVGException.h in Headers */ = {isa = PBXBuildFile; fileRef = B266CD4C0C3AEC6500EB08D2 /* JSSVGException.h */; };
@@ -4819,7 +4832,7 @@
BC53DAC711433064000D817E /* JSDOMWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC53DAC611433064000D817E /* JSDOMWrapper.cpp */; };
BC56CB2110D5AC8000A77C64 /* GeolocationController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC56CB1C10D5AC8000A77C64 /* GeolocationController.cpp */; };
BC56CB2210D5AC8000A77C64 /* GeolocationController.h in Headers */ = {isa = PBXBuildFile; fileRef = BC56CB1D10D5AC8000A77C64 /* GeolocationController.h */; settings = {ATTRIBUTES = (Private, ); }; };
- BC56CB2310D5AC8000A77C64 /* GeolocationControllerClient.h in Headers */ = {isa = PBXBuildFile; fileRef = BC56CB1E10D5AC8000A77C64 /* GeolocationControllerClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ BC56CB2310D5AC8000A77C64 /* GeolocationClient.h in Headers */ = {isa = PBXBuildFile; fileRef = BC56CB1E10D5AC8000A77C64 /* GeolocationClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
BC56CB2410D5AC8000A77C64 /* GeolocationError.h in Headers */ = {isa = PBXBuildFile; fileRef = BC56CB1F10D5AC8000A77C64 /* GeolocationError.h */; settings = {ATTRIBUTES = (Private, ); }; };
BC56CB2510D5AC8000A77C64 /* GeolocationPosition.h in Headers */ = {isa = PBXBuildFile; fileRef = BC56CB2010D5AC8000A77C64 /* GeolocationPosition.h */; settings = {ATTRIBUTES = (Private, ); }; };
BC5823F50C0A98DF0053F1B5 /* JSHTMLElementCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC5823F40C0A98DF0053F1B5 /* JSHTMLElementCustom.cpp */; };
@@ -4902,16 +4915,6 @@
BC64B4DA0CB4298A005F2B62 /* CSSFontFaceSrcValue.h in Headers */ = {isa = PBXBuildFile; fileRef = BC64B4D20CB4298A005F2B62 /* CSSFontFaceSrcValue.h */; };
BC64B4DB0CB4298A005F2B62 /* CSSFontSelector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC64B4D30CB4298A005F2B62 /* CSSFontSelector.cpp */; };
BC64B4DC0CB4298A005F2B62 /* CSSFontSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = BC64B4D40CB4298A005F2B62 /* CSSFontSelector.h */; };
- BC686C7C0E0C330100DE8A08 /* JSCSSVariablesDeclaration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC686C780E0C330100DE8A08 /* JSCSSVariablesDeclaration.cpp */; };
- BC686C7D0E0C330100DE8A08 /* JSCSSVariablesDeclaration.h in Headers */ = {isa = PBXBuildFile; fileRef = BC686C790E0C330100DE8A08 /* JSCSSVariablesDeclaration.h */; };
- BC686C7E0E0C330100DE8A08 /* JSCSSVariablesRule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC686C7A0E0C330100DE8A08 /* JSCSSVariablesRule.cpp */; };
- BC686C7F0E0C330100DE8A08 /* JSCSSVariablesRule.h in Headers */ = {isa = PBXBuildFile; fileRef = BC686C7B0E0C330100DE8A08 /* JSCSSVariablesRule.h */; };
- BC686CB20E0C343900DE8A08 /* DOMCSSVariablesDeclaration.h in Headers */ = {isa = PBXBuildFile; fileRef = BC686CAC0E0C343900DE8A08 /* DOMCSSVariablesDeclaration.h */; };
- BC686CB30E0C343900DE8A08 /* DOMCSSVariablesDeclaration.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC686CAD0E0C343900DE8A08 /* DOMCSSVariablesDeclaration.mm */; };
- BC686CB50E0C343900DE8A08 /* DOMCSSVariablesRule.h in Headers */ = {isa = PBXBuildFile; fileRef = BC686CAF0E0C343900DE8A08 /* DOMCSSVariablesRule.h */; };
- BC686CB60E0C343900DE8A08 /* DOMCSSVariablesRule.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC686CB00E0C343900DE8A08 /* DOMCSSVariablesRule.mm */; };
- BC686CBB0E0C349D00DE8A08 /* DOMCSSVariablesDeclarationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = BC686CB90E0C349D00DE8A08 /* DOMCSSVariablesDeclarationInternal.h */; };
- BC686CBC0E0C349D00DE8A08 /* DOMCSSVariablesRuleInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = BC686CBA0E0C349D00DE8A08 /* DOMCSSVariablesRuleInternal.h */; };
BC6932730D7E293900AE44D1 /* JSDOMWindowBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC6932710D7E293900AE44D1 /* JSDOMWindowBase.cpp */; };
BC6932740D7E293900AE44D1 /* JSDOMWindowBase.h in Headers */ = {isa = PBXBuildFile; fileRef = BC6932720D7E293900AE44D1 /* JSDOMWindowBase.h */; settings = {ATTRIBUTES = (Private, ); }; };
BC6C49F30D7DBA0500FFA558 /* JSImageConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC6C49F10D7DBA0500FFA558 /* JSImageConstructor.cpp */; };
@@ -5013,6 +5016,7 @@
BC9BC64E0E7C4889008B9849 /* ScrollbarClient.h in Headers */ = {isa = PBXBuildFile; fileRef = BC9BC64C0E7C4889008B9849 /* ScrollbarClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
BCA169A20BFD55B40019CA76 /* JSHTMLTableCaptionElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCA169A00BFD55B40019CA76 /* JSHTMLTableCaptionElement.cpp */; };
BCA169A30BFD55B40019CA76 /* JSHTMLTableCaptionElement.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA169A10BFD55B40019CA76 /* JSHTMLTableCaptionElement.h */; };
+ BCA257151293C010007A263D /* VerticalPositionCache.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA257141293C010007A263D /* VerticalPositionCache.h */; };
BCA2B061105047600043BD1C /* UserScript.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA2B0601050475F0043BD1C /* UserScript.h */; settings = {ATTRIBUTES = (Private, ); }; };
BCA2B08B10505BCD0043BD1C /* UserScriptTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA2B08A10505BCD0043BD1C /* UserScriptTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
BCA83E4F0D7CE1E9003421A8 /* JSClipboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCA83E4D0D7CE1E9003421A8 /* JSClipboard.cpp */; };
@@ -5029,6 +5033,8 @@
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, ); }; };
+ BCAE1FA612939DB7004CB026 /* ScrollAnimatorMac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCAE1FA412939DB7004CB026 /* ScrollAnimatorMac.cpp */; };
+ BCAE1FA712939DB7004CB026 /* ScrollAnimatorMac.h in Headers */ = {isa = PBXBuildFile; fileRef = BCAE1FA512939DB7004CB026 /* ScrollAnimatorMac.h */; };
BCAEFCAE1016CE4A0040D34E /* DOMRGBColor.mm in Sources */ = {isa = PBXBuildFile; fileRef = BCAEFCAD1016CE4A0040D34E /* DOMRGBColor.mm */; };
BCB16C170979C3BD00467741 /* MemoryCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCB16BFE0979C3BD00467741 /* MemoryCache.cpp */; };
BCB16C180979C3BD00467741 /* MemoryCache.h in Headers */ = {isa = PBXBuildFile; fileRef = BCB16BFF0979C3BD00467741 /* MemoryCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -5053,6 +5059,7 @@
BCB773610C17853D00132BA4 /* JSNodeFilterCondition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCB7735E0C17853D00132BA4 /* JSNodeFilterCondition.cpp */; };
BCB773620C17853D00132BA4 /* JSNodeFilterCondition.h in Headers */ = {isa = PBXBuildFile; fileRef = BCB7735F0C17853D00132BA4 /* JSNodeFilterCondition.h */; };
BCB773630C17853D00132BA4 /* JSNodeFilterCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCB773600C17853D00132BA4 /* JSNodeFilterCustom.cpp */; };
+ BCB92D4F1293550B00C8387F /* FontBaseline.h in Headers */ = {isa = PBXBuildFile; fileRef = BCB92D4E1293550B00C8387F /* FontBaseline.h */; settings = {ATTRIBUTES = (Private, ); }; };
BCBCAE370FF19385000762AE /* DataGridDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = BCBCAE360FF19385000762AE /* DataGridDataSource.h */; };
BCBCAE3C0FF19399000762AE /* JSDataGridDataSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCBCAE3A0FF19399000762AE /* JSDataGridDataSource.cpp */; };
BCBCAE3D0FF19399000762AE /* JSDataGridDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = BCBCAE3B0FF19399000762AE /* JSDataGridDataSource.h */; };
@@ -5079,12 +5086,6 @@
BCCBAD3B0C18BFF800CE890F /* JSHTMLCollectionCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCCBAD3A0C18BFF800CE890F /* JSHTMLCollectionCustom.cpp */; };
BCCBAD400C18C14200CE890F /* JSHTMLCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCCBAD3E0C18C14200CE890F /* JSHTMLCollection.cpp */; };
BCCBAD410C18C14200CE890F /* JSHTMLCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = BCCBAD3F0C18C14200CE890F /* JSHTMLCollection.h */; };
- BCCBE68A0E06E60D00EAFA8E /* CSSVariablesDeclaration.h in Headers */ = {isa = PBXBuildFile; fileRef = BCCBE6870E06E60D00EAFA8E /* CSSVariablesDeclaration.h */; };
- BCCBE68B0E06E60D00EAFA8E /* CSSVariablesRule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCCBE6880E06E60D00EAFA8E /* CSSVariablesRule.cpp */; };
- BCCBE68C0E06E60D00EAFA8E /* CSSVariablesRule.h in Headers */ = {isa = PBXBuildFile; fileRef = BCCBE6890E06E60D00EAFA8E /* CSSVariablesRule.h */; };
- BCCBE69B0E06F51000EAFA8E /* CSSVariablesDeclaration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCCBE69A0E06F51000EAFA8E /* CSSVariablesDeclaration.cpp */; };
- BCCBE7B20E07159A00EAFA8E /* CSSVariableDependentValue.h in Headers */ = {isa = PBXBuildFile; fileRef = BCCBE7B10E07159A00EAFA8E /* CSSVariableDependentValue.h */; };
- BCCBE7B50E07166900EAFA8E /* CSSVariableDependentValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCCBE7B40E07166900EAFA8E /* CSSVariableDependentValue.cpp */; };
BCCD74DC0A4C8D35005FDA6D /* HTMLViewSourceDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = BCCD74DB0A4C8D35005FDA6D /* HTMLViewSourceDocument.h */; };
BCCD74E50A4C8DDF005FDA6D /* HTMLViewSourceDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCCD74E40A4C8DDF005FDA6D /* HTMLViewSourceDocument.cpp */; };
BCCFBAE80B5152ED0001F1D7 /* DocumentParser.h in Headers */ = {isa = PBXBuildFile; fileRef = BCCFBAE70B5152ED0001F1D7 /* DocumentParser.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -5327,6 +5328,8 @@
D086FE9909D53AAB005BC74D /* UnlinkCommand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D086FE9709D53AAB005BC74D /* UnlinkCommand.cpp */; };
D0B0556809C6700100307E43 /* CreateLinkCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D0B0556609C6700100307E43 /* CreateLinkCommand.h */; };
D0B0556909C6700100307E43 /* CreateLinkCommand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0B0556709C6700100307E43 /* CreateLinkCommand.cpp */; };
+ D0CE58F8125E4CC200F3F199 /* ResourceLoadScheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0CE58F6125E4CC200F3F199 /* ResourceLoadScheduler.cpp */; };
+ D0CE58F9125E4CC200F3F199 /* ResourceLoadScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = D0CE58F7125E4CC200F3F199 /* ResourceLoadScheduler.h */; settings = {ATTRIBUTES = (Private, ); }; };
D0FF2A5D11F8C45A007E74E0 /* PingLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0FF2A5B11F8C45A007E74E0 /* PingLoader.cpp */; };
D0FF2A5E11F8C45A007E74E0 /* PingLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = D0FF2A5C11F8C45A007E74E0 /* PingLoader.h */; };
D23CA55D0AB0EAAE005108A5 /* JSRangeException.h in Headers */ = {isa = PBXBuildFile; fileRef = D23CA55C0AB0EAAE005108A5 /* JSRangeException.h */; };
@@ -6077,6 +6080,7 @@
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>"; };
+ 05FD69DF12845D4300B2BEB3 /* DOMTimeStamp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMTimeStamp.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>"; };
@@ -6103,6 +6107,7 @@
080081950ED3B2DD00C53BC0 /* WMLAnchorElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLAnchorElement.h; sourceTree = "<group>"; };
0804BF6C0EE09C3B0006C000 /* WMLDoElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLDoElement.cpp; sourceTree = "<group>"; };
0804BF6D0EE09C3B0006C000 /* WMLDoElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLDoElement.h; sourceTree = "<group>"; };
+ 0806E57912893045007CED32 /* SVGMatrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGMatrix.h; sourceTree = "<group>"; };
08082372117987C100241DE8 /* RenderSVGResourceContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceContainer.h; sourceTree = "<group>"; };
080AEC7D0ED8708A00DF4CCE /* WMLIntrinsicEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLIntrinsicEvent.cpp; sourceTree = "<group>"; };
080AEC7E0ED8708B00DF4CCE /* WMLIntrinsicEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLIntrinsicEvent.h; sourceTree = "<group>"; };
@@ -6138,6 +6143,7 @@
082341C30FCF3A9400D75BD6 /* WMLSelectElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLSelectElement.cpp; sourceTree = "<group>"; };
082341C40FCF3A9400D75BD6 /* WMLSelectElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLSelectElement.h; sourceTree = "<group>"; };
0823D158127AD6AC000EBC95 /* SVGAnimatedInteger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedInteger.h; sourceTree = "<group>"; };
+ 08250938128BD4D800E2ED8E /* SVGAnimatedTransformList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedTransformList.h; sourceTree = "<group>"; };
082FCAC3110927CE00CC4821 /* JSSVGContextCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSSVGContextCache.h; sourceTree = "<group>"; };
083192A7112B43050083C3B9 /* RenderSVGResource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResource.h; sourceTree = "<group>"; };
083192A8112B43050083C3B9 /* RenderSVGResourceMasker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceMasker.cpp; sourceTree = "<group>"; };
@@ -6184,6 +6190,7 @@
08563BCF117865F50012B578 /* RenderSVGResource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResource.cpp; sourceTree = "<group>"; };
085797081278394C00A8EC5F /* SVGAnimatedBoolean.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedBoolean.h; sourceTree = "<group>"; };
08591AA40F085C4E009BACB1 /* InputElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputElement.h; sourceTree = "<group>"; };
+ 085A15921289A8DD002710E3 /* SVGAnimatedTransformListPropertyTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedTransformListPropertyTearOff.h; sourceTree = "<group>"; };
085AFDC60F2977350061F2B3 /* WMLFormControlElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLFormControlElement.cpp; sourceTree = "<group>"; };
085AFDC70F2977350061F2B3 /* WMLFormControlElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLFormControlElement.h; sourceTree = "<group>"; };
085B05C011FAE16C004D65F6 /* SVGResourcesCycleSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGResourcesCycleSolver.cpp; sourceTree = "<group>"; };
@@ -6263,9 +6270,11 @@
08C4C5170EF19A4000E4840F /* WMLImageLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLImageLoader.h; sourceTree = "<group>"; };
08C6A7A9117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceSolidColor.cpp; sourceTree = "<group>"; };
08C6A7AA117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceSolidColor.h; sourceTree = "<group>"; };
+ 08C7136D128956A3001B107E /* SVGTransformListPropertyTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGTransformListPropertyTearOff.h; sourceTree = "<group>"; };
08C859BF1274575300A5728D /* SVGAnimatedRect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedRect.h; sourceTree = "<group>"; };
08C925170FCC7C4A00480DEC /* FilterEffect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FilterEffect.cpp; path = filters/FilterEffect.cpp; sourceTree = "<group>"; };
08C925180FCC7C4A00480DEC /* FilterEffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FilterEffect.h; path = filters/FilterEffect.h; sourceTree = "<group>"; };
+ 08CA3D4312894A3800FFF260 /* SVGStaticPropertyWithParentTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGStaticPropertyWithParentTearOff.h; sourceTree = "<group>"; };
08CD61B80ED3929C002DDF51 /* WMLTaskElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLTaskElement.cpp; sourceTree = "<group>"; };
08CD61B90ED3929C002DDF51 /* WMLTaskElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLTaskElement.h; sourceTree = "<group>"; };
08D46CE2127AD5FC0089694B /* SVGAnimatedEnumeration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedEnumeration.h; sourceTree = "<group>"; };
@@ -6312,8 +6321,6 @@
0F500AB00F54DB3100EEF928 /* TransformState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransformState.cpp; sourceTree = "<group>"; };
0F56028D0E4B76580065B038 /* RenderMarquee.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMarquee.h; sourceTree = "<group>"; };
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>"; };
- 0F580B040F12A2550051D689 /* GraphicsLayerCA.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GraphicsLayerCA.h; sourceTree = "<group>"; };
0F580B090F12A2690051D689 /* GraphicsLayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GraphicsLayer.cpp; sourceTree = "<group>"; };
0F580B0A0F12A2690051D689 /* GraphicsLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GraphicsLayer.h; sourceTree = "<group>"; };
0F580B0B0F12A2690051D689 /* GraphicsLayerClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GraphicsLayerClient.h; sourceTree = "<group>"; };
@@ -6975,12 +6982,18 @@
37F818FC0D657606005E1F05 /* WebCoreURLResponse.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebCoreURLResponse.mm; sourceTree = "<group>"; };
37FC96DA1104ED71003E1FAD /* TrailingFloatsRootInlineBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TrailingFloatsRootInlineBox.h; sourceTree = "<group>"; };
37FD4297118368460093C029 /* TreeDepthLimit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TreeDepthLimit.h; sourceTree = "<group>"; };
+ 3888F6EC128C9889000CA8E0 /* InspectorFileSystemAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorFileSystemAgent.cpp; sourceTree = "<group>"; };
+ 3888F6ED128C9889000CA8E0 /* InspectorFileSystemAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorFileSystemAgent.h; sourceTree = "<group>"; };
41002CCB0F66EDEF009E660D /* ScriptFunctionCall.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptFunctionCall.h; sourceTree = "<group>"; };
41002CCC0F66EDEF009E660D /* ScriptFunctionCall.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptFunctionCall.cpp; sourceTree = "<group>"; };
410B7E711045FAB000D8224F /* JSMessageEventCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMessageEventCustom.cpp; sourceTree = "<group>"; };
4110463F0FA222A600BA436A /* ScriptEventListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptEventListener.h; sourceTree = "<group>"; };
411046400FA222A600BA436A /* ScriptEventListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptEventListener.cpp; sourceTree = "<group>"; };
+ 4123E567127B3041000FEEA7 /* WindowEventContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WindowEventContext.h; sourceTree = "<group>"; };
+ 4123E568127B3041000FEEA7 /* WindowEventContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WindowEventContext.cpp; sourceTree = "<group>"; };
4127D5360F8AAB1D00E424F5 /* ScriptState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptState.cpp; sourceTree = "<group>"; };
+ 4138D3331244054800323D33 /* EventContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventContext.h; sourceTree = "<group>"; };
+ 4138D3341244054800323D33 /* EventContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EventContext.cpp; sourceTree = "<group>"; };
4162A44D101145AE00DFF3ED /* DedicatedWorkerContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DedicatedWorkerContext.cpp; path = workers/DedicatedWorkerContext.cpp; sourceTree = "<group>"; };
4162A44E101145AE00DFF3ED /* DedicatedWorkerContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DedicatedWorkerContext.h; path = workers/DedicatedWorkerContext.h; sourceTree = "<group>"; };
4162A44F101145AE00DFF3ED /* DedicatedWorkerContext.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = DedicatedWorkerContext.idl; path = workers/DedicatedWorkerContext.idl; sourceTree = "<group>"; };
@@ -7051,6 +7064,8 @@
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>"; };
464EA2720B8A350B00A8E6E3 /* notAllowedCursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = notAllowedCursor.png; sourceTree = "<group>"; };
+ 46700ECE127B96CB00F5D5D6 /* FileWriterSync.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileWriterSync.cpp; path = fileapi/FileWriterSync.cpp; sourceTree = "<group>"; };
+ 46700ECF127B96CB00F5D5D6 /* FileWriterSync.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileWriterSync.h; path = fileapi/FileWriterSync.h; sourceTree = "<group>"; };
4689F1AE1267BAE100E8D380 /* FileMetadata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileMetadata.h; path = platform/FileMetadata.h; sourceTree = "<group>"; };
46BD16E20B279473001F0839 /* noneCursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = noneCursor.png; sourceTree = "<group>"; };
46D4F2460AF97E810035385A /* cellCursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = cellCursor.png; sourceTree = "<group>"; };
@@ -7110,6 +7125,8 @@
498770D91242C535002226BA /* TilingData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TilingData.cpp; path = gpu/TilingData.cpp; sourceTree = "<group>"; };
498770DA1242C535002226BA /* TilingData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TilingData.h; path = gpu/TilingData.h; sourceTree = "<group>"; };
498771521243F9FA002226BA /* DrawingBufferMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = DrawingBufferMac.mm; path = gpu/mac/DrawingBufferMac.mm; sourceTree = "<group>"; };
+ 499B3C57128C641E00E726C2 /* GraphicsLayerMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GraphicsLayerMac.h; sourceTree = "<group>"; };
+ 499B3C58128C641E00E726C2 /* GraphicsLayerMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GraphicsLayerMac.mm; sourceTree = "<group>"; };
49B69E551254FEED007D57EB /* LoopBlinnClassifier.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LoopBlinnClassifier.cpp; path = gpu/LoopBlinnClassifier.cpp; sourceTree = "<group>"; };
49B69E561254FEED007D57EB /* LoopBlinnClassifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LoopBlinnClassifier.h; path = gpu/LoopBlinnClassifier.h; sourceTree = "<group>"; };
49B69E571254FEED007D57EB /* LoopBlinnConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LoopBlinnConstants.h; path = gpu/LoopBlinnConstants.h; sourceTree = "<group>"; };
@@ -8739,19 +8756,19 @@
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>"; };
+ 8A9A586E11E84C35008ACFD1 /* JSPerformanceNavigation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPerformanceNavigation.cpp; sourceTree = "<group>"; };
+ 8A9A586F11E84C36008ACFD1 /* JSPerformanceNavigation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSPerformanceNavigation.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>"; };
+ 8A9A587611E84C98008ACFD1 /* JSPerformanceTiming.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPerformanceTiming.cpp; sourceTree = "<group>"; };
+ 8A9A587711E84C98008ACFD1 /* JSPerformanceTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSPerformanceTiming.h; sourceTree = "<group>"; };
8AB4BC76126FDB7100DEB727 /* IgnoreDestructiveWriteCountIncrementer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IgnoreDestructiveWriteCountIncrementer.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>"; };
- 8AF4E55811DC5A63000ED3DE /* Timing.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Timing.cpp; sourceTree = "<group>"; };
- 8AF4E55911DC5A63000ED3DE /* Timing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Timing.h; sourceTree = "<group>"; };
- 8AF4E55A11DC5A63000ED3DE /* Timing.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Timing.idl; sourceTree = "<group>"; };
+ 8AF4E55211DC5A36000ED3DE /* PerformanceNavigation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PerformanceNavigation.cpp; sourceTree = "<group>"; };
+ 8AF4E55311DC5A36000ED3DE /* PerformanceNavigation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PerformanceNavigation.h; sourceTree = "<group>"; };
+ 8AF4E55411DC5A36000ED3DE /* PerformanceNavigation.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = PerformanceNavigation.idl; sourceTree = "<group>"; };
+ 8AF4E55811DC5A63000ED3DE /* PerformanceTiming.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PerformanceTiming.cpp; sourceTree = "<group>"; };
+ 8AF4E55911DC5A63000ED3DE /* PerformanceTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PerformanceTiming.h; sourceTree = "<group>"; };
+ 8AF4E55A11DC5A63000ED3DE /* PerformanceTiming.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = PerformanceTiming.idl; sourceTree = "<group>"; };
8C6EA61711EF7E0400FD8EE3 /* RuntimeEnabledFeatures.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RuntimeEnabledFeatures.cpp; path = generic/RuntimeEnabledFeatures.cpp; sourceTree = "<group>"; };
8C6EA61811EF7E0400FD8EE3 /* RuntimeEnabledFeatures.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RuntimeEnabledFeatures.h; path = generic/RuntimeEnabledFeatures.h; sourceTree = "<group>"; };
8F934D831189F1EE00508D5D /* JSMainThreadExecState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMainThreadExecState.h; sourceTree = "<group>"; };
@@ -10220,7 +10237,6 @@
B255990B0D00D8B900BB825C /* SVGImage.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGImage.cpp; sourceTree = "<group>"; };
B255990C0D00D8B900BB825C /* SVGImage.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGImage.h; sourceTree = "<group>"; };
B255990D0D00D8B900BB825C /* EmptyClients.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = EmptyClients.h; sourceTree = "<group>"; };
- B25DFAAE0B2E2929000E6510 /* JSSVGMatrixCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGMatrixCustom.cpp; sourceTree = "<group>"; };
B262B8030D1F32D000158F09 /* SVGFont.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGFont.cpp; sourceTree = "<group>"; };
B266CD4B0C3AEC6500EB08D2 /* JSSVGException.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGException.cpp; sourceTree = "<group>"; };
B266CD4C0C3AEC6500EB08D2 /* JSSVGException.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSSVGException.h; sourceTree = "<group>"; };
@@ -10835,7 +10851,7 @@
BC53DAC611433064000D817E /* JSDOMWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMWrapper.cpp; sourceTree = "<group>"; };
BC56CB1C10D5AC8000A77C64 /* GeolocationController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GeolocationController.cpp; sourceTree = "<group>"; };
BC56CB1D10D5AC8000A77C64 /* GeolocationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeolocationController.h; sourceTree = "<group>"; };
- BC56CB1E10D5AC8000A77C64 /* GeolocationControllerClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeolocationControllerClient.h; sourceTree = "<group>"; };
+ BC56CB1E10D5AC8000A77C64 /* GeolocationClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeolocationClient.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>"; };
BC5823F40C0A98DF0053F1B5 /* JSHTMLElementCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLElementCustom.cpp; sourceTree = "<group>"; };
@@ -10925,16 +10941,6 @@
BC64B4D20CB4298A005F2B62 /* CSSFontFaceSrcValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSFontFaceSrcValue.h; sourceTree = "<group>"; };
BC64B4D30CB4298A005F2B62 /* CSSFontSelector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSFontSelector.cpp; sourceTree = "<group>"; };
BC64B4D40CB4298A005F2B62 /* CSSFontSelector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSFontSelector.h; sourceTree = "<group>"; };
- BC686C780E0C330100DE8A08 /* JSCSSVariablesDeclaration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCSSVariablesDeclaration.cpp; sourceTree = "<group>"; };
- BC686C790E0C330100DE8A08 /* JSCSSVariablesDeclaration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCSSVariablesDeclaration.h; sourceTree = "<group>"; };
- BC686C7A0E0C330100DE8A08 /* JSCSSVariablesRule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCSSVariablesRule.cpp; sourceTree = "<group>"; };
- BC686C7B0E0C330100DE8A08 /* JSCSSVariablesRule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCSSVariablesRule.h; sourceTree = "<group>"; };
- BC686CAC0E0C343900DE8A08 /* DOMCSSVariablesDeclaration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMCSSVariablesDeclaration.h; sourceTree = "<group>"; };
- BC686CAD0E0C343900DE8A08 /* DOMCSSVariablesDeclaration.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMCSSVariablesDeclaration.mm; sourceTree = "<group>"; };
- BC686CAF0E0C343900DE8A08 /* DOMCSSVariablesRule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMCSSVariablesRule.h; sourceTree = "<group>"; };
- BC686CB00E0C343900DE8A08 /* DOMCSSVariablesRule.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMCSSVariablesRule.mm; sourceTree = "<group>"; };
- BC686CB90E0C349D00DE8A08 /* DOMCSSVariablesDeclarationInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMCSSVariablesDeclarationInternal.h; sourceTree = "<group>"; };
- BC686CBA0E0C349D00DE8A08 /* DOMCSSVariablesRuleInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMCSSVariablesRuleInternal.h; sourceTree = "<group>"; };
BC6932710D7E293900AE44D1 /* JSDOMWindowBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMWindowBase.cpp; sourceTree = "<group>"; };
BC6932720D7E293900AE44D1 /* JSDOMWindowBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDOMWindowBase.h; sourceTree = "<group>"; };
BC6C49F10D7DBA0500FFA558 /* JSImageConstructor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSImageConstructor.cpp; sourceTree = "<group>"; };
@@ -11045,6 +11051,7 @@
BC9BC64C0E7C4889008B9849 /* ScrollbarClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollbarClient.h; sourceTree = "<group>"; };
BCA169A00BFD55B40019CA76 /* JSHTMLTableCaptionElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLTableCaptionElement.cpp; sourceTree = "<group>"; };
BCA169A10BFD55B40019CA76 /* JSHTMLTableCaptionElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSHTMLTableCaptionElement.h; sourceTree = "<group>"; };
+ BCA257141293C010007A263D /* VerticalPositionCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VerticalPositionCache.h; sourceTree = "<group>"; };
BCA2B0601050475F0043BD1C /* UserScript.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserScript.h; sourceTree = "<group>"; };
BCA2B08A10505BCD0043BD1C /* UserScriptTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserScriptTypes.h; sourceTree = "<group>"; };
BCA378BA0D15F64200B793D6 /* ScheduledAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScheduledAction.cpp; sourceTree = "<group>"; };
@@ -11064,6 +11071,8 @@
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>"; };
+ BCAE1FA412939DB7004CB026 /* ScrollAnimatorMac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollAnimatorMac.cpp; sourceTree = "<group>"; };
+ BCAE1FA512939DB7004CB026 /* ScrollAnimatorMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollAnimatorMac.h; sourceTree = "<group>"; };
BCAEFCAD1016CE4A0040D34E /* DOMRGBColor.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMRGBColor.mm; sourceTree = "<group>"; };
BCB16BFE0979C3BD00467741 /* MemoryCache.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryCache.cpp; sourceTree = "<group>"; };
BCB16BFF0979C3BD00467741 /* MemoryCache.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MemoryCache.h; sourceTree = "<group>"; };
@@ -11088,6 +11097,7 @@
BCB7735E0C17853D00132BA4 /* JSNodeFilterCondition.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSNodeFilterCondition.cpp; sourceTree = "<group>"; };
BCB7735F0C17853D00132BA4 /* JSNodeFilterCondition.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSNodeFilterCondition.h; sourceTree = "<group>"; };
BCB773600C17853D00132BA4 /* JSNodeFilterCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSNodeFilterCustom.cpp; sourceTree = "<group>"; };
+ BCB92D4E1293550B00C8387F /* FontBaseline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FontBaseline.h; sourceTree = "<group>"; };
BCBCAE360FF19385000762AE /* DataGridDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DataGridDataSource.h; sourceTree = "<group>"; };
BCBCAE3A0FF19399000762AE /* JSDataGridDataSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDataGridDataSource.cpp; sourceTree = "<group>"; };
BCBCAE3B0FF19399000762AE /* JSDataGridDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDataGridDataSource.h; sourceTree = "<group>"; };
@@ -11116,12 +11126,6 @@
BCCBAD3A0C18BFF800CE890F /* JSHTMLCollectionCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLCollectionCustom.cpp; sourceTree = "<group>"; };
BCCBAD3E0C18C14200CE890F /* JSHTMLCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLCollection.cpp; sourceTree = "<group>"; };
BCCBAD3F0C18C14200CE890F /* JSHTMLCollection.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSHTMLCollection.h; sourceTree = "<group>"; };
- BCCBE6870E06E60D00EAFA8E /* CSSVariablesDeclaration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSVariablesDeclaration.h; sourceTree = "<group>"; };
- BCCBE6880E06E60D00EAFA8E /* CSSVariablesRule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSVariablesRule.cpp; sourceTree = "<group>"; };
- BCCBE6890E06E60D00EAFA8E /* CSSVariablesRule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSVariablesRule.h; sourceTree = "<group>"; };
- BCCBE69A0E06F51000EAFA8E /* CSSVariablesDeclaration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSVariablesDeclaration.cpp; sourceTree = "<group>"; };
- BCCBE7B10E07159A00EAFA8E /* CSSVariableDependentValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSVariableDependentValue.h; sourceTree = "<group>"; };
- BCCBE7B40E07166900EAFA8E /* CSSVariableDependentValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSVariableDependentValue.cpp; sourceTree = "<group>"; };
BCCD74DB0A4C8D35005FDA6D /* HTMLViewSourceDocument.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = HTMLViewSourceDocument.h; sourceTree = "<group>"; };
BCCD74E40A4C8DDF005FDA6D /* HTMLViewSourceDocument.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLViewSourceDocument.cpp; sourceTree = "<group>"; };
BCCFBAE70B5152ED0001F1D7 /* DocumentParser.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DocumentParser.h; sourceTree = "<group>"; };
@@ -11389,6 +11393,8 @@
D086FE9709D53AAB005BC74D /* UnlinkCommand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UnlinkCommand.cpp; sourceTree = "<group>"; };
D0B0556609C6700100307E43 /* CreateLinkCommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CreateLinkCommand.h; sourceTree = "<group>"; };
D0B0556709C6700100307E43 /* CreateLinkCommand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CreateLinkCommand.cpp; sourceTree = "<group>"; };
+ D0CE58F6125E4CC200F3F199 /* ResourceLoadScheduler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ResourceLoadScheduler.cpp; sourceTree = "<group>"; };
+ D0CE58F7125E4CC200F3F199 /* ResourceLoadScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResourceLoadScheduler.h; sourceTree = "<group>"; };
D0FF2A5B11F8C45A007E74E0 /* PingLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PingLoader.cpp; sourceTree = "<group>"; };
D0FF2A5C11F8C45A007E74E0 /* PingLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PingLoader.h; sourceTree = "<group>"; };
D23CA5480AB0E983005108A5 /* RangeException.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = RangeException.idl; sourceTree = "<group>"; };
@@ -11791,6 +11797,7 @@
081CDFBE126ECFE800D215CA /* SVGAnimatedPropertySynchronizer.h */,
088A0DFF126EF1DB00978F7A /* SVGAnimatedPropertyTearOff.h */,
08525E621278C00100A84778 /* SVGAnimatedStaticPropertyTearOff.h */,
+ 085A15921289A8DD002710E3 /* SVGAnimatedTransformListPropertyTearOff.h */,
0810764312828556007C63BA /* SVGListProperty.h */,
088A0E00126EF1DB00978F7A /* SVGListPropertyTearOff.h */,
088A0E01126EF1DB00978F7A /* SVGProperty.h */,
@@ -11798,6 +11805,8 @@
088A0E03126EF1DB00978F7A /* SVGPropertyTraits.h */,
0880F70D1282B46D00948505 /* SVGStaticListPropertyTearOff.h */,
0813A4E91284132600992511 /* SVGStaticPropertyTearOff.h */,
+ 08CA3D4312894A3800FFF260 /* SVGStaticPropertyWithParentTearOff.h */,
+ 08C7136D128956A3001B107E /* SVGTransformListPropertyTearOff.h */,
);
path = properties;
sourceTree = "<group>";
@@ -12332,6 +12341,8 @@
7A24587A1021EAF4000A00AA /* InspectorDOMAgent.h */,
41F061730F5F00AC00A07EAC /* InspectorDOMStorageResource.cpp */,
41F061720F5F00AC00A07EAC /* InspectorDOMStorageResource.h */,
+ 3888F6EC128C9889000CA8E0 /* InspectorFileSystemAgent.cpp */,
+ 3888F6ED128C9889000CA8E0 /* InspectorFileSystemAgent.h */,
F344C7121125B82C00F26EEE /* InspectorFrontendClient.h */,
F344C75711294FF600F26EEE /* InspectorFrontendClientLocal.cpp */,
F344C75211294D9D00F26EEE /* InspectorFrontendClientLocal.h */,
@@ -13162,6 +13173,8 @@
447D69010FA626810015CCB1 /* RuntimeApplicationChecks.h */,
447D69020FA626810015CCB1 /* RuntimeApplicationChecks.mm */,
1CE24F960D7CAF0E007E04C2 /* SchedulePairMac.mm */,
+ BCAE1FA412939DB7004CB026 /* ScrollAnimatorMac.cpp */,
+ BCAE1FA512939DB7004CB026 /* ScrollAnimatorMac.h */,
BCAA90C20A7EBA60008B1229 /* Scrollbar.cpp */,
BC8B853C0E7C7F1100AB6984 /* ScrollbarThemeMac.h */,
BCEF869E0E844E9D00A85CD5 /* ScrollbarThemeMac.mm */,
@@ -13248,9 +13261,9 @@
FE80D7B70E9C1F25000D6F75 /* Geolocation.cpp */,
FE80D7B80E9C1F25000D6F75 /* Geolocation.h */,
FE80D7B90E9C1F25000D6F75 /* Geolocation.idl */,
+ BC56CB1E10D5AC8000A77C64 /* GeolocationClient.h */,
BC56CB1C10D5AC8000A77C64 /* GeolocationController.cpp */,
BC56CB1D10D5AC8000A77C64 /* GeolocationController.h */,
- BC56CB1E10D5AC8000A77C64 /* GeolocationControllerClient.h */,
BC56CB1F10D5AC8000A77C64 /* GeolocationError.h */,
BC56CB2010D5AC8000A77C64 /* GeolocationPosition.h */,
596229771133EFD700DC4CBB /* GeolocationPositionCache.cpp */,
@@ -13272,9 +13285,6 @@
9FFE3E7C11B59C6E0037874E /* MemoryInfo.idl */,
93EB355E09E37FD600F43799 /* MouseEventWithHitTestResults.cpp */,
935C476209AC4CE600A6AAB4 /* MouseEventWithHitTestResults.h */,
- 8AF4E55211DC5A36000ED3DE /* Navigation.cpp */,
- 8AF4E55311DC5A36000ED3DE /* Navigation.h */,
- 8AF4E55411DC5A36000ED3DE /* Navigation.idl */,
A9C6E5A30D746458006442E9 /* Navigator.cpp */,
A9C6E5A40D746458006442E9 /* Navigator.h */,
A9C6E65D0D746694006442E9 /* Navigator.idl */,
@@ -13291,6 +13301,12 @@
8A844D0111D3C18E0014065C /* Performance.cpp */,
8A844D0211D3C18E0014065C /* Performance.h */,
8A844D0311D3C18E0014065C /* Performance.idl */,
+ 8AF4E55211DC5A36000ED3DE /* PerformanceNavigation.cpp */,
+ 8AF4E55311DC5A36000ED3DE /* PerformanceNavigation.h */,
+ 8AF4E55411DC5A36000ED3DE /* PerformanceNavigation.idl */,
+ 8AF4E55811DC5A63000ED3DE /* PerformanceTiming.cpp */,
+ 8AF4E55911DC5A63000ED3DE /* PerformanceTiming.h */,
+ 8AF4E55A11DC5A63000ED3DE /* PerformanceTiming.idl */,
7693BACF106C2DCA007B0823 /* PluginHalter.cpp */,
7693BAD0106C2DCA007B0823 /* PluginHalter.h */,
7693BAD1106C2DCA007B0823 /* PluginHalterClient.h */,
@@ -13319,9 +13335,6 @@
758978EB127090D60076D5A9 /* SpeechInputResult.h */,
62C1217A11AB9E76003C462C /* SuspendableTimer.cpp */,
62C1217B11AB9E77003C462C /* SuspendableTimer.h */,
- 8AF4E55811DC5A63000ED3DE /* Timing.cpp */,
- 8AF4E55911DC5A63000ED3DE /* Timing.h */,
- 8AF4E55A11DC5A63000ED3DE /* Timing.idl */,
003F1FE911E6AB43008258D9 /* UserContentTypes.h */,
BCACF3BA1072921A00C0C8A3 /* UserContentURLPattern.cpp */,
BCACF3BB1072921A00C0C8A3 /* UserContentURLPattern.h */,
@@ -13493,10 +13506,6 @@
858C381B0AA8E29600B187A4 /* DOMCSSValue.mm */,
858C383A0AA8ED8200B187A4 /* DOMCSSValueList.h */,
858C383B0AA8ED8200B187A4 /* DOMCSSValueList.mm */,
- BC686CAC0E0C343900DE8A08 /* DOMCSSVariablesDeclaration.h */,
- BC686CAD0E0C343900DE8A08 /* DOMCSSVariablesDeclaration.mm */,
- BC686CAF0E0C343900DE8A08 /* DOMCSSVariablesRule.h */,
- BC686CB00E0C343900DE8A08 /* DOMCSSVariablesRule.mm */,
858C38A30AA8F20400B187A4 /* DOMRect.h */,
858C38A40AA8F20400B187A4 /* DOMRect.mm */,
855D35890AD707310019AAC7 /* DOMRGBColor.h */,
@@ -14203,8 +14212,6 @@
85909CDB0ACC7A7E00DF01F1 /* DOMCSSUnknownRuleInternal.h */,
85B498F20ADB336A00925CBB /* DOMCSSValueInternal.h */,
85909D280ACC7D5500DF01F1 /* DOMCSSValueListInternal.h */,
- BC686CB90E0C349D00DE8A08 /* DOMCSSVariablesDeclarationInternal.h */,
- BC686CBA0E0C349D00DE8A08 /* DOMCSSVariablesRuleInternal.h */,
85E711450AC5D5340053270F /* DOMDocumentFragmentInternal.h */,
85E711460AC5D5340053270F /* DOMDocumentInternal.h */,
85E711470AC5D5340053270F /* DOMDocumentTypeInternal.h */,
@@ -14535,8 +14542,8 @@
93309D95099E64910056E581 /* EditCommand.h */,
4F1534DD11B532EC0021FD86 /* EditingBehavior.h */,
4F1534DF11B533020021FD86 /* EditingBehaviorTypes.h */,
- 9BAB6C6A12550631001626D4 /* EditingStyle.h */,
9BAB6C6B12550631001626D4 /* EditingStyle.cpp */,
+ 9BAB6C6A12550631001626D4 /* EditingStyle.h */,
4B3043CA0AE0373B00A82647 /* Editor.cpp */,
4B3043CB0AE0373B00A82647 /* Editor.h */,
93A38B4A0D0E5808006872C2 /* EditorCommand.cpp */,
@@ -15112,6 +15119,8 @@
976D6C71122B8A3D001FD1F7 /* FileWriter.cpp */,
976D6C72122B8A3D001FD1F7 /* FileWriter.h */,
893C47A61238908B002B3D86 /* FileWriterCallback.h */,
+ 46700ECE127B96CB00F5D5D6 /* FileWriterSync.cpp */,
+ 46700ECF127B96CB00F5D5D6 /* FileWriterSync.h */,
8987854D122CA064003AABDA /* Flags.h */,
8987854E122CA064003AABDA /* LocalFileSystem.cpp */,
8987854F122CA064003AABDA /* LocalFileSystem.h */,
@@ -15794,10 +15803,6 @@
14CF78A509F58CD800EB3665 /* JSCSSValue.h */,
A8D05FA90A23B30F005E7203 /* JSCSSValueList.cpp */,
A8D05FAA0A23B30F005E7203 /* JSCSSValueList.h */,
- BC686C780E0C330100DE8A08 /* JSCSSVariablesDeclaration.cpp */,
- BC686C790E0C330100DE8A08 /* JSCSSVariablesDeclaration.h */,
- BC686C7A0E0C330100DE8A08 /* JSCSSVariablesRule.cpp */,
- BC686C7B0E0C330100DE8A08 /* JSCSSVariablesRule.h */,
BC3C39B40C0D3D8D005F4D7A /* JSMediaList.cpp */,
BC3C39B50C0D3D8D005F4D7A /* JSMediaList.h */,
BCFE2F0F0C1B58370020235F /* JSRect.cpp */,
@@ -16124,6 +16129,7 @@
B22277F50D00BF1F0071B782 /* SVGAnimatedRect.idl */,
084DB59A128008CC002A6D64 /* SVGAnimatedString.h */,
B22277F60D00BF1F0071B782 /* SVGAnimatedString.idl */,
+ 08250938128BD4D800E2ED8E /* SVGAnimatedTransformList.h */,
B22277F80D00BF1F0071B782 /* SVGAnimatedTransformList.idl */,
B22277F90D00BF1F0071B782 /* SVGAnimateElement.cpp */,
B22277FA0D00BF1F0071B782 /* SVGAnimateElement.h */,
@@ -16332,6 +16338,7 @@
B22278B00D00BF200071B782 /* SVGMaskElement.cpp */,
B22278B10D00BF200071B782 /* SVGMaskElement.h */,
B22278B20D00BF200071B782 /* SVGMaskElement.idl */,
+ 0806E57912893045007CED32 /* SVGMatrix.h */,
B22278B30D00BF200071B782 /* SVGMatrix.idl */,
B22278B40D00BF200071B782 /* SVGMetadataElement.cpp */,
B22278B50D00BF200071B782 /* SVGMetadataElement.h */,
@@ -16620,8 +16627,8 @@
B2AFFC7B0D00A5C10030074D /* GlyphPageTreeNodeMac.cpp */,
49FFBF1C11C8550E006A7118 /* GraphicsContext3DMac.mm */,
B277B4030B22F37C0004BEC6 /* GraphicsContextMac.mm */,
- 0F580B040F12A2550051D689 /* GraphicsLayerCA.h */,
- 0F580B030F12A2540051D689 /* GraphicsLayerCA.mm */,
+ 499B3C57128C641E00E726C2 /* GraphicsLayerMac.h */,
+ 499B3C58128C641E00E726C2 /* GraphicsLayerMac.mm */,
B275358D0B053A66002CE64F /* IconMac.mm */,
B275354E0B053814002CE64F /* ImageMac.mm */,
B275354F0B053814002CE64F /* IntPointMac.mm */,
@@ -16686,6 +16693,7 @@
B2C3DA580D006CD600EF6F26 /* FontFamily.cpp */,
B2C3DA590D006CD600EF6F26 /* FontFamily.h */,
72626E010EF022FE00A07E20 /* FontFastPath.cpp */,
+ BCB92D4E1293550B00C8387F /* FontBaseline.h */,
F7A034C3126BF6BE007DC19E /* FontOrientation.h */,
37ACCE410DA2980F0089E602 /* FontRenderingMode.h */,
B2C3DA5A0D006CD600EF6F26 /* FontSelector.h */,
@@ -17125,7 +17133,6 @@
082FCAC3110927CE00CC4821 /* JSSVGContextCache.h */,
08A48A6D0E86CF6D00E225DD /* JSSVGElementInstanceCustom.cpp */,
08E4FE450E2BD41400F4CAE0 /* JSSVGLengthCustom.cpp */,
- B25DFAAE0B2E2929000E6510 /* JSSVGMatrixCustom.cpp */,
B2C96D8C0B3AF2B7005E80EC /* JSSVGPathSegCustom.cpp */,
B297BC6F0B3C14CF0045A590 /* JSSVGPathSegListCustom.cpp */,
087D97BE10FB8D7700C00874 /* JSSVGPODListCustom.h */,
@@ -17230,16 +17237,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 */,
+ 8A9A586E11E84C35008ACFD1 /* JSPerformanceNavigation.cpp */,
+ 8A9A586F11E84C36008ACFD1 /* JSPerformanceNavigation.h */,
+ 8A9A587611E84C98008ACFD1 /* JSPerformanceTiming.cpp */,
+ 8A9A587711E84C98008ACFD1 /* JSPerformanceTiming.h */,
BCEC01C00C274DDD009F4EC9 /* JSScreen.cpp */,
BCEC01C10C274DDD009F4EC9 /* JSScreen.h */,
- 8A9A587611E84C98008ACFD1 /* JSTiming.cpp */,
- 8A9A587711E84C98008ACFD1 /* JSTiming.h */,
494BD79B0F55C94C00747828 /* JSWebKitPoint.cpp */,
494BD79C0F55C94C00747828 /* JSWebKitPoint.h */,
);
@@ -17273,9 +17280,9 @@
BCB16BFB0979C38700467741 /* loader */ = {
isa = PBXGroup;
children = (
- A8D2B2521287A56000AF4DDA /* cache */,
1A8F6BB00DB55CDC001DB794 /* appcache */,
512DD8E80D91E691000F89EE /* archive */,
+ A8D2B2521287A56000AF4DDA /* cache */,
5126E6B60A2E3AEF005C29FA /* icon */,
93A1EAA20A5634D8006960A0 /* mac */,
E1C416160F6563180092D2FB /* CrossOriginAccessControl.cpp */,
@@ -17333,6 +17340,8 @@
656D37270ADBA5DE00A4554D /* ResourceLoader.h */,
973E325410883B7C005BC493 /* ResourceLoadNotifier.cpp */,
973E325510883B7C005BC493 /* ResourceLoadNotifier.h */,
+ D0CE58F6125E4CC200F3F199 /* ResourceLoadScheduler.cpp */,
+ D0CE58F7125E4CC200F3F199 /* ResourceLoadScheduler.h */,
51327D5F11A33A2B004F9D65 /* SinkDocument.cpp */,
51327D5E11A33A2B004F9D65 /* SinkDocument.h */,
D000ED2511C1B9CD00C47726 /* SubframeLoader.cpp */,
@@ -17775,12 +17784,6 @@
A80E6CBA0A1989CA007FB8C5 /* CSSValueList.cpp */,
A80E6CBF0A1989CA007FB8C5 /* CSSValueList.h */,
A8D0651C0A23C1FE005E7203 /* CSSValueList.idl */,
- BCCBE7B40E07166900EAFA8E /* CSSVariableDependentValue.cpp */,
- BCCBE7B10E07159A00EAFA8E /* CSSVariableDependentValue.h */,
- BCCBE69A0E06F51000EAFA8E /* CSSVariablesDeclaration.cpp */,
- BCCBE6870E06E60D00EAFA8E /* CSSVariablesDeclaration.h */,
- BCCBE6880E06E60D00EAFA8E /* CSSVariablesRule.cpp */,
- BCCBE6890E06E60D00EAFA8E /* CSSVariablesRule.h */,
A80E6CE10A1989CA007FB8C5 /* DashboardRegion.h */,
FE49EF970DC51462004266E1 /* DashboardSupportCSSPropertyNames.in */,
A80E6CC20A1989CA007FB8C5 /* FontFamilyValue.cpp */,
@@ -18103,6 +18106,7 @@
37FC96DA1104ED71003E1FAD /* TrailingFloatsRootInlineBox.h */,
0F500AB00F54DB3100EEF928 /* TransformState.cpp */,
0F500AAE0F54DB1B00EEF928 /* TransformState.h */,
+ BCA257141293C010007A263D /* VerticalPositionCache.h */,
);
path = rendering;
sourceTree = "<group>";
@@ -18215,6 +18219,7 @@
BC64640711D7F304006455B0 /* DOMStringMap.cpp */,
BC64640811D7F304006455B0 /* DOMStringMap.h */,
BC64647911D800CD006455B0 /* DOMStringMap.idl */,
+ 05FD69DF12845D4300B2BEB3 /* DOMTimeStamp.h */,
BC7FA61E0D1F0CBD00DB22A9 /* DynamicNodeList.cpp */,
BC7FA61F0D1F0CBD00DB22A9 /* DynamicNodeList.h */,
6550B699099DF0270090D781 /* EditingText.cpp */,
@@ -18235,6 +18240,8 @@
85031B2B0A44EFC700F992E0 /* Event.cpp */,
85031B2C0A44EFC700F992E0 /* Event.h */,
14E836D209F8512000B85AE4 /* Event.idl */,
+ 4138D3341244054800323D33 /* EventContext.cpp */,
+ 4138D3331244054800323D33 /* EventContext.h */,
BC60D9090D2A17CE00B9918F /* EventException.h */,
BC60D90A0D2A17CE00B9918F /* EventException.idl */,
935FBC4409BA00B900E230B1 /* EventListener.h */,
@@ -18395,6 +18402,8 @@
85031B3A0A44EFC700F992E0 /* WheelEvent.cpp */,
85031B3B0A44EFC700F992E0 /* WheelEvent.h */,
93EEC1F709C2877700C515D1 /* WheelEvent.idl */,
+ 4123E568127B3041000FEEA7 /* WindowEventContext.cpp */,
+ 4123E567127B3041000FEEA7 /* WindowEventContext.h */,
F523D30902DE4476018635CA /* XMLDocumentParser.cpp */,
F523D30A02DE4476018635CA /* XMLDocumentParser.h */,
54C50F7A0E801DF3009832A0 /* XMLDocumentParserLibxml2.cpp */,
@@ -18565,7 +18574,6 @@
1A569CFA0D7E2B82007C3983 /* c_instance.h in Headers */,
1A569CFC0D7E2B82007C3983 /* c_runtime.h in Headers */,
1A569CFE0D7E2B82007C3983 /* c_utility.h in Headers */,
- BCB16C180979C3BD00467741 /* MemoryCache.h in Headers */,
BCB16C1A0979C3BD00467741 /* CachedCSSStyleSheet.h in Headers */,
BC64B4CC0CB4295D005F2B62 /* CachedFont.h in Headers */,
51C0AA390F2AA10A001648C2 /* CachedFrame.h in Headers */,
@@ -18702,9 +18710,6 @@
A80E6CEE0A1989CA007FB8C5 /* CSSValue.h in Headers */,
6565815109D13043000E61D7 /* CSSValueKeywords.h in Headers */,
A80E6CE90A1989CA007FB8C5 /* CSSValueList.h in Headers */,
- BCCBE7B20E07159A00EAFA8E /* CSSVariableDependentValue.h in Headers */,
- BCCBE68A0E06E60D00EAFA8E /* CSSVariablesDeclaration.h in Headers */,
- BCCBE68C0E06E60D00EAFA8E /* CSSVariablesRule.h in Headers */,
93F1992F08245E59001E9ABC /* Cursor.h in Headers */,
BC2272A20E82E87C00E7F975 /* CursorData.h in Headers */,
BC2272AD0E82E8F300E7F975 /* CursorList.h in Headers */,
@@ -18818,10 +18823,6 @@
85B498F30ADB336A00925CBB /* DOMCSSValueInternal.h in Headers */,
858C383C0AA8ED8200B187A4 /* DOMCSSValueList.h in Headers */,
85909D2B0ACC7D5500DF01F1 /* DOMCSSValueListInternal.h in Headers */,
- BC686CB20E0C343900DE8A08 /* DOMCSSVariablesDeclaration.h in Headers */,
- BC686CBB0E0C349D00DE8A08 /* DOMCSSVariablesDeclarationInternal.h in Headers */,
- BC686CB50E0C343900DE8A08 /* DOMCSSVariablesRule.h in Headers */,
- BC686CBC0E0C349D00DE8A08 /* DOMCSSVariablesRuleInternal.h in Headers */,
E10B9CCC0B747A44003ED890 /* DOMCustomXPathNSResolver.h in Headers */,
BC7DAAEF0FF9615D00CE0138 /* DOMDataGridDataSource.h in Headers */,
85ACABB00A9CAF8000671E90 /* DOMDocument.h in Headers */,
@@ -19494,6 +19495,7 @@
DDE63ED50B7D45A800226998 /* DOMTextEvent.h in Headers */,
85E711D90AC5D5350053270F /* DOMTextInternal.h in Headers */,
188604B40F2E654A000B6443 /* DOMTimer.h in Headers */,
+ 05FD69E012845D4300B2BEB3 /* DOMTimeStamp.h in Headers */,
76FC2B0C12370DA0006A991A /* DOMTokenList.h in Headers */,
BC1A37BE097C715F0019F3D8 /* DOMTraversal.h in Headers */,
85526CD20AB0B7D9000302EA /* DOMTreeWalker.h in Headers */,
@@ -19561,6 +19563,7 @@
89878560122CA064003AABDA /* ErrorCallback.h in Headers */,
2ECF7AE210162B5800427DE7 /* ErrorEvent.h in Headers */,
85031B420A44EFC700F992E0 /* Event.h in Headers */,
+ 4138D3351244054800323D33 /* EventContext.h in Headers */,
BC60D90C0D2A17CE00B9918F /* EventException.h in Headers */,
93C09A530B064DB3005ABD4D /* EventHandler.h in Headers */,
935FBC4509BA00B900E230B1 /* EventListener.h in Headers */,
@@ -19613,6 +19616,7 @@
976D6C8F122B8A3D001FD1F7 /* FileThreadTask.h in Headers */,
976D6C91122B8A3D001FD1F7 /* FileWriter.h in Headers */,
893C47A81238908B002B3D86 /* FileWriterCallback.h in Headers */,
+ 46700ED1127B96CB00F5D5D6 /* FileWriterSync.h in Headers */,
BC5EB69F0E81DAEB00B25965 /* FillLayer.h in Headers */,
845E72F80FD261EE00A87D79 /* Filter.h in Headers */,
08C9251A0FCC7C4A00480DEC /* FilterEffect.h in Headers */,
@@ -19670,8 +19674,8 @@
BCE04C8A0DAFF7A0007A0F41 /* Generator.h in Headers */,
A622A8FF122C44A600A785B3 /* GenericBinding.h in Headers */,
FE80D7C60E9C1F25000D6F75 /* Geolocation.h in Headers */,
+ BC56CB2310D5AC8000A77C64 /* GeolocationClient.h in Headers */,
BC56CB2210D5AC8000A77C64 /* GeolocationController.h in Headers */,
- BC56CB2310D5AC8000A77C64 /* GeolocationControllerClient.h in Headers */,
BC56CB2410D5AC8000A77C64 /* GeolocationError.h in Headers */,
BC56CB2510D5AC8000A77C64 /* GeolocationPosition.h in Headers */,
5962297A1133EFE200DC4CBB /* GeolocationPositionCache.h in Headers */,
@@ -19687,7 +19691,6 @@
A80D67080E9E9DEB00E420F0 /* GraphicsContextPlatformPrivateCG.h in Headers */,
A88FE3340E5EEE87008D8C0F /* GraphicsContextPrivate.h in Headers */,
0F580B0D0F12A2690051D689 /* GraphicsLayer.h in Headers */,
- 0F580B060F12A2550051D689 /* GraphicsLayerCA.h in Headers */,
0F580B0E0F12A2690051D689 /* GraphicsLayerClient.h in Headers */,
B2A015AB0AF6CD53006BCE0E /* GraphicsTypes.h in Headers */,
C50B561712119D23008B46E0 /* GroupSettings.h in Headers */,
@@ -19960,8 +19963,6 @@
BCC5BE010C0E93110011C2DB /* JSCSSStyleSheet.h in Headers */,
14CF78A609F58CD800EB3665 /* JSCSSValue.h in Headers */,
A8D05FAC0A23B30F005E7203 /* JSCSSValueList.h in Headers */,
- BC686C7D0E0C330100DE8A08 /* JSCSSVariablesDeclaration.h in Headers */,
- BC686C7F0E0C330100DE8A08 /* JSCSSVariablesRule.h in Headers */,
E4778B80115A581A00B5D372 /* JSCustomEvent.h in Headers */,
FE80D7A80E9C1ED2000D6F75 /* JSCustomPositionCallback.h in Headers */,
FE80D7AA0E9C1ED2000D6F75 /* JSCustomPositionErrorCallback.h in Headers */,
@@ -20154,7 +20155,6 @@
A86629D109DA2B48009633A5 /* JSMouseEvent.h in Headers */,
65DF31FC09D1CC60000BE325 /* JSMutationEvent.h in Headers */,
BCD9C2C10C17B69E005C90A2 /* JSNamedNodeMap.h in Headers */,
- 8A9A587111E84C36008ACFD1 /* JSNavigation.h in Headers */,
A9D247F80D757E3400FDF959 /* JSNavigator.h in Headers */,
BC9439C3116CF4940048C750 /* JSNodeCustom.h in Headers */,
14115B7309F84CD600CA4FC1 /* JSNodeFilter.h in Headers */,
@@ -20168,6 +20168,8 @@
1A0D57410A5C7867007EDD4C /* JSOverflowEvent.h in Headers */,
E1284BB110449FFA00EAEB52 /* JSPageTransitionEvent.h in Headers */,
8A9A587511E84C81008ACFD1 /* JSPerformance.h in Headers */,
+ 8A9A587111E84C36008ACFD1 /* JSPerformanceNavigation.h in Headers */,
+ 8A9A588811E84F37008ACFD1 /* JSPerformanceTiming.h in Headers */,
93B70D6C09EB0C7C009D8468 /* JSPluginElementFunctions.h in Headers */,
5189F01E10B37BD900F3C739 /* JSPopStateEvent.h in Headers */,
FE80DA720E9C472F000D6F75 /* JSPositionError.h in Headers */,
@@ -20340,7 +20342,6 @@
933A14B90B7D1D5200A53FFD /* JSTextEvent.h in Headers */,
BCEF45F60E687B5C001C1287 /* JSTextMetrics.h in Headers */,
E446141B0CD6826900FADA75 /* JSTimeRanges.h in Headers */,
- 8A9A588811E84F37008ACFD1 /* JSTiming.h in Headers */,
1A750D5D0A90DEE1000FF215 /* JSTreeWalker.h in Headers */,
A86629CF09DA2B47009633A5 /* JSUIEvent.h in Headers */,
49EECF0D105070C400099FAB /* JSUint16Array.h in Headers */,
@@ -20440,6 +20441,7 @@
4E19592A0A39DACC00220FE5 /* MediaQuery.h in Headers */,
4E19592C0A39DACC00220FE5 /* MediaQueryEvaluator.h in Headers */,
4E19592E0A39DACC00220FE5 /* MediaQueryExp.h in Headers */,
+ BCB16C180979C3BD00467741 /* MemoryCache.h in Headers */,
9FFE3E7B11B59C5D0037874E /* MemoryInfo.h in Headers */,
93309DFA099E64920056E581 /* MergeIdenticalElementsCommand.h in Headers */,
E1ADECCE0E76AD8B004A1A5E /* MessageChannel.h in Headers */,
@@ -20459,7 +20461,6 @@
A81872230977D3C0005826D9 /* NamedNodeMap.h in Headers */,
A818721E0977D3C0005826D9 /* NameNodeList.h in Headers */,
E10B9B6C0B747599003ED890 /* NativeXPathNSResolver.h in Headers */,
- 8AF4E55611DC5A36000ED3DE /* Navigation.h in Headers */,
93CCF0270AF6C52900018E89 /* NavigationAction.h in Headers */,
979F43D41075E44A0000F83B /* NavigationScheduler.h in Headers */,
A9C6E5A60D746458006442E9 /* Navigator.h in Headers */,
@@ -20528,6 +20529,8 @@
B27535820B053814002CE64F /* Pen.h in Headers */,
8A7CC96B12076D73001D4588 /* PendingScript.h in Headers */,
8A844D0511D3C18E0014065C /* Performance.h in Headers */,
+ 8AF4E55611DC5A36000ED3DE /* PerformanceNavigation.h in Headers */,
+ 8AF4E55C11DC5A63000ED3DE /* PerformanceTiming.h in Headers */,
49D5DC2E0F423A73008F20FD /* PerspectiveTransformOperation.h in Headers */,
D0FF2A5E11F8C45A007E74E0 /* PingLoader.h in Headers */,
377C4CDF1014E9F600B9AE42 /* PlaceholderDocument.h in Headers */,
@@ -20709,6 +20712,7 @@
514C767B0CE923A1007EF3CD /* ResourceHandleInternal.h in Headers */,
656D373F0ADBA5DE00A4554D /* ResourceLoader.h in Headers */,
973E325710883B7C005BC493 /* ResourceLoadNotifier.h in Headers */,
+ D0CE58F9125E4CC200F3F199 /* ResourceLoadScheduler.h in Headers */,
8A81BF8511DCFD9000DA2B98 /* ResourceLoadTiming.h in Headers */,
492863991253B8FC00F792D6 /* ResourceRawHeaders.h in Headers */,
514C76520CE9234E007EF3CD /* ResourceRequest.h in Headers */,
@@ -20730,8 +20734,8 @@
1CEFC9B90D78DC8C007D2579 /* SchedulePair.h in Headers */,
5162C7F511F77EFB00612EFE /* SchemeRegistry.h in Headers */,
BCEC01BE0C274DAC009F4EC9 /* Screen.h in Headers */,
- F39BE95C12673BF400E0A674 /* ScriptArguments.h in Headers */,
A84D82C111D3474800972990 /* ScriptableDocumentParser.h in Headers */,
+ F39BE95C12673BF400E0A674 /* ScriptArguments.h in Headers */,
7AFD4A8B1131C2760035B883 /* ScriptBreakpoint.h in Headers */,
41F1D21F0EF35C2A00DA8753 /* ScriptCachedFrameData.h in Headers */,
416E75CB0EDF90C700360E1D /* ScriptCallFrame.h in Headers */,
@@ -20909,6 +20913,7 @@
08C859C01274575400A5728D /* SVGAnimatedRect.h in Headers */,
08525E631278C00100A84778 /* SVGAnimatedStaticPropertyTearOff.h in Headers */,
084DB59B128008CC002A6D64 /* SVGAnimatedString.h in Headers */,
+ 085A15931289A8DD002710E3 /* SVGAnimatedTransformListPropertyTearOff.h in Headers */,
B22279900D00BF220071B782 /* SVGAnimateElement.h in Headers */,
B22279930D00BF220071B782 /* SVGAnimateMotionElement.h in Headers */,
B22279950D00BF220071B782 /* SVGAnimateTransformElement.h in Headers */,
@@ -20994,6 +20999,7 @@
B2227A440D00BF220071B782 /* SVGMarkerElement.h in Headers */,
08735FB910E91232006D6FAD /* SVGMarkerLayoutInfo.h in Headers */,
B2227A470D00BF220071B782 /* SVGMaskElement.h in Headers */,
+ 0806E57A12893045007CED32 /* SVGMatrix.h in Headers */,
B2227A4B0D00BF220071B782 /* SVGMetadataElement.h in Headers */,
B2A1F2B10CEF0ABF00442F6A /* SVGMissingGlyphElement.h in Headers */,
B2227A4E0D00BF220071B782 /* SVGMPathElement.h in Headers */,
@@ -21053,6 +21059,7 @@
E4AFD0100DAF335500F5F55C /* SVGSMILElement.h in Headers */,
0880F70E1282B46D00948505 /* SVGStaticListPropertyTearOff.h in Headers */,
0813A4EA1284132600992511 /* SVGStaticPropertyTearOff.h in Headers */,
+ 08CA3D4412894A3800FFF260 /* SVGStaticPropertyWithParentTearOff.h in Headers */,
B2227AA90D00BF220071B782 /* SVGStopElement.h in Headers */,
B2227AAC0D00BF220071B782 /* SVGStringList.h in Headers */,
B2227AAF0D00BF220071B782 /* SVGStylable.h in Headers */,
@@ -21083,6 +21090,7 @@
B2227ADA0D00BF220071B782 /* SVGTransformable.h in Headers */,
B2227ADD0D00BF220071B782 /* SVGTransformDistance.h in Headers */,
B2227ADF0D00BF220071B782 /* SVGTransformList.h in Headers */,
+ 08C7136E128956A3001B107E /* SVGTransformListPropertyTearOff.h in Headers */,
B2227AE20D00BF220071B782 /* SVGTRefElement.h in Headers */,
B2227AE50D00BF220071B782 /* SVGTSpanElement.h in Headers */,
B2227AE70D00BF220071B782 /* SVGUnitTypes.h in Headers */,
@@ -21145,7 +21153,6 @@
7553CFE8108F473F00EA281E /* TimelineRecordFactory.h in Headers */,
9305B24D098F1B6B00C28855 /* Timer.h in Headers */,
E44613B00CD6331000FADA75 /* TimeRanges.h in Headers */,
- 8AF4E55C11DC5A63000ED3DE /* Timing.h in Headers */,
49E912AE0EFAC906009D0CAF /* TimingFunction.h in Headers */,
49E911C40EF86D47009D0CAF /* TransformationMatrix.h in Headers */,
49E911CE0EF86D47009D0CAF /* TransformOperation.h in Headers */,
@@ -21235,6 +21242,7 @@
85031B510A44EFC700F992E0 /* WheelEvent.h in Headers */,
9380F47409A11AB4001FDB34 /* Widget.h in Headers */,
939B02EF0EA2DBC400C54570 /* WidthIterator.h in Headers */,
+ 4123E569127B3041000FEEA7 /* WindowEventContext.h in Headers */,
BC8243E90D0CFD7500460C8F /* WindowFeatures.h in Headers */,
E1E1BF00115FF6FB006F52CA /* WindowsKeyboardCodes.h in Headers */,
08203AA00ED8C35300B8B61A /* WMLAccessElement.h in Headers */,
@@ -21327,6 +21335,12 @@
93F199ED08245E59001E9ABC /* XSLTProcessor.h in Headers */,
E1BE512E0CF6C512002EA959 /* XSLTUnicodeSort.h in Headers */,
97DD4D870FDF4D6E00ECF9A4 /* XSSAuditor.h in Headers */,
+ 499B3C59128C641E00E726C2 /* GraphicsLayerMac.h in Headers */,
+ 08250939128BD4D800E2ED8E /* SVGAnimatedTransformList.h in Headers */,
+ 3888F6EF128C9889000CA8E0 /* InspectorFileSystemAgent.h in Headers */,
+ BCB92D4F1293550B00C8387F /* FontBaseline.h in Headers */,
+ BCA257151293C010007A263D /* VerticalPositionCache.h in Headers */,
+ BCAE1FA712939DB7004CB026 /* ScrollAnimatorMac.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -21715,7 +21729,6 @@
1A569CF90D7E2B82007C3983 /* c_instance.cpp in Sources */,
1A569CFB0D7E2B82007C3983 /* c_runtime.cpp in Sources */,
1A569CFD0D7E2B82007C3983 /* c_utility.cpp in Sources */,
- BCB16C170979C3BD00467741 /* MemoryCache.cpp in Sources */,
BCB16C190979C3BD00467741 /* CachedCSSStyleSheet.cpp in Sources */,
BC64B4CB0CB4295D005F2B62 /* CachedFont.cpp in Sources */,
51C0AA410F2AA15E001648C2 /* CachedFrame.cpp in Sources */,
@@ -21830,9 +21843,6 @@
371F53EA0D2704F900ECE0D5 /* CSSUnicodeRangeValue.cpp in Sources */,
1ABA76CB11D20E57004C201C /* CSSValueKeywords.cpp in Sources */,
A80E6CE40A1989CA007FB8C5 /* CSSValueList.cpp in Sources */,
- BCCBE7B50E07166900EAFA8E /* CSSVariableDependentValue.cpp in Sources */,
- BCCBE69B0E06F51000EAFA8E /* CSSVariablesDeclaration.cpp in Sources */,
- BCCBE68B0E06E60D00EAFA8E /* CSSVariablesRule.cpp in Sources */,
E11AF15111B9A1A300805103 /* Cursor.cpp in Sources */,
93F19A2608245E59001E9ABC /* CursorMac.mm in Sources */,
62CD32591157E57C0063B0A7 /* CustomEvent.cpp in Sources */,
@@ -21905,8 +21915,6 @@
85032DEA0AA8C9BE007D3B7D /* DOMCSSUnknownRule.mm in Sources */,
858C381D0AA8E29600B187A4 /* DOMCSSValue.mm in Sources */,
858C383D0AA8ED8200B187A4 /* DOMCSSValueList.mm in Sources */,
- BC686CB30E0C343900DE8A08 /* DOMCSSVariablesDeclaration.mm in Sources */,
- BC686CB60E0C343900DE8A08 /* DOMCSSVariablesRule.mm in Sources */,
E10B9CCD0B747A44003ED890 /* DOMCustomXPathNSResolver.mm in Sources */,
BC7DAAEE0FF9615D00CE0138 /* DOMDataGridDataSource.cpp in Sources */,
85ACABB10A9CAF8000671E90 /* DOMDocument.mm in Sources */,
@@ -22205,6 +22213,7 @@
893C480C1248BD3A002B3D86 /* EntrySync.cpp in Sources */,
2ECF7AE110162B5800427DE7 /* ErrorEvent.cpp in Sources */,
85031B410A44EFC700F992E0 /* Event.cpp in Sources */,
+ 4138D3361244054800323D33 /* EventContext.cpp in Sources */,
93C09A810B064F00005ABD4D /* EventHandler.cpp in Sources */,
93C09A7F0B064EEF005ABD4D /* EventHandlerMac.mm in Sources */,
1CA19E050DC255950065A994 /* EventLoopMac.mm in Sources */,
@@ -22250,6 +22259,7 @@
5160300B0CC4251200C8AC25 /* FileSystemPOSIX.cpp in Sources */,
976D6C8D122B8A3D001FD1F7 /* FileThread.cpp in Sources */,
976D6C90122B8A3D001FD1F7 /* FileWriter.cpp in Sources */,
+ 46700ED0127B96CB00F5D5D6 /* FileWriterSync.cpp in Sources */,
BC5EB69E0E81DAEB00B25965 /* FillLayer.cpp in Sources */,
08C925190FCC7C4A00480DEC /* FilterEffect.cpp in Sources */,
A8CFF04D0A154F09000A4234 /* FixedTableLayout.cpp in Sources */,
@@ -22313,7 +22323,6 @@
B2ED97710B1F55CE00257D0F /* GraphicsContextCG.cpp in Sources */,
B277B4040B22F37C0004BEC6 /* GraphicsContextMac.mm in Sources */,
0F580B0C0F12A2690051D689 /* GraphicsLayer.cpp in Sources */,
- 0F580B050F12A2550051D689 /* GraphicsLayerCA.mm in Sources */,
B2A015AA0AF6CD53006BCE0E /* GraphicsTypes.cpp in Sources */,
C50B561612119D23008B46E0 /* GroupSettings.cpp in Sources */,
F55B3DBF1251F12D003EF269 /* HiddenInputType.cpp in Sources */,
@@ -22580,8 +22589,6 @@
14CF78A409F58CBF00EB3665 /* JSCSSValue.cpp in Sources */,
BC20FB7F0C0E8E6C00D1447F /* JSCSSValueCustom.cpp in Sources */,
A8D05FAB0A23B30F005E7203 /* JSCSSValueList.cpp in Sources */,
- BC686C7C0E0C330100DE8A08 /* JSCSSVariablesDeclaration.cpp in Sources */,
- BC686C7E0E0C330100DE8A08 /* JSCSSVariablesRule.cpp in Sources */,
E4778B7F115A581A00B5D372 /* JSCustomEvent.cpp in Sources */,
FE80D7A70E9C1ED2000D6F75 /* JSCustomPositionCallback.cpp in Sources */,
FE80D7A90E9C1ED2000D6F75 /* JSCustomPositionErrorCallback.cpp in Sources */,
@@ -22828,7 +22835,6 @@
65DF31FB09D1CC60000BE325 /* JSMutationEvent.cpp in Sources */,
BCD9C2C00C17B69E005C90A2 /* JSNamedNodeMap.cpp in Sources */,
BCD9C2630C17AA67005C90A2 /* JSNamedNodeMapCustom.cpp in Sources */,
- 8A9A587011E84C36008ACFD1 /* JSNavigation.cpp in Sources */,
A9D247F70D757E3400FDF959 /* JSNavigator.cpp in Sources */,
A9C6E6490D7465D8006442E9 /* JSNavigatorCustom.cpp in Sources */,
14DC0D3709FED073007B0235 /* JSNode.cpp in Sources */,
@@ -22847,6 +22853,8 @@
1A0D57400A5C7867007EDD4C /* JSOverflowEvent.cpp in Sources */,
E1284BB210449FFA00EAEB52 /* JSPageTransitionEvent.cpp in Sources */,
8A9A587411E84C81008ACFD1 /* JSPerformance.cpp in Sources */,
+ 8A9A587011E84C36008ACFD1 /* JSPerformanceNavigation.cpp in Sources */,
+ 8A9A588711E84F37008ACFD1 /* JSPerformanceTiming.cpp in Sources */,
93B70D6B09EB0C7C009D8468 /* JSPluginElementFunctions.cpp in Sources */,
5189F01D10B37BD900F3C739 /* JSPopStateEvent.cpp in Sources */,
5189F01810B3781300F3C739 /* JSPopStateEventCustom.cpp in Sources */,
@@ -22965,7 +22973,6 @@
B2FA3DA80AB75A6F000E5AC4 /* JSSVGMarkerElement.cpp in Sources */,
B2FA3DAA0AB75A6F000E5AC4 /* JSSVGMaskElement.cpp in Sources */,
B2FA3DAC0AB75A6F000E5AC4 /* JSSVGMatrix.cpp in Sources */,
- B25DFAAF0B2E2929000E6510 /* JSSVGMatrixCustom.cpp in Sources */,
B2FA3DAE0AB75A6F000E5AC4 /* JSSVGMetadataElement.cpp in Sources */,
B27B28290CEF0C0700D39D54 /* JSSVGMissingGlyphElement.cpp in Sources */,
8542A7980AE5C94300DF58DF /* JSSVGNumber.cpp in Sources */,
@@ -23032,7 +23039,6 @@
933A14B80B7D1D5200A53FFD /* JSTextEvent.cpp in Sources */,
BCEF45F50E687B5C001C1287 /* JSTextMetrics.cpp in Sources */,
E446141A0CD6826900FADA75 /* JSTimeRanges.cpp in Sources */,
- 8A9A588711E84F37008ACFD1 /* JSTiming.cpp in Sources */,
1A750D5C0A90DEE1000FF215 /* JSTreeWalker.cpp in Sources */,
516BB7940CE91E6800512F79 /* JSTreeWalkerCustom.cpp in Sources */,
A86629D009DA2B48009633A5 /* JSUIEvent.cpp in Sources */,
@@ -23142,6 +23148,7 @@
4E1959290A39DACC00220FE5 /* MediaQuery.cpp in Sources */,
4E19592B0A39DACC00220FE5 /* MediaQueryEvaluator.cpp in Sources */,
4E19592D0A39DACC00220FE5 /* MediaQueryExp.cpp in Sources */,
+ BCB16C170979C3BD00467741 /* MemoryCache.cpp in Sources */,
9FFE3E7A11B59C5D0037874E /* MemoryInfo.cpp in Sources */,
93309DF9099E64920056E581 /* MergeIdenticalElementsCommand.cpp in Sources */,
E1ADECCF0E76AD8B004A1A5E /* MessageChannel.cpp in Sources */,
@@ -23160,7 +23167,6 @@
BCF34A3711A231CD00C71804 /* NamedNodeMap.cpp in Sources */,
A81872240977D3C0005826D9 /* NameNodeList.cpp in Sources */,
E10B9B6D0B747599003ED890 /* NativeXPathNSResolver.cpp in Sources */,
- 8AF4E55511DC5A36000ED3DE /* Navigation.cpp in Sources */,
93CCF0600AF6CA7600018E89 /* NavigationAction.cpp in Sources */,
979F43D31075E44A0000F83B /* NavigationScheduler.cpp in Sources */,
A9C6E5A50D746458006442E9 /* Navigator.cpp in Sources */,
@@ -23211,6 +23217,8 @@
B27535810B053814002CE64F /* Pen.cpp in Sources */,
8A7CC97012076F8A001D4588 /* PendingScript.cpp in Sources */,
8A844D0411D3C18E0014065C /* Performance.cpp in Sources */,
+ 8AF4E55511DC5A36000ED3DE /* PerformanceNavigation.cpp in Sources */,
+ 8AF4E55B11DC5A63000ED3DE /* PerformanceTiming.cpp in Sources */,
49D5DC2D0F423A73008F20FD /* PerspectiveTransformOperation.cpp in Sources */,
D0FF2A5D11F8C45A007E74E0 /* PingLoader.cpp in Sources */,
377C4CE01014E9F600B9AE42 /* PlaceholderDocument.cpp in Sources */,
@@ -23366,6 +23374,7 @@
93E227E30AF589AD00D48324 /* ResourceLoader.cpp in Sources */,
51AA3F6F0BD5AA9E00892971 /* ResourceLoaderMac.mm in Sources */,
973E325610883B7C005BC493 /* ResourceLoadNotifier.cpp in Sources */,
+ D0CE58F8125E4CC200F3F199 /* ResourceLoadScheduler.cpp in Sources */,
514C767C0CE923A1007EF3CD /* ResourceRequestBase.cpp in Sources */,
514C76530CE9234E007EF3CD /* ResourceRequestMac.mm in Sources */,
514C767E0CE923A1007EF3CD /* ResourceResponseBase.cpp in Sources */,
@@ -23741,7 +23750,6 @@
7553CFE9108F473F00EA281E /* TimelineRecordFactory.cpp in Sources */,
93309EA4099EB78C0056E581 /* Timer.cpp in Sources */,
E44613AF0CD6331000FADA75 /* TimeRanges.cpp in Sources */,
- 8AF4E55B11DC5A63000ED3DE /* Timing.cpp in Sources */,
49E911C30EF86D47009D0CAF /* TransformationMatrix.cpp in Sources */,
B27535580B053814002CE64F /* TransformationMatrixCG.cpp in Sources */,
49E911CF0EF86D47009D0CAF /* TransformOperations.cpp in Sources */,
@@ -23811,6 +23819,7 @@
9380F47309A11AB4001FDB34 /* Widget.cpp in Sources */,
9380F47809A11ACC001FDB34 /* WidgetMac.mm in Sources */,
939B02EE0EA2DBC400C54570 /* WidthIterator.cpp in Sources */,
+ 4123E56A127B3041000FEEA7 /* WindowEventContext.cpp in Sources */,
BC8243E80D0CFD7500460C8F /* WindowFeatures.cpp in Sources */,
08203A9F0ED8C35300B8B61A /* WMLAccessElement.cpp in Sources */,
088C97510ECB6E28000534BA /* WMLAElement.cpp in Sources */,
@@ -23896,6 +23905,9 @@
93F19B0508245E59001E9ABC /* XSLTProcessorLibxslt.cpp in Sources */,
E1BE512D0CF6C512002EA959 /* XSLTUnicodeSort.cpp in Sources */,
97DD4D860FDF4D6E00ECF9A4 /* XSSAuditor.cpp in Sources */,
+ 499B3C5A128C641E00E726C2 /* GraphicsLayerMac.mm in Sources */,
+ 3888F6EE128C9889000CA8E0 /* InspectorFileSystemAgent.cpp in Sources */,
+ BCAE1FA612939DB7004CB026 /* ScrollAnimatorMac.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/WebCore/WebCorePrefix.h b/WebCore/WebCorePrefix.h
index b42f035..f763bb3 100644
--- a/WebCore/WebCorePrefix.h
+++ b/WebCore/WebCorePrefix.h
@@ -23,7 +23,7 @@
* 2) in one case at least: OS-X-specific performance bug workarounds
* 3) the special trick to catch us using new or delete without including "config.h"
* The project should be able to build without this header, although we rarely test that.
- */
+ */
/* Things that need to be defined globally should go into "config.h". */
@@ -64,14 +64,6 @@
#endif
#endif // defined(WIN32) || defined(_WIN32)
-#if defined(ANDROID)
-#ifdef __cplusplus
-// Must come before include of algorithm.
-#define PREFIX_FOR_WEBCORE 1
-#define EXPORT __attribute__((visibility("default")))
-#endif
-#endif
-
#if !defined(BUILDING_BREWMP__)
#include <sys/types.h>
#include <fcntl.h>
@@ -164,4 +156,3 @@
#undef try
#undef catch
#endif
-
diff --git a/WebCore/accessibility/AccessibilityObject.cpp b/WebCore/accessibility/AccessibilityObject.cpp
index 3ddcdc5..caf12dc 100644
--- a/WebCore/accessibility/AccessibilityObject.cpp
+++ b/WebCore/accessibility/AccessibilityObject.cpp
@@ -401,7 +401,7 @@ static bool replacedNodeNeedsCharacter(Node* replacedNode)
// Finds a RenderListItem parent give a node.
static RenderListItem* renderListItemContainerForNode(Node* node)
{
- for (; node; node = node->parent()) {
+ for (; node; node = node->parentNode()) {
RenderBoxModelObject* renderer = node->renderBoxModelObject();
if (renderer && renderer->isListItem())
return toRenderListItem(renderer);
diff --git a/WebCore/accessibility/AccessibilityRenderObject.cpp b/WebCore/accessibility/AccessibilityRenderObject.cpp
index ef42272..141d725 100644
--- a/WebCore/accessibility/AccessibilityRenderObject.cpp
+++ b/WebCore/accessibility/AccessibilityRenderObject.cpp
@@ -863,7 +863,7 @@ Element* AccessibilityRenderObject::mouseButtonListener() const
// check if our parent is a mouse button listener
while (node && !node->isElementNode())
- node = node->parent();
+ node = node->parentNode();
if (!node)
return 0;
@@ -895,7 +895,7 @@ void AccessibilityRenderObject::decrement()
static Element* siblingWithAriaRole(String role, Node* node)
{
- Node* sibling = node->parent()->firstChild();
+ Node* sibling = node->parentNode()->firstChild();
while (sibling) {
if (sibling->isElementNode()) {
const AtomicString& siblingAriaRole = static_cast<Element*>(sibling)->getAttribute(roleAttr);
@@ -2332,7 +2332,7 @@ void AccessibilityRenderObject::getDocumentLinks(AccessibilityChildrenVector& re
if (!axobj->accessibilityIsIgnored() && axobj->isLink())
result.append(axobj);
} else {
- Node* parent = curr->parent();
+ Node* parent = curr->parentNode();
if (parent && curr->hasTagName(areaTag) && parent->hasTagName(mapTag)) {
AccessibilityImageMapLink* areaObject = static_cast<AccessibilityImageMapLink*>(axObjectCache()->getOrCreate(ImageMapLinkRole));
areaObject->setHTMLAreaElement(static_cast<HTMLAreaElement*>(curr));
@@ -2700,7 +2700,7 @@ AccessibilityObject* AccessibilityRenderObject::accessibilityImageMapHitTest(HTM
if (!area)
return 0;
- HTMLMapElement* map = static_cast<HTMLMapElement*>(area->parent());
+ HTMLMapElement* map = static_cast<HTMLMapElement*>(area->parentNode());
AccessibilityObject* parent = accessibilityParentForImageMap(map);
if (!parent)
return 0;
diff --git a/WebCore/accessibility/gtk/AXObjectCacheAtk.cpp b/WebCore/accessibility/gtk/AXObjectCacheAtk.cpp
index a4ea87c..4216be4 100644
--- a/WebCore/accessibility/gtk/AXObjectCacheAtk.cpp
+++ b/WebCore/accessibility/gtk/AXObjectCacheAtk.cpp
@@ -25,6 +25,7 @@
#include "AccessibilityRenderObject.h"
#include "GOwnPtr.h"
#include "Range.h"
+#include "SelectElement.h"
#include "TextIterator.h"
namespace WebCore {
@@ -41,17 +42,65 @@ void AXObjectCache::attachWrapper(AccessibilityObject* obj)
g_object_unref(atkObj);
}
+static void notifyChildrenSelectionChange(AccessibilityObject* object)
+{
+ // This static variable is needed to keep track of the old focused
+ // object as per previous calls to this function, in order to
+ // properly decide whether to emit some signals or not.
+ static RefPtr<AccessibilityObject> oldFocusedObject = 0;
+
+ // Only list boxes supported so far.
+ if (!object || !object->isListBox())
+ return;
+
+ // Emit signal from the listbox's point of view first.
+ g_signal_emit_by_name(object->wrapper(), "selection-changed");
+
+ // Find the item where the selection change was triggered from.
+ AccessibilityObject::AccessibilityChildrenVector items = object->children();
+ SelectElement* select = toSelectElement(static_cast<Element*>(object->node()));
+ if (!select)
+ return;
+ int changedItemIndex = select->activeSelectionStartListIndex();
+ if (changedItemIndex < 0 || changedItemIndex >= static_cast<int>(items.size()))
+ return;
+ AccessibilityObject* item = items.at(changedItemIndex).get();
+
+ // Ensure the oldFocusedObject belongs to the same document that
+ // the current item so further comparisons make sense. Otherwise,
+ // just reset oldFocusedObject so it won't be taken into account.
+ if (item && oldFocusedObject && item->document() != oldFocusedObject->document())
+ oldFocusedObject = 0;
+
+ AtkObject* axItem = item ? item->wrapper() : 0;
+ AtkObject* axOldFocusedObject = oldFocusedObject ? oldFocusedObject->wrapper() : 0;
+
+ // Old focused object just lost focus, so emit the events.
+ if (axOldFocusedObject && axItem != axOldFocusedObject) {
+ g_signal_emit_by_name(axOldFocusedObject, "focus-event", false);
+ g_signal_emit_by_name(axOldFocusedObject, "state-change", "focused", false);
+ }
+
+ // Emit needed events for the currently (un)selected item.
+ if (axItem) {
+ bool isSelected = item->isSelected();
+ g_signal_emit_by_name(axItem, "state-change", "selected", isSelected);
+ g_signal_emit_by_name(axItem, "focus-event", isSelected);
+ g_signal_emit_by_name(axItem, "state-change", "focused", isSelected);
+ }
+
+ // Update pointer to the previously focused object.
+ oldFocusedObject = item;
+}
+
void AXObjectCache::postPlatformNotification(AccessibilityObject* coreObject, AXNotification notification)
{
if (notification == AXCheckedStateChanged) {
if (!coreObject->isCheckboxOrRadio())
return;
g_signal_emit_by_name(coreObject->wrapper(), "state-change", "checked", coreObject->isChecked());
- } else if (notification == AXSelectedChildrenChanged) {
- if (!coreObject->isListBox())
- return;
- g_signal_emit_by_name(coreObject->wrapper(), "selection-changed");
- }
+ } else if (notification == AXSelectedChildrenChanged)
+ notifyChildrenSelectionChange(coreObject);
}
static void emitTextChanged(AccessibilityRenderObject* object, AXObjectCache::AXTextChange textChange, unsigned offset, unsigned count)
diff --git a/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm b/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm
index 7a13f11..9760382 100644
--- a/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm
+++ b/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm
@@ -407,7 +407,7 @@ static int blockquoteLevel(RenderObject* renderer)
return 0;
int result = 0;
- for (Node* node = renderer->node(); node; node = node->parent()) {
+ for (Node* node = renderer->node(); node; node = node->parentNode()) {
if (node->hasTagName(blockquoteTag))
result += 1;
}
diff --git a/WebCore/bindings/generic/RuntimeEnabledFeatures.h b/WebCore/bindings/generic/RuntimeEnabledFeatures.h
index 4a9a420..0ab5120 100644
--- a/WebCore/bindings/generic/RuntimeEnabledFeatures.h
+++ b/WebCore/bindings/generic/RuntimeEnabledFeatures.h
@@ -124,6 +124,8 @@ public:
static bool ontouchmoveEnabled() { return isTouchEnabled; }
static bool ontouchendEnabled() { return isTouchEnabled; }
static bool ontouchcancelEnabled() { return isTouchEnabled; }
+ static bool createTouchEnabled() { return isTouchEnabled; }
+ static bool createTouchListEnabled() { return isTouchEnabled; }
#endif
static void setDeviceMotionEnabled(bool isEnabled) { isDeviceMotionEnabled = isEnabled; }
diff --git a/WebCore/bindings/gobject/GObjectEventListener.cpp b/WebCore/bindings/gobject/GObjectEventListener.cpp
index 553d717..3e0aa2a 100644
--- a/WebCore/bindings/gobject/GObjectEventListener.cpp
+++ b/WebCore/bindings/gobject/GObjectEventListener.cpp
@@ -19,10 +19,8 @@
#include "config.h"
#include "GObjectEventListener.h"
-#include "DOMWindow.h"
#include "Event.h"
#include "EventListener.h"
-#include "Node.h"
#include "webkit/WebKitDOMEvent.h"
#include "webkit/WebKitDOMEventPrivate.h"
#include <glib-object.h>
@@ -40,10 +38,7 @@ GObjectEventListener::GObjectEventListener(GObject* object, DOMWindow* window, N
, m_signalName(signalName)
{
ASSERT(!m_coreWindow || !m_coreNode);
- if (m_coreWindow)
- m_coreWindow->addEventListener(domEventName, this, false);
- if (m_coreNode)
- m_coreNode->addEventListener(domEventName, this, false);
+
g_object_weak_ref(object, reinterpret_cast<GWeakNotify>(GObjectEventListener::gobjectDestroyedCallback), this);
}
diff --git a/WebCore/bindings/gobject/GObjectEventListener.h b/WebCore/bindings/gobject/GObjectEventListener.h
index e5ad2e5..ef1637a 100644
--- a/WebCore/bindings/gobject/GObjectEventListener.h
+++ b/WebCore/bindings/gobject/GObjectEventListener.h
@@ -19,7 +19,9 @@
#ifndef GObjectEventListener_h
#define GObjectEventListener_h
+#include "DOMWindow.h"
#include "EventListener.h"
+#include "Node.h"
#include <wtf/RefPtr.h>
#include <wtf/text/CString.h>
@@ -28,20 +30,19 @@ typedef struct _GObject GObject;
namespace WebCore {
-class DOMWindow;
-class Node;
-
class GObjectEventListener : public EventListener {
public:
static void addEventListener(GObject* object, DOMWindow* window, const char* domEventName, const char* signalName)
{
RefPtr<GObjectEventListener> listener(adoptRef(new GObjectEventListener(object, window, 0, domEventName, signalName)));
+ window->addEventListener(domEventName, listener.release(), false);
}
static void addEventListener(GObject* object, Node* node, const char* domEventName, const char* signalName)
{
RefPtr<GObjectEventListener> listener(adoptRef(new GObjectEventListener(object, 0, node, domEventName, signalName)));
+ node->addEventListener(domEventName, listener.release(), false);
}
static void gobjectDestroyedCallback(GObjectEventListener* listener, GObject*)
diff --git a/WebCore/bindings/js/JSAudioContextCustom.cpp b/WebCore/bindings/js/JSAudioContextCustom.cpp
new file mode 100644
index 0000000..04644bc
--- /dev/null
+++ b/WebCore/bindings/js/JSAudioContextCustom.cpp
@@ -0,0 +1,57 @@
+/*
+ * 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"
+
+#if ENABLE(WEB_AUDIO)
+
+#include "AudioContext.h"
+
+#include "JSAudioContext.h"
+#include <runtime/Error.h>
+
+namespace WebCore {
+
+JSC::EncodedJSValue JSC_HOST_CALL JSAudioContextConstructor::constructJSAudioContext(JSC::ExecState* exec)
+{
+ JSAudioContextConstructor* jsConstructor = static_cast<JSAudioContextConstructor*>(exec->callee());
+ if (!jsConstructor)
+ return throwError(exec, createReferenceError(exec, "AudioContext constructor callee is unavailable"));
+
+ ScriptExecutionContext* scriptExecutionContext = jsConstructor->scriptExecutionContext();
+ if (!scriptExecutionContext)
+ return throwError(exec, createReferenceError(exec, "AudioContext constructor script execution context is unavailable"));
+
+ if (!scriptExecutionContext->isDocument())
+ return throwError(exec, createReferenceError(exec, "AudioContext constructor called in a script execution context which is not a document"));
+
+ Document* document = static_cast<Document*>(scriptExecutionContext);
+
+ RefPtr<AudioContext> context = AudioContext::create(document);
+ return JSC::JSValue::encode(asObject(toJS(exec, jsConstructor->globalObject(), context.get())));
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(WEB_AUDIO)
diff --git a/WebCore/bindings/js/JSAudioNodeCustom.cpp b/WebCore/bindings/js/JSAudioNodeCustom.cpp
new file mode 100644
index 0000000..67f33f2
--- /dev/null
+++ b/WebCore/bindings/js/JSAudioNodeCustom.cpp
@@ -0,0 +1,75 @@
+/*
+ * 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"
+
+#if ENABLE(WEB_AUDIO)
+
+#include "JSAudioNode.h"
+
+#include "AudioNode.h"
+#include <runtime/Error.h>
+
+namespace WebCore {
+
+JSC::JSValue JSAudioNode::connect(JSC::ExecState* exec)
+{
+ if (exec->argumentCount() < 1)
+ return throwError(exec, createSyntaxError(exec, "Not enough arguments"));
+
+ unsigned outputIndex = 0;
+ unsigned inputIndex = 0;
+
+ AudioNode* destinationNode = toAudioNode(exec->argument(0));
+ if (!destinationNode)
+ return throwError(exec, createSyntaxError(exec, "Invalid destination node"));
+
+ if (exec->argumentCount() > 1)
+ outputIndex = exec->argument(1).toInt32(exec);
+
+ if (exec->argumentCount() > 2)
+ inputIndex = exec->argument(2).toInt32(exec);
+
+ AudioNode* audioNode = static_cast<AudioNode*>(impl());
+ bool success = audioNode->connect(destinationNode, outputIndex, inputIndex);
+ if (!success)
+ return throwError(exec, createSyntaxError(exec, "Invalid index parameter"));
+
+ return JSC::jsUndefined();
+}
+
+JSC::JSValue JSAudioNode::disconnect(JSC::ExecState* exec)
+{
+ unsigned outputIndex = 0;
+ if (exec->argumentCount() > 0)
+ outputIndex = exec->argument(0).toInt32(exec);
+
+ AudioNode* audioNode = static_cast<AudioNode*>(impl());
+ audioNode->disconnect(outputIndex);
+ return JSC::jsUndefined();
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(WEB_AUDIO)
diff --git a/WebCore/bindings/js/JSBindingsAllInOne.cpp b/WebCore/bindings/js/JSBindingsAllInOne.cpp
index b786431..e46b050 100644
--- a/WebCore/bindings/js/JSBindingsAllInOne.cpp
+++ b/WebCore/bindings/js/JSBindingsAllInOne.cpp
@@ -116,7 +116,6 @@
#include "JSSQLTransactionSyncCustom.cpp"
#include "JSSVGElementInstanceCustom.cpp"
#include "JSSVGLengthCustom.cpp"
-#include "JSSVGMatrixCustom.cpp"
#include "JSSVGPathSegCustom.cpp"
#include "JSSVGPathSegListCustom.cpp"
#include "JSScriptProfileNodeCustom.cpp"
diff --git a/WebCore/bindings/js/JSCSSRuleCustom.cpp b/WebCore/bindings/js/JSCSSRuleCustom.cpp
index b0adf15..20b3ab4 100644
--- a/WebCore/bindings/js/JSCSSRuleCustom.cpp
+++ b/WebCore/bindings/js/JSCSSRuleCustom.cpp
@@ -32,14 +32,12 @@
#include "CSSMediaRule.h"
#include "CSSPageRule.h"
#include "CSSStyleRule.h"
-#include "CSSVariablesRule.h"
#include "JSCSSCharsetRule.h"
#include "JSCSSFontFaceRule.h"
#include "JSCSSImportRule.h"
#include "JSCSSMediaRule.h"
#include "JSCSSPageRule.h"
#include "JSCSSStyleRule.h"
-#include "JSCSSVariablesRule.h"
#include "JSWebKitCSSKeyframeRule.h"
#include "JSWebKitCSSKeyframesRule.h"
#include "WebKitCSSKeyframeRule.h"
@@ -77,9 +75,6 @@ JSValue toJS(ExecState* exec, JSDOMGlobalObject* globalObject, CSSRule* rule)
case CSSRule::CHARSET_RULE:
wrapper = CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, CSSCharsetRule, rule);
break;
- case CSSRule::VARIABLES_RULE:
- wrapper = CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, CSSVariablesRule, rule);
- break;
case CSSRule::WEBKIT_KEYFRAME_RULE:
wrapper = CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, WebKitCSSKeyframeRule, rule);
break;
diff --git a/WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp b/WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp
index e3f5a4e..3bbe9c7 100644
--- a/WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp
+++ b/WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp
@@ -195,10 +195,14 @@ JSValue JSCanvasRenderingContext2D::drawImage(ExecState* exec)
// Composite operation is specified with globalCompositeOperation.
// The img parameter can be a <img> or <canvas> element.
JSValue value = exec->argument(0);
+ if (value.isNull()) {
+ setDOMException(exec, TYPE_MISMATCH_ERR);
+ return jsUndefined();
+ }
if (!value.isObject())
return throwTypeError(exec);
+
JSObject* o = asObject(value);
-
ExceptionCode ec = 0;
if (o->inherits(&JSHTMLImageElement::s_info)) {
HTMLImageElement* imgElt = static_cast<HTMLImageElement*>(static_cast<JSHTMLElement*>(o)->impl());
@@ -267,9 +271,9 @@ JSValue JSCanvasRenderingContext2D::drawImage(ExecState* exec)
}
#endif
} else
- return throwTypeError(exec);
-
- return jsUndefined();
+ return throwTypeError(exec);
+
+ return jsUndefined();
}
JSValue JSCanvasRenderingContext2D::drawImageFromRect(ExecState* exec)
diff --git a/WebCore/bindings/js/JSDeviceMotionEventCustom.cpp b/WebCore/bindings/js/JSDeviceMotionEventCustom.cpp
index 7bb09a9..503d64f 100644
--- a/WebCore/bindings/js/JSDeviceMotionEventCustom.cpp
+++ b/WebCore/bindings/js/JSDeviceMotionEventCustom.cpp
@@ -153,7 +153,7 @@ JSValue JSDeviceMotionEvent::rotationRate(ExecState* exec) const
return createRotationRateObject(imp->deviceMotionData()->rotationRate(), exec);
}
-JSValue JSDeviceMotionEvent::interval(ExecState* exec) const
+JSValue JSDeviceMotionEvent::interval(ExecState*) const
{
DeviceMotionEvent* imp = static_cast<DeviceMotionEvent*>(impl());
if (!imp->deviceMotionData()->canProvideInterval())
diff --git a/WebCore/bindings/js/JSDeviceOrientationEventCustom.cpp b/WebCore/bindings/js/JSDeviceOrientationEventCustom.cpp
index 9074a6b..c71364a 100644
--- a/WebCore/bindings/js/JSDeviceOrientationEventCustom.cpp
+++ b/WebCore/bindings/js/JSDeviceOrientationEventCustom.cpp
@@ -35,7 +35,7 @@ using namespace JSC;
namespace WebCore {
-JSValue JSDeviceOrientationEvent::alpha(ExecState* exec) const
+JSValue JSDeviceOrientationEvent::alpha(ExecState*) const
{
DeviceOrientationEvent* imp = static_cast<DeviceOrientationEvent*>(impl());
if (!imp->orientation()->canProvideAlpha())
@@ -43,7 +43,7 @@ JSValue JSDeviceOrientationEvent::alpha(ExecState* exec) const
return jsNumber(imp->orientation()->alpha());
}
-JSValue JSDeviceOrientationEvent::beta(ExecState* exec) const
+JSValue JSDeviceOrientationEvent::beta(ExecState*) const
{
DeviceOrientationEvent* imp = static_cast<DeviceOrientationEvent*>(impl());
if (!imp->orientation()->canProvideBeta())
@@ -51,7 +51,7 @@ JSValue JSDeviceOrientationEvent::beta(ExecState* exec) const
return jsNumber(imp->orientation()->beta());
}
-JSValue JSDeviceOrientationEvent::gamma(ExecState* exec) const
+JSValue JSDeviceOrientationEvent::gamma(ExecState*) const
{
DeviceOrientationEvent* imp = static_cast<DeviceOrientationEvent*>(impl());
if (!imp->orientation()->canProvideGamma())
diff --git a/WebCore/bindings/js/JSEventCustom.cpp b/WebCore/bindings/js/JSEventCustom.cpp
index d2e9d61..d671dee 100644
--- a/WebCore/bindings/js/JSEventCustom.cpp
+++ b/WebCore/bindings/js/JSEventCustom.cpp
@@ -98,6 +98,11 @@
#include "JSIDBSuccessEvent.h"
#endif
+#if ENABLE(WEB_AUDIO)
+#include "AudioProcessingEvent.h"
+#include "JSAudioProcessingEvent.h"
+#endif
+
using namespace JSC;
namespace WebCore {
@@ -184,6 +189,10 @@ JSValue toJS(ExecState* exec, JSDOMGlobalObject* globalObject, Event* event)
else if (event->isDeviceOrientationEvent())
wrapper = CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, DeviceOrientationEvent, event);
#endif
+#if ENABLE(WEB_AUDIO)
+ else if (event->isAudioProcessingEvent())
+ wrapper = CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, AudioProcessingEvent, event);
+#endif
else
wrapper = CREATE_DOM_OBJECT_WRAPPER(exec, globalObject, Event, event);
diff --git a/WebCore/bindings/js/JSEventTarget.cpp b/WebCore/bindings/js/JSEventTarget.cpp
index c86845d..04be175 100644
--- a/WebCore/bindings/js/JSEventTarget.cpp
+++ b/WebCore/bindings/js/JSEventTarget.cpp
@@ -83,6 +83,11 @@
#include "JSIDBRequest.h"
#endif
+#if ENABLE(WEB_AUDIO)
+#include "JSJavaScriptAudioNode.h"
+#include "JavaScriptAudioNode.h"
+#endif
+
#if ENABLE(WEB_SOCKETS)
#include "JSWebSocket.h"
#include "WebSocket.h"
@@ -159,6 +164,11 @@ JSValue toJS(ExecState* exec, JSDOMGlobalObject* globalObject, EventTarget* targ
return toJS(exec, idbRequest);
#endif
+#if ENABLE(WEB_AUDIO)
+ if (JavaScriptAudioNode* jsAudioNode = target->toJavaScriptAudioNode())
+ return toJS(exec, globalObject, jsAudioNode);
+#endif
+
#if ENABLE(WEB_SOCKETS)
if (WebSocket* webSocket = target->toWebSocket())
return toJS(exec, webSocket);
diff --git a/WebCore/bindings/js/JSSVGMatrixCustom.cpp b/WebCore/bindings/js/JSSVGMatrixCustom.cpp
deleted file mode 100644
index 56f735e..0000000
--- a/WebCore/bindings/js/JSSVGMatrixCustom.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2009 Jeff Schiller <codedread@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-
-#if ENABLE(SVG)
-#include "JSSVGMatrix.h"
-
-#include "AffineTransform.h"
-#include "SVGException.h"
-#include <runtime/Error.h>
-
-using namespace JSC;
-
-namespace WebCore {
-
-JSValue JSSVGMatrix::multiply(ExecState* exec)
-{
- if (exec->argumentCount() < 1)
- return throwError(exec, createSyntaxError(exec, "Not enough arguments"));
-
- if (!exec->argument(0).inherits(&JSSVGMatrix::s_info))
- return throwError(exec, createTypeError(exec, "secondMatrix argument was not a SVGMatrix"));
-
- JSSVGMatrix* matrixObj = static_cast<JSSVGMatrix*>(asObject(exec->argument(0)));
-
- AffineTransform m1(*impl());
- AffineTransform m2(*(matrixObj->impl()));
-
- SVGElement* context = JSSVGContextCache::svgContextForDOMObject(this);
- return toJS(exec, globalObject(), JSSVGStaticPODTypeWrapper<AffineTransform>::create(m1.multLeft(m2)).get(), context);
-}
-
-JSValue JSSVGMatrix::inverse(ExecState* exec)
-{
- AffineTransform imp(*impl());
-
- SVGElement* context = JSSVGContextCache::svgContextForDOMObject(this);
- JSValue result = toJS(exec, globalObject(), JSSVGStaticPODTypeWrapper<AffineTransform>::create(imp.inverse()).get(), context);
-
- if (!imp.isInvertible())
- setDOMException(exec, SVGException::SVG_MATRIX_NOT_INVERTABLE);
-
- return result;
-}
-
-JSValue JSSVGMatrix::rotateFromVector(ExecState* exec)
-{
- AffineTransform imp(*impl());
-
- float x = exec->argument(0).toFloat(exec);
- float y = exec->argument(1).toFloat(exec);
-
- SVGElement* context = JSSVGContextCache::svgContextForDOMObject(this);
- JSValue result = toJS(exec, globalObject(), JSSVGStaticPODTypeWrapper<AffineTransform>::create(imp.rotateFromVector(x, y)).get(), context);
-
- if (x == 0.0 || y == 0.0)
- setDOMException(exec, SVGException::SVG_INVALID_VALUE_ERR);
-
- return result;
-}
-
-}
-
-#endif // ENABLE(SVG)
diff --git a/WebCore/bindings/js/JSStyleSheetCustom.cpp b/WebCore/bindings/js/JSStyleSheetCustom.cpp
index ecfc6a6..04c6561 100644
--- a/WebCore/bindings/js/JSStyleSheetCustom.cpp
+++ b/WebCore/bindings/js/JSStyleSheetCustom.cpp
@@ -62,14 +62,6 @@ void JSStyleSheet::markChildren(MarkStack& markStack)
unsigned length = sheet->length();
for (unsigned i = 0; i < length; ++i)
markDOMObjectWrapper(markStack, globalData, sheet->item(i));
-
- // This prevents us from having a style sheet with a dangling ownerNode pointer.
- // A better solution would be to handle this on the DOM side -- if the style sheet
- // is kept around, then we want the node to stay around too. One possibility would
- // be to make ref/deref on the style sheet ref/deref the node instead, but there's
- // a lot of disentangling of the CSS DOM objects that would need to happen first.
- if (Node* ownerNode = sheet->ownerNode())
- markDOMNodeWrapper(markStack, ownerNode->document(), ownerNode);
}
} // namespace WebCore
diff --git a/WebCore/bindings/js/ScriptSourceCode.h b/WebCore/bindings/js/ScriptSourceCode.h
index 32d6298..092eeb8 100644
--- a/WebCore/bindings/js/ScriptSourceCode.h
+++ b/WebCore/bindings/js/ScriptSourceCode.h
@@ -35,15 +35,16 @@
#include "ScriptSourceProvider.h"
#include "StringSourceProvider.h"
#include "KURL.h"
+#include <wtf/text/TextPosition.h>
#include <wtf/RefPtr.h>
namespace WebCore {
class ScriptSourceCode {
public:
- ScriptSourceCode(const String& source, const KURL& url = KURL(), int startLine = 1)
+ ScriptSourceCode(const String& source, const KURL& url = KURL(), const TextPosition1& startPosition = TextPosition1::minimumPosition())
: m_provider(StringSourceProvider::create(source, url.isNull() ? String() : url.string()))
- , m_code(m_provider, startLine)
+ , m_code(m_provider, startPosition.m_line.oneBasedInt())
, m_url(url)
{
}
diff --git a/WebCore/bindings/objc/DOMCSS.mm b/WebCore/bindings/objc/DOMCSS.mm
index 22a9cb2..f12ee4f 100644
--- a/WebCore/bindings/objc/DOMCSS.mm
+++ b/WebCore/bindings/objc/DOMCSS.mm
@@ -42,7 +42,6 @@
#import "DOMCSSUnknownRule.h"
#import "DOMCSSValueInternal.h"
#import "DOMCSSValueList.h"
-#import "DOMCSSVariablesRule.h"
#import "DOMInternal.h"
#import "DOMStyleSheetInternal.h"
#import "DOMWebKitCSSKeyframeRule.h"
@@ -83,8 +82,6 @@ Class kitClass(WebCore::CSSRule* impl)
return [DOMCSSFontFaceRule class];
case DOM_PAGE_RULE:
return [DOMCSSPageRule class];
- case DOM_VARIABLES_RULE:
- return [DOMCSSVariablesRule class];
case DOM_WEBKIT_KEYFRAMES_RULE:
return [DOMWebKitCSSKeyframesRule class];
case DOM_WEBKIT_KEYFRAME_RULE:
diff --git a/WebCore/bindings/scripts/CodeGenerator.pm b/WebCore/bindings/scripts/CodeGenerator.pm
index d439c19..1e56b0c 100644
--- a/WebCore/bindings/scripts/CodeGenerator.pm
+++ b/WebCore/bindings/scripts/CodeGenerator.pm
@@ -50,19 +50,10 @@ my %numericTypeHash = ("int" => 1, "short" => 1, "long" => 1, "long long" => 1,
my %primitiveTypeHash = ( "boolean" => 1, "void" => 1, "Date" => 1);
-my %podTypeHash = ("SVGTransform" => 1);
-my %podTypesWithWritablePropertiesHash = ("SVGMatrix" => 1);
my %stringTypeHash = ("DOMString" => 1, "AtomicString" => 1);
my %nonPointerTypeHash = ("DOMTimeStamp" => 1, "CompareHow" => 1, "SVGPaintType" => 1);
-my %svgNewStyleAnimatedTypeHash = ("SVGAnimatedAngle" => 1, "SVGAnimatedBoolean" => 1,
- "SVGAnimatedEnumeration" => 1, "SVGAnimatedInteger" => 1,
- "SVGAnimatedLength" => 1, "SVGAnimatedLengthList" => 1,
- "SVGAnimatedNumber" => 1, "SVGAnimatedNumberList" => 1,
- "SVGAnimatedPreserveAspectRatio" => 1, "SVGAnimatedRect" => 1,
- "SVGAnimatedString" => 1);
-
my %svgAnimatedTypeHash = ("SVGAnimatedAngle" => 1, "SVGAnimatedBoolean" => 1,
"SVGAnimatedEnumeration" => 1, "SVGAnimatedInteger" => 1,
"SVGAnimatedLength" => 1, "SVGAnimatedLengthList" => 1,
@@ -81,17 +72,21 @@ my %svgTypeNeedingTearOff = (
"SVGAngle" => "SVGPropertyTearOff<SVGAngle>",
"SVGLength" => "SVGPropertyTearOff<SVGLength>",
"SVGLengthList" => "SVGListPropertyTearOff<SVGLengthList>",
+ "SVGMatrix" => "SVGPropertyTearOff<SVGMatrix>",
"SVGNumber" => "SVGPropertyTearOff<float>",
"SVGNumberList" => "SVGListPropertyTearOff<SVGNumberList>",
"SVGPoint" => "SVGPropertyTearOff<FloatPoint>",
"SVGPointList" => "SVGListPropertyTearOff<SVGPointList>",
"SVGPreserveAspectRatio" => "SVGPropertyTearOff<SVGPreserveAspectRatio>",
"SVGRect" => "SVGPropertyTearOff<FloatRect>",
- "SVGStringList" => "SVGStaticListPropertyTearOff<SVGStringList>"
+ "SVGStringList" => "SVGStaticListPropertyTearOff<SVGStringList>",
+ "SVGTransform" => "SVGPropertyTearOff<SVGTransform>",
+ "SVGTransformList" => "SVGTransformListPropertyTearOff"
);
my %svgTypeWithWritablePropertiesNeedingTearOff = (
- "SVGPoint" => 1
+ "SVGPoint" => 1,
+ "SVGMatrix" => 1
);
# Cache of IDL file pathnames.
@@ -312,28 +307,8 @@ sub AvoidInclusionOfType
my $object = shift;
my $type = shift;
- # Special case: SVGRect.h / SVGPoint.h / SVGNumber.h / SVGMatrix.h do not exist.
- return 1 if $type eq "SVGRect" or $type eq "SVGPoint" or $type eq "SVGNumber" or $type eq "SVGMatrix";
- return 0;
-}
-
-# FIXME: This method will go away once all SVG animated properties are converted to the new scheme.
-sub IsPodType
-{
- my $object = shift;
- my $type = shift;
-
- return 1 if $podTypeHash{$type};
- return 1 if $podTypesWithWritablePropertiesHash{$type};
- return 0;
-}
-
-sub IsPodTypeWithWriteableProperties
-{
- my $object = shift;
- my $type = shift;
-
- return 1 if $podTypesWithWritablePropertiesHash{$type};
+ # Special case: SVGRect.h / SVGPoint.h / SVGNumber.h do not exist.
+ return 1 if $type eq "SVGRect" or $type eq "SVGPoint" or $type eq "SVGNumber";
return 0;
}
@@ -415,22 +390,14 @@ sub GetSVGWrappedTypeNeedingTearOff
$svgTypeNeedingTearOff =~ s/SVGListPropertyTearOff<//;
} elsif ($svgTypeNeedingTearOff =~ /SVGStaticListPropertyTearOff/) {
$svgTypeNeedingTearOff =~ s/SVGStaticListPropertyTearOff<//;
- }
+ } elsif ($svgTypeNeedingTearOff =~ /SVGTransformListPropertyTearOff/) {
+ $svgTypeNeedingTearOff =~ s/SVGTransformListPropertyTearOff<//;
+ }
$svgTypeNeedingTearOff =~ s/>//;
return $svgTypeNeedingTearOff;
}
-# FIXME: This method will go away once all SVG animated properties are converted to the new scheme.
-sub IsSVGNewStyleAnimatedType
-{
- my $object = shift;
- my $type = shift;
-
- return 1 if $svgNewStyleAnimatedTypeHash{$type};
- return 0;
-}
-
sub IsSVGAnimatedType
{
my $object = shift;
diff --git a/WebCore/bindings/scripts/CodeGeneratorJS.pm b/WebCore/bindings/scripts/CodeGeneratorJS.pm
index b18e57e..ea32615 100644
--- a/WebCore/bindings/scripts/CodeGeneratorJS.pm
+++ b/WebCore/bindings/scripts/CodeGeneratorJS.pm
@@ -231,7 +231,7 @@ sub IndexGetterReturnsStrings
{
my $type = shift;
- return 1 if $type eq "CSSStyleDeclaration" or $type eq "MediaList" or $type eq "CSSVariablesDeclaration" or $type eq "DOMStringList" or $type eq "DOMTokenList" or $type eq "DOMSettableTokenList";
+ return 1 if $type eq "CSSStyleDeclaration" or $type eq "MediaList" or $type eq "DOMStringList" or $type eq "DOMTokenList" or $type eq "DOMSettableTokenList";
return 0;
}
@@ -325,7 +325,7 @@ sub IsSVGTypeNeedingContextParameter
return 0 unless $implClassName =~ /SVG/;
return 0 if $implClassName =~ /Element/;
- return 0 if $codeGenerator->IsSVGNewStyleAnimatedType($implClassName);
+ return 0 if $codeGenerator->IsSVGAnimatedType($implClassName);
return 0 if $codeGenerator->IsSVGTypeNeedingTearOff($implClassName);
my @noContextNeeded = ("SVGColor", "SVGDocument", "SVGPaint", "SVGZoomEvent");
@@ -672,18 +672,9 @@ sub GenerateHeader
my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($implType);
$implType = $svgNativeType if $svgNativeType;
- # FIXME: Old style SVG JS bindings, will vanish soon.
- my $podType = $dataNode->extendedAttributes->{"PODType"};
- if ($podType) {
- $implType = "JSSVGPODTypeWrapper<$podType> ";
- $headerIncludes{"$podType.h"} = 1 if $podType ne "float";
- $headerIncludes{"JSSVGPODTypeWrapper.h"} = 1;
- }
-
- my $svgPropertyOrPodType;
- $svgPropertyOrPodType = $podType if $podType;
- $svgPropertyOrPodType = $svgPropertyType if $svgPropertyType;
- $svgPropertyOrPodType = $svgListPropertyType if $svgListPropertyType;
+ my $svgPropertyOrListPropertyType;
+ $svgPropertyOrListPropertyType = $svgPropertyType if $svgPropertyType;
+ $svgPropertyOrListPropertyType = $svgListPropertyType if $svgListPropertyType;
my $numConstants = @{$dataNode->constants};
my $numAttributes = @{$dataNode->attributes};
@@ -691,11 +682,11 @@ sub GenerateHeader
push(@headerContent, "\nnamespace WebCore {\n\n");
- if ($codeGenerator->IsSVGNewStyleAnimatedType($implClassName)) {
+ if ($codeGenerator->IsSVGAnimatedType($implClassName)) {
$headerIncludes{"$implClassName.h"} = 1;
} else {
# Implementation class forward declaration
- AddClassForwardIfNeeded($implClassName) unless $svgPropertyOrPodType;
+ AddClassForwardIfNeeded($implClassName) unless $svgPropertyOrListPropertyType;
}
AddClassForwardIfNeeded("JSDOMWindowShell") if $interfaceName eq "DOMWindow";
@@ -944,9 +935,7 @@ sub GenerateHeader
}
if (!$hasParent || $dataNode->extendedAttributes->{"GenerateToJS"} || $dataNode->extendedAttributes->{"CustomToJS"}) {
- if ($podType) {
- push(@headerContent, "JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, $implType*, SVGElement*);\n");
- } elsif ($svgPropertyType) {
+ if ($svgPropertyType) {
push(@headerContent, "JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, $implType*);\n");
} elsif (IsSVGTypeNeedingContextParameter($implClassName)) {
push(@headerContent, "JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, $implType*, SVGElement* context);\n");
@@ -955,10 +944,7 @@ sub GenerateHeader
}
}
if (!$hasParent || $dataNode->extendedAttributes->{"GenerateNativeConverter"}) {
-
- if ($podType) {
- push(@headerContent, "$podType to${interfaceName}(JSC::JSValue);\n");
- } elsif ($interfaceName eq "NodeFilter") {
+ if ($interfaceName eq "NodeFilter") {
push(@headerContent, "PassRefPtr<NodeFilter> toNodeFilter(JSC::JSValue);\n");
} else {
push(@headerContent, "$implType* to${interfaceName}(JSC::JSValue);\n");
@@ -1430,15 +1416,9 @@ sub GenerateImplementation
my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($implType);
$implType = $svgNativeType if $svgNativeType;
- my $podType = $dataNode->extendedAttributes->{"PODType"};
- if ($podType) {
- $implType = "JSSVGPODTypeWrapper<$podType> ";
- }
-
- my $svgPropertyOrPodType;
- $svgPropertyOrPodType = $podType if $podType;
- $svgPropertyOrPodType = $svgPropertyType if $svgPropertyType;
- $svgPropertyOrPodType = $svgListPropertyType if $svgListPropertyType;
+ my $svgPropertyOrListPropertyType;
+ $svgPropertyOrListPropertyType = $svgPropertyType if $svgPropertyType;
+ $svgPropertyOrListPropertyType = $svgListPropertyType if $svgListPropertyType;
# Constructor
if ($interfaceName eq "DOMWindow") {
@@ -1561,11 +1541,6 @@ sub GenerateImplementation
push(@implContent, "{\n");
push(@implContent, " ${className}* castedThis = static_cast<$className*>(asObject(slotBase));\n");
- my $implClassNameForValueConversion = "";
- if (!$svgPropertyOrPodType and ($codeGenerator->IsSVGAnimatedType($implClassName) or $attribute->type !~ /^readonly/)) {
- $implClassNameForValueConversion = $implClassName;
- }
-
if ($dataNode->extendedAttributes->{"CheckDomainSecurity"} &&
!$attribute->signature->extendedAttributes->{"DoNotCheckDomainSecurity"} &&
!$attribute->signature->extendedAttributes->{"DoNotCheckDomainSecurityOnGet"}) {
@@ -1578,12 +1553,12 @@ sub GenerateImplementation
} elsif ($attribute->signature->extendedAttributes->{"CheckNodeSecurity"}) {
$implIncludes{"JSDOMBinding.h"} = 1;
push(@implContent, " $implClassName* imp = static_cast<$implClassName*>(castedThis->impl());\n");
- push(@implContent, " return checkNodeSecurity(exec, imp->$implGetterFunctionName()) ? " . NativeToJSValue($attribute->signature, 0, $implClassName, $implClassNameForValueConversion, "imp->$implGetterFunctionName()", "castedThis") . " : jsUndefined();\n");
+ push(@implContent, " return checkNodeSecurity(exec, imp->$implGetterFunctionName()) ? " . NativeToJSValue($attribute->signature, 0, $implClassName, "imp->$implGetterFunctionName()", "castedThis") . " : jsUndefined();\n");
} elsif ($attribute->signature->extendedAttributes->{"CheckFrameSecurity"}) {
$implIncludes{"Document.h"} = 1;
$implIncludes{"JSDOMBinding.h"} = 1;
push(@implContent, " $implClassName* imp = static_cast<$implClassName*>(castedThis->impl());\n");
- push(@implContent, " return checkNodeSecurity(exec, imp->contentDocument()) ? " . NativeToJSValue($attribute->signature, 0, $implClassName, $implClassNameForValueConversion, "imp->$implGetterFunctionName()", "castedThis") . " : jsUndefined();\n");
+ push(@implContent, " return checkNodeSecurity(exec, imp->contentDocument()) ? " . NativeToJSValue($attribute->signature, 0, $implClassName, "imp->$implGetterFunctionName()", "castedThis") . " : jsUndefined();\n");
} elsif ($type eq "EventListener") {
$implIncludes{"EventListener.h"} = 1;
push(@implContent, " UNUSED_PARAM(exec);\n");
@@ -1616,27 +1591,21 @@ sub GenerateImplementation
}
if ($svgListPropertyType) {
- push(@implContent, " JSValue result = " . NativeToJSValue($attribute->signature, 0, $implClassName, "", "castedThis->impl()->$implGetterFunctionName()", "castedThis") . ";\n");
- } elsif ($svgPropertyOrPodType) {
- push(@implContent, " $svgPropertyOrPodType imp(*castedThis->impl());\n") if $podType;
- push(@implContent, " $svgPropertyOrPodType& imp = castedThis->impl()->propertyReference();\n") if !$podType;
- if ($svgPropertyOrPodType eq "float") { # Special case for JSSVGNumber
- push(@implContent, " JSValue result = " . NativeToJSValue($attribute->signature, 0, $implClassName, "", "imp", "castedThis") . ";\n");
+ push(@implContent, " JSValue result = " . NativeToJSValue($attribute->signature, 0, $implClassName, "castedThis->impl()->$implGetterFunctionName()", "castedThis") . ";\n");
+ } elsif ($svgPropertyOrListPropertyType) {
+ push(@implContent, " $svgPropertyOrListPropertyType& imp = castedThis->impl()->propertyReference();\n");
+ if ($svgPropertyOrListPropertyType eq "float") { # Special case for JSSVGNumber
+ push(@implContent, " JSValue result = " . NativeToJSValue($attribute->signature, 0, $implClassName, "imp", "castedThis") . ";\n");
} else {
- push(@implContent, " JSValue result = " . NativeToJSValue($attribute->signature, 0, $implClassName, "", "imp.$implGetterFunctionName()", "castedThis") . ";\n");
+ push(@implContent, " JSValue result = " . NativeToJSValue($attribute->signature, 0, $implClassName, "imp.$implGetterFunctionName()", "castedThis") . ";\n");
}
} else {
my $getterExpression = "imp->" . $codeGenerator->GetterExpressionPrefix(\%implIncludes, $interfaceName, $attribute) . ")";
- my $jsType = NativeToJSValue($attribute->signature, 0, $implClassName, $implClassNameForValueConversion, $getterExpression, "castedThis");
+ my $jsType = NativeToJSValue($attribute->signature, 0, $implClassName, $getterExpression, "castedThis");
push(@implContent, " $implClassName* imp = static_cast<$implClassName*>(castedThis->impl());\n");
if ($codeGenerator->IsSVGAnimatedType($type)) {
push(@implContent, " RefPtr<$type> obj = $jsType;\n");
-
- if ($codeGenerator->IsSVGNewStyleAnimatedType($type)) {
- push(@implContent, " JSValue result = toJS(exec, castedThis->globalObject(), obj.get());\n");
- } else {
- push(@implContent, " JSValue result = toJS(exec, castedThis->globalObject(), obj.get(), imp);\n");
- }
+ push(@implContent, " JSValue result = toJS(exec, castedThis->globalObject(), obj.get());\n");
} else {
push(@implContent, " JSValue result = $jsType;\n");
}
@@ -1647,12 +1616,12 @@ sub GenerateImplementation
} else {
push(@implContent, " ExceptionCode ec = 0;\n");
- if ($svgPropertyOrPodType) {
- push(@implContent, " $svgPropertyOrPodType imp(*castedThis->impl());\n");
- push(@implContent, " JSC::JSValue result = " . NativeToJSValue($attribute->signature, 0, $implClassName, "", "imp.$implGetterFunctionName(ec)", "castedThis") . ";\n");
+ if ($svgPropertyOrListPropertyType) {
+ push(@implContent, " $svgPropertyOrListPropertyType imp(*castedThis->impl());\n");
+ push(@implContent, " JSC::JSValue result = " . NativeToJSValue($attribute->signature, 0, $implClassName, "imp.$implGetterFunctionName(ec)", "castedThis") . ";\n");
} else {
push(@implContent, " $implClassName* imp = static_cast<$implClassName*>(castedThis->impl());\n");
- push(@implContent, " JSC::JSValue result = " . NativeToJSValue($attribute->signature, 0, $implClassName, $implClassNameForValueConversion, "imp->$implGetterFunctionName(ec)", "castedThis") . ";\n");
+ push(@implContent, " JSC::JSValue result = " . NativeToJSValue($attribute->signature, 0, $implClassName, "imp->$implGetterFunctionName(ec)", "castedThis") . ";\n");
}
push(@implContent, " setDOMException(exec, ec);\n");
@@ -1782,8 +1751,11 @@ sub GenerateImplementation
push(@implContent, " $implType* imp = static_cast<$implType*>(castedThis->impl());\n");
push(@implContent, " ExceptionCode ec = 0;\n") if @{$attribute->setterExceptions};
- # For setters with "StrictTypeChecking", if an input parameter's type does not match the signature,
- # a TypeError is thrown instead of casting to null.
+ # If the "StrictTypeChecking" extended attribute is present, and the attribute's type is an
+ # interface type, then if the incoming value does not implement that interface, a TypeError
+ # is thrown rather than silently passing NULL to the C++ code.
+ # Per the Web IDL and ECMAScript specifications, incoming values can always be converted to
+ # both strings and numbers, so do not throw TypeError if the attribute is of these types.
if ($attribute->signature->extendedAttributes->{"StrictTypeChecking"}) {
$implIncludes{"<runtime/Error.h>"} = 1;
@@ -1793,29 +1765,13 @@ sub GenerateImplementation
push(@implContent, " throwVMTypeError(exec);\n");
push(@implContent, " return;\n");
push(@implContent, " };\n");
- } elsif ($codeGenerator->IsStringType($argType)) {
- push(@implContent, " if (!value.isUndefinedOrNull() && !value.isString() && !value.isObject()) {\n");
- push(@implContent, " throwVMTypeError(exec);\n");
- push(@implContent, " return;\n");
- push(@implContent, " };\n");
- } elsif ($codeGenerator->IsNumericType($argType)) {
- push(@implContent, " if (!value.isUndefinedOrNull() && !value.isNumber() && !value.isBoolean()) {\n");
- push(@implContent, " throwVMTypeError(exec);\n");
- push(@implContent, " return;\n");
- push(@implContent, " };\n");
- } elsif ($argType eq "boolean") {
- push(@implContent, " if (!value.isUndefinedOrNull() && !value.isBoolean()) {\n");
- push(@implContent, " throwVMTypeError(exec);\n");
- push(@implContent, " return;\n");
- push(@implContent, " };\n");
}
}
my $nativeValue = JSValueToNative($attribute->signature, "value");
- if ($svgPropertyOrPodType) {
- push(@implContent, " $svgPropertyOrPodType podImp(*imp);\n") if $podType;
- push(@implContent, " $svgPropertyOrPodType& podImp = imp->propertyReference();\n") if !$podType;
- if ($svgPropertyOrPodType eq "float") { # Special case for JSSVGNumber
+ if ($svgPropertyOrListPropertyType) {
+ push(@implContent, " $svgPropertyOrListPropertyType& podImp = imp->propertyReference();\n");
+ if ($svgPropertyOrListPropertyType eq "float") { # Special case for JSSVGNumber
push(@implContent, " podImp = $nativeValue;\n");
} else {
push(@implContent, " podImp.set$implSetterFunctionName($nativeValue");
@@ -1823,7 +1779,6 @@ sub GenerateImplementation
push(@implContent, ");\n");
push(@implContent, " setDOMException(exec, ec);\n") if @{$attribute->setterExceptions};
}
- push(@implContent, " imp->commitChange(podImp, castedThis);\n") if $podType;
if ($svgPropertyType) {
if (@{$attribute->setterExceptions}) {
push(@implContent, " if (!ec)\n");
@@ -1915,32 +1870,11 @@ sub GenerateImplementation
push(@implContent, " return JSValue::encode(jsUndefined());\n");
}
- # Special case for JSSVGLengthList / JSSVGTransformList / JSSVGPointList / JSSVGNumberList
- # Instead of having JSSVG*Custom.cpp implementations for the SVGList interface for all of these
- # classes, we directly forward the calls to JSSVGPODListCustom, which centralizes the otherwise
- # duplicated code for the JSSVG*List classes mentioned above.
- my $svgPODListType;
- if ($implClassName =~ /SVG.*List/ and !$svgListPropertyType) {
- $svgPODListType = $implClassName;
- $svgPODListType =~ s/List$//;
- $svgPODListType = "" unless $codeGenerator->IsPodType($svgPODListType);
-
- # Ignore additional (non-SVGList) SVGTransformList methods, that are not handled through JSSVGPODListCustom
- $svgPODListType = "" if $functionImplementationName =~ /createSVGTransformFromMatrix/;
- $svgPODListType = "" if $functionImplementationName =~ /consolidate/;
- }
-
if ($function->signature->extendedAttributes->{"Custom"} || $function->signature->extendedAttributes->{"JSCCustom"}) {
push(@implContent, " return JSValue::encode(castedThis->" . $functionImplementationName . "(exec));\n");
- } elsif ($svgPODListType) {
- $implIncludes{"JS${svgPODListType}.h"} = 1;
- $implIncludes{"JSSVGPODListCustom.h"} = 1;
- push(@implContent, " return JSValue::encode(JSSVGPODListCustom::$functionImplementationName<$className, " . GetNativeType($svgPODListType)
- . ">(castedThis, exec, to" . $svgPODListType . "));\n");
} else {
push(@implContent, " $implType* imp = static_cast<$implType*>(castedThis->impl());\n");
- push(@implContent, " $svgPropertyOrPodType podImp(*imp);\n") if $podType;
- push(@implContent, " $svgPropertyOrPodType& podImp = imp->propertyReference();\n") if !$podType and $svgPropertyType;
+ push(@implContent, " $svgPropertyOrListPropertyType& podImp = imp->propertyReference();\n") if $svgPropertyType;
my $numParameters = @{$function->parameters};
@@ -1979,7 +1913,7 @@ sub GenerateImplementation
} else {
my $argsIndex = 0;
my $paramIndex = 0;
- my $functionString = (($svgPropertyOrPodType and !$svgListPropertyType) ? "podImp." : "imp->") . $functionImplementationName . "(";
+ my $functionString = (($svgPropertyOrListPropertyType and !$svgListPropertyType) ? "podImp." : "imp->") . $functionImplementationName . "(";
my $hasOptionalArguments = 0;
if ($function->signature->extendedAttributes->{"CustomArgumentHandling"}) {
@@ -2024,7 +1958,7 @@ sub GenerateImplementation
$hasOptionalArguments = 1;
}
push(@implContent, " if (argsCount <= $argsIndex) {\n");
- GenerateImplementationFunctionCall($function, $functionString, $paramIndex, " " x 2, $podType, $svgPropertyType, $implClassName);
+ GenerateImplementationFunctionCall($function, $functionString, $paramIndex, " " x 2, $svgPropertyType, $implClassName);
push(@implContent, " }\n\n");
}
@@ -2060,8 +1994,11 @@ sub GenerateImplementation
push(@implContent, " RefPtr<$argType> $name = ${callbackClassName}::create(asObject(exec->argument($argsIndex)), castedThis->globalObject());\n");
}
} else {
- # For functions with "StrictTypeChecking", if an input parameter's type does not match the signature,
- # a TypeError is thrown instead of casting to null.
+ # If the "StrictTypeChecking" extended attribute is present, and the argument's type is an
+ # interface type, then if the incoming value does not implement that interface, a TypeError
+ # is thrown rather than silently passing NULL to the C++ code.
+ # Per the Web IDL and ECMAScript semantics, incoming values can always be converted to both
+ # strings and numbers, so do not throw TypeError if the argument is of these types.
if ($function->signature->extendedAttributes->{"StrictTypeChecking"}) {
$implIncludes{"<runtime/Error.h>"} = 1;
@@ -2069,12 +2006,6 @@ sub GenerateImplementation
if (!IsNativeType($argType)) {
push(@implContent, " if (exec->argumentCount() > $argsIndex && !${argValue}.isUndefinedOrNull() && !${argValue}.inherits(&JS${argType}::s_info))\n");
push(@implContent, " return throwVMTypeError(exec);\n");
- } elsif ($codeGenerator->IsStringType($argType)) {
- push(@implContent, " if (exec->argumentCount() > $argsIndex && !${argValue}.isUndefinedOrNull() && !${argValue}.isString() && !${argValue}.isObject())\n");
- push(@implContent, " return throwVMTypeError(exec);\n");
- } elsif ($codeGenerator->IsNumericType($argType)) {
- push(@implContent, " if (exec->argumentCount() > $argsIndex && !${argValue}.isUndefinedOrNull() && !${argValue}.isNumber() && !${argValue}.isBoolean())\n");
- push(@implContent, " return throwVMTypeError(exec);\n");
}
}
@@ -2122,7 +2053,7 @@ sub GenerateImplementation
}
push(@implContent, "\n");
- GenerateImplementationFunctionCall($function, $functionString, $paramIndex, " ", $podType, $svgPropertyType, $implClassName);
+ GenerateImplementationFunctionCall($function, $functionString, $paramIndex, " ", $svgPropertyType, $implClassName);
}
}
push(@implContent, "}\n\n");
@@ -2192,8 +2123,6 @@ sub GenerateImplementation
push(@implContent, "{\n");
if ($svgPropertyType) {
push(@implContent, " return getDOMObjectWrapper<$className, $implType>(exec, globalObject, object);\n");
- } elsif ($podType) {
- push(@implContent, " return getDOMObjectWrapper<$className, $implType>(exec, globalObject, object, context);\n");
} elsif (IsSVGTypeNeedingContextParameter($implClassName)) {
push(@implContent, " return getDOMObjectWrapper<$className>(exec, globalObject, object, context);\n");
} else {
@@ -2203,16 +2132,9 @@ sub GenerateImplementation
}
if ((!$hasParent or $dataNode->extendedAttributes->{"GenerateNativeConverter"}) and !$dataNode->extendedAttributes->{"CustomNativeConverter"}) {
- if ($podType) {
- push(@implContent, "$podType to${interfaceName}(JSC::JSValue value)\n");
- push(@implContent, "{\n");
- push(@implContent, " return value.inherits(&${className}::s_info) ? ($podType) *static_cast<$className*>(asObject(value))->impl() : $podType()");
- } else {
- push(@implContent, "$implType* to${interfaceName}(JSC::JSValue value)\n");
- push(@implContent, "{\n");
- push(@implContent, " return value.inherits(&${className}::s_info) ? static_cast<$className*>(asObject(value))->impl() : 0");
- }
-
+ push(@implContent, "$implType* to${interfaceName}(JSC::JSValue value)\n");
+ push(@implContent, "{\n");
+ push(@implContent, " return value.inherits(&${className}::s_info) ? static_cast<$className*>(asObject(value))->impl() : 0");
push(@implContent, ";\n}\n");
}
@@ -2387,7 +2309,6 @@ sub GenerateImplementationFunctionCall()
my $functionString = shift;
my $paramIndex = shift;
my $indent = shift;
- my $podType = shift;
my $svgPropertyType = shift;
my $implClassName = shift;
@@ -2406,7 +2327,6 @@ sub GenerateImplementationFunctionCall()
if ($function->signature->type eq "void") {
push(@implContent, $indent . "$functionString;\n");
push(@implContent, $indent . "setDOMException(exec, ec);\n") if @{$function->raisesExceptions};
- push(@implContent, $indent . "imp->commitChange(podImp, castedThis);\n") if $podType;
if ($svgPropertyType) {
if (@{$function->raisesExceptions}) {
@@ -2419,7 +2339,7 @@ sub GenerateImplementationFunctionCall()
push(@implContent, $indent . "return JSValue::encode(jsUndefined());\n");
} else {
- push(@implContent, "\n" . $indent . "JSC::JSValue result = " . NativeToJSValue($function->signature, 1, $implClassName, "", $functionString, "castedThis") . ";\n");
+ push(@implContent, "\n" . $indent . "JSC::JSValue result = " . NativeToJSValue($function->signature, 1, $implClassName, $functionString, "castedThis") . ";\n");
push(@implContent, $indent . "setDOMException(exec, ec);\n") if @{$function->raisesExceptions};
$callWith = $function->signature->extendedAttributes->{"CallWith"};
@@ -2428,12 +2348,6 @@ sub GenerateImplementationFunctionCall()
push(@implContent, $indent . " return JSValue::encode(jsUndefined());\n");
}
- if ($podType and not $function->signature->extendedAttributes->{"Immutable"}) {
- # Immutable methods do not commit changes back to the instance, thus producing
- # a new instance rather than mutating existing one.
- push(@implContent, $indent . "imp->commitChange(podImp, castedThis);\n");
- }
-
push(@implContent, $indent . "return JSValue::encode(result);\n");
}
}
@@ -2458,9 +2372,7 @@ my %nativeType = (
"NodeFilter" => "RefPtr<NodeFilter>",
"SerializedScriptValue" => "RefPtr<SerializedScriptValue>",
"IDBKey" => "RefPtr<IDBKey>",
- "SVGMatrix" => "AffineTransform",
"SVGPaintType" => "SVGPaint::SVGPaintType",
- "SVGTransform" => "SVGTransform",
"boolean" => "bool",
"double" => "double",
"float" => "float",
@@ -2508,6 +2420,11 @@ sub GetSVGPropertyTypes
$svgListPropertyType = $svgWrappedNativeType;
$headerIncludes{"$svgWrappedNativeType.h"} = 1;
$headerIncludes{"SVGAnimatedListPropertyTearOff.h"} = 1;
+ } elsif ($svgNativeType =~ /SVGTransformListPropertyTearOff/) {
+ $svgListPropertyType = $svgWrappedNativeType;
+ $headerIncludes{"$svgWrappedNativeType.h"} = 1;
+ $headerIncludes{"SVGAnimatedListPropertyTearOff.h"} = 1;
+ $headerIncludes{"SVGTransformListPropertyTearOff.h"} = 1;
}
return ($svgPropertyType, $svgListPropertyType, $svgNativeType);
@@ -2572,7 +2489,6 @@ sub NativeToJSValue
my $signature = shift;
my $inFunctionCall = shift;
my $implClassName = shift;
- my $implClassNameForValueConversion = shift;
my $value = shift;
my $thisValue = shift;
@@ -2606,35 +2522,6 @@ sub NativeToJSValue
}
my $globalObject = "$thisValue->globalObject()";
- if ($codeGenerator->IsPodType($type)) {
- $implIncludes{"JS$type.h"} = 1;
-
- my $nativeType = GetNativeType($type);
-
- my $getter = $value;
- $getter =~ s/imp->//;
- $getter =~ s/\(\)//;
-
- my $setter = "set" . $codeGenerator->WK_ucfirst($getter);
-
- # Function calls will never return 'modifyable' POD types (ie. SVGRect getBBox()) - no need to keep track changes to the returned SVGRect
- if ($inFunctionCall eq 0
- and not $codeGenerator->IsSVGAnimatedType($implClassName)
- and $codeGenerator->IsPodTypeWithWriteableProperties($type)
- and not defined $signature->extendedAttributes->{"Immutable"}) {
- if ($codeGenerator->IsPodType($implClassName)) {
- return "toJS(exec, $globalObject, JSSVGStaticPODTypeWrapperWithPODTypeParent<$nativeType, $implClassName>::create($value, $thisValue->impl()).get(), JSSVGContextCache::svgContextForDOMObject(castedThis))";
- } else {
- return "toJS(exec, $globalObject, JSSVGStaticPODTypeWrapperWithParent<$nativeType, $implClassName>::create(imp, &${implClassName}::$getter, &${implClassName}::$setter).get(), imp)";
- }
- }
-
- if ($implClassNameForValueConversion eq "") {
- return "toJS(exec, $globalObject, JSSVGStaticPODTypeWrapper<$nativeType>::create($value).get(), 0 /* no context on purpose */)";
- } else {
- return "toJS(exec, $globalObject, JSSVGDynamicPODTypeWrapperCache<$nativeType, $implClassNameForValueConversion>::lookupOrCreateWrapper(imp, &${implClassNameForValueConversion}::$getter, &${implClassNameForValueConversion}::$setter).get(), JSSVGContextCache::svgContextForDOMObject(castedThis));"
- }
- }
if ($type eq "CSSStyleDeclaration") {
$implIncludes{"CSSMutableStyleDeclaration.h"} = 1;
@@ -2675,20 +2562,35 @@ sub NativeToJSValue
return "toJSNewlyCreated(exec, $globalObject, WTF::getPtr($value))";
}
- if ($codeGenerator->IsSVGNewStyleAnimatedType($implClassName)) {
+ if ($codeGenerator->IsSVGAnimatedType($implClassName)) {
# Convert from abstract SVGProperty to real type, so the right toJS() method can be invoked.
$value = "static_cast<" . GetNativeType($type) . ">($value)";
} elsif ($codeGenerator->IsSVGTypeNeedingTearOff($type) and not $implClassName =~ /List$/) {
my $tearOffType = $codeGenerator->GetSVGTypeNeedingTearOff($type);
if ($codeGenerator->IsSVGTypeWithWritablePropertiesNeedingTearOff($type) and $inFunctionCall eq 0 and not defined $signature->extendedAttributes->{"Immutable"}) {
- $tearOffType =~ s/SVGPropertyTearOff</SVGStaticPropertyTearOff<$implClassName, /;
- $implIncludes{"SVGStaticPropertyTearOff.h"} = 1;
-
my $getter = $value;
+ $getter =~ s/imp\.//;
$getter =~ s/imp->//;
$getter =~ s/\(\)//;
- my $updater = "update" . $codeGenerator->WK_ucfirst($getter);
- $value = "${tearOffType}::create(imp, $value, &${implClassName}::$updater)";
+ my $updateMethod = "&${implClassName}::update" . $codeGenerator->WK_ucfirst($getter);
+
+ my $selfIsTearOffType = $codeGenerator->IsSVGTypeNeedingTearOff($implClassName);
+ if ($selfIsTearOffType) {
+ $implIncludes{"SVGStaticPropertyWithParentTearOff.h"} = 1;
+ $tearOffType =~ s/SVGPropertyTearOff</SVGStaticPropertyWithParentTearOff<$implClassName, /;
+
+ if ($value =~ /matrix/ and $implClassName eq "SVGTransform") {
+ # SVGTransform offers a matrix() method for internal usage that returns an AffineTransform
+ # and a svgMatrix() method returning a SVGMatrix, used for the bindings.
+ $value =~ s/matrix/svgMatrix/;
+ }
+
+ $value = "${tearOffType}::create(castedThis->impl(), $value, $updateMethod)";
+ } else {
+ $implIncludes{"SVGStaticPropertyTearOff.h"} = 1;
+ $tearOffType =~ s/SVGPropertyTearOff</SVGStaticPropertyTearOff<$implClassName, /;
+ $value = "${tearOffType}::create(imp, $value, $updateMethod)";
+ }
} elsif ($tearOffType =~ /SVGStaticListPropertyTearOff/) {
my $extraImp = "GetOwnerElementForType<$implClassName, IsDerivedFromSVGElement<$implClassName>::value>::ownerElement(imp), ";
$value = "${tearOffType}::create($extraImp$value)";
diff --git a/WebCore/bindings/scripts/CodeGeneratorObjC.pm b/WebCore/bindings/scripts/CodeGeneratorObjC.pm
index 69e24a9..50334a2 100644
--- a/WebCore/bindings/scripts/CodeGeneratorObjC.pm
+++ b/WebCore/bindings/scripts/CodeGeneratorObjC.pm
@@ -492,7 +492,7 @@ sub GetPropertyAttributes
# FIXME: <rdar://problem/5049934> Consider using 'nonatomic' on the DOM @property declarations.
if ($codeGenerator->IsStringType($type) || IsNativeObjCType($type)) {
push(@attributes, "copy");
- } elsif ($codeGenerator->IsPodType($type) || $codeGenerator->IsSVGAnimatedType($type)) {
+ } elsif ($codeGenerator->IsSVGAnimatedType($type)) {
push(@attributes, "retain");
} elsif (!$codeGenerator->IsStringType($type) && !$codeGenerator->IsPrimitiveType($type) && $type ne "DOMTimeStamp" && $type ne "CompareHow" && $type ne "SVGPaintType") {
push(@attributes, "retain");
@@ -587,25 +587,12 @@ sub AddIncludesForType
return;
}
- if ($codeGenerator->IsSVGNewStyleAnimatedType($type)) {
- $implIncludes{"${type}.h"} = 1;
- $implIncludes{"DOM${type}Internal.h"} = 1;
- return;
- }
-
if ($codeGenerator->IsSVGAnimatedType($type)) {
- $implIncludes{"DeprecatedSVGAnimatedTemplate.h"} = 1;
+ $implIncludes{"${type}.h"} = 1;
$implIncludes{"DOM${type}Internal.h"} = 1;
return;
}
- if ($type eq "SVGMatrix") {
- $implIncludes{"AffineTransform.h"} = 1;
- $implIncludes{"DOMSVGMatrixInternal.h"} = 1;
- $implIncludes{"SVGException.h"} = 1;
- return;
- }
-
if ($type =~ /(\w+)(Abs|Rel)$/) {
$implIncludes{"$1.h"} = 1;
$implIncludes{"DOM${type}Internal.h"} = 1;
@@ -683,6 +670,9 @@ sub GetSVGPropertyTypes
} elsif ($svgNativeType =~ /SVGListPropertyTearOff/ or $svgNativeType =~ /SVGStaticListPropertyTearOff/) {
$svgListPropertyType = "WebCore::$svgWrappedNativeType";
$svgListPropertyType =~ s/</\<WebCore::/;
+ } elsif ($svgNativeType =~ /SVGTransformListPropertyTearOff/) {
+ $svgListPropertyType = "WebCore::$svgWrappedNativeType";
+ $svgListPropertyType =~ s/</\<WebCore::/;
}
return ($svgPropertyType, $svgListPropertyType, $svgNativeType);
@@ -999,8 +989,6 @@ sub GenerateHeader
unless ($isProtocol) {
# Generate internal interfaces
- my $podType = $dataNode->extendedAttributes->{"PODType"};
- my $podTypeWithNamespace;
my $implClassName = GetImplClassName($interfaceName);
my $implClassNameWithNamespace = "WebCore::" . $implClassName;
@@ -1008,16 +996,15 @@ sub GenerateHeader
my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($implClassName);
$implType = $svgNativeType if $svgNativeType;
- if ($podType) {
- $podTypeWithNamespace = ($podType eq "float") ? "$podType" : "WebCore::$podType";
- }
-
# Generate interface definitions.
@internalHeaderContent = split("\r", $implementationLicenseTemplate);
push(@internalHeaderContent, "\n#import <WebCore/$className.h>\n\n");
push(@internalHeaderContent, "#import <WebCore/SVGAnimatedPropertyTearOff.h>\n\n") if $svgPropertyType;
- push(@internalHeaderContent, "#import <WebCore/SVGAnimatedListPropertyTearOff.h>\n\n") if $svgListPropertyType;
+ if ($svgListPropertyType) {
+ push(@internalHeaderContent, "#import <WebCore/SVGAnimatedListPropertyTearOff.h>\n\n");
+ push(@internalHeaderContent, "#import <WebCore/SVGTransformListPropertyTearOff.h>\n\n") if $svgListPropertyType =~ /SVGTransformList/;
+ }
push(@internalHeaderContent, $interfaceAvailabilityVersionCheck) if length $interfaceAvailabilityVersion;
if ($interfaceName eq "Node") {
@@ -1026,16 +1013,12 @@ sub GenerateHeader
my $startedNamespace = 0;
- if ($codeGenerator->IsSVGNewStyleAnimatedType($interfaceName)) {
+ if ($codeGenerator->IsSVGAnimatedType($interfaceName)) {
push(@internalHeaderContent, "#import <WebCore/$implClassName.h>\n\n");
- } elsif ($codeGenerator->IsSVGAnimatedType($interfaceName)) {
- push(@internalHeaderContent, "#import <WebCore/DeprecatedSVGAnimatedTemplate.h>\n\n");
} else {
push(@internalHeaderContent, "namespace WebCore {\n");
$startedNamespace = 1;
- if ($podType and $podType ne "float") {
- push(@internalHeaderContent, " class $podType;\n");
- } elsif ($interfaceName eq "Node") {
+ if ($interfaceName eq "Node") {
push(@internalHeaderContent, " class EventTarget;\n class Node;\n");
} else {
push(@internalHeaderContent, " class $implClassName;\n");
@@ -1043,13 +1026,8 @@ sub GenerateHeader
push(@internalHeaderContent, "}\n\n");
}
- if ($podType) {
- push(@internalHeaderContent, "$podTypeWithNamespace core($className *);\n");
- push(@internalHeaderContent, "$className *kit($podTypeWithNamespace);\n");
- } else {
- push(@internalHeaderContent, "$implType* core($className *);\n");
- push(@internalHeaderContent, "$className *kit($implType*);\n");
- }
+ push(@internalHeaderContent, "$implType* core($className *);\n");
+ push(@internalHeaderContent, "$className *kit($implType*);\n");
if ($dataNode->extendedAttributes->{Polymorphic}) {
push(@internalHeaderContent, "Class kitClass($implType*);\n");
@@ -1084,18 +1062,11 @@ sub GenerateImplementation
my $numAttributes = @{$dataNode->attributes};
my $numFunctions = @{$dataNode->functions};
-
- my $podType = $dataNode->extendedAttributes->{"PODType"};
- my $podTypeWithNamespace;
my $implType = $implClassNameWithNamespace;
my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($implClassName);
$implType = $svgNativeType if $svgNativeType;
- if ($podType) {
- $podTypeWithNamespace = ($podType eq "float") ? "$podType" : "WebCore::$podType";
- }
-
# - Add default header template.
@implContentHeader = split("\r", $implementationLicenseTemplate);
@@ -1124,20 +1095,14 @@ sub GenerateImplementation
$implIncludes{"DOMSVGPathSegInternal.h"} = 1 if $interfaceName =~ /^SVGPathSeg.+/;
- if ($codeGenerator->IsSVGAnimatedType($interfaceName) and !$codeGenerator->IsSVGNewStyleAnimatedType($interfaceName)) {
- $implIncludes{"DeprecatedSVGAnimatedTemplate.h"} = 1;
- } elsif ($interfaceName =~ /(\w+)(Abs|Rel)$/) {
+ if ($interfaceName =~ /(\w+)(Abs|Rel)$/) {
$implIncludes{"$1.h"} = 1;
} else {
- if (!$podType) {
- if (!$codeGenerator->AvoidInclusionOfType($implClassName)) {
- $implIncludes{"$implClassName.h"} = 1 ;
- } elsif ($codeGenerator->IsSVGTypeNeedingTearOff($implClassName)) {
- my $includeType = $codeGenerator->GetSVGWrappedTypeNeedingTearOff($implClassName);
- $implIncludes{"${includeType}.h"} = 1;
- }
- } else {
- $implIncludes{"$podType.h"} = 1 unless $podType eq "float";
+ if (!$codeGenerator->AvoidInclusionOfType($implClassName)) {
+ $implIncludes{"$implClassName.h"} = 1 ;
+ } elsif ($codeGenerator->IsSVGTypeNeedingTearOff($implClassName)) {
+ my $includeType = $codeGenerator->GetSVGWrappedTypeNeedingTearOff($implClassName);
+ $implIncludes{"${includeType}.h"} = 1;
}
}
@@ -1146,9 +1111,7 @@ sub GenerateImplementation
push(@implContent, "#import <wtf/GetPtr.h>\n\n");
# add implementation accessor
- if ($podType) {
- push(@implContent, "#define IMPL reinterpret_cast<$podTypeWithNamespace*>(_internal)\n\n");
- } elsif ($parentImplClassName eq "Object") {
+ if ($parentImplClassName eq "Object") {
push(@implContent, "#define IMPL reinterpret_cast<$implType*>(_internal)\n\n");
} else {
my $baseClassWithNamespace = "WebCore::$baseClass";
@@ -1171,8 +1134,6 @@ sub GenerateImplementation
push(@implContent, " [self detach];\n");
push(@implContent, " IMPL->deref();\n");
push(@implContent, " };\n");
- } elsif ($podType) {
- push(@implContent, " delete IMPL;\n");
} else {
push(@implContent, " if (_internal)\n");
push(@implContent, " IMPL->deref();\n");
@@ -1187,8 +1148,6 @@ sub GenerateImplementation
push(@implContent, " [self detach];\n");
push(@implContent, " IMPL->deref();\n");
push(@implContent, " };\n");
- } elsif ($podType) {
- push(@implContent, " delete IMPL;\n");
} else {
push(@implContent, " if (_internal)\n");
push(@implContent, " IMPL->deref();\n");
@@ -1285,7 +1244,7 @@ sub GenerateImplementation
} elsif ($attribute->signature->extendedAttributes->{"ConvertToString"}) {
$getterContentHead = "WTF::String::number(" . $getterContentHead;
$getterContentTail .= ")";
- } elsif ($codeGenerator->IsPodType($idlType) or $idlType eq "Date") {
+ } elsif ($idlType eq "Date") {
$getterContentHead = "kit($getterContentHead";
$getterContentTail .= ")";
} elsif ($svgPropertyType) {
@@ -1296,7 +1255,35 @@ sub GenerateImplementation
} else {
$getterContentHead = "IMPL->propertyReference().$getterContentHead";
}
- } elsif ($codeGenerator->IsSVGNewStyleAnimatedType($implClassName) and $codeGenerator->IsSVGTypeNeedingTearOff($idlType)) {
+
+ if ($codeGenerator->IsSVGTypeWithWritablePropertiesNeedingTearOff($idlType) and not defined $attribute->signature->extendedAttributes->{"Immutable"}) {
+ my $getter = $getterContentHead;
+ $getter =~ s/\(\)//;
+
+ my $tearOffType = GetSVGTypeWithNamespace($idlType);
+ my $selfIsTearOffType = $codeGenerator->IsSVGTypeNeedingTearOff($implClassName);
+ if ($selfIsTearOffType) {
+ $implIncludes{"SVGStaticPropertyWithParentTearOff.h"} = 1;
+ $tearOffType =~ s/SVGPropertyTearOff</SVGStaticPropertyWithParentTearOff<$implClassNameWithNamespace, /;
+
+ my $getter = $getterExpressionPrefix;
+ $getter =~ s/IMPL->//;
+ $getter =~ s/\(//;
+ my $updateMethod = "&${implClassNameWithNamespace}::update" . $codeGenerator->WK_ucfirst($getter);
+
+ if ($getterContentHead =~ /matrix/ and $implClassName eq "SVGTransform") {
+ # SVGTransform offers a matrix() method for internal usage that returns an AffineTransform
+ # and a svgMatrix() method returning a SVGMatrix, used for the bindings.
+ $getterContentHead =~ s/matrix/svgMatrix/;
+ }
+
+ $getterContentHead = "${tearOffType}::create(IMPL, $getterContentHead$getterContentTail, $updateMethod)";
+
+ $getterContentHead = "kit(WTF::getPtr($getterContentHead";
+ $getterContentTail = "))";
+ }
+ }
+ } elsif ($codeGenerator->IsSVGAnimatedType($implClassName) and $codeGenerator->IsSVGTypeNeedingTearOff($idlType)) {
my $idlTypeWithNamespace = GetSVGTypeWithNamespace($idlType);
$getterContentHead = "kit(static_cast<$idlTypeWithNamespace*>($getterContentHead)";
$getterContentTail .= ")";
@@ -1320,8 +1307,8 @@ sub GenerateImplementation
my $getter = $getterContentHead;
$getter =~ s/IMPL->//;
$getter =~ s/\(//;
- my $updater = "update" . $codeGenerator->WK_ucfirst($getter);
- $getterContentHead = "kit(WTF::getPtr(${idlTypeWithNamespace}::create(IMPL, $getterContentHead$getterContentTail, &${implClassNameWithNamespace}::$updater";
+ my $updateMethod = "&${implClassNameWithNamespace}::update" . $codeGenerator->WK_ucfirst($getter);
+ $getterContentHead = "kit(WTF::getPtr(${idlTypeWithNamespace}::create(IMPL, $getterContentHead$getterContentTail, $updateMethod";
$getterContentTail .= "))";
} elsif ($idlTypeWithNamespace =~ /SVGStaticListPropertyTearOff/) {
my $extraImp = "WebCore::GetOwnerElementForType<$implClassNameWithNamespace, WebCore::IsDerivedFromSVGElement<$implClassNameWithNamespace>::value>::ownerElement(IMPL), ";
@@ -1429,8 +1416,6 @@ sub GenerateImplementation
} elsif ($svgListPropertyType) {
$getterContentHead = "$getterExpressionPrefix";
push(@implContent, " IMPL->$coreSetterName($arg);\n");
- } elsif ($podType) {
- push(@implContent, " IMPL->$coreSetterName($arg);\n");
} else {
my $setterExpressionPrefix = $codeGenerator->SetterExpressionPrefix(\%implIncludes, $interfaceName, $attribute);
my $ec = $hasSetterException ? ", ec" : "";
@@ -1547,12 +1532,10 @@ sub GenerateImplementation
}
# FIXME! We need [Custom] support for ObjC, to move these hacks into DOMSVGLength/MatrixCustom.mm
- my $svgMatrixRotateFromVector = ($podType and $podType eq "AffineTransform" and $functionName eq "rotateFromVector");
- my $svgMatrixInverse = ($podType and $podType eq "AffineTransform" and $functionName eq "inverse");
my $svgLengthConvertToSpecifiedUnits = ($svgPropertyType and $svgPropertyType eq "WebCore::SVGLength" and $functionName eq "convertToSpecifiedUnits");
push(@parameterNames, "IMPL->contextElement()") if $svgLengthConvertToSpecifiedUnits;
- push(@parameterNames, "ec") if $raisesExceptions and !($svgMatrixRotateFromVector || $svgMatrixInverse);
+ push(@parameterNames, "ec") if $raisesExceptions;
# Handle arguments that are 'SVGProperty' based (SVGAngle/SVGLength). We need to convert from SVGPropertyTearOff<Type>* to Type,
# to be able to call the desired WebCore function. If the conversion fails, we can't extract Type and need to raise an exception.
@@ -1561,6 +1544,10 @@ sub GenerateImplementation
$currentParameter++;
my $paramName = $param->name;
+
+ # make a new parameter name if the original conflicts with a property name
+ $paramName = "in" . ucfirst($paramName) if $attributeNames{$paramName};
+
my $idlType = $codeGenerator->StripModule($param->type);
next if not $codeGenerator->IsSVGTypeNeedingTearOff($idlType) or $implClassName =~ /List$/;
@@ -1591,21 +1578,7 @@ sub GenerateImplementation
$content = $caller . "->$content";
}
- if ($svgMatrixRotateFromVector) {
- # Special case with rotateFromVector & SVGMatrix
- push(@functionContent, " $exceptionInit\n");
- push(@functionContent, " if (x == 0.0 || y == 0.0)\n");
- push(@functionContent, " ec = WebCore::SVGException::SVG_INVALID_VALUE_ERR;\n");
- push(@functionContent, " $exceptionRaiseOnError\n");
- push(@functionContent, " return kit($content);\n");
- } elsif ($svgMatrixInverse) {
- # Special case with inverse & SVGMatrix
- push(@functionContent, " $exceptionInit\n");
- push(@functionContent, " if (!$caller->isInvertible())\n");
- push(@functionContent, " ec = WebCore::SVGException::SVG_MATRIX_NOT_INVERTABLE;\n");
- push(@functionContent, " $exceptionRaiseOnError\n");
- push(@functionContent, " return kit($content);\n");
- } elsif ($returnType eq "void") {
+ if ($returnType eq "void") {
# Special case 'void' return type.
if ($raisesExceptions) {
push(@functionContent, " $exceptionInit\n");
@@ -1617,7 +1590,7 @@ sub GenerateImplementation
push(@functionContent, " $exceptionRaiseOnError\n");
} else {
push(@functionContent, " $content;\n");
- push(@functionContent, " IMPL->commitChange()\n") if $svgPropertyType;
+ push(@functionContent, " IMPL->commitChange();\n") if $svgPropertyType;
}
} elsif (defined $needsCustom{"NodeToReturn"}) {
# Special case the insertBefore, replaceChild, removeChild
@@ -1641,8 +1614,6 @@ sub GenerateImplementation
if ($codeGenerator->IsSVGTypeNeedingTearOff($function->signature->type) and not $implClassName =~ /List$/) {
my $idlTypeWithNamespace = GetSVGTypeWithNamespace($function->signature->type);
$content = "kit(WTF::getPtr(${idlTypeWithNamespace}::create($content)))";
- } elsif ($codeGenerator->IsPodType($function->signature->type)) {
- $content = "kit($content)";
} else {
$content = "kit(WTF::getPtr($content))";
}
@@ -1693,28 +1664,12 @@ sub GenerateImplementation
push(@implContent, "\@end\n");
# Generate internal interfaces
- if ($podType) {
- push(@implContent, "\n$podTypeWithNamespace core($className *wrapper)\n");
- push(@implContent, "{\n");
- push(@implContent, " return wrapper ? *reinterpret_cast<$podTypeWithNamespace*>(wrapper->_internal) : $podTypeWithNamespace();\n");
- push(@implContent, "}\n\n");
- } else {
- push(@implContent, "\n$implType* core($className *wrapper)\n");
- push(@implContent, "{\n");
- push(@implContent, " return wrapper ? reinterpret_cast<$implType*>(wrapper->_internal) : 0;\n");
- push(@implContent, "}\n\n");
- }
+ push(@implContent, "\n$implType* core($className *wrapper)\n");
+ push(@implContent, "{\n");
+ push(@implContent, " return wrapper ? reinterpret_cast<$implType*>(wrapper->_internal) : 0;\n");
+ push(@implContent, "}\n\n");
- if ($podType) {
- # FIXME: Implement caching.
- push(@implContent, "$className *kit($podTypeWithNamespace value)\n");
- push(@implContent, "{\n");
- push(@implContent, " $assertMainThread;\n");
- push(@implContent, " $className *wrapper = [[$className alloc] _init];\n");
- push(@implContent, " wrapper->_internal = reinterpret_cast<DOMObjectInternal*>(new $podTypeWithNamespace(value));\n");
- push(@implContent, " return [wrapper autorelease];\n");
- push(@implContent, "}\n");
- } elsif ($parentImplClassName eq "Object") {
+ if ($parentImplClassName eq "Object") {
push(@implContent, "$className *kit($implType* value)\n");
push(@implContent, "{\n");
push(@implContent, " $assertMainThread;\n");
diff --git a/WebCore/bindings/scripts/CodeGeneratorV8.pm b/WebCore/bindings/scripts/CodeGeneratorV8.pm
index 7228d0c..26c1dc7 100644
--- a/WebCore/bindings/scripts/CodeGeneratorV8.pm
+++ b/WebCore/bindings/scripts/CodeGeneratorV8.pm
@@ -87,14 +87,6 @@ sub finish
$object->WriteData();
}
-# Workaround for V8 bindings difference where RGBColor is not a POD type.
-# FIXME: This method will go away once all SVG animated properties are converted to the new scheme.
-sub IsPodType
-{
- my $type = shift;
- return $codeGenerator->IsPodType($type);
-}
-
# Params: 'domClass' struct
sub GenerateInterface
{
@@ -169,22 +161,6 @@ sub AddIncludesForType
}
}
-sub AddIncludesForSVGAnimatedType
-{
- my $type = shift;
- return if $codeGenerator->IsSVGNewStyleAnimatedType($type);
-
- $type =~ s/SVGAnimated//;
-
- if ($type eq "Point" or $type eq "Rect") {
- $implIncludes{"Float$type.h"} = 1;
- } elsif ($type eq "String") {
- $implIncludes{"PlatformString.h"} = 1;
- }
-
- $implIncludes{"DeprecatedSVGAnimatedTemplate.h"} = 1;
-}
-
# If the node has a [Conditional=XXX] attribute, returns an "ENABLE(XXX)" string for use in an #if.
sub GenerateConditionalString
{
@@ -226,9 +202,16 @@ sub GetSVGPropertyTypes
} elsif ($svgNativeType =~ /SVGListPropertyTearOff/ or $svgNativeType =~ /SVGStaticListPropertyTearOff/) {
$svgListPropertyType = $svgWrappedNativeType;
$implIncludes{"SVGAnimatedListPropertyTearOff.h"} = 1;
+ } elsif ($svgNativeType =~ /SVGTransformListPropertyTearOff/) {
+ $svgListPropertyType = $svgWrappedNativeType;
+ $implIncludes{"SVGAnimatedListPropertyTearOff.h"} = 1;
+ $implIncludes{"SVGTransformListPropertyTearOff.h"} = 1;
+ }
+
+ if ($svgPropertyType) {
+ $svgPropertyType = "SVGPoint" if $svgPropertyType eq "FloatPoint";
}
- $svgPropertyType = "SVGPoint" if $svgPropertyType eq "FloatPoint";
return ($svgPropertyType, $svgListPropertyType, $svgNativeType);
}
@@ -249,10 +232,8 @@ sub GenerateHeader
# - Add default header template
push(@headerContent, GenerateHeaderContentHeader($dataNode));
- my $podType = $dataNode->extendedAttributes->{"PODType"};
my %headerInclues = ();
- $headerIncludes{"$podType.h"} = 1 if $podType and ($podType ne "double" and $podType ne "float" and $podType ne "RGBA32");
$headerIncludes{"wtf/text/StringHash.h"} = 1;
$headerIncludes{"WrapperTypeInfo.h"} = 1;
$headerIncludes{"V8DOMWrapper.h"} = 1;
@@ -270,7 +251,6 @@ sub GenerateHeader
push(@headerContent, "#include <wtf/HashMap.h>\n");
push(@headerContent, "\nnamespace WebCore {\n");
- push(@headerContent, "\ntemplate<typename PODType> class V8SVGPODTypeWrapper;\n") if $podType;
push(@headerContent, "\ntemplate<typename PropertyType> class SVGPropertyTearOff;\n") if $svgPropertyType;
if ($svgNativeType) {
if ($svgNativeType =~ /SVGStaticListPropertyTearOff/) {
@@ -478,7 +458,6 @@ sub GetHeaderClassInclude
$className =~ s/Abs|Rel//;
}
return "" if ($codeGenerator->AvoidInclusionOfType($className));
- return "DeprecatedSVGAnimatedTemplate.h" if $codeGenerator->IsSVGAnimatedType($className) and !$codeGenerator->IsSVGNewStyleAnimatedType($className);
return "${className}.h";
}
@@ -524,7 +503,7 @@ sub GenerateHeaderNamedAndIndexedPropertyAccessors
$hasCustomDeleterr = 0;
$hasEnumerator = 0;
}
- if ($interfaceName eq "HTMLSelectElement" || $interfaceName eq "HTMLAppletElement" || $interfaceName eq "HTMLEmbedElement" || $interfaceName eq "HTMLObjectElement") {
+ if ($interfaceName eq "HTMLAppletElement" || $interfaceName eq "HTMLEmbedElement" || $interfaceName eq "HTMLObjectElement") {
$hasCustomNamedGetter = 1;
}
if ($interfaceName eq "HTMLDocument") {
@@ -704,28 +683,15 @@ sub GenerateNormalAttrGetter
my $attrName = $attribute->signature->name;
my $attrType = GetTypeFromSignature($attribute->signature);
- my $attrIsPodType = IsPodType($attrType);
my $nativeType = GetNativeTypeFromSignature($attribute->signature, -1);
- my $isPodType = IsPodType($implClassName);
my $skipContext = 0;
- if ($isPodType) {
- $implClassName = GetNativeType($implClassName);
- $implIncludes{"V8SVGPODTypeWrapper.h"} = 1;
- }
-
# Special case: SVGZoomEvent's attributes are all read-only
if ($implClassName eq "SVGZoomEvent") {
- $attrIsPodType = 0;
$skipContext = 1;
}
- # Special case for SVGColor
- if (($implClassName eq "SVGColor") and ($attrName eq "rgbColor")) {
- $attrIsPodType = 0;
- }
-
my $getterStringUsesImp = $implClassName ne "SVGNumber";
my $svgNativeType = $codeGenerator->GetSVGTypeNeedingTearOff($implClassName);
@@ -739,19 +705,9 @@ static v8::Handle<v8::Value> ${attrName}AttrGetter(v8::Local<v8::String> name, c
INC_STATS(\"DOM.$implClassName.$attrName._get\");
END
- if ($isPodType) {
- push(@implContentDecls, <<END);
- V8SVGPODTypeWrapper<$implClassName>* impWrapper = V8SVGPODTypeWrapper<$implClassName>::toNative(info.Holder());
- $implClassName impInstance = *impWrapper;
-END
- if ($getterStringUsesImp) {
- push(@implContentDecls, <<END);
- $implClassName* imp = &impInstance;
-END
- }
- } elsif ($svgNativeType) {
+ if ($svgNativeType) {
my $svgWrappedNativeType = $codeGenerator->GetSVGWrappedTypeNeedingTearOff($implClassName);
- if ($svgWrappedNativeType =~ /List$/) {
+ if ($svgWrappedNativeType =~ /List/) {
push(@implContentDecls, <<END);
$svgNativeType* imp = V8${implClassName}::toNative(info.Holder());
END
@@ -808,7 +764,7 @@ END
push(@implContentDecls, " if (!V8BindingSecurity::checkNodeSecurity(V8BindingState::Only(), imp->contentDocument()))\n return v8::Handle<v8::Value>();\n\n");
}
- my $useExceptions = 1 if @{$attribute->getterExceptions} and !($isPodType);
+ my $useExceptions = 1 if @{$attribute->getterExceptions};
if ($useExceptions) {
$implIncludes{"ExceptionCode.h"} = 1;
push(@implContentDecls, " ExceptionCode ec = 0;\n");
@@ -832,97 +788,61 @@ END
my $result;
my $wrapper;
- if ($attrIsPodType) {
- $implIncludes{"V8SVGPODTypeWrapper.h"} = 1;
-
- my $getter = $getterString;
- $getter =~ s/imp->//;
- $getter =~ s/\(\)//;
- my $setter = "set" . $codeGenerator->WK_ucfirst($getter);
-
- my $implClassIsAnimatedType = $codeGenerator->IsSVGAnimatedType($implClassName);
- if (not $implClassIsAnimatedType and $codeGenerator->IsPodTypeWithWriteableProperties($attrType) and not defined $attribute->signature->extendedAttributes->{"Immutable"}) {
- if (IsPodType($implClassName)) {
- my $wrapper = "V8SVGStaticPODTypeWrapperWithPODTypeParent<$nativeType, $implClassName>::create($getterString, impWrapper)";
- push(@implContentDecls, " RefPtr<V8SVGStaticPODTypeWrapperWithPODTypeParent<$nativeType, $implClassName> > wrapper = $wrapper;\n");
- } else {
- my $wrapper = "V8SVGStaticPODTypeWrapperWithParent<$nativeType, $implClassName>::create(imp, &${implClassName}::$getter, &${implClassName}::$setter)";
- push(@implContentDecls, " RefPtr<V8SVGStaticPODTypeWrapperWithParent<$nativeType, $implClassName> > wrapper = $wrapper;\n");
- }
- } else {
- if ($implClassIsAnimatedType) {
- # We can't hash member function pointers, so instead generate
- # some hashing material based on the names of the methods.
- my $hashhex = substr(Digest::MD5::md5_hex("${implClassName}::$getter ${implClassName}::$setter)"), 0, 8);
- my $wrapper = "V8SVGDynamicPODTypeWrapperCache<$nativeType, $implClassName>::lookupOrCreateWrapper(imp, &${implClassName}::$getter, &${implClassName}::$setter, 0x$hashhex)";
- push(@implContentDecls, " RefPtr<V8SVGPODTypeWrapper<" . $nativeType . "> > wrapper = $wrapper;\n");
- } else {
- my $wrapper = GenerateSVGStaticPodTypeWrapper($returnType, $getterString);
- push(@implContentDecls, " RefPtr<V8SVGStaticPODTypeWrapper<" . $nativeType . "> > wrapper = $wrapper;\n");
- }
- }
-
- } else {
if ($attribute->signature->type eq "EventListener" && $dataNode->name eq "DOMWindow") {
- push(@implContentDecls, " if (!imp->document())\n");
- push(@implContentDecls, " return v8::Handle<v8::Value>();\n");
- }
+ push(@implContentDecls, " if (!imp->document())\n");
+ push(@implContentDecls, " return v8::Handle<v8::Value>();\n");
+ }
- if ($useExceptions) {
- if ($nativeType =~ /^V8Parameter/) {
- push(@implContentDecls, " " . ConvertToV8Parameter($attribute->signature, $nativeType, "v", $getterString) . ";\n");
- } else {
- push(@implContentDecls, " $nativeType v = $getterString;\n");
- }
- push(@implContentDecls, GenerateSetDOMException(" "));
- $result = "v";
- $result .= ".release()" if (IsRefPtrType($returnType));
+ if ($useExceptions) {
+ if ($nativeType =~ /^V8Parameter/) {
+ push(@implContentDecls, " " . ConvertToV8Parameter($attribute->signature, $nativeType, "v", $getterString) . ";\n");
} else {
- # Can inline the function call into the return statement to avoid overhead of using a Ref<> temporary
- $result = $getterString;
+ push(@implContentDecls, " $nativeType v = $getterString;\n");
}
+ push(@implContentDecls, GenerateSetDOMException(" "));
+ $result = "v";
+ $result .= ".release()" if (IsRefPtrType($returnType));
+ } else {
+ # Can inline the function call into the return statement to avoid overhead of using a Ref<> temporary
+ $result = $getterString;
+ }
- # Special case for readonly or Replaceable attributes (with a few exceptions). This attempts to ensure that JS wrappers don't get
- # garbage-collected prematurely when their lifetime is strongly tied to their owner. We accomplish this by inserting a reference to
- # the newly created wrapper into an internal field of the holder object.
- if (!IsNodeSubType($dataNode) && $attrName ne "self" && (IsWrapperType($returnType) && ($attribute->type =~ /^readonly/ || $attribute->signature->extendedAttributes->{"Replaceable"})
- && $returnType ne "EventTarget" && $returnType ne "SerializedScriptValue" && $returnType ne "DOMWindow"
- && $returnType !~ /SVG/ && $returnType !~ /HTML/ && !IsDOMNodeType($returnType))) {
- AddIncludesForType($returnType);
- my $domMapFunction = GetDomMapFunction(0, $returnType);
- # Check for a wrapper in the wrapper cache. If there is one, we know that a hidden reference has already
- # been created. If we don't find a wrapper, we create both a wrapper and a hidden reference.
- push(@implContentDecls, " RefPtr<$returnType> result = ${getterString};\n");
- push(@implContentDecls, " v8::Handle<v8::Value> wrapper = result.get() ? ${domMapFunction}.get(result.get()) : v8::Handle<v8::Value>();\n");
- push(@implContentDecls, " if (wrapper.IsEmpty()) {\n");
- push(@implContentDecls, " wrapper = toV8(result.get());\n");
- push(@implContentDecls, " if (!wrapper.IsEmpty())\n");
- if ($dataNode->name eq "DOMWindow") {
- push(@implContentDecls, " V8DOMWrapper::setHiddenWindowReference(imp->frame(), wrapper);\n");
- } else {
- push(@implContentDecls, " V8DOMWrapper::setHiddenReference(info.Holder(), wrapper);\n");
- }
- push(@implContentDecls, " }\n");
- push(@implContentDecls, " return wrapper;\n");
- push(@implContentDecls, "}\n\n");
- push(@implContentDecls, "#endif // ${conditionalString}\n\n") if $conditionalString;
- return;
+ # Special case for readonly or Replaceable attributes (with a few exceptions). This attempts to ensure that JS wrappers don't get
+ # garbage-collected prematurely when their lifetime is strongly tied to their owner. We accomplish this by inserting a reference to
+ # the newly created wrapper into an internal field of the holder object.
+ if (!IsNodeSubType($dataNode) && $attrName ne "self" && (IsWrapperType($returnType) && ($attribute->type =~ /^readonly/ || $attribute->signature->extendedAttributes->{"Replaceable"})
+ && $returnType ne "EventTarget" && $returnType ne "SerializedScriptValue" && $returnType ne "DOMWindow"
+ && $returnType !~ /SVG/ && $returnType !~ /HTML/ && !IsDOMNodeType($returnType))) {
+ AddIncludesForType($returnType);
+ my $domMapFunction = GetDomMapFunction(0, $returnType);
+ # Check for a wrapper in the wrapper cache. If there is one, we know that a hidden reference has already
+ # been created. If we don't find a wrapper, we create both a wrapper and a hidden reference.
+ push(@implContentDecls, " RefPtr<$returnType> result = ${getterString};\n");
+ push(@implContentDecls, " v8::Handle<v8::Value> wrapper = result.get() ? ${domMapFunction}.get(result.get()) : v8::Handle<v8::Value>();\n");
+ push(@implContentDecls, " if (wrapper.IsEmpty()) {\n");
+ push(@implContentDecls, " wrapper = toV8(result.get());\n");
+ push(@implContentDecls, " if (!wrapper.IsEmpty())\n");
+ if ($dataNode->name eq "DOMWindow") {
+ push(@implContentDecls, " V8DOMWrapper::setHiddenWindowReference(imp->frame(), wrapper);\n");
+ } else {
+ push(@implContentDecls, " V8DOMWrapper::setHiddenReference(info.Holder(), wrapper);\n");
}
+ push(@implContentDecls, " }\n");
+ push(@implContentDecls, " return wrapper;\n");
+ push(@implContentDecls, "}\n\n");
+ push(@implContentDecls, "#endif // ${conditionalString}\n\n") if $conditionalString;
+ return;
}
if (IsSVGTypeNeedingContextParameter($attrType) && !$skipContext) {
- if ($attrIsPodType) {
- push(@implContentDecls, GenerateSVGContextAssignment($implClassName, "wrapper.get()", " "));
- } else {
- push(@implContentDecls, GenerateSVGContextRetrieval($implClassName, " "));
- # The templating associated with passing withSVGContext()'s return value directly into toV8 can get compilers confused,
- # so just manually set the return value to a PassRefPtr of the expected type.
- push(@implContentDecls, " PassRefPtr<$attrType> resultAsPassRefPtr = V8Proxy::withSVGContext($result, context);\n");
- $result = "resultAsPassRefPtr";
- }
+ push(@implContentDecls, GenerateSVGContextRetrieval($implClassName, " "));
+ # The templating associated with passing withSVGContext()'s return value directly into toV8 can get compilers confused,
+ # so just manually set the return value to a PassRefPtr of the expected type.
+ push(@implContentDecls, " PassRefPtr<$attrType> resultAsPassRefPtr = V8Proxy::withSVGContext($result, context);\n");
+ $result = "resultAsPassRefPtr";
}
- if ($codeGenerator->IsSVGNewStyleAnimatedType($implClassName) and $codeGenerator->IsSVGTypeNeedingTearOff($attrType)) {
+ if ($codeGenerator->IsSVGAnimatedType($implClassName) and $codeGenerator->IsSVGTypeNeedingTearOff($attrType)) {
$implIncludes{"V8$attrType.h"} = 1;
my $svgNativeType = $codeGenerator->GetSVGTypeNeedingTearOff($attrType);
# Convert from abstract SVGProperty to real type, so the right toJS() method can be invoked.
@@ -932,14 +852,30 @@ END
$implIncludes{"SVGPropertyTearOff.h"} = 1;
my $tearOffType = $codeGenerator->GetSVGTypeNeedingTearOff($attrType);
if ($codeGenerator->IsSVGTypeWithWritablePropertiesNeedingTearOff($attrType) and not defined $attribute->signature->extendedAttributes->{"Immutable"}) {
- $tearOffType =~ s/SVGPropertyTearOff</SVGStaticPropertyTearOff<$implClassName, /;
- $implIncludes{"SVGStaticPropertyTearOff.h"} = 1;
-
my $getter = $result;
$getter =~ s/imp->//;
$getter =~ s/\(\)//;
- my $updater = "update" . $codeGenerator->WK_ucfirst($getter);
- push(@implContentDecls, " return toV8(WTF::getPtr(${tearOffType}::create(imp, $result, &${implClassName}::$updater)));\n");
+
+ my $updateMethod = "&${implClassName}::update" . $codeGenerator->WK_ucfirst($getter);
+
+ my $selfIsTearOffType = $codeGenerator->IsSVGTypeNeedingTearOff($implClassName);
+ if ($selfIsTearOffType) {
+ $implIncludes{"SVGStaticPropertyWithParentTearOff.h"} = 1;
+ $tearOffType =~ s/SVGPropertyTearOff</SVGStaticPropertyWithParentTearOff<$implClassName, /;
+
+ if ($result =~ /matrix/ and $implClassName eq "SVGTransform") {
+ # SVGTransform offers a matrix() method for internal usage that returns an AffineTransform
+ # and a svgMatrix() method returning a SVGMatrix, used for the bindings.
+ $result =~ s/matrix/svgMatrix/;
+ }
+
+ push(@implContentDecls, " return toV8(WTF::getPtr(${tearOffType}::create(wrapper, $result, $updateMethod)));\n");
+ } else {
+ $implIncludes{"SVGStaticPropertyTearOff.h"} = 1;
+ $tearOffType =~ s/SVGPropertyTearOff</SVGStaticPropertyTearOff<$implClassName, /;
+
+ push(@implContentDecls, " return toV8(WTF::getPtr(${tearOffType}::create(imp, $result, $updateMethod)));\n");
+ }
} elsif ($tearOffType =~ /SVGStaticListPropertyTearOff/) {
my $extraImp = "GetOwnerElementForType<$implClassName, IsDerivedFromSVGElement<$implClassName>::value>::ownerElement(imp), ";
push(@implContentDecls, " return toV8(WTF::getPtr(${tearOffType}::create($extraImp$result)));\n");
@@ -948,9 +884,6 @@ END
} else {
push(@implContentDecls, " return toV8(WTF::getPtr(${tearOffType}::create($result)));\n");
}
- } elsif ($attrIsPodType) {
- $implIncludes{"V8${attrType}.h"} = 1;
- push(@implContentDecls, " return toV8(wrapper.release().get());\n");
} else {
push(@implContentDecls, " " . ReturnNativeToJSValue($attribute->signature, $result, " ").";\n");
}
@@ -976,8 +909,11 @@ sub GenerateNormalAttrSetter
push(@implContentDecls, "static void ${attrName}AttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)\n{\n");
push(@implContentDecls, " INC_STATS(\"DOM.$implClassName.$attrName._set\");\n");
- # For functions with "StrictTypeChecking", if an input parameter's type does not match the signature,
- # a TypeError is thrown instead of casting to null.
+ # If the "StrictTypeChecking" extended attribute is present, and the attribute's type is an
+ # interface type, then if the incoming value does not implement that interface, a TypeError is
+ # thrown rather than silently passing NULL to the C++ code.
+ # Per the Web IDL and ECMAScript specifications, incoming values can always be converted to both
+ # strings and numbers, so do not throw TypeError if the attribute is of these types.
if ($attribute->signature->extendedAttributes->{"StrictTypeChecking"}) {
my $argType = GetTypeFromSignature($attribute->signature);
if (IsWrapperType($argType)) {
@@ -985,34 +921,11 @@ sub GenerateNormalAttrSetter
push(@implContentDecls, " V8Proxy::throwTypeError();\n");
push(@implContentDecls, " return;\n");
push(@implContentDecls, " }\n");
- } elsif ($codeGenerator->IsStringType($argType)) {
- push(@implContentDecls, " if (!isUndefinedOrNull(value) && !value->IsString() && !value->IsObject()) {\n");
- push(@implContentDecls, " V8Proxy::throwTypeError();\n");
- push(@implContentDecls, " return;\n");
- push(@implContentDecls, " }\n");
- } elsif ($codeGenerator->IsNumericType($argType)) {
- push(@implContentDecls, " if (!isUndefinedOrNull(value) && !value->IsNumber() && !value->IsBoolean()) {\n");
- push(@implContentDecls, " V8Proxy::throwTypeError();\n");
- push(@implContentDecls, " return;\n");
- push(@implContentDecls, " }\n");
- } elsif ($argType eq "boolean") {
- push(@implContentDecls, " if (!isUndefinedOrNull(value) && !value->IsBoolean()) {\n");
- push(@implContentDecls, " V8Proxy::throwTypeError();\n");
- push(@implContentDecls, " return;\n");
- push(@implContentDecls, " }\n");
}
}
- my $isPodType = IsPodType($implClassName);
my $svgNativeType = $codeGenerator->GetSVGTypeNeedingTearOff($implClassName);
-
- if ($isPodType) {
- $implClassName = GetNativeType($implClassName);
- $implIncludes{"V8SVGPODTypeWrapper.h"} = 1;
- push(@implContentDecls, " V8SVGPODTypeWrapper<$implClassName>* wrapper = V8SVGPODTypeWrapper<$implClassName>::toNative(info.Holder());\n");
- push(@implContentDecls, " $implClassName impInstance = *wrapper;\n");
- push(@implContentDecls, " $implClassName* imp = &impInstance;\n");
- } elsif ($svgNativeType) {
+ if ($svgNativeType) {
my $svgWrappedNativeType = $codeGenerator->GetSVGWrappedTypeNeedingTearOff($implClassName);
if ($svgWrappedNativeType =~ /List$/) {
push(@implContentDecls, <<END);
@@ -1082,7 +995,7 @@ END
$result = "WTF::getPtr(" . $result . ")";
}
- my $useExceptions = 1 if @{$attribute->setterExceptions} and !($isPodType);
+ my $useExceptions = 1 if @{$attribute->setterExceptions};
if ($useExceptions) {
$implIncludes{"ExceptionCode.h"} = 1;
@@ -1116,9 +1029,7 @@ END
push(@implContentDecls, " V8Proxy::setDOMException(ec);\n");
}
- if ($isPodType) {
- push(@implContentDecls, " wrapper->commitChange(*imp, V8Proxy::svgContext(wrapper));\n");
- } elsif ($svgNativeType) {
+ if ($svgNativeType) {
if ($useExceptions) {
push(@implContentDecls, " if (!ec)\n");
push(@implContentDecls, " wrapper->commitChange();\n");
@@ -1127,16 +1038,10 @@ END
}
} elsif (IsSVGTypeNeedingContextParameter($implClassName)) {
$implIncludes{"SVGElement.h"} = 1;
-
- my $currentObject = "imp";
- if ($isPodType) {
- $currentObject = "wrapper";
- }
-
- push(@implContentDecls, " if (SVGElement* context = V8Proxy::svgContext($currentObject))\n");
+ push(@implContentDecls, " if (SVGElement* context = V8Proxy::svgContext(imp))\n");
push(@implContentDecls, " context->svgAttributeChanged(imp->associatedAttributeName());\n");
}
-
+
push(@implContentDecls, " return;\n");
push(@implContentDecls, "}\n\n"); # end of setter
push(@implContentDecls, "#endif // ${conditionalString}\n\n") if $conditionalString;
@@ -1327,18 +1232,13 @@ END
my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($implClassName);
- if (IsPodType($implClassName)) {
- my $nativeClassName = GetNativeType($implClassName);
- push(@implContentDecls, " V8SVGPODTypeWrapper<$nativeClassName>* impWrapper = V8SVGPODTypeWrapper<$nativeClassName>::toNative(args.Holder());\n");
- push(@implContentDecls, " $nativeClassName impInstance = *impWrapper;\n");
- push(@implContentDecls, " $nativeClassName* imp = &impInstance;\n");
- } elsif ($svgNativeType) {
+ if ($svgNativeType) {
my $nativeClassName = GetNativeType($implClassName);
if ($implClassName =~ /List$/) {
- push(@implContentDecls, " $nativeClassName imp = V8${svgListPropertyType}::toNative(args.Holder());\n");
+ push(@implContentDecls, " $nativeClassName imp = V8${implClassName}::toNative(args.Holder());\n");
} else {
my $svgWrappedNativeType = $codeGenerator->GetSVGWrappedTypeNeedingTearOff($implClassName);
- push(@implContentDecls, " $nativeClassName wrapper = V8${svgPropertyType}::toNative(args.Holder());\n");
+ push(@implContentDecls, " $nativeClassName wrapper = V8${implClassName}::toNative(args.Holder());\n");
push(@implContentDecls, " $svgWrappedNativeType& impInstance = wrapper->propertyReference();\n");
push(@implContentDecls, " $svgWrappedNativeType* imp = &impInstance;\n");
}
@@ -1412,10 +1312,6 @@ END
push(@implContentDecls, " }\n");
}
- if (BasicTypeCanFailConversion($parameter)) {
- push(@implContentDecls, " bool ${parameterName}Ok;\n");
- }
-
$implIncludes{"ExceptionCode.h"} = 1;
my $nativeType = GetNativeTypeFromSignature($parameter, $paramIndex);
if ($parameter->extendedAttributes->{"Callback"}) {
@@ -1441,18 +1337,22 @@ END
push(@implContentDecls, " return v8::Undefined();\n");
} elsif (TypeCanFailConversion($parameter)) {
push(@implContentDecls, " $nativeType $parameterName = " .
- JSValueToNative($parameter, "args[$paramIndex]", BasicTypeCanFailConversion($parameter) ? "${parameterName}Ok" : undef) . ";\n");
- push(@implContentDecls, " if (UNLIKELY(!$parameterName" . (BasicTypeCanFailConversion($parameter) ? "Ok" : "") . ")) {\n");
+ JSValueToNative($parameter, "args[$paramIndex]") . ";\n");
+ push(@implContentDecls, " if (UNLIKELY(!$parameterName)) {\n");
push(@implContentDecls, " ec = TYPE_MISMATCH_ERR;\n");
push(@implContentDecls, " goto fail;\n");
push(@implContentDecls, " }\n");
} elsif ($nativeType =~ /^V8Parameter/) {
- my $value = JSValueToNative($parameter, "args[$paramIndex]", BasicTypeCanFailConversion($parameter) ? "${parameterName}Ok" : undef);
+ my $value = JSValueToNative($parameter, "args[$paramIndex]");
push(@implContentDecls, " " . ConvertToV8Parameter($parameter, $nativeType, $parameterName, $value) . "\n");
} else {
$implIncludes{"V8BindingMacros.h"} = 1;
- # For functions with "StrictTypeChecking", if an input parameter's type does not match the signature,
- # a TypeError is thrown instead of casting to null.
+ # If the "StrictTypeChecking" extended attribute is present, and the argument's type is an
+ # interface type, then if the incoming value does not implement that interface, a TypeError
+ # is thrown rather than silently passing NULL to the C++ code.
+ # Per the Web IDL and ECMAScript specifications, incoming values can always be converted
+ # to both strings and numbers, so do not throw TypeError if the argument is of these
+ # types.
if ($function->signature->extendedAttributes->{"StrictTypeChecking"}) {
my $argValue = "args[$paramIndex]";
my $argType = GetTypeFromSignature($parameter);
@@ -1461,20 +1361,10 @@ END
push(@implContentDecls, " V8Proxy::throwTypeError();\n");
push(@implContentDecls, " return notHandledByInterceptor();\n");
push(@implContentDecls, " }\n");
- } elsif ($codeGenerator->IsStringType($argType)) {
- push(@implContentDecls, " if (args.Length() > $paramIndex && !isUndefinedOrNull($argValue) && !${argValue}->IsString() && !${argValue}->IsObject()) {\n");
- push(@implContentDecls, " V8Proxy::throwTypeError();\n");
- push(@implContentDecls, " return notHandledByInterceptor();\n");
- push(@implContentDecls, " }\n");
- } elsif ($codeGenerator->IsNumericType($argType)) {
- push(@implContentDecls, " if (args.Length() > $paramIndex && !isUndefinedOrNull($argValue) && !${argValue}->IsNumber() && !${argValue}->IsBoolean()) {\n");
- push(@implContentDecls, " V8Proxy::throwTypeError();\n");
- push(@implContentDecls, " return notHandledByInterceptor();\n");
- push(@implContentDecls, " }\n");
}
}
push(@implContentDecls, " EXCEPTION_BLOCK($nativeType, $parameterName, " .
- JSValueToNative($parameter, "args[$paramIndex]", BasicTypeCanFailConversion($parameter) ? "${parameterName}Ok" : undef) . ");\n");
+ JSValueToNative($parameter, "args[$paramIndex]") . ");\n");
}
if ($parameter->extendedAttributes->{"IsIndex"}) {
@@ -1742,7 +1632,7 @@ sub GenerateImplementationNamedPropertyGetter
$hasCustomGetter = 0;
}
- my $hasGetter = $dataNode->extendedAttributes->{"HasNameGetter"} || $hasCustomGetter || $namedPropertyGetter;
+ my $hasGetter = $dataNode->extendedAttributes->{"HasNameGetter"} || $hasCustomGetter;
if (!$hasGetter) {
return;
}
@@ -1814,7 +1704,6 @@ sub GenerateImplementation
my $visibleInterfaceName = GetVisibleInterfaceName($interfaceName);
my $className = "V8$interfaceName";
my $implClassName = $interfaceName;
-
my $hasLegacyParent = $dataNode->extendedAttributes->{"LegacyParent"};
# - Add default header template
@@ -1827,10 +1716,6 @@ sub GenerateImplementation
$implIncludes{"V8DOMWrapper.h"} = 1;
$implIncludes{"V8IsolatedContext.h"} = 1;
- if ($className =~ /^V8SVGAnimated/) {
- AddIncludesForSVGAnimatedType($interfaceName);
- }
-
AddIncludesForType($interfaceName);
my $toActive = IsActiveDomType($interfaceName) ? "${className}::toActiveDOMObject" : "0";
@@ -2668,7 +2553,7 @@ sub GetDomMapFunction
return "getDOMSVGElementInstanceMap()" if $type eq "SVGElementInstance";
return "getDOMNodeMap()" if ($dataNode && IsNodeSubType($dataNode));
# Only use getDOMSVGObjectWithContextMap() for non-node svg objects
- return "getDOMSVGObjectWithContextMap()" if $type =~ /SVG/ and $type ne "SVGLength" and $type ne "SVGLengthList" and not $codeGenerator->IsSVGNewStyleAnimatedType($type);
+ return "getDOMSVGObjectWithContextMap()" if $type =~ /SVG/ and not $codeGenerator->IsSVGTypeNeedingTearOff($type) and not $codeGenerator->IsSVGAnimatedType($type);
return "" if $type eq "DOMImplementation";
return "getActiveDOMObjectMap()" if IsActiveDomType($type);
return "getDOMObjectMap()";
@@ -2687,6 +2572,7 @@ sub IsActiveDomType
return 1 if $type eq "IDBRequest";
return 1 if $type eq "FileReader";
return 1 if $type eq "FileWriter";
+ return 1 if $type eq "FileWriterSync";
return 0;
}
@@ -2695,8 +2581,6 @@ sub GetNativeTypeForConversions
my $dataNode = shift;
my $type = shift;
- $type = "AffineTransform" if $type eq "SVGMatrix";
- $type = "V8SVGPODTypeWrapper<$type>" if $dataNode->extendedAttributes->{"PODType"};
$type = $codeGenerator->GetSVGTypeNeedingTearOff($type) if $codeGenerator->IsSVGTypeNeedingTearOff($type);
return $type;
}
@@ -2709,22 +2593,13 @@ sub GenerateFunctionCallString()
my $implClassName = shift;
my $name = $function->signature->name;
- my $isPodType = IsPodType($implClassName);
my $returnType = GetTypeFromSignature($function->signature);
- my $returnsPodType = IsPodType($returnType);
my $nativeReturnType = GetNativeType($returnType, 0);
my $result = "";
my $isSVGTearOffType = ($codeGenerator->IsSVGTypeNeedingTearOff($returnType) and not $implClassName =~ /List$/);
$nativeReturnType = $codeGenerator->GetSVGWrappedTypeNeedingTearOff($returnType) if $isSVGTearOffType;
- # Special case: SVG matrix transform methods should not mutate
- # the matrix but return a copy
- my $copyFirst = 0;
- if ($implClassName eq "SVGMatrix" && $function->signature->type eq "SVGMatrix") {
- $copyFirst = 1;
- }
-
if ($function->signature->extendedAttributes->{"v8implname"}) {
$name = $function->signature->extendedAttributes->{"v8implname"};
}
@@ -2734,23 +2609,10 @@ sub GenerateFunctionCallString()
}
my $functionString = "imp->${name}(";
-
- if ($copyFirst) {
- $functionString = "result.${name}(";
- }
-
if ($function->signature->extendedAttributes->{"ClassMethod"}) {
$functionString = "${implClassName}::${name}(";
}
- my $returnsListItemPodType = 0;
- # SVG lists functions that return POD types require special handling
- if (IsSVGListTypeNeedingSpecialHandling($implClassName) && IsSVGListMethod($name) && $returnsPodType) {
- $returnsListItemPodType = 1;
- $result .= $indent . "SVGList<RefPtr<SVGPODListItem<$nativeReturnType> > >* listImp = imp;\n";
- $functionString = "listImp->${name}(";
- }
-
my $index = 0;
my $hasScriptState = 0;
@@ -2786,12 +2648,6 @@ sub GenerateFunctionCallString()
my $paramName = $parameter->name;
my $paramType = $parameter->type;
- # This is a bit of a hack... we need to convert parameters to methods on SVG lists
- # of POD types which are items in the list to appropriate SVGList<> instances
- if ($returnsListItemPodType && $paramType . "List" eq $implClassName) {
- $paramName = "SVGPODListItem<" . GetNativeType($paramType, 1) . ">::copy($paramName)";
- }
-
if ($parameter->type eq "NodeFilter" || $parameter->type eq "XPathNSResolver") {
$functionString .= "$paramName.get()";
} elsif ($codeGenerator->IsSVGTypeNeedingTearOff($parameter->type) and not $implClassName =~ /List$/) {
@@ -2800,6 +2656,8 @@ sub GenerateFunctionCallString()
$result .= $indent . " V8Proxy::setDOMException(WebCore::TYPE_MISMATCH_ERR);\n";
$result .= $indent . " return v8::Handle<v8::Value>();\n";
$result .= $indent . "}\n";
+ } elsif ($parameter->type eq "SVGMatrix" and $implClassName eq "SVGTransformList") {
+ $functionString .= "$paramName.get()";
} else {
$functionString .= $paramName;
}
@@ -2832,16 +2690,16 @@ sub GenerateFunctionCallString()
if ($returnType eq "void") {
$result .= $indent . "$functionString;\n";
- } elsif ($copyFirst) {
- $result .= $indent . GetNativeType($returnType, 0) . " result = *imp;\n" . $indent . "$functionString;\n";
- } elsif ($returnsListItemPodType) {
- $result .= $indent . "RefPtr<SVGPODListItem<$nativeReturnType> > result = $functionString;\n";
- } elsif ($hasScriptState or @{$function->raisesExceptions} or $returnsPodType or $isPodType or IsSVGTypeNeedingContextParameter($returnType)) {
+ } elsif ($hasScriptState or @{$function->raisesExceptions}) {
$result .= $indent . $nativeReturnType . " result = $functionString;\n";
} else {
# Can inline the function call into the return statement to avoid overhead of using a Ref<> temporary
$return = $functionString;
$returnIsRef = 0;
+
+ if ($implClassName eq "SVGTransformList" and IsRefPtrType($returnType)) {
+ $return = "WTF::getPtr(" . $return . ")";
+ }
}
if (@{$function->raisesExceptions}) {
@@ -2854,17 +2712,6 @@ sub GenerateFunctionCallString()
$result .= $indent . " return throwError(state.exception());\n"
}
- # If the return type is a POD type, separate out the wrapper generation
- if ($returnsListItemPodType) {
- $result .= $indent . "RefPtr<V8SVGPODTypeWrapper<" . $nativeReturnType . "> > wrapper = ";
- $result .= "V8SVGPODTypeWrapperCreatorForList<" . $nativeReturnType . ">::create($return, imp->associatedAttributeName());\n";
- $return = "wrapper";
- } elsif ($returnsPodType) {
- $result .= $indent . "RefPtr<V8SVGPODTypeWrapper<" . $nativeReturnType . "> > wrapper = ";
- $result .= GenerateSVGStaticPodTypeWrapper($returnType, $return) . ";\n";
- $return = "wrapper";
- }
-
if ($isSVGTearOffType) {
$implIncludes{"V8$returnType.h"} = 1;
$implIncludes{"SVGPropertyTearOff.h"} = 1;
@@ -2891,24 +2738,12 @@ sub GenerateFunctionCallString()
}
# If the implementing class is a POD type, commit changes
- if ($isPodType) {
- if (!$generatedSVGContextRetrieval) {
- $result .= GenerateSVGContextRetrieval($implClassName, $indent);
- $generatedSVGContextRetrieval = 1;
- }
-
- $result .= $indent . "impWrapper->commitChange(impInstance, context);\n";
- } elsif ($codeGenerator->IsSVGTypeNeedingTearOff($implClassName) and not $implClassName =~ /List$/) {
+ if ($codeGenerator->IsSVGTypeNeedingTearOff($implClassName) and not $implClassName =~ /List$/) {
$result .= $indent . "wrapper->commitChange();\n";
}
- if ($returnsPodType) {
- $implIncludes{"V8${returnType}.h"} = 1;
- $result .= $indent . "return toV8(wrapper.release());\n";
- } else {
- $return .= ".release()" if ($returnIsRef);
- $result .= $indent . ReturnNativeToJSValue($function->signature, $return, $indent) . ";\n";
- }
+ $return .= ".release()" if ($returnIsRef);
+ $result .= $indent . ReturnNativeToJSValue($function->signature, $return, $indent) . ";\n";
return $result;
}
@@ -2996,8 +2831,6 @@ sub GetNativeType
return "bool" if $type eq "boolean";
return "String" if $type eq "DOMString";
return "Range::CompareHow" if $type eq "CompareHow";
- return "AffineTransform" if $type eq "SVGMatrix";
- return "SVGTransform" if $type eq "SVGTransform";
return "SVGPaint::SVGPaintType" if $type eq "SVGPaintType";
return "DOMTimeStamp" if $type eq "DOMTimeStamp";
return "unsigned" if $type eq "unsigned int";
@@ -3042,16 +2875,6 @@ sub TranslateParameter
}
}
-sub BasicTypeCanFailConversion
-{
- my $signature = shift;
- my $type = GetTypeFromSignature($signature);
-
- return 1 if $type eq "SVGMatrix";
- return 1 if $type eq "SVGTransform";
- return 0;
-}
-
sub TypeCanFailConversion
{
my $signature = shift;
@@ -3062,15 +2885,13 @@ sub TypeCanFailConversion
return 1 if $type eq "Attr";
return 1 if $type eq "VoidCallback";
return 1 if $type eq "IDBKey";
- return BasicTypeCanFailConversion($signature);
+ return 0;
}
sub JSValueToNative
{
my $signature = shift;
my $value = shift;
- my $okParam = shift;
- my $maybeOkParam = $okParam ? ", ${okParam}" : "";
my $type = GetTypeFromSignature($signature);
@@ -3078,8 +2899,8 @@ sub JSValueToNative
return "$value->BooleanValue()" if $type eq "boolean";
return "static_cast<$type>($value->NumberValue())" if $type eq "float" or $type eq "double";
- return "toInt32($value${maybeOkParam})" if $type eq "long";
- return "toUInt32($value${maybeOkParam})" if $type eq "unsigned long" or $type eq "unsigned short";
+ return "toInt32($value)" if $type eq "long";
+ return "toUInt32($value)" if $type eq "unsigned long" or $type eq "unsigned short";
return "toInt64($value)" if $type eq "unsigned long long" or $type eq "long long";
return "static_cast<Range::CompareHow>($value->Int32Value())" if $type eq "CompareHow";
return "static_cast<SVGPaint::SVGPaintType>($value->ToInt32()->Int32Value())" if $type eq "SVGPaintType";
@@ -3133,15 +2954,6 @@ sub JSValueToNative
} else {
$implIncludes{"V8$type.h"} = 1;
- if (IsPodType($type)) {
- my $nativeType = GetNativeType($type);
- $implIncludes{"V8SVGPODTypeWrapper.h"} = 1;
-
- return "V8SVGPODTypeUtil::toSVGPODType<${nativeType}>(&V8${type}::info, $value${maybeOkParam})"
- }
-
- $implIncludes{"V8${type}.h"} = 1;
-
# Perform type checks on the parameter, if it is expected Node type,
# return NULL.
return "V8${type}::HasInstance($value) ? V8${type}::toNative(v8::Handle<v8::Object>::Cast($value)) : 0";
@@ -3238,14 +3050,6 @@ my %non_wrapper_types = (
'DOMString' => 1,
'CompareHow' => 1,
'SerializedScriptValue' => 1,
- 'SVGAngle' => 1,
- 'SVGRect' => 1,
- 'SVGPoint' => 1,
- 'SVGPreserveAspectRatio' => 1,
- 'SVGMatrix' => 1,
- 'SVGTransform' => 1,
- 'SVGLength' => 1,
- 'SVGNumber' => 1,
'SVGPaintType' => 1,
'DOMTimeStamp' => 1,
'JSObject' => 1,
@@ -3356,25 +3160,9 @@ sub ReturnNativeToJSValue
$implIncludes{"wtf/RefPtr.h"} = 1;
$implIncludes{"wtf/GetPtr.h"} = 1;
- if (IsPodType($type)) {
- $value = GenerateSVGStaticPodTypeWrapper($type, $value) . ".get()";
- }
-
return "return toV8($value)";
}
-# FIXME: This method will go away once all SVG animated properties are converted to the new scheme.
-sub GenerateSVGStaticPodTypeWrapper {
- my $type = shift;
- my $value = shift;
-
- $implIncludes{"V8$type.h"}=1;
- $implIncludes{"V8SVGPODTypeWrapper.h"} = 1;
-
- my $nativeType = GetNativeType($type);
- return "V8SVGStaticPODTypeWrapper<$nativeType>::create($value)";
-}
-
# Internal helper
sub WriteData
{
@@ -3425,7 +3213,7 @@ sub IsSVGTypeNeedingContextParameter
return 0 unless $implClassName =~ /SVG/;
return 0 if $implClassName =~ /Element/;
- return 0 if $codeGenerator->IsSVGNewStyleAnimatedType($implClassName);
+ return 0 if $codeGenerator->IsSVGAnimatedType($implClassName);
return 0 if $codeGenerator->IsSVGTypeNeedingTearOff($implClassName);
my @noContextNeeded = ("SVGColor", "SVGDocument", "SVGPaintType", "SVGPaint", "SVGZoomEvent");
@@ -3454,19 +3242,9 @@ sub GenerateSVGContextRetrieval
my $srcType = shift;
my $indent = shift;
- my $srcIsPodType = IsPodType($srcType);
-
- my $srcObject = "imp";
- if ($srcIsPodType) {
- $srcObject = "impWrapper";
- }
-
- my $contextDecl;
-
+ my $contextDecl = "imp";
if (IsSVGTypeNeedingContextParameter($srcType)) {
- $contextDecl = "V8Proxy::svgContext($srcObject)";
- } else {
- $contextDecl = $srcObject;
+ $contextDecl = "V8Proxy::svgContext($contextDecl)";
}
return $indent . "SVGElement* context = $contextDecl;\n";
@@ -3486,26 +3264,6 @@ sub IsSVGListMutator
return 0;
}
-sub IsSVGListMethod
-{
- my $functionName = shift;
-
- return 1 if $functionName eq "getFirst";
- return 1 if $functionName eq "getLast";
- return 1 if $functionName eq "getItem";
-
- return IsSVGListMutator($functionName);
-}
-
-sub IsSVGListTypeNeedingSpecialHandling
-{
- my $className = shift;
-
- return 1 if $className eq "SVGTransformList";
-
- return 0;
-}
-
sub GetVisibleInterfaceName
{
my $interfaceName = shift;
diff --git a/WebCore/bindings/v8/ScheduledAction.cpp b/WebCore/bindings/v8/ScheduledAction.cpp
index dcd0bb3..708fbe6 100644
--- a/WebCore/bindings/v8/ScheduledAction.cpp
+++ b/WebCore/bindings/v8/ScheduledAction.cpp
@@ -45,7 +45,7 @@ namespace WebCore {
ScheduledAction::ScheduledAction(v8::Handle<v8::Context> context, v8::Handle<v8::Function> func, int argc, v8::Handle<v8::Value> argv[])
: m_context(context)
- , m_code(String(), KURL(), 0)
+ , m_code(String(), KURL(), TextPosition1::belowRangePosition())
{
m_function = v8::Persistent<v8::Function>::New(func);
diff --git a/WebCore/bindings/v8/ScriptController.cpp b/WebCore/bindings/v8/ScriptController.cpp
index 648ae98..570dcbc 100644
--- a/WebCore/bindings/v8/ScriptController.cpp
+++ b/WebCore/bindings/v8/ScriptController.cpp
@@ -263,20 +263,12 @@ ScriptValue ScriptController::evaluate(const ScriptSourceCode& sourceCode, Shoul
return ScriptValue(object);
}
-int ScriptController::eventHandlerLineNumber() const
+TextPosition0 ScriptController::eventHandlerPosition() const
{
ScriptableDocumentParser* parser = m_frame->document()->scriptableDocumentParser();
if (parser)
- return parser->lineNumber();
- return 0;
-}
-
-int ScriptController::eventHandlerColumnNumber() const
-{
- ScriptableDocumentParser* parser = m_frame->document()->scriptableDocumentParser();
- if (parser)
- return parser->columnNumber();
- return 0;
+ return parser->textPosition();
+ return TextPosition0::minimumPosition();
}
void ScriptController::finishedWithEvent(Event* event)
diff --git a/WebCore/bindings/v8/ScriptController.h b/WebCore/bindings/v8/ScriptController.h
index 63f1c17..d093f39 100644
--- a/WebCore/bindings/v8/ScriptController.h
+++ b/WebCore/bindings/v8/ScriptController.h
@@ -155,8 +155,7 @@ public:
void finishedWithEvent(Event*);
- int eventHandlerLineNumber() const;
- int eventHandlerColumnNumber() const;
+ TextPosition0 eventHandlerPosition() const;
void setProcessingTimerCallback(bool processingTimerCallback) { m_processingTimerCallback = processingTimerCallback; }
// FIXME: Currently we don't use the parameter world at all.
diff --git a/WebCore/bindings/v8/ScriptEventListener.cpp b/WebCore/bindings/v8/ScriptEventListener.cpp
index 72df79d..b46fc5a 100644
--- a/WebCore/bindings/v8/ScriptEventListener.cpp
+++ b/WebCore/bindings/v8/ScriptEventListener.cpp
@@ -50,8 +50,8 @@ PassRefPtr<V8LazyEventListener> createAttributeEventListener(Node* node, Attribu
if (attr->isNull())
return 0;
- int lineNumber = 1;
- int columnNumber = 0;
+ // FIXME: Very strange: we initialize zero-based number with '1'.
+ TextPosition0 position(WTF::ZeroBasedNumber::fromZeroBasedInt(1), WTF::ZeroBasedNumber::base());
String sourceURL;
if (Frame* frame = node->document()->frame()) {
@@ -64,12 +64,11 @@ PassRefPtr<V8LazyEventListener> createAttributeEventListener(Node* node, Attribu
return 0;
}
- lineNumber = scriptController->eventHandlerLineNumber();
- columnNumber = scriptController->eventHandlerColumnNumber();
+ position = scriptController->eventHandlerPosition();
sourceURL = node->document()->url().string();
}
- return V8LazyEventListener::create(attr->localName().string(), node->isSVGElement(), attr->value(), sourceURL, lineNumber, columnNumber, WorldContextHandle(UseMainWorld));
+ return V8LazyEventListener::create(attr->localName().string(), node->isSVGElement(), attr->value(), sourceURL, position, WorldContextHandle(UseMainWorld));
}
PassRefPtr<V8LazyEventListener> createAttributeEventListener(Frame* frame, Attribute* attr)
@@ -81,10 +80,6 @@ PassRefPtr<V8LazyEventListener> createAttributeEventListener(Frame* frame, Attri
if (attr->isNull())
return 0;
- int lineNumber = 1;
- int columnNumber = 0;
- String sourceURL;
-
ScriptController* scriptController = frame->script();
if (!scriptController->canExecuteScripts(AboutToExecuteScript))
return 0;
@@ -94,10 +89,9 @@ PassRefPtr<V8LazyEventListener> createAttributeEventListener(Frame* frame, Attri
return 0;
}
- lineNumber = scriptController->eventHandlerLineNumber();
- columnNumber = scriptController->eventHandlerColumnNumber();
- sourceURL = frame->document()->url().string();
- return V8LazyEventListener::create(attr->localName().string(), frame->document()->isSVGDocument(), attr->value(), sourceURL, lineNumber, columnNumber, WorldContextHandle(UseMainWorld));
+ TextPosition0 position = scriptController->eventHandlerPosition();
+ String sourceURL = frame->document()->url().string();
+ return V8LazyEventListener::create(attr->localName().string(), frame->document()->isSVGDocument(), attr->value(), sourceURL, position, WorldContextHandle(UseMainWorld));
}
String eventListenerHandlerBody(Document* document, EventListener* listener)
diff --git a/WebCore/bindings/v8/ScriptSourceCode.h b/WebCore/bindings/v8/ScriptSourceCode.h
index dbc9d5e..2478151 100644
--- a/WebCore/bindings/v8/ScriptSourceCode.h
+++ b/WebCore/bindings/v8/ScriptSourceCode.h
@@ -35,16 +35,17 @@
#include "CachedScript.h"
#include "KURL.h"
#include "PlatformString.h"
+#include <wtf/text/TextPosition.h>
namespace WebCore {
class ScriptSourceCode {
public:
- ScriptSourceCode(const String& source, const KURL& url = KURL(), int startLine = 1)
+ ScriptSourceCode(const String& source, const KURL& url = KURL(), const TextPosition1& startPosition = TextPosition1::minimumPosition())
: m_source(source)
, m_cachedScript(0)
, m_url(url)
- , m_startLine(startLine)
+ , m_startPosition(startPosition)
{
}
@@ -54,7 +55,7 @@ public:
: m_source(cs->script())
, m_cachedScript(cs)
, m_url(ParsedURLString, cs->url())
- , m_startLine(1)
+ , m_startPosition(TextPosition1::minimumPosition())
{
}
@@ -63,13 +64,14 @@ public:
const String& source() const { return m_source; }
CachedScript* cachedScript() const { return m_cachedScript.get(); }
const KURL& url() const { return m_url; }
- int startLine() const { return m_startLine; }
+ int startLine() const { return m_startPosition.m_line.oneBasedInt(); }
+ const TextPosition1& startPosition() const { return m_startPosition; }
private:
String m_source;
CachedResourceHandle<CachedScript> m_cachedScript;
KURL m_url;
- int m_startLine;
+ TextPosition1 m_startPosition;
};
} // namespace WebCore
diff --git a/WebCore/bindings/v8/V8DOMWrapper.cpp b/WebCore/bindings/v8/V8DOMWrapper.cpp
index dd0446c..72f6bdc 100644
--- a/WebCore/bindings/v8/V8DOMWrapper.cpp
+++ b/WebCore/bindings/v8/V8DOMWrapper.cpp
@@ -82,6 +82,10 @@
#include "V8SVGElementInstance.h"
#endif
+#if ENABLE(WEB_AUDIO)
+#include "V8JavaScriptAudioNode.h"
+#endif
+
#include <algorithm>
#include <utility>
#include <v8-debug.h>
@@ -434,6 +438,11 @@ v8::Handle<v8::Value> V8DOMWrapper::convertEventTargetToV8Object(EventTarget* ta
return toV8(fileWriter);
#endif
+#if ENABLE(WEB_AUDIO)
+ if (JavaScriptAudioNode* jsAudioNode = target->toJavaScriptAudioNode())
+ return toV8(jsAudioNode);
+#endif
+
ASSERT(0);
return notHandledByInterceptor();
}
diff --git a/WebCore/bindings/v8/V8GCController.cpp b/WebCore/bindings/v8/V8GCController.cpp
index 36beece..b26882b 100644
--- a/WebCore/bindings/v8/V8GCController.cpp
+++ b/WebCore/bindings/v8/V8GCController.cpp
@@ -38,6 +38,7 @@
#include "HTMLImageElement.h"
#include "HTMLNames.h"
#include "MessagePort.h"
+#include "PlatformBridge.h"
#include "SVGElement.h"
#include "V8Binding.h"
#include "V8DOMMap.h"
@@ -266,8 +267,8 @@ public:
if (!root)
return;
} else {
- while (root->parent())
- root = root->parent();
+ while (root->parentNode())
+ root = root->parentNode();
// If the node is alone in its DOM tree (doesn't have a parent or any
// children) then the group will be filtered out later anyway.
@@ -399,8 +400,8 @@ namespace {
int getMemoryUsageInMB()
{
-#if PLATFORM(CHROMIUM)
- return ChromiumBridge::memoryUsageMB();
+#if PLATFORM(CHROMIUM) || PLATFORM(ANDROID)
+ return PlatformBridge::memoryUsageMB();
#else
return 0;
#endif
@@ -408,8 +409,8 @@ int getMemoryUsageInMB()
int getActualMemoryUsageInMB()
{
-#if PLATFORM(CHROMIUM)
- return ChromiumBridge::actualMemoryUsageMB();
+#if PLATFORM(CHROMIUM) || PLATFORM(ANDROID)
+ return PlatformBridge::actualMemoryUsageMB();
#else
return 0;
#endif
@@ -448,11 +449,19 @@ void V8GCController::checkMemoryUsage()
const int lowUsageMB = 256; // If memory usage is below this threshold, do not bother forcing GC.
const int highUsageMB = 1024; // If memory usage is above this threshold, force GC more aggresively.
const int highUsageDeltaMB = 128; // Delta of memory usage growth (vs. last workingSetEstimateMB) to force GC when memory usage is high.
+#elif PLATFORM(ANDROID)
+ // Query the PlatformBridge for memory thresholds as these vary device to device.
+ static const int lowUsageMB = PlatformBridge::lowMemoryUsageMB();
+ static const int highUsageMB = PlatformBridge::highMemoryUsageMB();
+ // We use a delta of -1 to ensure that when we are in a low memory situation we always trigger a GC.
+ static const int highUsageDeltaMB = -1;
+#else
+ return;
+#endif
int memoryUsageMB = getMemoryUsageInMB();
if ((memoryUsageMB > lowUsageMB && memoryUsageMB > 2 * workingSetEstimateMB) || (memoryUsageMB > highUsageMB && memoryUsageMB > workingSetEstimateMB + highUsageDeltaMB))
v8::V8::LowMemoryNotification();
-#endif
}
diff --git a/WebCore/bindings/v8/V8LazyEventListener.cpp b/WebCore/bindings/v8/V8LazyEventListener.cpp
index 7f13c5a..7f46333 100644
--- a/WebCore/bindings/v8/V8LazyEventListener.cpp
+++ b/WebCore/bindings/v8/V8LazyEventListener.cpp
@@ -41,14 +41,13 @@
namespace WebCore {
-V8LazyEventListener::V8LazyEventListener(const String& functionName, bool isSVGEvent, const String& code, const String sourceURL, int lineNumber, int columnNumber, const WorldContextHandle& worldContext)
+V8LazyEventListener::V8LazyEventListener(const String& functionName, bool isSVGEvent, const String& code, const String sourceURL, const TextPosition0& position, const WorldContextHandle& worldContext)
: V8AbstractEventListener(true, worldContext)
, m_functionName(functionName)
, m_isSVGEvent(isSVGEvent)
, m_code(code)
, m_sourceURL(sourceURL)
- , m_lineNumber(lineNumber)
- , m_columnNumber(columnNumber)
+ , m_position(position)
{
}
@@ -114,7 +113,7 @@ void V8LazyEventListener::prepareListenerObject(ScriptExecutionContext* context)
// Insert '\n' otherwise //-style comments could break the handler.
code.append( "\n}).call(this, evt);}}}})");
v8::Handle<v8::String> codeExternalString = v8ExternalString(code);
- v8::Handle<v8::Script> script = V8Proxy::compileScript(codeExternalString, m_sourceURL, m_lineNumber);
+ v8::Handle<v8::Script> script = V8Proxy::compileScript(codeExternalString, m_sourceURL, m_position);
if (!script.IsEmpty()) {
v8::Local<v8::Value> value = proxy->runScript(script, false);
if (!value.IsEmpty()) {
diff --git a/WebCore/bindings/v8/V8LazyEventListener.h b/WebCore/bindings/v8/V8LazyEventListener.h
index f174d23..08467fe 100644
--- a/WebCore/bindings/v8/V8LazyEventListener.h
+++ b/WebCore/bindings/v8/V8LazyEventListener.h
@@ -34,6 +34,7 @@
#include "PlatformString.h"
#include "V8AbstractEventListener.h"
#include <v8.h>
+#include <wtf/text/TextPosition.h>
#include <wtf/PassRefPtr.h>
namespace WebCore {
@@ -45,9 +46,9 @@ namespace WebCore {
// A V8LazyEventListener is always a HTML event handler.
class V8LazyEventListener : public V8AbstractEventListener {
public:
- static PassRefPtr<V8LazyEventListener> create(const String& functionName, bool isSVGEvent, const String& code, const String& sourceURL, int lineNumber, int columnNumber, const WorldContextHandle& worldContext)
+ static PassRefPtr<V8LazyEventListener> create(const String& functionName, bool isSVGEvent, const String& code, const String& sourceURL, const TextPosition0& position, const WorldContextHandle& worldContext)
{
- return adoptRef(new V8LazyEventListener(functionName, isSVGEvent, code, sourceURL, lineNumber, columnNumber, worldContext));
+ return adoptRef(new V8LazyEventListener(functionName, isSVGEvent, code, sourceURL, position, worldContext));
}
virtual bool isLazy() const { return true; }
@@ -56,7 +57,7 @@ namespace WebCore {
virtual void prepareListenerObject(ScriptExecutionContext*);
private:
- V8LazyEventListener(const String& functionName, bool isSVGEvent, const String& code, const String sourceURL, int lineNumber, int columnNumber, const WorldContextHandle& worldContext);
+ V8LazyEventListener(const String& functionName, bool isSVGEvent, const String& code, const String sourceURL, const TextPosition0& position, const WorldContextHandle& worldContext);
virtual v8::Local<v8::Value> callListenerFunction(ScriptExecutionContext*, v8::Handle<v8::Value> jsEvent, Event*);
@@ -70,8 +71,7 @@ namespace WebCore {
bool m_isSVGEvent;
String m_code;
String m_sourceURL;
- int m_lineNumber;
- int m_columnNumber;
+ TextPosition0 m_position;
};
} // namespace WebCore
diff --git a/WebCore/bindings/v8/V8Proxy.cpp b/WebCore/bindings/v8/V8Proxy.cpp
index c7e5bf1..66b9ee7 100644
--- a/WebCore/bindings/v8/V8Proxy.cpp
+++ b/WebCore/bindings/v8/V8Proxy.cpp
@@ -244,6 +244,7 @@ V8Proxy::~V8Proxy()
windowShell()->destroyGlobal();
}
+<<<<<<< HEAD
v8::Handle<v8::Script> V8Proxy::compileScript(v8::Handle<v8::String> code, const String& fileName, int baseLine, v8::ScriptData* scriptData)
#ifdef ANDROID_INSTRUMENT
{
@@ -255,11 +256,15 @@ v8::Handle<v8::Script> V8Proxy::compileScript(v8::Handle<v8::String> code, const
v8::Handle<v8::Script> V8Proxy::compileScriptInternal(v8::Handle<v8::String> code, const String& fileName, int baseLine, v8::ScriptData* scriptData)
#endif
+=======
+v8::Handle<v8::Script> V8Proxy::compileScript(v8::Handle<v8::String> code, const String& fileName, const TextPosition0& scriptStartPosition, v8::ScriptData* scriptData)
+>>>>>>> webkit.org at r72274
{
const uint16_t* fileNameString = fromWebCoreString(fileName);
v8::Handle<v8::String> name = v8::String::New(fileNameString, fileName.length());
- v8::Handle<v8::Integer> line = v8::Integer::New(baseLine);
- v8::ScriptOrigin origin(name, line);
+ v8::Handle<v8::Integer> line = v8::Integer::New(scriptStartPosition.m_line.zeroBasedInt());
+ v8::Handle<v8::Integer> column = v8::Integer::New(scriptStartPosition.m_column.zeroBasedInt());
+ v8::ScriptOrigin origin(name, line, column);
v8::Handle<v8::Script> script = v8::Script::Compile(code, &origin, scriptData);
return script;
}
@@ -412,7 +417,7 @@ v8::Local<v8::Value> V8Proxy::evaluate(const ScriptSourceCode& source, Node* nod
// NOTE: For compatibility with WebCore, ScriptSourceCode's line starts at
// 1, whereas v8 starts at 0.
- v8::Handle<v8::Script> script = compileScript(code, source.url(), source.startLine() - 1, scriptData.get());
+ v8::Handle<v8::Script> script = compileScript(code, source.url(), WTF::toZeroBasedTextPosition(source.startPosition()), scriptData.get());
#if PLATFORM(CHROMIUM)
PlatformBridge::traceEventEnd("v8.compile", node, "");
@@ -454,7 +459,7 @@ v8::Local<v8::Value> V8Proxy::runScriptInternal(v8::Handle<v8::Script> script, b
// FIXME: Ideally, we should be able to re-use the origin of the
// script passed to us as the argument instead of using an empty string
// and 0 baseLine.
- script = compileScript(code, "", 0);
+ script = compileScript(code, "", TextPosition0::minimumPosition());
}
if (handleOutOfMemory())
diff --git a/WebCore/bindings/v8/V8Proxy.h b/WebCore/bindings/v8/V8Proxy.h
index bc5e526..6f09dae 100644
--- a/WebCore/bindings/v8/V8Proxy.h
+++ b/WebCore/bindings/v8/V8Proxy.h
@@ -283,7 +283,7 @@ namespace WebCore {
static v8::Handle<v8::Value> checkNewLegal(const v8::Arguments&);
- static v8::Handle<v8::Script> compileScript(v8::Handle<v8::String> code, const String& fileName, int baseLine, v8::ScriptData* = 0);
+ static v8::Handle<v8::Script> compileScript(v8::Handle<v8::String> code, const String& fileName, const TextPosition0& scriptStartPosition, v8::ScriptData* = 0);
#ifdef ANDROID_INSTRUMENT
static v8::Handle<v8::Script> compileScriptInternal(v8::Handle<v8::String> code, const String& fileName, int baseLine, v8::ScriptData* scriptData);
diff --git a/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp b/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp
index 16e0b41..cefb2fa 100644
--- a/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp
+++ b/WebCore/bindings/v8/WorkerContextExecutionProxy.cpp
@@ -184,7 +184,7 @@ bool WorkerContextExecutionProxy::forgetV8EventObject(Event* event)
return false;
}
-ScriptValue WorkerContextExecutionProxy::evaluate(const String& script, const String& fileName, int baseLine, WorkerContextExecutionState* state)
+ScriptValue WorkerContextExecutionProxy::evaluate(const String& script, const String& fileName, const TextPosition0& scriptStartPosition, WorkerContextExecutionState* state)
{
v8::HandleScope hs;
@@ -196,7 +196,7 @@ ScriptValue WorkerContextExecutionProxy::evaluate(const String& script, const St
v8::TryCatch exceptionCatcher;
v8::Local<v8::String> scriptString = v8ExternalString(script);
- v8::Handle<v8::Script> compiledScript = V8Proxy::compileScript(scriptString, fileName, baseLine);
+ v8::Handle<v8::Script> compiledScript = V8Proxy::compileScript(scriptString, fileName, scriptStartPosition);
v8::Local<v8::Value> result = runScript(compiledScript);
if (!exceptionCatcher.CanContinue())
@@ -227,7 +227,7 @@ v8::Local<v8::Value> WorkerContextExecutionProxy::runScript(v8::Handle<v8::Scrip
// Compute the source string and prevent against infinite recursion.
if (m_recursion >= kMaxRecursionDepth) {
v8::Local<v8::String> code = v8ExternalString("throw RangeError('Recursion too deep')");
- script = V8Proxy::compileScript(code, "", 0);
+ script = V8Proxy::compileScript(code, "", TextPosition0::minimumPosition());
}
if (V8Proxy::handleOutOfMemory())
diff --git a/WebCore/bindings/v8/WorkerContextExecutionProxy.h b/WebCore/bindings/v8/WorkerContextExecutionProxy.h
index 58824b9..e70c3d2 100644
--- a/WebCore/bindings/v8/WorkerContextExecutionProxy.h
+++ b/WebCore/bindings/v8/WorkerContextExecutionProxy.h
@@ -36,6 +36,7 @@
#include "ScriptValue.h"
#include <v8.h>
+#include <wtf/text/TextPosition.h>
#include <wtf/OwnPtr.h>
#include <wtf/Vector.h>
@@ -66,7 +67,7 @@ namespace WebCore {
void trackEvent(Event*);
// Evaluate a script file in the current execution environment.
- ScriptValue evaluate(const String& script, const String& fileName, int baseLine, WorkerContextExecutionState*);
+ ScriptValue evaluate(const String& script, const String& fileName, const TextPosition0& scriptStartPosition, WorkerContextExecutionState*);
// Returns a local handle of the context.
v8::Local<v8::Context> context() { return v8::Local<v8::Context>::New(m_context); }
diff --git a/WebCore/bindings/v8/WorkerScriptController.cpp b/WebCore/bindings/v8/WorkerScriptController.cpp
index 7db0d8d..b56d383 100644
--- a/WebCore/bindings/v8/WorkerScriptController.cpp
+++ b/WebCore/bindings/v8/WorkerScriptController.cpp
@@ -75,7 +75,7 @@ ScriptValue WorkerScriptController::evaluate(const ScriptSourceCode& sourceCode,
}
WorkerContextExecutionState state;
- ScriptValue result = m_proxy->evaluate(sourceCode.source(), sourceCode.url().string(), sourceCode.startLine() - 1, &state);
+ ScriptValue result = m_proxy->evaluate(sourceCode.source(), sourceCode.url().string(), WTF::toZeroBasedTextPosition(sourceCode.startPosition()), &state);
if (state.hadException) {
if (exception)
*exception = state.exception;
diff --git a/WebCore/bindings/v8/custom/V8AudioContextCustom.cpp b/WebCore/bindings/v8/custom/V8AudioContextCustom.cpp
new file mode 100644
index 0000000..e1a1ba4
--- /dev/null
+++ b/WebCore/bindings/v8/custom/V8AudioContextCustom.cpp
@@ -0,0 +1,60 @@
+/*
+ * 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"
+
+#if ENABLE(WEB_AUDIO)
+
+#include "V8AudioContext.h"
+
+#include "AudioContext.h"
+#include "Frame.h"
+#include "V8Proxy.h"
+
+namespace WebCore {
+
+v8::Handle<v8::Value> V8AudioContext::constructorCallback(const v8::Arguments& args)
+{
+ INC_STATS("DOM.AudioContext.Contructor");
+
+ Frame* frame = V8Proxy::retrieveFrameForCurrentContext();
+ if (!frame)
+ return throwError("AudioContext constructor associated frame is unavailable", V8Proxy::ReferenceError);
+
+ Document* document = frame->document();
+ if (!document)
+ return throwError("AudioContext constructor associated document is unavailable", V8Proxy::ReferenceError);
+
+ RefPtr<AudioContext> audioContext = AudioContext::create(document);
+
+ // Transform the holder into a wrapper object for the audio context.
+ V8DOMWrapper::setDOMWrapper(args.Holder(), &info, audioContext.get());
+ audioContext->ref();
+
+ return args.Holder();
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(WEB_AUDIO)
diff --git a/WebCore/bindings/v8/custom/V8AudioNodeCustom.cpp b/WebCore/bindings/v8/custom/V8AudioNodeCustom.cpp
new file mode 100644
index 0000000..924b2ce
--- /dev/null
+++ b/WebCore/bindings/v8/custom/V8AudioNodeCustom.cpp
@@ -0,0 +1,91 @@
+/*
+ * 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"
+
+#if ENABLE(WEB_AUDIO)
+
+#include "V8AudioNode.h"
+
+#include "AudioNode.h"
+#include "ExceptionCode.h"
+#include "NotImplemented.h"
+#include "V8Binding.h"
+#include "V8Proxy.h"
+
+namespace WebCore {
+
+v8::Handle<v8::Value> V8AudioNode::connectCallback(const v8::Arguments& args)
+{
+ if (args.Length() < 1)
+ return throwError("Not enough arguments", V8Proxy::SyntaxError);
+
+ AudioNode* destinationNode = toNative(args[0]->ToObject());
+ if (!destinationNode)
+ return throwError("Invalid destination node", V8Proxy::SyntaxError);
+
+ unsigned output = 0;
+ unsigned input = 0;
+ bool ok = false;
+ if (args.Length() > 1) {
+ output = toInt32(args[1], ok);
+ if (!ok)
+ return throwError("Invalid index parameters", V8Proxy::SyntaxError);
+ }
+
+ if (args.Length() > 2) {
+ input = toInt32(args[2], ok);
+ if (!ok)
+ return throwError("Invalid index parameters", V8Proxy::SyntaxError);
+ }
+
+ AudioNode* audioNode = toNative(args.Holder());
+ bool success = audioNode->connect(destinationNode, output, input);
+ if (!success)
+ return throwError("Invalid index parameter", V8Proxy::SyntaxError);
+
+ return v8::Undefined();
+}
+
+v8::Handle<v8::Value> V8AudioNode::disconnectCallback(const v8::Arguments& args)
+{
+ unsigned output = 0;
+ bool ok = false;
+ if (args.Length() > 0) {
+ output = toInt32(args[0], ok);
+ if (!ok)
+ return throwError("Invalid index parameters", V8Proxy::SyntaxError);
+ }
+
+ AudioNode* audioNode = toNative(args.Holder());
+ bool success = audioNode->disconnect(output);
+ if (!success)
+ return throwError("Invalid index parameter", V8Proxy::SyntaxError);
+
+ return v8::Undefined();
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(WEB_AUDIO)
diff --git a/WebCore/bindings/v8/custom/V8CSSRuleCustom.cpp b/WebCore/bindings/v8/custom/V8CSSRuleCustom.cpp
index 90a111c..0dfd954 100644
--- a/WebCore/bindings/v8/custom/V8CSSRuleCustom.cpp
+++ b/WebCore/bindings/v8/custom/V8CSSRuleCustom.cpp
@@ -37,7 +37,6 @@
#include "V8CSSMediaRule.h"
#include "V8CSSPageRule.h"
#include "V8CSSStyleRule.h"
-#include "V8CSSVariablesRule.h"
#include "V8WebKitCSSKeyframeRule.h"
#include "V8WebKitCSSKeyframesRule.h"
@@ -60,8 +59,6 @@ v8::Handle<v8::Value> toV8(CSSRule* impl)
return toV8(static_cast<CSSFontFaceRule*>(impl));
case CSSRule::PAGE_RULE:
return toV8(static_cast<CSSPageRule*>(impl));
- case CSSRule::VARIABLES_RULE:
- return toV8(static_cast<CSSVariablesRule*>(impl));
case CSSRule::WEBKIT_KEYFRAME_RULE:
return toV8(static_cast<WebKitCSSKeyframeRule*>(impl));
case CSSRule::WEBKIT_KEYFRAMES_RULE:
diff --git a/WebCore/bindings/v8/custom/V8EventCustom.cpp b/WebCore/bindings/v8/custom/V8EventCustom.cpp
index f96ba7a..bb885b9 100644
--- a/WebCore/bindings/v8/custom/V8EventCustom.cpp
+++ b/WebCore/bindings/v8/custom/V8EventCustom.cpp
@@ -68,6 +68,10 @@
#include "V8SVGZoomEvent.h"
#endif
+#if ENABLE(WEB_AUDIO)
+#include "V8AudioProcessingEvent.h"
+#endif
+
namespace WebCore {
void V8Event::valueAccessorSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
@@ -164,6 +168,10 @@ v8::Handle<v8::Value> toV8(Event* impl)
if (impl->isDeviceOrientationEvent())
return toV8(static_cast<DeviceOrientationEvent*>(impl));
#endif
+#if ENABLE(WEB_AUDIO)
+ if (impl->isAudioProcessingEvent())
+ return toV8(static_cast<AudioProcessingEvent*>(impl));
+#endif
if (impl->isCustomEvent())
return toV8(static_cast<CustomEvent*>(impl));
return V8Event::wrap(impl);
diff --git a/WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp b/WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp
index 13a9d30..7cd3926 100644
--- a/WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp
+++ b/WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp
@@ -46,33 +46,6 @@
namespace WebCore {
-v8::Handle<v8::Value> V8HTMLSelectElement::namedPropertyGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
-{
- INC_STATS("DOM.HTMLSelectElement.NamedPropertyGetter");
- HTMLSelectElement* select = V8HTMLSelectElement::toNative(info.Holder());
- v8::Handle<v8::Value> value = info.Holder()->GetRealNamedPropertyInPrototypeChain(name);
-
- if (!value.IsEmpty())
- return value;
-
- // Search local callback properties next to find IDL defined properties.
- if (info.Holder()->HasRealNamedCallbackProperty(name))
- return notHandledByInterceptor();
-
- PassRefPtr<HTMLOptionsCollection> collection = select->options();
-
- Vector<RefPtr<Node> > items;
- collection->namedItems(v8StringToAtomicWebCoreString(name), items);
-
- if (!items.size())
- return notHandledByInterceptor();
-
- if (items.size() == 1)
- return toV8(items.at(0).release());
-
- return toV8(V8NamedNodesCollection::create(items));
-}
-
v8::Handle<v8::Value> V8HTMLSelectElement::indexedPropertyGetter(uint32_t index, const v8::AccessorInfo& info)
{
ASSERT(V8DOMWrapper::maybeDOMWrapper(info.Holder()));
diff --git a/WebCore/bindings/v8/custom/V8SVGMatrixCustom.cpp b/WebCore/bindings/v8/custom/V8SVGMatrixCustom.cpp
deleted file mode 100644
index f310238..0000000
--- a/WebCore/bindings/v8/custom/V8SVGMatrixCustom.cpp
+++ /dev/null
@@ -1,102 +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.
- */
-
-#include <config.h>
-
-#if ENABLE(SVG)
-#include "AffineTransform.h"
-
-#include "SVGException.h"
-#include "V8Binding.h"
-#include "V8Proxy.h"
-#include "V8SVGMatrix.h"
-#include "V8SVGPODTypeWrapper.h"
-
-namespace WebCore {
-
-v8::Handle<v8::Value> V8SVGMatrix::multiplyCallback(const v8::Arguments& args)
-{
- INC_STATS("DOM.SVGMatrix.multiply()");
- if (args.Length() < 1)
- return throwError("Not enough arguments");
-
- if (!V8SVGMatrix::HasInstance(args[0]))
- return throwError("secondMatrix argument was not a SVGMatrix");
-
- AffineTransform m1 = *V8SVGPODTypeWrapper<AffineTransform>::toNative(args.Holder());
- AffineTransform m2 = *V8SVGPODTypeWrapper<AffineTransform>::toNative(v8::Handle<v8::Object>::Cast(args[0]));
-
- RefPtr<V8SVGStaticPODTypeWrapper<AffineTransform> > wrapper = V8SVGStaticPODTypeWrapper<AffineTransform>::create(m1.multLeft(m2));
- return toV8(wrapper.get());
-}
-
-v8::Handle<v8::Value> V8SVGMatrix::inverseCallback(const v8::Arguments& args)
-{
- INC_STATS("DOM.SVGMatrix.inverse()");
- AffineTransform matrix = *V8SVGPODTypeWrapper<AffineTransform>::toNative(args.Holder());
- ExceptionCode ec = 0;
- AffineTransform result = matrix.inverse();
-
- if (!matrix.isInvertible())
- ec = SVGException::SVG_MATRIX_NOT_INVERTABLE;
-
- if (ec != 0) {
- V8Proxy::setDOMException(ec);
- return v8::Handle<v8::Value>();
- }
-
- RefPtr<V8SVGStaticPODTypeWrapper<AffineTransform> > wrapper = V8SVGStaticPODTypeWrapper<AffineTransform>::create(result);
- return toV8(wrapper.get());
-}
-
-v8::Handle<v8::Value> V8SVGMatrix::rotateFromVectorCallback(const v8::Arguments& args)
-{
- INC_STATS("DOM.SVGMatrix.rotateFromVector()");
- AffineTransform matrix = *V8SVGPODTypeWrapper<AffineTransform>::toNative(args.Holder());
- ExceptionCode ec = 0;
- float x = toFloat(args[0]);
- float y = toFloat(args[1]);
- AffineTransform result = matrix;
- result.rotateFromVector(x, y);
- if (x == 0.0 || y == 0.0)
- ec = SVGException::SVG_INVALID_VALUE_ERR;
-
- if (ec != 0) {
- V8Proxy::setDOMException(ec);
- return v8::Handle<v8::Value>();
- }
-
- RefPtr<V8SVGStaticPODTypeWrapper<AffineTransform> > wrapper = V8SVGStaticPODTypeWrapper<AffineTransform>::create(result);
- return toV8(wrapper.get());
-}
-
-} // namespace WebCore
-
-#endif
diff --git a/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp b/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp
index b2240ed..445a76d 100644
--- a/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp
+++ b/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp
@@ -164,17 +164,8 @@ static v8::Handle<v8::Value> getObjectParameter(const v8::Arguments& args, Objec
ExceptionCode ec = 0;
WebGLRenderingContext* context = V8WebGLRenderingContext::toNative(args.Holder());
- bool ok;
- unsigned target = toInt32(args[0], ok);
- if (!ok) {
- V8Proxy::setDOMException(SYNTAX_ERR);
- return notHandledByInterceptor();
- }
- unsigned pname = toInt32(args[1], ok);
- if (!ok) {
- V8Proxy::setDOMException(SYNTAX_ERR);
- return notHandledByInterceptor();
- }
+ unsigned target = toInt32(args[0]);
+ unsigned pname = toInt32(args[1]);
WebGLGetInfo info;
switch (objectType) {
case kBuffer:
@@ -263,22 +254,9 @@ v8::Handle<v8::Value> V8WebGLRenderingContext::getFramebufferAttachmentParameter
ExceptionCode ec = 0;
WebGLRenderingContext* context = V8WebGLRenderingContext::toNative(args.Holder());
- bool ok;
- unsigned target = toInt32(args[0], ok);
- if (!ok) {
- V8Proxy::setDOMException(SYNTAX_ERR);
- return notHandledByInterceptor();
- }
- unsigned attachment = toInt32(args[1], ok);
- if (!ok) {
- V8Proxy::setDOMException(SYNTAX_ERR);
- return notHandledByInterceptor();
- }
- unsigned pname = toInt32(args[2], ok);
- if (!ok) {
- V8Proxy::setDOMException(SYNTAX_ERR);
- return notHandledByInterceptor();
- }
+ unsigned target = toInt32(args[0]);
+ unsigned attachment = toInt32(args[1]);
+ unsigned pname = toInt32(args[2]);
WebGLGetInfo info = context->getFramebufferAttachmentParameter(target, attachment, pname, ec);
if (ec) {
V8Proxy::setDOMException(ec);
@@ -298,12 +276,7 @@ v8::Handle<v8::Value> V8WebGLRenderingContext::getParameterCallback(const v8::Ar
ExceptionCode ec = 0;
WebGLRenderingContext* context = V8WebGLRenderingContext::toNative(args.Holder());
- bool ok;
- unsigned pname = toInt32(args[0], ok);
- if (!ok) {
- V8Proxy::setDOMException(SYNTAX_ERR);
- return notHandledByInterceptor();
- }
+ unsigned pname = toInt32(args[0]);
WebGLGetInfo info = context->getParameter(pname, ec);
if (ec) {
V8Proxy::setDOMException(ec);
@@ -328,12 +301,7 @@ v8::Handle<v8::Value> V8WebGLRenderingContext::getProgramParameterCallback(const
return notHandledByInterceptor();
}
WebGLProgram* program = V8WebGLProgram::HasInstance(args[0]) ? V8WebGLProgram::toNative(v8::Handle<v8::Object>::Cast(args[0])) : 0;
- bool ok;
- unsigned pname = toInt32(args[1], ok);
- if (!ok) {
- V8Proxy::setDOMException(SYNTAX_ERR);
- return notHandledByInterceptor();
- }
+ unsigned pname = toInt32(args[1]);
WebGLGetInfo info = context->getProgramParameter(program, pname, ec);
if (ec) {
V8Proxy::setDOMException(ec);
@@ -364,12 +332,7 @@ v8::Handle<v8::Value> V8WebGLRenderingContext::getShaderParameterCallback(const
return notHandledByInterceptor();
}
WebGLShader* shader = V8WebGLShader::HasInstance(args[0]) ? V8WebGLShader::toNative(v8::Handle<v8::Object>::Cast(args[0])) : 0;
- bool ok;
- unsigned pname = toInt32(args[1], ok);
- if (!ok) {
- V8Proxy::setDOMException(SYNTAX_ERR);
- return notHandledByInterceptor();
- }
+ unsigned pname = toInt32(args[1]);
WebGLGetInfo info = context->getShaderParameter(shader, pname, ec);
if (ec) {
V8Proxy::setDOMException(ec);
@@ -471,7 +434,7 @@ static v8::Handle<v8::Value> vertexAttribAndUniformHelperf(const v8::Arguments&
WebGLUniformLocation* location = 0;
if (isFunctionToCallForAttribute(functionToCall))
- index = toInt32(args[0], ok);
+ index = toInt32(args[0]);
else {
if (args.Length() > 0 && !isUndefinedOrNull(args[0]) && !V8WebGLUniformLocation::HasInstance(args[0])) {
V8Proxy::throwTypeError();
diff --git a/WebCore/bridge/jni/jsc/JNIUtilityPrivate.cpp b/WebCore/bridge/jni/jsc/JNIUtilityPrivate.cpp
index 2fb72e9..bf19642 100644
--- a/WebCore/bridge/jni/jsc/JNIUtilityPrivate.cpp
+++ b/WebCore/bridge/jni/jsc/JNIUtilityPrivate.cpp
@@ -200,7 +200,8 @@ jvalue convertValueToJValue(ExecState* exec, RootObject* rootObject, JSValue val
} else if (object->classInfo() == &JSArray::info) {
// Input is a Javascript Array. We need to create it to a Java Array.
result.l = convertArrayInstanceToJavaArray(exec, asArray(value), javaClassName);
- } else if (!result.l && (!strcmp(javaClassName, "java.lang.Object")) || (!strcmp(javaClassName, "netscape.javascript.JSObject"))) {
+ } else if ((!result.l && (!strcmp(javaClassName, "java.lang.Object")))
+ || (!strcmp(javaClassName, "netscape.javascript.JSObject"))) {
// Wrap objects in JSObject instances.
JNIEnv* env = getJNIEnv();
jclass jsObjectClass = env->FindClass("sun/plugin/javascript/webkit/JSObject");
diff --git a/WebCore/config.h b/WebCore/config.h
index 5c3a48c..a7dfecd 100644
--- a/WebCore/config.h
+++ b/WebCore/config.h
@@ -17,7 +17,7 @@
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
- */
+ */
#if defined(HAVE_CONFIG_H) && HAVE_CONFIG_H
#ifdef BUILDING_WITH_CMAKE
diff --git a/WebCore/css/CSSBorderImageValue.h b/WebCore/css/CSSBorderImageValue.h
index a17df7d..6e1b964 100644
--- a/WebCore/css/CSSBorderImageValue.h
+++ b/WebCore/css/CSSBorderImageValue.h
@@ -56,6 +56,7 @@ public:
private:
CSSBorderImageValue(PassRefPtr<CSSValue> image, PassRefPtr<Rect> sliceRect, int horizontalRule, int verticalRule);
+ virtual bool isBorderImageValue() const { return true; }
};
} // namespace WebCore
diff --git a/WebCore/css/CSSComputedStyleDeclaration.cpp b/WebCore/css/CSSComputedStyleDeclaration.cpp
index 35a0b4a..cb5d5c2 100644
--- a/WebCore/css/CSSComputedStyleDeclaration.cpp
+++ b/WebCore/css/CSSComputedStyleDeclaration.cpp
@@ -1697,7 +1697,6 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(int proper
case CSSPropertyWebkitTransformOriginY:
case CSSPropertyWebkitTransformOriginZ:
case CSSPropertyWebkitTransition:
- case CSSPropertyWebkitVariableDeclarationBlock:
break;
#ifdef ANDROID_CSS_RING
case CSSPropertyWebkitRing:
diff --git a/WebCore/css/CSSCursorImageValue.h b/WebCore/css/CSSCursorImageValue.h
index 2a95c3a..de03eb8 100644
--- a/WebCore/css/CSSCursorImageValue.h
+++ b/WebCore/css/CSSCursorImageValue.h
@@ -50,6 +50,7 @@ public:
private:
CSSCursorImageValue(const String& url, const IntPoint& hotSpot);
+ virtual bool isCursorImageValue() const { return true; }
IntPoint m_hotSpot;
diff --git a/WebCore/css/CSSFontFace.cpp b/WebCore/css/CSSFontFace.cpp
index 70cd9bb..2c50a04 100644
--- a/WebCore/css/CSSFontFace.cpp
+++ b/WebCore/css/CSSFontFace.cpp
@@ -118,5 +118,16 @@ SimpleFontData* CSSFontFace::getFontData(const FontDescription& fontDescription,
return 0;
}
+#if ENABLE(SVG_FONTS)
+bool CSSFontFace::hasSVGFontFaceSource() const
+{
+ for (unsigned i = 0; i < m_sources.size(); i++) {
+ if (m_sources[i]->isSVGFontFaceSource())
+ return true;
+ }
+ return false;
+}
+#endif
+
}
diff --git a/WebCore/css/CSSFontFace.h b/WebCore/css/CSSFontFace.h
index 4e2fee5..55e048c 100644
--- a/WebCore/css/CSSFontFace.h
+++ b/WebCore/css/CSSFontFace.h
@@ -42,7 +42,7 @@ class SimpleFontData;
class CSSFontFace : public RefCounted<CSSFontFace> {
public:
- static PassRefPtr<CSSFontFace> create(FontTraitsMask traitsMask) { return adoptRef(new CSSFontFace(traitsMask)); }
+ static PassRefPtr<CSSFontFace> create(FontTraitsMask traitsMask, bool isLocalFallback = false) { return adoptRef(new CSSFontFace(traitsMask, isLocalFallback)); }
~CSSFontFace();
FontTraitsMask traitsMask() const { return m_traitsMask; }
@@ -58,6 +58,8 @@ public:
bool isLoaded() const;
bool isValid() const;
+ bool isLocalFallback() const { return m_isLocalFallback; }
+
void addSource(CSSFontFaceSource*);
void fontLoaded(CSSFontFaceSource*);
@@ -79,10 +81,15 @@ public:
UChar32 m_to;
};
+#if ENABLE(SVG_FONTS)
+ bool hasSVGFontFaceSource() const;
+#endif
+
private:
- CSSFontFace(FontTraitsMask traitsMask)
+ CSSFontFace(FontTraitsMask traitsMask, bool isLocalFallback)
: m_traitsMask(traitsMask)
, m_activeSource(0)
+ , m_isLocalFallback(isLocalFallback)
{
}
@@ -91,6 +98,7 @@ private:
HashSet<CSSSegmentedFontFace*> m_segmentedFontFaces;
Vector<CSSFontFaceSource*> m_sources;
CSSFontFaceSource* m_activeSource;
+ bool m_isLocalFallback;
};
}
diff --git a/WebCore/css/CSSFontFaceSource.cpp b/WebCore/css/CSSFontFaceSource.cpp
index 4fdcc03..30a0072 100644
--- a/WebCore/css/CSSFontFaceSource.cpp
+++ b/WebCore/css/CSSFontFaceSource.cpp
@@ -115,7 +115,7 @@ SimpleFontData* CSSFontFaceSource::getFontData(const FontDescription& fontDescri
}
// See if we have a mapping in our FontData cache.
- unsigned hashKey = fontDescription.computedPixelSize() << 2 | (syntheticBold ? 2 : 0) | (syntheticItalic ? 1 : 0);
+ unsigned hashKey = fontDescription.computedPixelSize() << 3 | (fontDescription.orientation() == Vertical ? 4 : 0) | (syntheticBold ? 2 : 0) | (syntheticItalic ? 1 : 0);
if (SimpleFontData* cachedData = m_fontDataTable.get(hashKey))
return cachedData;
@@ -189,4 +189,11 @@ SimpleFontData* CSSFontFaceSource::getFontData(const FontDescription& fontDescri
return fontDataRawPtr;
}
+#if ENABLE(SVG_FONTS)
+bool CSSFontFaceSource::isSVGFontFaceSource() const
+{
+ return m_svgFontFaceElement || (m_font && m_font->isSVGFont());
+}
+#endif
+
}
diff --git a/WebCore/css/CSSFontFaceSource.h b/WebCore/css/CSSFontFaceSource.h
index 4ec54d6..e2057cc 100644
--- a/WebCore/css/CSSFontFaceSource.h
+++ b/WebCore/css/CSSFontFaceSource.h
@@ -65,6 +65,7 @@ public:
#if ENABLE(SVG_FONTS)
SVGFontFaceElement* svgFontFaceElement() const { return m_svgFontFaceElement; }
void setSVGFontFaceElement(SVGFontFaceElement* element) { m_svgFontFaceElement = element; }
+ bool isSVGFontFaceSource() const;
#endif
private:
diff --git a/WebCore/css/CSSFontSelector.cpp b/WebCore/css/CSSFontSelector.cpp
index d97589d..9c9a844 100644
--- a/WebCore/css/CSSFontSelector.cpp
+++ b/WebCore/css/CSSFontSelector.cpp
@@ -224,7 +224,7 @@ void CSSFontSelector::addFontFaceRule(const CSSFontFaceRule* fontFaceRule)
}
}
} else
- traitsMask |= FontVariantNormalMask;
+ traitsMask |= FontVariantMask;
// Each item in the src property's list is a single CSSFontFaceSource. Put them all into a CSSFontFace.
RefPtr<CSSFontFace> fontFace;
@@ -317,13 +317,6 @@ void CSSFontSelector::addFontFaceRule(const CSSFontFaceRule* fontFaceRule)
if (familyName.isEmpty())
continue;
-#if ENABLE(SVG_FONTS)
- // SVG allows several <font> elements with the same font-family, differing only
- // in ie. font-variant. Be sure to pick up the right one - in getFontData below.
- if (foundSVGFont && (traitsMask & FontVariantSmallCapsMask))
- familyName += "-webkit-svg-small-caps";
-#endif
-
Vector<RefPtr<CSSFontFace> >* familyFontFaces = m_fontFaces.get(familyName);
if (!familyFontFaces) {
familyFontFaces = new Vector<RefPtr<CSSFontFace> >;
@@ -340,7 +333,7 @@ void CSSFontSelector::addFontFaceRule(const CSSFontFaceRule* fontFaceRule)
m_locallyInstalledFontFaces.set(familyName, familyLocallyInstalledFaces);
for (unsigned i = 0; i < numLocallyInstalledFaces; ++i) {
- RefPtr<CSSFontFace> locallyInstalledFontFace = CSSFontFace::create(static_cast<FontTraitsMask>(locallyInstalledFontsTraitsMasks[i]));
+ RefPtr<CSSFontFace> locallyInstalledFontFace = CSSFontFace::create(static_cast<FontTraitsMask>(locallyInstalledFontsTraitsMasks[i]), true);
locallyInstalledFontFace->addSource(new CSSFontFaceSource(familyName));
ASSERT(locallyInstalledFontFace->isValid());
familyLocallyInstalledFaces->append(locallyInstalledFontFace);
@@ -408,12 +401,30 @@ static inline bool compareFontFaces(CSSFontFace* first, CSSFontFace* second)
if (firstHasDesiredVariant != secondHasDesiredVariant)
return firstHasDesiredVariant;
+ if ((desiredTraitsMaskForComparison & FontVariantSmallCapsMask) && !first->isLocalFallback() && !second->isLocalFallback()) {
+ // Prefer a font that has indicated that it can only support small-caps to a font that claims to support
+ // all variants. The specialized font is more likely to be true small-caps and not require synthesis.
+ bool firstRequiresSmallCaps = (firstTraitsMask & FontVariantSmallCapsMask) && !(firstTraitsMask & FontVariantNormalMask);
+ bool secondRequiresSmallCaps = (secondTraitsMask & FontVariantSmallCapsMask) && !(secondTraitsMask & FontVariantNormalMask);
+ if (firstRequiresSmallCaps != secondRequiresSmallCaps)
+ return firstRequiresSmallCaps;
+ }
+
bool firstHasDesiredStyle = firstTraitsMask & desiredTraitsMaskForComparison & FontStyleMask;
bool secondHasDesiredStyle = secondTraitsMask & desiredTraitsMaskForComparison & FontStyleMask;
if (firstHasDesiredStyle != secondHasDesiredStyle)
return firstHasDesiredStyle;
+ if ((desiredTraitsMaskForComparison & FontStyleItalicMask) && !first->isLocalFallback() && !second->isLocalFallback()) {
+ // Prefer a font that has indicated that it can only support italics to a font that claims to support
+ // all styles. The specialized font is more likely to be the one the author wants used.
+ bool firstRequiresItalics = (firstTraitsMask & FontStyleItalicMask) && !(firstTraitsMask & FontStyleNormalMask);
+ bool secondRequiresItalics = (secondTraitsMask & FontStyleItalicMask) && !(secondTraitsMask & FontStyleNormalMask);
+ if (firstRequiresItalics != secondRequiresItalics)
+ return firstRequiresItalics;
+ }
+
if (secondTraitsMask & desiredTraitsMaskForComparison & FontWeightMask)
return false;
if (firstTraitsMask & desiredTraitsMaskForComparison & FontWeightMask)
@@ -469,11 +480,6 @@ FontData* CSSFontSelector::getFontData(const FontDescription& fontDescription, c
String family = familyName.string();
-#if ENABLE(SVG_FONTS)
- if (fontDescription.smallCaps())
- family += "-webkit-svg-small-caps";
-#endif
-
Vector<RefPtr<CSSFontFace> >* familyFontFaces = m_fontFaces.get(family);
// If no face was found, then return 0 and let the OS come up with its best match for the name.
if (!familyFontFaces || familyFontFaces->isEmpty()) {
@@ -504,6 +510,12 @@ FontData* CSSFontSelector::getFontData(const FontDescription& fontDescription, c
continue;
if ((traitsMask & FontVariantNormalMask) && !(candidateTraitsMask & FontVariantNormalMask))
continue;
+#if ENABLE(SVG_FONTS)
+ // For SVG Fonts that specify that they only support the "normal" variant, we will assume they are incapable
+ // of small-caps synthesis and just ignore the font face as a candidate.
+ if (candidate->hasSVGFontFaceSource() && (traitsMask & FontVariantSmallCapsMask) && !(candidateTraitsMask & FontVariantSmallCapsMask))
+ continue;
+#endif
candidateFontFaces.append(candidate);
}
diff --git a/WebCore/css/CSSGrammar.y b/WebCore/css/CSSGrammar.y
index c0139a2..5c77340 100644
--- a/WebCore/css/CSSGrammar.y
+++ b/WebCore/css/CSSGrammar.y
@@ -99,7 +99,7 @@ static int cssyylex(YYSTYPE* yylval, void* parser)
%}
-%expect 56
+%expect 51
%nonassoc LOWEST_PREC
@@ -140,10 +140,6 @@ static int cssyylex(YYSTYPE* yylval, void* parser)
%token WEBKIT_VALUE_SYM
%token WEBKIT_MEDIAQUERY_SYM
%token WEBKIT_SELECTOR_SYM
-%token WEBKIT_VARIABLES_SYM
-%token WEBKIT_DEFINE_SYM
-%token VARIABLES_FOR
-%token WEBKIT_VARIABLES_DECLS_SYM
%token <marginBox> TOPLEFTCORNER_SYM
%token <marginBox> TOPLEFT_SYM
%token <marginBox> TOPCENTER_SYM
@@ -197,8 +193,6 @@ static int cssyylex(YYSTYPE* yylval, void* parser)
%token <string> UNICODERANGE
-%token <string> VARCALL
-
%type <relation> combinator
%type <rule> charset
@@ -219,8 +213,6 @@ static int cssyylex(YYSTYPE* yylval, void* parser)
%type <ruleList> block_rule_list
%type <rule> block_rule
%type <rule> block_valid_rule
-%type <rule> variables_rule
-%type <mediaList> variables_media_list
%type <string> maybe_ns_prefix
@@ -282,12 +274,6 @@ static int cssyylex(YYSTYPE* yylval, void* parser)
%type <string> element_name
%type <string> attr_name
-%type <string> variable_name
-%type <boolean> variables_declaration_list
-%type <boolean> variables_decl_list
-%type <boolean> variables_declaration
-%type <value> variable_reference
-
%%
stylesheet:
@@ -297,7 +283,6 @@ stylesheet:
| webkit_value maybe_space
| webkit_mediaquery maybe_space
| webkit_selector maybe_space
- | webkit_variables_decls maybe_space
| webkit_keyframe_rule maybe_space
;
@@ -319,12 +304,6 @@ webkit_decls:
}
;
-webkit_variables_decls:
- WEBKIT_VARIABLES_DECLS_SYM '{' maybe_space variables_declaration_list '}' {
- /* can be empty */
- }
-;
-
webkit_value:
WEBKIT_VALUE_SYM '{' maybe_space expr '}' {
CSSParser* p = static_cast<CSSParser*>(parser);
@@ -417,7 +396,6 @@ valid_rule:
| keyframes
| namespace
| import
- | variables_rule
;
rule:
@@ -454,7 +432,6 @@ block_rule:
| invalid_at
| namespace
| import
- | variables_rule
| media
;
@@ -474,109 +451,6 @@ import:
}
;
-variables_rule:
- WEBKIT_VARIABLES_SYM maybe_space maybe_media_list '{' maybe_space variables_declaration_list '}' {
- $$ = static_cast<CSSParser*>(parser)->createVariablesRule($3, true);
- }
- |
- WEBKIT_DEFINE_SYM maybe_space variables_media_list '{' maybe_space variables_declaration_list '}' {
- $$ = static_cast<CSSParser*>(parser)->createVariablesRule($3, false);
- }
- ;
-
-variables_media_list:
- /* empty */ {
- $$ = static_cast<CSSParser*>(parser)->createMediaList();
- }
- |
- VARIABLES_FOR WHITESPACE media_list {
- $$ = $3;
- }
- ;
-
-variables_declaration_list:
- variables_declaration {
- $$ = $1;
- }
- | variables_decl_list variables_declaration {
- $$ = $1;
- if ($2)
- $$ = $2;
- }
- | variables_decl_list {
- $$ = $1;
- }
- | error invalid_block_list error {
- $$ = false;
- }
- | error {
- $$ = false;
- }
- | variables_decl_list error {
- $$ = $1;
- }
- ;
-
-variables_decl_list:
- variables_declaration ';' maybe_space {
- $$ = $1;
- }
- | variables_declaration invalid_block_list ';' maybe_space {
- $$ = false;
- }
- | error ';' maybe_space {
- $$ = false;
- }
- | error invalid_block_list error ';' maybe_space {
- $$ = false;
- }
- | variables_decl_list variables_declaration ';' maybe_space {
- $$ = $1;
- if ($2)
- $$ = $2;
- }
- | variables_decl_list error ';' maybe_space {
- $$ = $1;
- }
- | variables_decl_list error invalid_block_list error ';' maybe_space {
- $$ = $1;
- }
- ;
-
-variables_declaration:
- variable_name ':' maybe_space expr {
- $$ = static_cast<CSSParser*>(parser)->addVariable($1, $4);
- }
- |
- variable_name maybe_space '{' maybe_space declaration_list '}' maybe_space {
- $$ = static_cast<CSSParser*>(parser)->addVariableDeclarationBlock($1);
- }
- |
- variable_name error {
- $$ = false;
- }
- |
- variable_name ':' maybe_space error expr {
- $$ = false;
- }
- |
- variable_name ':' maybe_space {
- /* @variables { varname: } Just reduce away this variable with no value. */
- $$ = false;
- }
- |
- variable_name ':' maybe_space error {
- /* if we come across rules with invalid values like this case: @variables { varname: *; }, just discard the property/value pair */
- $$ = false;
- }
- ;
-
-variable_name:
- IDENT maybe_space {
- $$ = $1;
- }
- ;
-
namespace:
NAMESPACE_SYM maybe_space maybe_ns_prefix string_or_uri maybe_space ';' {
static_cast<CSSParser*>(parser)->addNamespace($3, $4);
@@ -1432,18 +1306,6 @@ declaration:
p->markPropertyEnd($5, isPropertyParsed);
}
|
- variable_reference maybe_space {
- CSSParser* p = static_cast<CSSParser*>(parser);
- p->m_valueList = new CSSParserValueList;
- p->m_valueList->addValue(p->sinkFloatingValue($1));
- int oldParsedProperties = p->m_numParsedProperties;
- $$ = p->parseValue(CSSPropertyWebkitVariableDeclarationBlock, false);
- if (!$$)
- p->rollbackLastProperties(p->m_numParsedProperties - oldParsedProperties);
- delete p->m_valueList;
- p->m_valueList = 0;
- }
- |
property error {
$$ = false;
}
@@ -1563,9 +1425,6 @@ term:
| function {
$$ = $1;
}
- | variable_reference maybe_space {
- $$ = $1;
- }
| '%' maybe_space { /* Handle width: %; */
$$.id = 0; $$.unit = 0;
}
@@ -1602,14 +1461,6 @@ unary_term:
}
;
-variable_reference:
- VARCALL {
- $$.id = 0;
- $$.string = $1;
- $$.unit = CSSPrimitiveValue::CSS_PARSER_VARIABLE_FUNCTION_SYNTAX;
- }
- ;
-
function:
FUNCTION maybe_space expr ')' maybe_space {
CSSParser* p = static_cast<CSSParser*>(parser);
diff --git a/WebCore/css/CSSImageValue.h b/WebCore/css/CSSImageValue.h
index a9c8c9b..833d7fe 100644
--- a/WebCore/css/CSSImageValue.h
+++ b/WebCore/css/CSSImageValue.h
@@ -41,8 +41,6 @@ public:
// Returns a StyleCachedImage if the image is cached already, otherwise a StylePendingImage.
StyleImage* cachedOrPendingImage();
- virtual bool isImageValue() const { return true; }
-
protected:
CSSImageValue(const String& url);
@@ -52,6 +50,7 @@ protected:
private:
CSSImageValue();
+ virtual bool isImageValue() const { return true; }
RefPtr<StyleImage> m_image;
bool m_accessedImage;
diff --git a/WebCore/css/CSSMutableStyleDeclaration.cpp b/WebCore/css/CSSMutableStyleDeclaration.cpp
index 38aee50..774a8eb 100644
--- a/WebCore/css/CSSMutableStyleDeclaration.cpp
+++ b/WebCore/css/CSSMutableStyleDeclaration.cpp
@@ -39,7 +39,6 @@ namespace WebCore {
CSSMutableStyleDeclaration::CSSMutableStyleDeclaration()
: m_node(0)
- , m_variableDependentValueCount(0)
, m_strictParsing(false)
#ifndef NDEBUG
, m_iteratorCount(0)
@@ -50,7 +49,6 @@ CSSMutableStyleDeclaration::CSSMutableStyleDeclaration()
CSSMutableStyleDeclaration::CSSMutableStyleDeclaration(CSSRule* parent)
: CSSStyleDeclaration(parent)
, m_node(0)
- , m_variableDependentValueCount(0)
, m_strictParsing(!parent || parent->useStrictParsing())
#ifndef NDEBUG
, m_iteratorCount(0)
@@ -58,11 +56,10 @@ CSSMutableStyleDeclaration::CSSMutableStyleDeclaration(CSSRule* parent)
{
}
-CSSMutableStyleDeclaration::CSSMutableStyleDeclaration(CSSRule* parent, const Vector<CSSProperty>& properties, unsigned variableDependentValueCount)
+CSSMutableStyleDeclaration::CSSMutableStyleDeclaration(CSSRule* parent, const Vector<CSSProperty>& properties)
: CSSStyleDeclaration(parent)
, m_properties(properties)
, m_node(0)
- , m_variableDependentValueCount(variableDependentValueCount)
, m_strictParsing(!parent || parent->useStrictParsing())
#ifndef NDEBUG
, m_iteratorCount(0)
@@ -75,7 +72,6 @@ CSSMutableStyleDeclaration::CSSMutableStyleDeclaration(CSSRule* parent, const Ve
CSSMutableStyleDeclaration::CSSMutableStyleDeclaration(CSSRule* parent, const CSSProperty* const * properties, int numProperties)
: CSSStyleDeclaration(parent)
, m_node(0)
- , m_variableDependentValueCount(0)
, m_strictParsing(!parent || parent->useStrictParsing())
#ifndef NDEBUG
, m_iteratorCount(0)
@@ -86,9 +82,7 @@ CSSMutableStyleDeclaration::CSSMutableStyleDeclaration(CSSRule* parent, const CS
for (int i = 0; i < numProperties; ++i) {
const CSSProperty *property = properties[i];
ASSERT(property);
- if (property->value()->isVariableDependentValue())
- m_variableDependentValueCount++;
- else if (candidates.contains(property->id()))
+ if (candidates.contains(property->id()))
removeProperty(properties[i]->id(), false);
m_properties.append(*property);
if (!getPropertyPriority(property->id()) && !property->isImportant())
@@ -471,9 +465,6 @@ String CSSMutableStyleDeclaration::removeProperty(int propertyID, bool notifyCha
String value = returnText ? foundProperty->value()->cssText() : String();
- if (foundProperty->value()->isVariableDependentValue())
- m_variableDependentValueCount--;
-
// A more efficient removal strategy would involve marking entries as empty
// and sweeping them when the vector grows too big.
m_properties.remove(foundProperty - m_properties.data());
@@ -623,8 +614,6 @@ void CSSMutableStyleDeclaration::addParsedProperties(const CSSProperty* const* p
removeProperty(properties[i]->id(), false);
ASSERT(properties[i]);
m_properties.append(*properties[i]);
- if (properties[i]->value()->isVariableDependentValue())
- m_variableDependentValueCount++;
}
}
// FIXME: This probably should have a call to setNeedsStyleRecalc() if something changed. We may also wish to add
@@ -835,7 +824,7 @@ PassRefPtr<CSSMutableStyleDeclaration> CSSMutableStyleDeclaration::makeMutable()
PassRefPtr<CSSMutableStyleDeclaration> CSSMutableStyleDeclaration::copy() const
{
- return adoptRef(new CSSMutableStyleDeclaration(0, m_properties, m_variableDependentValueCount));
+ return adoptRef(new CSSMutableStyleDeclaration(0, m_properties));
}
const CSSProperty* CSSMutableStyleDeclaration::findPropertyWithId(int propertyID) const
diff --git a/WebCore/css/CSSMutableStyleDeclaration.h b/WebCore/css/CSSMutableStyleDeclaration.h
index d629bcf..72536b6 100644
--- a/WebCore/css/CSSMutableStyleDeclaration.h
+++ b/WebCore/css/CSSMutableStyleDeclaration.h
@@ -69,9 +69,9 @@ public:
{
return adoptRef(new CSSMutableStyleDeclaration(parentRule, properties, numProperties));
}
- static PassRefPtr<CSSMutableStyleDeclaration> create(const Vector<CSSProperty>& properties, unsigned variableDependentValueCount)
+ static PassRefPtr<CSSMutableStyleDeclaration> create(const Vector<CSSProperty>& properties)
{
- return adoptRef(new CSSMutableStyleDeclaration(0, properties, variableDependentValueCount));
+ return adoptRef(new CSSMutableStyleDeclaration(0, properties));
}
CSSMutableStyleDeclaration& operator=(const CSSMutableStyleDeclaration&);
@@ -131,8 +131,6 @@ public:
void merge(CSSMutableStyleDeclaration*, bool argOverridesOnConflict = true);
- bool hasVariableDependentValue() const { return m_variableDependentValueCount > 0; }
-
void setStrictParsing(bool b) { m_strictParsing = b; }
bool useStrictParsing() const { return m_strictParsing; }
@@ -143,7 +141,7 @@ protected:
private:
CSSMutableStyleDeclaration();
- CSSMutableStyleDeclaration(CSSRule* parentRule, const Vector<CSSProperty>&, unsigned variableDependentValueCount);
+ CSSMutableStyleDeclaration(CSSRule* parentRule, const Vector<CSSProperty>&);
CSSMutableStyleDeclaration(CSSRule* parentRule, const CSSProperty* const *, int numProperties);
virtual PassRefPtr<CSSMutableStyleDeclaration> makeMutable();
@@ -164,7 +162,6 @@ private:
Vector<CSSProperty, 4> m_properties;
Node* m_node;
- unsigned m_variableDependentValueCount : 24;
bool m_strictParsing : 1;
#ifndef NDEBUG
unsigned m_iteratorCount : 4;
diff --git a/WebCore/css/CSSParser.cpp b/WebCore/css/CSSParser.cpp
index dcff1ac..df222b9 100644
--- a/WebCore/css/CSSParser.cpp
+++ b/WebCore/css/CSSParser.cpp
@@ -53,9 +53,6 @@
#include "CSSUnicodeRangeValue.h"
#include "CSSValueKeywords.h"
#include "CSSValueList.h"
-#include "CSSVariableDependentValue.h"
-#include "CSSVariablesDeclaration.h"
-#include "CSSVariablesRule.h"
#include "Counter.h"
#include "Document.h"
#include "FloatConversion.h"
@@ -158,7 +155,6 @@ CSSParser::CSSParser(bool strictParsing)
, m_lineNumber(0)
, m_lastSelectorLineNumber(0)
, m_allowImportRules(true)
- , m_allowVariablesRules(true)
, m_allowNamespaceDeclarations(true)
{
#if YYDEBUG > 0
@@ -172,8 +168,6 @@ CSSParser::~CSSParser()
clearProperties();
fastFree(m_parsedProperties);
- clearVariables();
-
delete m_valueList;
fastFree(m_data);
@@ -369,9 +363,15 @@ void CSSParser::parseSelector(const String& string, Document* doc, CSSSelectorLi
cssyyparse(this);
m_selectorListForParseSelector = 0;
+<<<<<<< HEAD
#ifdef ANDROID_INSTRUMENT
android::TimeCounter::record(android::TimeCounter::CSSParseTimeCounter, __FUNCTION__);
#endif
+=======
+
+ // The style sheet will be deleted right away, so it won't outlive the document.
+ ASSERT(dummyStyleSheet->hasOneRef());
+>>>>>>> webkit.org at r72274
}
bool CSSParser::parseDeclaration(CSSMutableStyleDeclaration* declaration, const String& string, RefPtr<CSSStyleSourceData>* styleSourceData)
@@ -648,14 +648,6 @@ bool CSSParser::parseValue(int propId, bool important)
return true;
}
- // If we have any variables, then we don't parse the list of values yet. We add them to the declaration
- // as unresolved, and allow them to be parsed later. The parse is considered "successful" for now, even though
- // it might ultimately fail once the variable has been resolved.
- if (!inShorthand() && checkForVariables(m_valueList)) {
- addUnresolvedProperty(propId, important);
- return true;
- }
-
bool validPrimitive = false;
RefPtr<CSSValue> parsedValue;
@@ -1822,7 +1814,6 @@ bool CSSParser::parseValue(int propId, bool important)
case CSSPropertyTextLineThrough:
case CSSPropertyTextOverline:
case CSSPropertyTextUnderline:
- case CSSPropertyWebkitVariableDeclarationBlock:
return false;
#if ENABLE(WCSS)
@@ -2454,7 +2445,19 @@ bool CSSParser::parseContent(int propId, bool important)
// close-quote
// no-open-quote
// no-close-quote
+ // inherit
// FIXME: These are not yet implemented (http://bugs.webkit.org/show_bug.cgi?id=6503).
+ // none
+ // normal
+ switch (val->id) {
+ case CSSValueOpenQuote:
+ case CSSValueCloseQuote:
+ case CSSValueNoOpenQuote:
+ case CSSValueNoCloseQuote:
+ case CSSValueNone:
+ case CSSValueNormal:
+ parsedValue = CSSPrimitiveValue::createIdentifier(val->id);
+ }
} else if (val->unit == CSSPrimitiveValue::CSS_STRING) {
parsedValue = CSSPrimitiveValue::create(val->string, CSSPrimitiveValue::CSS_STRING);
}
@@ -5195,7 +5198,6 @@ int CSSParser::lex(void* yylvalWithoutType)
case UNICODERANGE:
case FUNCTION:
case NOTFUNCTION:
- case VARCALL:
yylval->string.characters = t;
yylval->string.length = length;
break;
@@ -5266,7 +5268,6 @@ void CSSParser::recheckAtKeyword(const UChar* str, int len)
yyTok = WEBKIT_KEYFRAMES_SYM;
else if (equalIgnoringCase(ruleName, "@-webkit-mediaquery"))
yyTok = WEBKIT_MEDIAQUERY_SYM;
- // FIXME: Add CSS Variables if we ever decide to turn it back on.
}
UChar* CSSParser::text(int *length)
@@ -5301,19 +5302,6 @@ UChar* CSSParser::text(int *length)
l -= 2;
}
break;
- case VARCALL:
- // "-webkit-var("{w}{ident}{w}")"
- // strip "-webkit-var(" and ")"
- start += 12;
- l -= 13;
- // strip {w}
- while (l && isHTMLSpace(*start)) {
- ++start;
- --l;
- }
- while (l && isHTMLSpace(start[l - 1]))
- --l;
- break;
default:
break;
}
@@ -5536,7 +5524,7 @@ CSSRule* CSSParser::createMediaRule(MediaList* media, CSSRuleList* rules)
{
if (!media || !rules || !m_styleSheet)
return 0;
- m_allowImportRules = m_allowNamespaceDeclarations = m_allowVariablesRules = false;
+ m_allowImportRules = m_allowNamespaceDeclarations = false;
RefPtr<CSSMediaRule> rule = CSSMediaRule::create(m_styleSheet, media, rules);
CSSMediaRule* result = rule.get();
m_parsedStyleObjects.append(rule.release());
@@ -5554,7 +5542,7 @@ CSSRuleList* CSSParser::createRuleList()
WebKitCSSKeyframesRule* CSSParser::createKeyframesRule()
{
- m_allowImportRules = m_allowNamespaceDeclarations = m_allowVariablesRules = false;
+ m_allowImportRules = m_allowNamespaceDeclarations = false;
RefPtr<WebKitCSSKeyframesRule> rule = WebKitCSSKeyframesRule::create(m_styleSheet);
WebKitCSSKeyframesRule* rulePtr = rule.get();
m_parsedStyleObjects.append(rule.release());
@@ -5563,7 +5551,7 @@ WebKitCSSKeyframesRule* CSSParser::createKeyframesRule()
CSSRule* CSSParser::createStyleRule(Vector<CSSSelector*>* selectors)
{
- m_allowImportRules = m_allowNamespaceDeclarations = m_allowVariablesRules = false;
+ m_allowImportRules = m_allowNamespaceDeclarations = false;
CSSStyleRule* result = 0;
markRuleBodyEnd();
if (selectors) {
@@ -5591,7 +5579,7 @@ CSSRule* CSSParser::createStyleRule(Vector<CSSSelector*>* selectors)
CSSRule* CSSParser::createFontFaceRule()
{
- m_allowImportRules = m_allowNamespaceDeclarations = m_allowVariablesRules = false;
+ m_allowImportRules = m_allowNamespaceDeclarations = false;
RefPtr<CSSFontFaceRule> rule = CSSFontFaceRule::create(m_styleSheet);
for (unsigned i = 0; i < m_numParsedProperties; ++i) {
CSSProperty* property = m_parsedProperties[i];
@@ -5614,70 +5602,13 @@ void CSSParser::addNamespace(const AtomicString& prefix, const AtomicString& uri
if (!m_styleSheet || !m_allowNamespaceDeclarations)
return;
m_allowImportRules = false;
- m_allowVariablesRules = false;
m_styleSheet->addNamespace(this, prefix, uri);
}
-#if !ENABLE(CSS_VARIABLES)
-
-CSSRule* CSSParser::createVariablesRule(MediaList*, bool)
-{
- return 0;
-}
-
-bool CSSParser::addVariable(const CSSParserString&, CSSParserValueList*)
-{
- return false;
-}
-
-bool CSSParser::addVariableDeclarationBlock(const CSSParserString&)
-{
- return false;
-}
-
-#else
-
-CSSRule* CSSParser::createVariablesRule(MediaList* mediaList, bool variablesKeyword)
-{
- if (!m_allowVariablesRules)
- return 0;
- m_allowImportRules = false;
- RefPtr<CSSVariablesRule> rule = CSSVariablesRule::create(m_styleSheet, mediaList, variablesKeyword);
- rule->setDeclaration(CSSVariablesDeclaration::create(rule.get(), m_variableNames, m_variableValues));
- clearVariables();
- CSSRule* result = rule.get();
- m_parsedStyleObjects.append(rule.release());
- return result;
-}
-
-bool CSSParser::addVariable(const CSSParserString& name, CSSParserValueList* valueList)
-{
- if (checkForVariables(valueList)) {
- delete valueList;
- return false;
- }
- m_variableNames.append(String(name));
- m_variableValues.append(CSSValueList::createFromParserValueList(valueList));
- return true;
-}
-
-bool CSSParser::addVariableDeclarationBlock(const CSSParserString&)
-{
-// FIXME: Disabling declarations as variable values for now since they no longer have a common base class with CSSValues.
-#if 0
- m_variableNames.append(String(name));
- m_variableValues.append(CSSMutableStyleDeclaration::create(0, m_parsedProperties, m_numParsedProperties));
- clearProperties();
-#endif
- return true;
-}
-
-#endif
-
CSSRule* CSSParser::createPageRule(CSSSelector* pageSelector)
{
// FIXME: Margin at-rules are ignored.
- m_allowImportRules = m_allowNamespaceDeclarations = m_allowVariablesRules = false;
+ m_allowImportRules = m_allowNamespaceDeclarations = false;
CSSPageRule* pageRule = 0;
if (pageSelector) {
RefPtr<CSSPageRule> rule = CSSPageRule::create(m_styleSheet, pageSelector, m_lastSelectorLineNumber);
@@ -5712,6 +5643,7 @@ void CSSParser::endDeclarationsForMarginBox()
m_numParsedPropertiesBeforeMarginBox = INVALID_NUM_PARSED_PROPERTIES;
}
+<<<<<<< HEAD
void CSSParser::clearVariables()
{
m_variableNames.clear();
@@ -5785,6 +5717,8 @@ void CSSParser::addUnresolvedProperty(int propId, bool important)
addProperty(propId, val.release(), important);
}
+=======
+>>>>>>> webkit.org at r72274
void CSSParser::deleteFontFaceOnlyValues()
{
ASSERT(m_hasFontFaceOnlyValues);
diff --git a/WebCore/css/CSSParser.h b/WebCore/css/CSSParser.h
index 8f3c6dd..1da20b7 100644
--- a/WebCore/css/CSSParser.h
+++ b/WebCore/css/CSSParser.h
@@ -45,7 +45,6 @@ namespace WebCore {
class CSSStyleSheet;
class CSSValue;
class CSSValueList;
- class CSSVariablesDeclaration;
class Document;
class MediaList;
class MediaQueryExp;
@@ -161,8 +160,6 @@ namespace WebCore {
PassRefPtr<CSSValueList> parseTransform();
bool parseTransformOrigin(int propId, int& propId1, int& propId2, int& propId3, RefPtr<CSSValue>&, RefPtr<CSSValue>&, RefPtr<CSSValue>&);
bool parsePerspectiveOrigin(int propId, int& propId1, int& propId2, RefPtr<CSSValue>&, RefPtr<CSSValue>&);
- bool parseVariable(CSSVariablesDeclaration*, const String& variableName, const String& variableValue);
- void parsePropertyWithResolvedVariables(int propId, bool important, CSSMutableStyleDeclaration*, CSSParserValueList*);
int yyparse();
@@ -186,7 +183,6 @@ namespace WebCore {
CSSRuleList* createRuleList();
CSSRule* createStyleRule(Vector<CSSSelector*>* selectors);
CSSRule* createFontFaceRule();
- CSSRule* createVariablesRule(MediaList*, bool variablesKeyword);
CSSRule* createPageRule(CSSSelector* pageSelector);
CSSRule* createMarginAtRule(CSSSelector::MarginBoxType marginBox);
void startDeclarationsForMarginBox();
@@ -202,10 +198,6 @@ namespace WebCore {
void addNamespace(const AtomicString& prefix, const AtomicString& uri);
- bool addVariable(const CSSParserString&, CSSParserValueList*);
- bool addVariableDeclarationBlock(const CSSParserString&);
- bool checkForVariables(CSSParserValueList*);
- void addUnresolvedProperty(int propId, bool important);
void invalidBlockHit();
Vector<CSSSelector*>* reusableSelectorVector() { return &m_reusableSelectorVector; }
@@ -235,9 +227,6 @@ namespace WebCore {
bool m_hasFontFaceOnlyValues;
bool m_hadSyntacticallyValidCSSRule;
- Vector<String> m_variableNames;
- Vector<RefPtr<CSSValue> > m_variableValues;
-
AtomicString m_defaultNamespace;
// tokenizer methods and data
@@ -270,8 +259,6 @@ namespace WebCore {
void checkForOrphanedUnits();
- void clearVariables();
-
void deleteFontFaceOnlyValues();
enum SizeParameterType {
@@ -299,7 +286,6 @@ namespace WebCore {
int m_lastSelectorLineNumber;
bool m_allowImportRules;
- bool m_allowVariablesRules;
bool m_allowNamespaceDeclarations;
Vector<RefPtr<StyleBase> > m_parsedStyleObjects;
diff --git a/WebCore/css/CSSParserValues.cpp b/WebCore/css/CSSParserValues.cpp
index 55ecb7f..06651f1 100644
--- a/WebCore/css/CSSParserValues.cpp
+++ b/WebCore/css/CSSParserValues.cpp
@@ -26,11 +26,6 @@
namespace WebCore {
-bool CSSParserValue::isVariable() const
-{
- return unit == CSSPrimitiveValue::CSS_PARSER_VARIABLE_FUNCTION_SYNTAX;
-}
-
CSSParserValueList::~CSSParserValueList()
{
size_t numValues = m_values.size();
@@ -42,15 +37,11 @@ CSSParserValueList::~CSSParserValueList()
void CSSParserValueList::addValue(const CSSParserValue& v)
{
- if (v.unit == CSSPrimitiveValue::CSS_PARSER_VARIABLE_FUNCTION_SYNTAX) // isVariable() is not inlined. This is hot.
- m_variablesCount++;
m_values.append(v);
}
void CSSParserValueList::deleteValueAt(unsigned i)
{
- if (m_values[i].isVariable())
- m_variablesCount--;
m_values.remove(i);
}
@@ -69,7 +60,7 @@ PassRefPtr<CSSValue> CSSParserValue::createCSSValue()
parsedValue = primitiveValue;
} else if (unit == CSSParserValue::Function)
parsedValue = CSSFunctionValue::create(function);
- else if (unit == CSSPrimitiveValue::CSS_STRING || unit == CSSPrimitiveValue::CSS_URI || unit == CSSPrimitiveValue::CSS_PARSER_HEXCOLOR || isVariable())
+ else if (unit == CSSPrimitiveValue::CSS_STRING || unit == CSSPrimitiveValue::CSS_URI || unit == CSSPrimitiveValue::CSS_PARSER_HEXCOLOR)
parsedValue = CSSPrimitiveValue::create(string, (CSSPrimitiveValue::UnitTypes)unit);
else if (unit >= CSSPrimitiveValue::CSS_NUMBER && unit <= CSSPrimitiveValue::CSS_KHZ)
parsedValue = CSSPrimitiveValue::create(fValue, (CSSPrimitiveValue::UnitTypes)unit);
diff --git a/WebCore/css/CSSParserValues.h b/WebCore/css/CSSParserValues.h
index 8644d9b..993ae28 100644
--- a/WebCore/css/CSSParserValues.h
+++ b/WebCore/css/CSSParserValues.h
@@ -55,7 +55,6 @@ struct CSSParserValue {
};
int unit;
- bool isVariable() const;
PassRefPtr<CSSValue> createCSSValue();
};
@@ -64,7 +63,6 @@ class CSSParserValueList : public FastAllocBase {
public:
CSSParserValueList()
: m_current(0)
- , m_variablesCount(0)
{
}
~CSSParserValueList();
@@ -80,11 +78,8 @@ public:
void clear() { m_values.clear(); }
- bool containsVariables() const { return m_variablesCount; }
-
private:
unsigned m_current;
- unsigned m_variablesCount;
Vector<CSSParserValue, 4> m_values;
};
diff --git a/WebCore/css/CSSPrimitiveValue.cpp b/WebCore/css/CSSPrimitiveValue.cpp
index 065c244..ce1b87b 100644
--- a/WebCore/css/CSSPrimitiveValue.cpp
+++ b/WebCore/css/CSSPrimitiveValue.cpp
@@ -36,6 +36,7 @@
#include "RenderStyle.h"
#include <wtf/ASCIICType.h>
#include <wtf/DecimalNumber.h>
+#include <wtf/MathExtras.h>
#include <wtf/StdLibExtras.h>
#include <wtf/text/StringBuffer.h>
@@ -47,6 +48,38 @@ using namespace WTF;
namespace WebCore {
+static CSSPrimitiveValue::UnitCategory unitCategory(CSSPrimitiveValue::UnitTypes type)
+{
+ // Here we violate the spec (http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue) and allow conversions
+ // between CSS_PX and relative lengths (see cssPixelsPerInch comment in CSSHelper.h for the topic treatment).
+ switch (type) {
+ case CSSPrimitiveValue::CSS_NUMBER:
+ return CSSPrimitiveValue::UNumber;
+ case CSSPrimitiveValue::CSS_PERCENTAGE:
+ return CSSPrimitiveValue::UPercent;
+ case CSSPrimitiveValue::CSS_PX:
+ case CSSPrimitiveValue::CSS_CM:
+ case CSSPrimitiveValue::CSS_MM:
+ case CSSPrimitiveValue::CSS_IN:
+ case CSSPrimitiveValue::CSS_PT:
+ case CSSPrimitiveValue::CSS_PC:
+ return CSSPrimitiveValue::ULength;
+ case CSSPrimitiveValue::CSS_MS:
+ case CSSPrimitiveValue::CSS_S:
+ return CSSPrimitiveValue::UTime;
+ case CSSPrimitiveValue::CSS_DEG:
+ case CSSPrimitiveValue::CSS_RAD:
+ case CSSPrimitiveValue::CSS_GRAD:
+ case CSSPrimitiveValue::CSS_TURN:
+ return CSSPrimitiveValue::UAngle;
+ case CSSPrimitiveValue::CSS_HZ:
+ case CSSPrimitiveValue::CSS_KHZ:
+ return CSSPrimitiveValue::UFrequency;
+ default:
+ return CSSPrimitiveValue::UOther;
+ }
+}
+
typedef HashMap<const CSSPrimitiveValue*, String> CSSTextCache;
static CSSTextCache& cssTextCache()
{
@@ -55,7 +88,7 @@ static CSSTextCache& cssTextCache()
}
// A more stylish solution than sharing would be to turn CSSPrimitiveValue (or CSSValues in general) into non-virtual,
-// non-refcounted simple type with value semantics. In practice these sharing tricks get similar memory benefits
+// non-refcounted simple type with value semantics. In practice these sharing tricks get similar memory benefits
// with less need for refactoring.
inline PassRefPtr<CSSPrimitiveValue> CSSPrimitiveValue::createUncachedIdentifier(int identifier)
@@ -274,7 +307,6 @@ void CSSPrimitiveValue::cleanup()
case CSS_STRING:
case CSS_URI:
case CSS_ATTR:
- case CSS_PARSER_VARIABLE_FUNCTION_SYNTAX:
case CSS_PARSER_HEXCOLOR:
if (m_value.string)
m_value.string->deref();
@@ -408,26 +440,24 @@ double CSSPrimitiveValue::computeLengthDouble(RenderStyle* style, RenderStyle* r
return zoomedResult;
}
-void CSSPrimitiveValue::setFloatValue(unsigned short unitType, double floatValue, ExceptionCode& ec)
+void CSSPrimitiveValue::setFloatValue(unsigned short, double, ExceptionCode& ec)
{
- ec = 0;
-
- if (m_type < CSS_NUMBER || m_type > CSS_DIMENSION || unitType < CSS_NUMBER || unitType > CSS_DIMENSION) {
- ec = INVALID_ACCESS_ERR;
- return;
- }
-
- cleanup();
-
- m_value.num = floatValue;
- m_type = unitType;
+ // Keeping values immutable makes optimizations easier and allows sharing of the primitive value objects.
+ // No other engine supports mutating style through this API. Computed style is always read-only anyway.
+ // Supporting setter would require making primitive value copy-on-write and taking care of style invalidation.
+ ec = NO_MODIFICATION_ALLOWED_ERR;
}
-static double scaleFactorForConversion(unsigned short unitType)
+static double conversionToCanonicalUnitsScaleFactor(unsigned short unitType)
{
double factor = 1.0;
+ // FIXME: the switch can be replaced by an array of scale factors.
switch (unitType) {
+ // These are "canonical" units in their respective categories.
case CSSPrimitiveValue::CSS_PX:
+ case CSSPrimitiveValue::CSS_DEG:
+ case CSSPrimitiveValue::CSS_MS:
+ case CSSPrimitiveValue::CSS_HZ:
break;
case CSSPrimitiveValue::CSS_CM:
factor = cssPixelsPerInch / 2.54; // (2.54 cm/in)
@@ -444,6 +474,19 @@ static double scaleFactorForConversion(unsigned short unitType)
case CSSPrimitiveValue::CSS_PC:
factor = cssPixelsPerInch * 12.0 / 72.0; // 1 pc == 12 pt
break;
+ case CSSPrimitiveValue::CSS_RAD:
+ factor = 180 / piDouble;
+ break;
+ case CSSPrimitiveValue::CSS_GRAD:
+ factor = 0.9;
+ break;
+ case CSSPrimitiveValue::CSS_TURN:
+ factor = 360;
+ break;
+ case CSSPrimitiveValue::CSS_S:
+ case CSSPrimitiveValue::CSS_KHZ:
+ factor = 1000;
+ break;
default:
break;
}
@@ -451,69 +494,103 @@ static double scaleFactorForConversion(unsigned short unitType)
return factor;
}
-double CSSPrimitiveValue::getDoubleValue(unsigned short unitType, ExceptionCode& ec)
+double CSSPrimitiveValue::getDoubleValue(unsigned short unitType, ExceptionCode& ec) const
{
- ec = 0;
- if (m_type < CSS_NUMBER || m_type > CSS_DIMENSION || unitType < CSS_NUMBER || unitType > CSS_DIMENSION) {
+ double result = 0;
+ bool success = getDoubleValueInternal(static_cast<UnitTypes>(unitType), &result);
+ if (!success) {
ec = INVALID_ACCESS_ERR;
return 0.0;
}
- if (unitType == m_type || unitType < CSS_PX || unitType > CSS_PC)
- return m_value.num;
+ ec = 0;
+ return result;
+}
+
+double CSSPrimitiveValue::getDoubleValue(unsigned short unitType) const
+{
+ double result = 0;
+ getDoubleValueInternal(static_cast<UnitTypes>(unitType), &result);
+ return result;
+}
+
+CSSPrimitiveValue::UnitTypes CSSPrimitiveValue::canonicalUnitTypeForCategory(UnitCategory category)
+{
+ // The canonical unit type is chosen according to the way CSSParser::validUnit() chooses the default unit
+ // in each category (based on unitflags).
+ switch (category) {
+ case UNumber:
+ return CSS_NUMBER;
+ case ULength:
+ return CSS_PX;
+ case UPercent:
+ return CSS_UNKNOWN; // Cannot convert between numbers and percent.
+ case UTime:
+ return CSS_MS;
+ case UAngle:
+ return CSS_DEG;
+ case UFrequency:
+ return CSS_HZ;
+ default:
+ return CSS_UNKNOWN;
+ }
+}
- double convertedValue = m_value.num;
+bool CSSPrimitiveValue::getDoubleValueInternal(UnitTypes requestedUnitType, double* result) const
+{
+ if (m_type < CSS_NUMBER || (m_type > CSS_DIMENSION && m_type < CSS_TURN) || requestedUnitType < CSS_NUMBER || (requestedUnitType > CSS_DIMENSION && requestedUnitType < CSS_TURN))
+ return false;
+ if (requestedUnitType == m_type || requestedUnitType == CSS_DIMENSION) {
+ *result = m_value.num;
+ return true;
+ }
- // First convert the value from m_type into CSSPixels
- double factor = scaleFactorForConversion(m_type);
- convertedValue *= factor;
+ UnitTypes sourceUnitType = static_cast<UnitTypes>(m_type);
+ UnitCategory sourceCategory = unitCategory(sourceUnitType);
+ ASSERT(sourceCategory != UOther);
- // Now convert from CSSPixels to the specified unitType
- factor = scaleFactorForConversion(unitType);
- convertedValue /= factor;
+ UnitTypes targetUnitType = requestedUnitType;
+ UnitCategory targetCategory = unitCategory(targetUnitType);
+ ASSERT(targetCategory != UOther);
- return convertedValue;
-}
+ // Cannot convert between unrelated unit categories if one of them is not UNumber.
+ if (sourceCategory != targetCategory && sourceCategory != UNumber && targetCategory != UNumber)
+ return false;
-double CSSPrimitiveValue::getDoubleValue(unsigned short unitType)
-{
- if (m_type < CSS_NUMBER || m_type > CSS_DIMENSION || unitType < CSS_NUMBER || unitType > CSS_DIMENSION)
- return 0;
+ if (targetCategory == UNumber) {
+ // We interpret conversion to CSS_NUMBER as conversion to a canonical unit in this value's category.
+ targetUnitType = canonicalUnitTypeForCategory(sourceCategory);
+ if (targetUnitType == CSS_UNKNOWN)
+ return false;
+ }
- if (unitType == m_type || unitType < CSS_PX || unitType > CSS_PC)
- return m_value.num;
+ if (sourceUnitType == CSS_NUMBER) {
+ // We interpret conversion from CSS_NUMBER in the same way as CSSParser::validUnit() while using non-strict mode.
+ sourceUnitType = canonicalUnitTypeForCategory(targetCategory);
+ if (sourceUnitType == CSS_UNKNOWN)
+ return false;
+ }
double convertedValue = m_value.num;
- // First convert the value from m_type into CSSPixels
- double factor = scaleFactorForConversion(m_type);
+ // First convert the value from m_type to canonical type.
+ double factor = conversionToCanonicalUnitsScaleFactor(sourceUnitType);
convertedValue *= factor;
- // Now convert from CSSPixels to the specified unitType
- factor = scaleFactorForConversion(unitType);
+ // Now convert from canonical type to the target unitType.
+ factor = conversionToCanonicalUnitsScaleFactor(targetUnitType);
convertedValue /= factor;
- return convertedValue;
+ *result = convertedValue;
+ return true;
}
-
-void CSSPrimitiveValue::setStringValue(unsigned short stringType, const String& stringValue, ExceptionCode& ec)
+void CSSPrimitiveValue::setStringValue(unsigned short, const String&, ExceptionCode& ec)
{
- ec = 0;
-
- if (m_type < CSS_STRING || m_type > CSS_ATTR || stringType < CSS_STRING || stringType > CSS_ATTR) {
- ec = INVALID_ACCESS_ERR;
- return;
- }
-
- cleanup();
-
- if (stringType != CSS_IDENT) {
- m_value.string = stringValue.impl();
- m_value.string->ref();
- m_type = stringType;
- }
- // FIXME: parse ident
+ // Keeping values immutable makes optimizations easier and allows sharing of the primitive value objects.
+ // No other engine supports mutating style through this API. Computed style is always read-only anyway.
+ // Supporting setter would require making primitive value copy-on-write and taking care of style invalidation.
+ ec = NO_MODIFICATION_ALLOWED_ERR;
}
String CSSPrimitiveValue::getStringValue(ExceptionCode& ec) const
@@ -523,7 +600,6 @@ String CSSPrimitiveValue::getStringValue(ExceptionCode& ec) const
case CSS_STRING:
case CSS_ATTR:
case CSS_URI:
- case CSS_PARSER_VARIABLE_FUNCTION_SYNTAX:
return m_value.string;
case CSS_IDENT:
return valueOrPropertyName(m_value.ident);
@@ -541,7 +617,6 @@ String CSSPrimitiveValue::getStringValue() const
case CSS_STRING:
case CSS_ATTR:
case CSS_URI:
- case CSS_PARSER_VARIABLE_FUNCTION_SYNTAX:
return m_value.string;
case CSS_IDENT:
return valueOrPropertyName(m_value.ident);
@@ -608,7 +683,7 @@ bool CSSPrimitiveValue::parseString(const String& /*string*/, bool /*strict*/)
return false;
}
-int CSSPrimitiveValue::getIdent()
+int CSSPrimitiveValue::getIdent() const
{
if (m_type != CSS_IDENT)
return 0;
@@ -823,11 +898,6 @@ String CSSPrimitiveValue::cssText() const
}
break;
#endif
- case CSS_PARSER_VARIABLE_FUNCTION_SYNTAX:
- text = "-webkit-var(";
- text += m_value.string;
- text += ")";
- break;
case CSS_PARSER_OPERATOR: {
char c = static_cast<char>(m_value.ident);
text = String(&c, 1U);
@@ -877,7 +947,6 @@ CSSParserValue CSSPrimitiveValue::parserValue() const
break;
case CSS_STRING:
case CSS_URI:
- case CSS_PARSER_VARIABLE_FUNCTION_SYNTAX:
case CSS_PARSER_HEXCOLOR:
value.string.characters = const_cast<UChar*>(m_value.string->characters());
value.string.length = m_value.string->length();
diff --git a/WebCore/css/CSSPrimitiveValue.h b/WebCore/css/CSSPrimitiveValue.h
index bb3ea70..e12cd4c 100644
--- a/WebCore/css/CSSPrimitiveValue.h
+++ b/WebCore/css/CSSPrimitiveValue.h
@@ -83,17 +83,27 @@ public:
// These next types are just used internally to allow us to translate back and forth from CSSPrimitiveValues to CSSParserValues.
CSS_PARSER_OPERATOR = 103,
CSS_PARSER_INTEGER = 104,
- CSS_PARSER_VARIABLE_FUNCTION_SYNTAX = 105,
- CSS_PARSER_HEXCOLOR = 106,
+ CSS_PARSER_HEXCOLOR = 105,
// This is used internally for unknown identifiers
- CSS_PARSER_IDENTIFIER = 107,
+ CSS_PARSER_IDENTIFIER = 106,
// These are from CSS3 Values and Units, but that isn't a finished standard yet
- CSS_TURN = 108,
- CSS_REMS = 109
+ CSS_TURN = 107,
+ CSS_REMS = 108
};
+ // This enum follows the CSSParser::Units enum augmented with UNIT_FREQUENCY for frequencies.
+ enum UnitCategory {
+ UNumber,
+ UPercent,
+ ULength,
+ UAngle,
+ UTime,
+ UFrequency,
+ UOther
+ };
+
static bool isUnitTypeLength(int type) { return (type > CSSPrimitiveValue::CSS_PERCENTAGE && type < CSSPrimitiveValue::CSS_DEG) ||
type == CSSPrimitiveValue::CSS_REMS; }
@@ -113,8 +123,6 @@ public:
unsigned short primitiveType() const { return m_type; }
- bool isVariable() const { return m_type == CSS_PARSER_VARIABLE_FUNCTION_SYNTAX; }
-
/*
* computes a length in pixels out of the given CSSValue. Need the RenderStyle to get
* the fontinfo in case val is defined in em or ex.
@@ -138,17 +146,17 @@ public:
// use with care!!!
void setPrimitiveType(unsigned short type) { m_type = type; }
- double getDoubleValue(unsigned short unitType, ExceptionCode&);
- double getDoubleValue(unsigned short unitType);
+ double getDoubleValue(unsigned short unitType, ExceptionCode&) const;
+ double getDoubleValue(unsigned short unitType) const;
double getDoubleValue() const { return m_value.num; }
void setFloatValue(unsigned short unitType, double floatValue, ExceptionCode&);
- float getFloatValue(unsigned short unitType, ExceptionCode& ec) { return static_cast<float>(getDoubleValue(unitType, ec)); }
- float getFloatValue(unsigned short unitType) { return static_cast<float>(getDoubleValue(unitType)); }
+ float getFloatValue(unsigned short unitType, ExceptionCode& ec) const { return static_cast<float>(getDoubleValue(unitType, ec)); }
+ float getFloatValue(unsigned short unitType) const { return static_cast<float>(getDoubleValue(unitType)); }
float getFloatValue() const { return static_cast<float>(m_value.num); }
- int getIntValue(unsigned short unitType, ExceptionCode& ec) { return static_cast<int>(getDoubleValue(unitType, ec)); }
- int getIntValue(unsigned short unitType) { return static_cast<int>(getDoubleValue(unitType)); }
+ int getIntValue(unsigned short unitType, ExceptionCode& ec) const { return static_cast<int>(getDoubleValue(unitType, ec)); }
+ int getIntValue(unsigned short unitType) const { return static_cast<int>(getDoubleValue(unitType)); }
int getIntValue() const { return static_cast<int>(m_value.num); }
void setStringValue(unsigned short stringType, const String& stringValue, ExceptionCode&);
@@ -169,7 +177,7 @@ public:
DashboardRegion* getDashboardRegionValue() const { return m_type != CSS_DASHBOARD_REGION ? 0 : m_value.region; }
- int getIdent();
+ int getIdent() const;
template<typename T> inline operator T() const; // Defined in CSSPrimitiveValueMappings.h
virtual bool parseString(const String&, bool = false);
@@ -204,10 +212,13 @@ private:
static PassRefPtr<CSSPrimitiveValue> createUncachedColor(unsigned rgbValue);
static PassRefPtr<CSSPrimitiveValue> createUncached(double value, UnitTypes type);
+ static UnitTypes canonicalUnitTypeForCategory(UnitCategory category);
+
void init(PassRefPtr<Counter>);
void init(PassRefPtr<Rect>);
void init(PassRefPtr<Pair>);
void init(PassRefPtr<DashboardRegion>); // FIXME: Dashboard region should not be a primitive value.
+ bool getDoubleValueInternal(UnitTypes targetUnitType, double* result) const;
virtual bool isPrimitiveValue() const { return true; }
diff --git a/WebCore/css/CSSProperty.cpp b/WebCore/css/CSSProperty.cpp
index 61300a2..1e04da7 100644
--- a/WebCore/css/CSSProperty.cpp
+++ b/WebCore/css/CSSProperty.cpp
@@ -29,8 +29,6 @@ namespace WebCore {
String CSSProperty::cssText() const
{
- if (id() == CSSPropertyWebkitVariableDeclarationBlock)
- return m_value->cssText() + ";";
return String(getPropertyName(static_cast<CSSPropertyID>(id()))) + ": " + m_value->cssText() + (isImportant() ? " !important" : "") + "; ";
}
diff --git a/WebCore/css/CSSPropertyNames.in b/WebCore/css/CSSPropertyNames.in
index ab75404..28b393c 100644
--- a/WebCore/css/CSSPropertyNames.in
+++ b/WebCore/css/CSSPropertyNames.in
@@ -297,4 +297,3 @@ z-index
-webkit-user-drag
-webkit-user-modify
-webkit-user-select
--webkit-variable-declaration-block
diff --git a/WebCore/css/CSSReflectValue.h b/WebCore/css/CSSReflectValue.h
index d61f8c4..1dcb1be 100644
--- a/WebCore/css/CSSReflectValue.h
+++ b/WebCore/css/CSSReflectValue.h
@@ -59,6 +59,8 @@ private:
, m_mask(mask)
{
}
+
+ virtual bool isReflectValue() const { return true; }
CSSReflectionDirection m_direction;
RefPtr<CSSPrimitiveValue> m_offset;
diff --git a/WebCore/css/CSSRule.h b/WebCore/css/CSSRule.h
index 1ffca93..4d2de8a 100644
--- a/WebCore/css/CSSRule.h
+++ b/WebCore/css/CSSRule.h
@@ -46,8 +46,8 @@ public:
MEDIA_RULE,
FONT_FACE_RULE,
PAGE_RULE,
- VARIABLES_RULE,
- WEBKIT_KEYFRAMES_RULE,
+ // 7 used to be VARIABLES_RULE
+ WEBKIT_KEYFRAMES_RULE = 8,
WEBKIT_KEYFRAME_RULE
};
diff --git a/WebCore/css/CSSRule.idl b/WebCore/css/CSSRule.idl
index eaf1335..82a1dee 100644
--- a/WebCore/css/CSSRule.idl
+++ b/WebCore/css/CSSRule.idl
@@ -34,7 +34,6 @@ module css {
const unsigned short MEDIA_RULE = 4;
const unsigned short FONT_FACE_RULE = 5;
const unsigned short PAGE_RULE = 6;
- const unsigned short VARIABLES_RULE = 7;
const unsigned short WEBKIT_KEYFRAMES_RULE = 8;
const unsigned short WEBKIT_KEYFRAME_RULE = 9;
diff --git a/WebCore/css/CSSSegmentedFontFace.cpp b/WebCore/css/CSSSegmentedFontFace.cpp
index bda29f0..cdabec1 100644
--- a/WebCore/css/CSSSegmentedFontFace.cpp
+++ b/WebCore/css/CSSSegmentedFontFace.cpp
@@ -88,7 +88,7 @@ FontData* CSSSegmentedFontFace::getFontData(const FontDescription& fontDescripti
return 0;
FontTraitsMask desiredTraitsMask = fontDescription.traitsMask();
- unsigned hashKey = fontDescription.computedPixelSize() << FontTraitsMaskWidth | desiredTraitsMask;
+ unsigned hashKey = (fontDescription.computedPixelSize() << (FontTraitsMaskWidth + 1)) | ((fontDescription.orientation() == Vertical ? 1 : 0) << FontTraitsMaskWidth) | desiredTraitsMask;
SegmentedFontData* fontData = m_fontDataTable.get(hashKey);
if (fontData)
diff --git a/WebCore/css/CSSStyleDeclaration.cpp b/WebCore/css/CSSStyleDeclaration.cpp
index 996d573..422dd0d 100644
--- a/WebCore/css/CSSStyleDeclaration.cpp
+++ b/WebCore/css/CSSStyleDeclaration.cpp
@@ -148,16 +148,12 @@ PassRefPtr<CSSMutableStyleDeclaration> CSSStyleDeclaration::copyPropertiesInSet(
{
Vector<CSSProperty> list;
list.reserveInitialCapacity(length);
- unsigned variableDependentValueCount = 0;
for (unsigned i = 0; i < length; i++) {
RefPtr<CSSValue> value = getPropertyCSSValue(set[i]);
- if (value) {
- if (value->isVariableDependentValue())
- variableDependentValueCount++;
+ if (value)
list.append(CSSProperty(set[i], value.release(), false));
- }
}
- return CSSMutableStyleDeclaration::create(list, variableDependentValueCount);
+ return CSSMutableStyleDeclaration::create(list);
}
} // namespace WebCore
diff --git a/WebCore/css/CSSStyleSelector.cpp b/WebCore/css/CSSStyleSelector.cpp
index 750f6e7..a534247 100644
--- a/WebCore/css/CSSStyleSelector.cpp
+++ b/WebCore/css/CSSStyleSelector.cpp
@@ -44,9 +44,6 @@
#include "CSSStyleSheet.h"
#include "CSSTimingFunctionValue.h"
#include "CSSValueList.h"
-#include "CSSVariableDependentValue.h"
-#include "CSSVariablesDeclaration.h"
-#include "CSSVariablesRule.h"
#include "CachedImage.h"
#include "Counter.h"
#include "FocusController.h"
@@ -361,7 +358,7 @@ public:
void addRulesFromSheet(CSSStyleSheet*, const MediaQueryEvaluator&, CSSStyleSelector* = 0);
- void addStyleRule(StyleBase* item);
+ void addStyleRule(CSSStyleRule* item);
void addRule(CSSStyleRule* rule, CSSSelector* sel);
void addPageRule(CSSStyleRule* rule, CSSSelector* sel);
void addToRuleSet(AtomicStringImpl* key, AtomRuleMap& map,
@@ -571,87 +568,7 @@ static void loadViewSourceStyle()
void CSSStyleSelector::addMatchedDeclaration(CSSMutableStyleDeclaration* decl)
{
- if (!decl->hasVariableDependentValue()) {
- m_matchedDecls.append(decl);
- return;
- }
-
- // See if we have already resolved the variables in this declaration.
- CSSMutableStyleDeclaration* resolvedDecl = m_resolvedVariablesDeclarations.get(decl).get();
- if (resolvedDecl) {
- m_matchedDecls.append(resolvedDecl);
- return;
- }
-
- // If this declaration has any variables in it, then we need to make a cloned
- // declaration with as many variables resolved as possible for this style selector's media.
- RefPtr<CSSMutableStyleDeclaration> newDecl = CSSMutableStyleDeclaration::create(decl->parentRule());
- m_matchedDecls.append(newDecl.get());
- m_resolvedVariablesDeclarations.set(decl, newDecl);
-
- HashSet<String> usedBlockVariables;
- resolveVariablesForDeclaration(decl, newDecl.get(), usedBlockVariables);
-}
-
-void CSSStyleSelector::resolveVariablesForDeclaration(CSSMutableStyleDeclaration* decl, CSSMutableStyleDeclaration* newDecl, HashSet<String>& usedBlockVariables)
-{
- // Now iterate over the properties in the original declaration. As we resolve variables we'll end up
- // mutating the new declaration (possibly expanding shorthands). The new declaration has no m_node
- // though, so it can't mistakenly call setChanged on anything.
- CSSMutableStyleDeclaration::const_iterator end = decl->end();
- for (CSSMutableStyleDeclaration::const_iterator it = decl->begin(); it != end; ++it) {
- const CSSProperty& current = *it;
- if (!current.value()->isVariableDependentValue()) {
- // We can just add the parsed property directly.
- newDecl->addParsedProperty(current);
- continue;
- }
- CSSValueList* valueList = static_cast<CSSVariableDependentValue*>(current.value())->valueList();
- if (!valueList)
- continue;
- CSSParserValueList resolvedValueList;
- unsigned s = valueList->length();
- bool fullyResolved = true;
- for (unsigned i = 0; i < s; ++i) {
- CSSValue* val = valueList->item(i);
- CSSPrimitiveValue* primitiveValue = val->isPrimitiveValue() ? static_cast<CSSPrimitiveValue*>(val) : 0;
- if (primitiveValue && primitiveValue->isVariable()) {
- CSSVariablesRule* rule = m_variablesMap.get(primitiveValue->getStringValue());
- if (!rule || !rule->variables()) {
- fullyResolved = false;
- break;
- }
-
- if (current.id() == CSSPropertyWebkitVariableDeclarationBlock && s == 1) {
- fullyResolved = false;
- if (!usedBlockVariables.contains(primitiveValue->getStringValue())) {
- CSSMutableStyleDeclaration* declBlock = rule->variables()->getParsedVariableDeclarationBlock(primitiveValue->getStringValue());
- if (declBlock) {
- usedBlockVariables.add(primitiveValue->getStringValue());
- resolveVariablesForDeclaration(declBlock, newDecl, usedBlockVariables);
- }
- }
- }
-
- CSSValueList* resolvedVariable = rule->variables()->getParsedVariable(primitiveValue->getStringValue());
- if (!resolvedVariable) {
- fullyResolved = false;
- break;
- }
- unsigned valueSize = resolvedVariable->length();
- for (unsigned j = 0; j < valueSize; ++j)
- resolvedValueList.addValue(resolvedVariable->item(j)->parserValue());
- } else
- resolvedValueList.addValue(val->parserValue());
- }
-
- if (!fullyResolved)
- continue;
-
- // We now have a fully resolved new value list. We want the parser to use this value list
- // and parse our new declaration.
- CSSParser(m_checker.m_strictParsing).parsePropertyWithResolvedVariables(current.id(), current.isImportant(), newDecl, &resolvedValueList);
- }
+ m_matchedDecls.append(decl);
}
void CSSStyleSelector::matchRules(CSSRuleSet* rules, int& firstRuleIndex, int& lastRuleIndex, bool includeEmptyRules)
@@ -1609,7 +1526,7 @@ PassRefPtr<RenderStyle> CSSStyleSelector::pseudoStyleForElement(PseudoId pseudo,
PassRefPtr<RenderStyle> CSSStyleSelector::styleForPage(int pageIndex)
{
- initForStyleResolve(m_checker.m_document->body());
+ initForStyleResolve(m_checker.m_document->documentElement()); // m_rootElementStyle will be set to the document style.
m_style = RenderStyle::create();
m_style->inheritFrom(m_rootElementStyle);
@@ -2785,23 +2702,6 @@ bool CSSStyleSelector::SelectorChecker::checkScrollbarPseudoClass(CSSSelector* s
}
}
-void CSSStyleSelector::addVariables(CSSVariablesRule* variables)
-{
- CSSVariablesDeclaration* decl = variables->variables();
- if (!decl)
- return;
- unsigned size = decl->length();
- for (unsigned i = 0; i < size; ++i) {
- String name = decl->item(i);
- m_variablesMap.set(name, variables);
- }
-}
-
-CSSValue* CSSStyleSelector::resolveVariableDependentValue(CSSVariableDependentValue*)
-{
- return 0;
-}
-
// -----------------------------------------------------------------
CSSRuleSet::CSSRuleSet()
@@ -2876,9 +2776,8 @@ void CSSRuleSet::addRulesFromSheet(CSSStyleSheet* sheet, const MediaQueryEvaluat
for (int i = 0; i < len; i++) {
StyleBase* item = sheet->item(i);
- if (item->isStyleRule()) {
- addStyleRule(item);
- }
+ if (item->isStyleRule())
+ addStyleRule(static_cast<CSSStyleRule*>(item));
else if (item->isImportRule()) {
CSSImportRule* import = static_cast<CSSImportRule*>(item);
if (!import->media() || medium.eval(import->media(), styleSelector))
@@ -2894,7 +2793,7 @@ void CSSRuleSet::addRulesFromSheet(CSSStyleSheet* sheet, const MediaQueryEvaluat
CSSRule *childItem = rules->item(j);
if (childItem->isStyleRule()) {
// It is a StyleRule, so append it to our list
- addStyleRule(childItem);
+ addStyleRule(static_cast<CSSStyleRule*>(childItem));
} else if (childItem->isFontFaceRule() && styleSelector) {
// Add this font face to our set.
const CSSFontFaceRule* fontFaceRule = static_cast<CSSFontFaceRule*>(childItem);
@@ -2909,23 +2808,17 @@ void CSSRuleSet::addRulesFromSheet(CSSStyleSheet* sheet, const MediaQueryEvaluat
// Add this font face to our set.
const CSSFontFaceRule* fontFaceRule = static_cast<CSSFontFaceRule*>(item);
styleSelector->fontSelector()->addFontFaceRule(fontFaceRule);
- } else if (item->isVariablesRule()) {
- // Evaluate the media query and make sure it matches.
- CSSVariablesRule* variables = static_cast<CSSVariablesRule*>(item);
- if (!variables->media() || medium.eval(variables->media(), styleSelector))
- styleSelector->addVariables(variables);
} else if (item->isKeyframesRule())
styleSelector->addKeyframeStyle(static_cast<WebKitCSSKeyframesRule*>(item));
}
}
-void CSSRuleSet::addStyleRule(StyleBase* item)
+void CSSRuleSet::addStyleRule(CSSStyleRule* rule)
{
- if (item->isPageRule()) {
- CSSPageRule* pageRule = static_cast<CSSPageRule*>(item);
+ if (rule->isPageRule()) {
+ CSSPageRule* pageRule = static_cast<CSSPageRule*>(rule);
addPageRule(pageRule, pageRule->selectorList().first());
} else {
- CSSStyleRule* rule = static_cast<CSSStyleRule*>(item);
for (CSSSelector* s = rule->selectorList().first(); s; s = CSSSelectorList::next(s))
addRule(rule, s);
}
@@ -3079,7 +2972,14 @@ static void applyCounterList(RenderStyle* style, CSSValueList* list, bool isRese
int length = list ? list->length() : 0;
for (int i = 0; i < length; ++i) {
- Pair* pair = static_cast<CSSPrimitiveValue*>(list->itemWithoutBoundsCheck(i))->getPairValue();
+ CSSValue* currValue = list->itemWithoutBoundsCheck(i);
+ if (!currValue->isPrimitiveValue())
+ continue;
+
+ Pair* pair = static_cast<CSSPrimitiveValue*>(currValue)->getPairValue();
+ if (!pair || !pair->first() || !pair->second())
+ continue;
+
AtomicString identifier = static_cast<CSSPrimitiveValue*>(pair->first())->getStringValue();
// FIXME: What about overflow?
int value = static_cast<CSSPrimitiveValue*>(pair->second())->getIntValue();
@@ -3566,10 +3466,12 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
primitiveValue = static_cast<CSSPrimitiveValue*>(item);
int type = primitiveValue->primitiveType();
if (type == CSSPrimitiveValue::CSS_URI) {
- CSSCursorImageValue* image = static_cast<CSSCursorImageValue*>(primitiveValue);
- if (image->updateIfSVGCursorIsUsed(m_element)) // Elements with SVG cursors are not allowed to share style.
- m_style->setUnique();
- m_style->addCursor(cachedOrPendingFromValue(CSSPropertyCursor, image), image->hotSpot());
+ if (primitiveValue->isCursorImageValue()) {
+ CSSCursorImageValue* image = static_cast<CSSCursorImageValue*>(primitiveValue);
+ if (image->updateIfSVGCursorIsUsed(m_element)) // Elements with SVG cursors are not allowed to share style.
+ m_style->setUnique();
+ m_style->addCursor(cachedOrPendingFromValue(CSSPropertyCursor, image), image->hotSpot());
+ }
} else if (type == CSSPrimitiveValue::CSS_IDENT)
m_style->setCursor(*primitiveValue);
}
@@ -4306,10 +4208,10 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
if (!item->isPrimitiveValue())
continue;
- CSSPrimitiveValue* val = static_cast<CSSPrimitiveValue*>(item);
- switch (val->primitiveType()) {
+ CSSPrimitiveValue* contentValue = static_cast<CSSPrimitiveValue*>(item);
+ switch (contentValue->primitiveType()) {
case CSSPrimitiveValue::CSS_STRING:
- m_style->setContent(val->getStringValue().impl(), didSet);
+ m_style->setContent(contentValue->getStringValue().impl(), didSet);
didSet = true;
break;
case CSSPrimitiveValue::CSS_ATTR: {
@@ -4318,7 +4220,7 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
m_style->setUnique();
else
m_parentStyle->setUnique();
- QualifiedName attr(nullAtom, val->getStringValue().impl(), nullAtom);
+ QualifiedName attr(nullAtom, contentValue->getStringValue().impl(), nullAtom);
m_style->setContent(m_element->getAttribute(attr).impl(), didSet);
didSet = true;
// register the fact that the attribute value affects the style
@@ -4326,12 +4228,14 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
break;
}
case CSSPrimitiveValue::CSS_URI: {
- m_style->setContent(cachedOrPendingFromValue(CSSPropertyContent, static_cast<CSSImageValue*>(val)), didSet);
+ if (!contentValue->isImageValue())
+ break;
+ m_style->setContent(cachedOrPendingFromValue(CSSPropertyContent, static_cast<CSSImageValue*>(contentValue)), didSet);
didSet = true;
break;
}
case CSSPrimitiveValue::CSS_COUNTER: {
- Counter* counterValue = val->getCounterValue();
+ Counter* counterValue = contentValue->getCounterValue();
OwnPtr<CounterContent> counter = adoptPtr(new CounterContent(counterValue->identifier(),
(EListStyleType)counterValue->listStyleNumber(), counterValue->separator()));
m_style->setContent(counter.release(), didSet);
@@ -4393,13 +4297,14 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
CSSValue* item = list->itemWithoutBoundsCheck(i);
if (!item->isPrimitiveValue())
continue;
- CSSPrimitiveValue* val = static_cast<CSSPrimitiveValue*>(item);
+ CSSPrimitiveValue* contentValue = static_cast<CSSPrimitiveValue*>(item);
AtomicString face;
Settings* settings = m_checker.m_document->settings();
- if (val->primitiveType() == CSSPrimitiveValue::CSS_STRING)
- face = static_cast<FontFamilyValue*>(val)->familyName();
- else if (val->primitiveType() == CSSPrimitiveValue::CSS_IDENT && settings) {
- switch (val->getIdent()) {
+ if (contentValue->primitiveType() == CSSPrimitiveValue::CSS_STRING) {
+ if (contentValue->isFontFamilyValue())
+ face = static_cast<FontFamilyValue*>(contentValue)->familyName();
+ } else if (contentValue->primitiveType() == CSSPrimitiveValue::CSS_IDENT && settings) {
+ switch (contentValue->getIdent()) {
case CSSValueWebkitBody:
face = settings->standardFontFamily();
break;
@@ -4460,13 +4365,15 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
if (primitiveValue && primitiveValue->getIdent() == CSSValueNone) {
// do nothing
} else {
- if (!value->isValueList()) return;
+ if (!value->isValueList())
+ return;
CSSValueList *list = static_cast<CSSValueList*>(value);
int len = list->length();
for (int i = 0; i < len; i++)
{
CSSValue *item = list->itemWithoutBoundsCheck(i);
- if (!item->isPrimitiveValue()) continue;
+ if (!item->isPrimitiveValue())
+ continue;
primitiveValue = static_cast<CSSPrimitiveValue*>(item);
switch (primitiveValue->getIdent()) {
case CSSValueNone:
@@ -4800,7 +4707,7 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
return;
Pair* pair = primitiveValue->getPairValue();
- if (!pair)
+ if (!pair || !pair->first() || !pair->second())
return;
Length radiusWidth;
@@ -4878,6 +4785,9 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
CSSValueList *list = static_cast<CSSValueList*>(value);
int len = list->length();
for (int i = 0; i < len; i++) {
+ CSSValue* currValue = list->itemWithoutBoundsCheck(i);
+ if (!currValue->isShadowValue())
+ continue;
ShadowValue* item = static_cast<ShadowValue*>(list->itemWithoutBoundsCheck(i));
int x = item->x->computeLengthInt(style(), m_rootElementStyle, zoomFactor);
int y = item->y->computeLengthInt(style(), m_rootElementStyle, zoomFactor);
@@ -4901,6 +4811,10 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
m_style->setBoxReflect(RenderStyle::initialBoxReflect());
return;
}
+
+ if (!value->isReflectValue())
+ return;
+
CSSReflectValue* reflectValue = static_cast<CSSReflectValue*>(value);
RefPtr<StyleReflection> reflection = StyleReflection::create();
reflection->setDirection(reflectValue->direction());
@@ -5348,7 +5262,8 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
return;
case CSSPropertyWebkitTransformOriginX: {
HANDLE_INHERIT_AND_INITIAL(transformOriginX, TransformOriginX)
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ if (!primitiveValue)
+ return;
Length l;
int type = primitiveValue->primitiveType();
if (CSSPrimitiveValue::isUnitTypeLength(type))
@@ -5362,7 +5277,8 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
}
case CSSPropertyWebkitTransformOriginY: {
HANDLE_INHERIT_AND_INITIAL(transformOriginY, TransformOriginY)
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ if (!primitiveValue)
+ return;
Length l;
int type = primitiveValue->primitiveType();
if (CSSPrimitiveValue::isUnitTypeLength(type))
@@ -5376,7 +5292,8 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
}
case CSSPropertyWebkitTransformOriginZ: {
HANDLE_INHERIT_AND_INITIAL(transformOriginZ, TransformOriginZ)
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ if (!primitiveValue)
+ return;
float f;
int type = primitiveValue->primitiveType();
if (CSSPrimitiveValue::isUnitTypeLength(type))
@@ -5418,7 +5335,8 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
return;
case CSSPropertyWebkitPerspectiveOriginX: {
HANDLE_INHERIT_AND_INITIAL(perspectiveOriginX, PerspectiveOriginX)
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ if (!primitiveValue)
+ return;
Length l;
int type = primitiveValue->primitiveType();
if (CSSPrimitiveValue::isUnitTypeLength(type))
@@ -5432,7 +5350,8 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
}
case CSSPropertyWebkitPerspectiveOriginY: {
HANDLE_INHERIT_AND_INITIAL(perspectiveOriginY, PerspectiveOriginY)
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ if (!primitiveValue)
+ return;
Length l;
int type = primitiveValue->primitiveType();
if (CSSPrimitiveValue::isUnitTypeLength(type))
@@ -5524,6 +5443,8 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
case CSSPropertySpeak:
HANDLE_INHERIT_AND_INITIAL(speak, Speak);
+ if (!primitiveValue)
+ return;
m_style->setSpeak(*primitiveValue);
return;
@@ -5585,7 +5506,6 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
case CSSPropertyWebkitFontSizeDelta:
case CSSPropertyWebkitTextDecorationsInEffect:
case CSSPropertyWebkitTextStroke:
- case CSSPropertyWebkitVariableDeclarationBlock:
return;
#if ENABLE(WCSS)
case CSSPropertyWapInputFormat:
@@ -6072,15 +5992,12 @@ void CSSStyleSelector::mapFillSize(CSSPropertyID, FillLayer* layer, CSSValue* va
}
Pair* pair = primitiveValue->getPairValue();
- if (!pair)
+ if (!pair || !pair->first() || !pair->second())
return;
CSSPrimitiveValue* first = static_cast<CSSPrimitiveValue*>(pair->first());
CSSPrimitiveValue* second = static_cast<CSSPrimitiveValue*>(pair->second());
- if (!first || !second)
- return;
-
Length firstLength, secondLength;
int firstType = first->primitiveType();
int secondType = second->primitiveType();
@@ -6165,6 +6082,9 @@ void CSSStyleSelector::mapAnimationDelay(Animation* animation, CSSValue* value)
return;
}
+ if (!value->isPrimitiveValue())
+ return;
+
CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
if (primitiveValue->primitiveType() == CSSPrimitiveValue::CSS_S)
animation->setDelay(primitiveValue->getFloatValue());
@@ -6179,6 +6099,9 @@ void CSSStyleSelector::mapAnimationDirection(Animation* layer, CSSValue* value)
return;
}
+ if (!value->isPrimitiveValue())
+ return;
+
CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
layer->setDirection(primitiveValue->getIdent() == CSSValueAlternate ? Animation::AnimationDirectionAlternate : Animation::AnimationDirectionNormal);
}
@@ -6207,6 +6130,9 @@ void CSSStyleSelector::mapAnimationFillMode(Animation* layer, CSSValue* value)
return;
}
+ if (!value->isPrimitiveValue())
+ return;
+
CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
switch (primitiveValue->getIdent()) {
case CSSValueNone:
@@ -6248,8 +6174,10 @@ void CSSStyleSelector::mapAnimationName(Animation* layer, CSSValue* value)
return;
}
+ if (!value->isPrimitiveValue())
+ return;
+
CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
-
if (primitiveValue->getIdent() == CSSValueNone)
layer->setIsNoneAnimation(true);
else
@@ -6263,6 +6191,9 @@ void CSSStyleSelector::mapAnimationPlayState(Animation* layer, CSSValue* value)
return;
}
+ if (!value->isPrimitiveValue())
+ return;
+
CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
EAnimPlayState playState = (primitiveValue->getIdent() == CSSValuePaused) ? AnimPlayStatePaused : AnimPlayStatePlaying;
layer->setPlayState(playState);
@@ -6338,7 +6269,7 @@ void CSSStyleSelector::mapAnimationTimingFunction(Animation* animation, CSSValue
void CSSStyleSelector::mapNinePieceImage(CSSPropertyID property, CSSValue* value, NinePieceImage& image)
{
// If we're a primitive value, then we are "none" and don't need to alter the empty image at all.
- if (!value || value->isPrimitiveValue())
+ if (!value || value->isPrimitiveValue() || !value->isBorderImageValue())
return;
// Retrieve the border image value.
@@ -6505,7 +6436,7 @@ float CSSStyleSelector::getComputedSizeFromSpecifiedSize(Document* document, Ren
// Also clamp to a reasonable maximum to prevent insane font sizes from causing crashes on various
// platforms (I'm looking at you, Windows.)
- return min(1000000.0f, max(zoomedSize, 1.0f));
+ return min(1000000.0f, zoomedSize);
}
const int fontSizeTableMax = 16;
@@ -6742,241 +6673,266 @@ static TransformOperation::OperationType getTransformOperationType(WebKitCSSTran
bool CSSStyleSelector::createTransformOperations(CSSValue* inValue, RenderStyle* style, RenderStyle* rootStyle, TransformOperations& outOperations)
{
- float zoomFactor = style ? style->effectiveZoom() : 1;
+ if (!inValue || !inValue->isValueList()) {
+ outOperations.clear();
+ return false;
+ }
+ float zoomFactor = style ? style->effectiveZoom() : 1;
TransformOperations operations;
- if (inValue && !inValue->isPrimitiveValue()) {
- CSSValueList* list = static_cast<CSSValueList*>(inValue);
- unsigned size = list->length();
- for (unsigned i = 0; i < size; i++) {
- WebKitCSSTransformValue* val = static_cast<WebKitCSSTransformValue*>(list->itemWithoutBoundsCheck(i));
-
- CSSPrimitiveValue* firstValue = static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(0));
-
- switch (val->operationType()) {
- case WebKitCSSTransformValue::ScaleTransformOperation:
- case WebKitCSSTransformValue::ScaleXTransformOperation:
- case WebKitCSSTransformValue::ScaleYTransformOperation: {
- double sx = 1.0;
- double sy = 1.0;
- if (val->operationType() == WebKitCSSTransformValue::ScaleYTransformOperation)
- sy = firstValue->getDoubleValue();
- else {
- sx = firstValue->getDoubleValue();
- if (val->operationType() != WebKitCSSTransformValue::ScaleXTransformOperation) {
- if (val->length() > 1) {
- CSSPrimitiveValue* secondValue = static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(1));
- sy = secondValue->getDoubleValue();
- } else
- sy = sx;
- }
+ CSSValueList* list = static_cast<CSSValueList*>(inValue);
+ unsigned size = list->length();
+ for (unsigned i = 0; i < size; i++) {
+ CSSValue* currValue = list->itemWithoutBoundsCheck(i);
+ if (!currValue->isWebKitCSSTransformValue())
+ continue;
+
+ WebKitCSSTransformValue* transformValue = static_cast<WebKitCSSTransformValue*>(list->itemWithoutBoundsCheck(i));
+ if (!transformValue->length())
+ continue;
+
+ bool haveNonPrimitiveValue = false;
+ for (unsigned j = 0; j < transformValue->length(); ++j) {
+ if (!transformValue->itemWithoutBoundsCheck(j)->isPrimitiveValue()) {
+ haveNonPrimitiveValue = true;
+ break;
+ }
+ }
+ if (haveNonPrimitiveValue)
+ continue;
+
+ CSSPrimitiveValue* firstValue = static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(0));
+
+ switch (transformValue->operationType()) {
+ case WebKitCSSTransformValue::ScaleTransformOperation:
+ case WebKitCSSTransformValue::ScaleXTransformOperation:
+ case WebKitCSSTransformValue::ScaleYTransformOperation: {
+ double sx = 1.0;
+ double sy = 1.0;
+ if (transformValue->operationType() == WebKitCSSTransformValue::ScaleYTransformOperation)
+ sy = firstValue->getDoubleValue();
+ else {
+ sx = firstValue->getDoubleValue();
+ if (transformValue->operationType() != WebKitCSSTransformValue::ScaleXTransformOperation) {
+ if (transformValue->length() > 1) {
+ CSSPrimitiveValue* secondValue = static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(1));
+ sy = secondValue->getDoubleValue();
+ } else
+ sy = sx;
}
- operations.operations().append(ScaleTransformOperation::create(sx, sy, 1.0, getTransformOperationType(val->operationType())));
- break;
}
- case WebKitCSSTransformValue::ScaleZTransformOperation:
- case WebKitCSSTransformValue::Scale3DTransformOperation: {
- double sx = 1.0;
- double sy = 1.0;
- double sz = 1.0;
- if (val->operationType() == WebKitCSSTransformValue::ScaleZTransformOperation)
- sz = firstValue->getDoubleValue();
- else if (val->operationType() == WebKitCSSTransformValue::ScaleYTransformOperation)
- sy = firstValue->getDoubleValue();
- else {
- sx = firstValue->getDoubleValue();
- if (val->operationType() != WebKitCSSTransformValue::ScaleXTransformOperation) {
- if (val->length() > 2) {
- CSSPrimitiveValue* thirdValue = static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(2));
- sz = thirdValue->getDoubleValue();
- }
- if (val->length() > 1) {
- CSSPrimitiveValue* secondValue = static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(1));
- sy = secondValue->getDoubleValue();
- } else
- sy = sx;
+ operations.operations().append(ScaleTransformOperation::create(sx, sy, 1.0, getTransformOperationType(transformValue->operationType())));
+ break;
+ }
+ case WebKitCSSTransformValue::ScaleZTransformOperation:
+ case WebKitCSSTransformValue::Scale3DTransformOperation: {
+ double sx = 1.0;
+ double sy = 1.0;
+ double sz = 1.0;
+ if (transformValue->operationType() == WebKitCSSTransformValue::ScaleZTransformOperation)
+ sz = firstValue->getDoubleValue();
+ else if (transformValue->operationType() == WebKitCSSTransformValue::ScaleYTransformOperation)
+ sy = firstValue->getDoubleValue();
+ else {
+ sx = firstValue->getDoubleValue();
+ if (transformValue->operationType() != WebKitCSSTransformValue::ScaleXTransformOperation) {
+ if (transformValue->length() > 2) {
+ CSSPrimitiveValue* thirdValue = static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(2));
+ sz = thirdValue->getDoubleValue();
}
+ if (transformValue->length() > 1) {
+ CSSPrimitiveValue* secondValue = static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(1));
+ sy = secondValue->getDoubleValue();
+ } else
+ sy = sx;
}
- operations.operations().append(ScaleTransformOperation::create(sx, sy, sz, getTransformOperationType(val->operationType())));
- break;
}
- case WebKitCSSTransformValue::TranslateTransformOperation:
- case WebKitCSSTransformValue::TranslateXTransformOperation:
- case WebKitCSSTransformValue::TranslateYTransformOperation: {
- bool ok = true;
- Length tx = Length(0, Fixed);
- Length ty = Length(0, Fixed);
- if (val->operationType() == WebKitCSSTransformValue::TranslateYTransformOperation)
- ty = convertToLength(firstValue, style, rootStyle, zoomFactor, &ok);
- else {
- tx = convertToLength(firstValue, style, rootStyle, zoomFactor, &ok);
- if (val->operationType() != WebKitCSSTransformValue::TranslateXTransformOperation) {
- if (val->length() > 1) {
- CSSPrimitiveValue* secondValue = static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(1));
- ty = convertToLength(secondValue, style, rootStyle, zoomFactor, &ok);
- }
+ operations.operations().append(ScaleTransformOperation::create(sx, sy, sz, getTransformOperationType(transformValue->operationType())));
+ break;
+ }
+ case WebKitCSSTransformValue::TranslateTransformOperation:
+ case WebKitCSSTransformValue::TranslateXTransformOperation:
+ case WebKitCSSTransformValue::TranslateYTransformOperation: {
+ bool ok = true;
+ Length tx = Length(0, Fixed);
+ Length ty = Length(0, Fixed);
+ if (transformValue->operationType() == WebKitCSSTransformValue::TranslateYTransformOperation)
+ ty = convertToLength(firstValue, style, rootStyle, zoomFactor, &ok);
+ else {
+ tx = convertToLength(firstValue, style, rootStyle, zoomFactor, &ok);
+ if (transformValue->operationType() != WebKitCSSTransformValue::TranslateXTransformOperation) {
+ if (transformValue->length() > 1) {
+ CSSPrimitiveValue* secondValue = static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(1));
+ ty = convertToLength(secondValue, style, rootStyle, zoomFactor, &ok);
}
}
+ }
- if (!ok)
- return false;
+ if (!ok)
+ return false;
- operations.operations().append(TranslateTransformOperation::create(tx, ty, Length(0, Fixed), getTransformOperationType(val->operationType())));
- break;
- }
- case WebKitCSSTransformValue::TranslateZTransformOperation:
- case WebKitCSSTransformValue::Translate3DTransformOperation: {
- bool ok = true;
- Length tx = Length(0, Fixed);
- Length ty = Length(0, Fixed);
- Length tz = Length(0, Fixed);
- if (val->operationType() == WebKitCSSTransformValue::TranslateZTransformOperation)
- tz = convertToLength(firstValue, style, rootStyle, zoomFactor, &ok);
- else if (val->operationType() == WebKitCSSTransformValue::TranslateYTransformOperation)
- ty = convertToLength(firstValue, style, rootStyle, zoomFactor, &ok);
- else {
- tx = convertToLength(firstValue, style, rootStyle, zoomFactor, &ok);
- if (val->operationType() != WebKitCSSTransformValue::TranslateXTransformOperation) {
- if (val->length() > 2) {
- CSSPrimitiveValue* thirdValue = static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(2));
- tz = convertToLength(thirdValue, style, rootStyle, zoomFactor, &ok);
- }
- if (val->length() > 1) {
- CSSPrimitiveValue* secondValue = static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(1));
- ty = convertToLength(secondValue, style, rootStyle, zoomFactor, &ok);
- }
+ operations.operations().append(TranslateTransformOperation::create(tx, ty, Length(0, Fixed), getTransformOperationType(transformValue->operationType())));
+ break;
+ }
+ case WebKitCSSTransformValue::TranslateZTransformOperation:
+ case WebKitCSSTransformValue::Translate3DTransformOperation: {
+ bool ok = true;
+ Length tx = Length(0, Fixed);
+ Length ty = Length(0, Fixed);
+ Length tz = Length(0, Fixed);
+ if (transformValue->operationType() == WebKitCSSTransformValue::TranslateZTransformOperation)
+ tz = convertToLength(firstValue, style, rootStyle, zoomFactor, &ok);
+ else if (transformValue->operationType() == WebKitCSSTransformValue::TranslateYTransformOperation)
+ ty = convertToLength(firstValue, style, rootStyle, zoomFactor, &ok);
+ else {
+ tx = convertToLength(firstValue, style, rootStyle, zoomFactor, &ok);
+ if (transformValue->operationType() != WebKitCSSTransformValue::TranslateXTransformOperation) {
+ if (transformValue->length() > 2) {
+ CSSPrimitiveValue* thirdValue = static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(2));
+ tz = convertToLength(thirdValue, style, rootStyle, zoomFactor, &ok);
+ }
+ if (transformValue->length() > 1) {
+ CSSPrimitiveValue* secondValue = static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(1));
+ ty = convertToLength(secondValue, style, rootStyle, zoomFactor, &ok);
}
}
+ }
- if (!ok)
- return false;
+ if (!ok)
+ return false;
- operations.operations().append(TranslateTransformOperation::create(tx, ty, tz, getTransformOperationType(val->operationType())));
- break;
- }
- case WebKitCSSTransformValue::RotateTransformOperation: {
- double angle = firstValue->getDoubleValue();
- if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_RAD)
- angle = rad2deg(angle);
- else if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_GRAD)
- angle = grad2deg(angle);
- else if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_TURN)
- angle = turn2deg(angle);
-
- operations.operations().append(RotateTransformOperation::create(0, 0, 1, angle, getTransformOperationType(val->operationType())));
- break;
- }
- case WebKitCSSTransformValue::RotateXTransformOperation:
- case WebKitCSSTransformValue::RotateYTransformOperation:
- case WebKitCSSTransformValue::RotateZTransformOperation: {
- double x = 0;
- double y = 0;
- double z = 0;
- double angle = firstValue->getDoubleValue();
- if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_RAD)
- angle = rad2deg(angle);
- else if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_GRAD)
- angle = grad2deg(angle);
-
- if (val->operationType() == WebKitCSSTransformValue::RotateXTransformOperation)
- x = 1;
- else if (val->operationType() == WebKitCSSTransformValue::RotateYTransformOperation)
- y = 1;
- else
- z = 1;
- operations.operations().append(RotateTransformOperation::create(x, y, z, angle, getTransformOperationType(val->operationType())));
- break;
- }
- case WebKitCSSTransformValue::Rotate3DTransformOperation: {
- CSSPrimitiveValue* secondValue = static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(1));
- CSSPrimitiveValue* thirdValue = static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(2));
- CSSPrimitiveValue* fourthValue = static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(3));
- double x = firstValue->getDoubleValue();
- double y = secondValue->getDoubleValue();
- double z = thirdValue->getDoubleValue();
- double angle = fourthValue->getDoubleValue();
- if (fourthValue->primitiveType() == CSSPrimitiveValue::CSS_RAD)
- angle = rad2deg(angle);
- else if (fourthValue->primitiveType() == CSSPrimitiveValue::CSS_GRAD)
- angle = grad2deg(angle);
- operations.operations().append(RotateTransformOperation::create(x, y, z, angle, getTransformOperationType(val->operationType())));
+ operations.operations().append(TranslateTransformOperation::create(tx, ty, tz, getTransformOperationType(transformValue->operationType())));
+ break;
+ }
+ case WebKitCSSTransformValue::RotateTransformOperation: {
+ double angle = firstValue->getDoubleValue();
+ if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_RAD)
+ angle = rad2deg(angle);
+ else if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_GRAD)
+ angle = grad2deg(angle);
+ else if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_TURN)
+ angle = turn2deg(angle);
+
+ operations.operations().append(RotateTransformOperation::create(0, 0, 1, angle, getTransformOperationType(transformValue->operationType())));
+ break;
+ }
+ case WebKitCSSTransformValue::RotateXTransformOperation:
+ case WebKitCSSTransformValue::RotateYTransformOperation:
+ case WebKitCSSTransformValue::RotateZTransformOperation: {
+ double x = 0;
+ double y = 0;
+ double z = 0;
+ double angle = firstValue->getDoubleValue();
+ if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_RAD)
+ angle = rad2deg(angle);
+ else if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_GRAD)
+ angle = grad2deg(angle);
+
+ if (transformValue->operationType() == WebKitCSSTransformValue::RotateXTransformOperation)
+ x = 1;
+ else if (transformValue->operationType() == WebKitCSSTransformValue::RotateYTransformOperation)
+ y = 1;
+ else
+ z = 1;
+ operations.operations().append(RotateTransformOperation::create(x, y, z, angle, getTransformOperationType(transformValue->operationType())));
+ break;
+ }
+ case WebKitCSSTransformValue::Rotate3DTransformOperation: {
+ if (transformValue->length() < 4)
break;
- }
- case WebKitCSSTransformValue::SkewTransformOperation:
- case WebKitCSSTransformValue::SkewXTransformOperation:
- case WebKitCSSTransformValue::SkewYTransformOperation: {
- double angleX = 0;
- double angleY = 0;
- double angle = firstValue->getDoubleValue();
- if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_RAD)
- angle = rad2deg(angle);
- else if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_GRAD)
- angle = grad2deg(angle);
- else if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_TURN)
- angle = turn2deg(angle);
- if (val->operationType() == WebKitCSSTransformValue::SkewYTransformOperation)
- angleY = angle;
- else {
- angleX = angle;
- if (val->operationType() == WebKitCSSTransformValue::SkewTransformOperation) {
- if (val->length() > 1) {
- CSSPrimitiveValue* secondValue = static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(1));
- angleY = secondValue->getDoubleValue();
- if (secondValue->primitiveType() == CSSPrimitiveValue::CSS_RAD)
- angleY = rad2deg(angleY);
- else if (secondValue->primitiveType() == CSSPrimitiveValue::CSS_GRAD)
- angleY = grad2deg(angleY);
- else if (secondValue->primitiveType() == CSSPrimitiveValue::CSS_TURN)
- angleY = turn2deg(angleY);
- }
+ CSSPrimitiveValue* secondValue = static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(1));
+ CSSPrimitiveValue* thirdValue = static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(2));
+ CSSPrimitiveValue* fourthValue = static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(3));
+ double x = firstValue->getDoubleValue();
+ double y = secondValue->getDoubleValue();
+ double z = thirdValue->getDoubleValue();
+ double angle = fourthValue->getDoubleValue();
+ if (fourthValue->primitiveType() == CSSPrimitiveValue::CSS_RAD)
+ angle = rad2deg(angle);
+ else if (fourthValue->primitiveType() == CSSPrimitiveValue::CSS_GRAD)
+ angle = grad2deg(angle);
+ operations.operations().append(RotateTransformOperation::create(x, y, z, angle, getTransformOperationType(transformValue->operationType())));
+ break;
+ }
+ case WebKitCSSTransformValue::SkewTransformOperation:
+ case WebKitCSSTransformValue::SkewXTransformOperation:
+ case WebKitCSSTransformValue::SkewYTransformOperation: {
+ double angleX = 0;
+ double angleY = 0;
+ double angle = firstValue->getDoubleValue();
+ if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_RAD)
+ angle = rad2deg(angle);
+ else if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_GRAD)
+ angle = grad2deg(angle);
+ else if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_TURN)
+ angle = turn2deg(angle);
+ if (transformValue->operationType() == WebKitCSSTransformValue::SkewYTransformOperation)
+ angleY = angle;
+ else {
+ angleX = angle;
+ if (transformValue->operationType() == WebKitCSSTransformValue::SkewTransformOperation) {
+ if (transformValue->length() > 1) {
+ CSSPrimitiveValue* secondValue = static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(1));
+ angleY = secondValue->getDoubleValue();
+ if (secondValue->primitiveType() == CSSPrimitiveValue::CSS_RAD)
+ angleY = rad2deg(angleY);
+ else if (secondValue->primitiveType() == CSSPrimitiveValue::CSS_GRAD)
+ angleY = grad2deg(angleY);
+ else if (secondValue->primitiveType() == CSSPrimitiveValue::CSS_TURN)
+ angleY = turn2deg(angleY);
}
}
- operations.operations().append(SkewTransformOperation::create(angleX, angleY, getTransformOperationType(val->operationType())));
- break;
- }
- case WebKitCSSTransformValue::MatrixTransformOperation: {
- double a = firstValue->getDoubleValue();
- double b = static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(1))->getDoubleValue();
- double c = static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(2))->getDoubleValue();
- double d = static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(3))->getDoubleValue();
- double e = static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(4))->getDoubleValue();
- double f = static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(5))->getDoubleValue();
- operations.operations().append(MatrixTransformOperation::create(a, b, c, d, e, f));
- break;
}
- case WebKitCSSTransformValue::Matrix3DTransformOperation: {
- TransformationMatrix matrix(static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(0))->getDoubleValue(),
- static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(1))->getDoubleValue(),
- static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(2))->getDoubleValue(),
- static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(3))->getDoubleValue(),
- static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(4))->getDoubleValue(),
- static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(5))->getDoubleValue(),
- static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(6))->getDoubleValue(),
- static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(7))->getDoubleValue(),
- static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(8))->getDoubleValue(),
- static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(9))->getDoubleValue(),
- static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(10))->getDoubleValue(),
- static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(11))->getDoubleValue(),
- static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(12))->getDoubleValue(),
- static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(13))->getDoubleValue(),
- static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(14))->getDoubleValue(),
- static_cast<CSSPrimitiveValue*>(val->itemWithoutBoundsCheck(15))->getDoubleValue());
- operations.operations().append(Matrix3DTransformOperation::create(matrix));
- break;
- }
- case WebKitCSSTransformValue::PerspectiveTransformOperation: {
- double p = firstValue->getDoubleValue();
- if (p < 0.0)
- return false;
- operations.operations().append(PerspectiveTransformOperation::create(p));
+ operations.operations().append(SkewTransformOperation::create(angleX, angleY, getTransformOperationType(transformValue->operationType())));
+ break;
+ }
+ case WebKitCSSTransformValue::MatrixTransformOperation: {
+ if (transformValue->length() < 6)
break;
- }
- case WebKitCSSTransformValue::UnknownTransformOperation:
- ASSERT_NOT_REACHED();
+ double a = firstValue->getDoubleValue();
+ double b = static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(1))->getDoubleValue();
+ double c = static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(2))->getDoubleValue();
+ double d = static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(3))->getDoubleValue();
+ double e = static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(4))->getDoubleValue();
+ double f = static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(5))->getDoubleValue();
+ operations.operations().append(MatrixTransformOperation::create(a, b, c, d, e, f));
+ break;
+ }
+ case WebKitCSSTransformValue::Matrix3DTransformOperation: {
+ if (transformValue->length() < 16)
break;
+ TransformationMatrix matrix(static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(0))->getDoubleValue(),
+ static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(1))->getDoubleValue(),
+ static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(2))->getDoubleValue(),
+ static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(3))->getDoubleValue(),
+ static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(4))->getDoubleValue(),
+ static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(5))->getDoubleValue(),
+ static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(6))->getDoubleValue(),
+ static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(7))->getDoubleValue(),
+ static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(8))->getDoubleValue(),
+ static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(9))->getDoubleValue(),
+ static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(10))->getDoubleValue(),
+ static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(11))->getDoubleValue(),
+ static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(12))->getDoubleValue(),
+ static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(13))->getDoubleValue(),
+ static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(14))->getDoubleValue(),
+ static_cast<CSSPrimitiveValue*>(transformValue->itemWithoutBoundsCheck(15))->getDoubleValue());
+ operations.operations().append(Matrix3DTransformOperation::create(matrix));
+ break;
+ }
+ case WebKitCSSTransformValue::PerspectiveTransformOperation: {
+ double p = firstValue->getDoubleValue();
+ if (p < 0.0)
+ return false;
+ operations.operations().append(PerspectiveTransformOperation::create(p));
+ break;
}
+ case WebKitCSSTransformValue::UnknownTransformOperation:
+ ASSERT_NOT_REACHED();
+ break;
}
}
+
outOperations = operations;
return true;
}
diff --git a/WebCore/css/CSSStyleSelector.h b/WebCore/css/CSSStyleSelector.h
index 20cd866..b718751 100644
--- a/WebCore/css/CSSStyleSelector.h
+++ b/WebCore/css/CSSStyleSelector.h
@@ -50,8 +50,6 @@ class CSSSelector;
class CSSStyleRule;
class CSSStyleSheet;
class CSSValue;
-class CSSVariableDependentValue;
-class CSSVariablesRule;
class ContainerNode;
class DataGridColumn;
class Document;
@@ -165,10 +163,6 @@ public:
void allVisitedStateChanged() { m_checker.allVisitedStateChanged(); }
void visitedStateChanged(LinkHash visitedHash) { m_checker.visitedStateChanged(visitedHash); }
- void addVariables(CSSVariablesRule* variables);
- CSSValue* resolveVariableDependentValue(CSSVariableDependentValue*);
- void resolveVariablesForDeclaration(CSSMutableStyleDeclaration* decl, CSSMutableStyleDeclaration* newDecl, HashSet<String>& usedBlockVariables);
-
void addKeyframeStyle(PassRefPtr<WebKitCSSKeyframesRule> rule);
void addPageStyle(PassRefPtr<CSSPageRule>);
@@ -319,9 +313,6 @@ public:
HashSet<AtomicStringImpl*> m_selectorAttrs;
Vector<CSSMutableStyleDeclaration*> m_additionalAttributeStyleDecls;
Vector<MediaQueryResult*> m_viewportDependentMediaQueryResults;
-
- HashMap<String, CSSVariablesRule*> m_variablesMap;
- HashMap<CSSMutableStyleDeclaration*, RefPtr<CSSMutableStyleDeclaration> > m_resolvedVariablesDeclarations;
};
class CSSRuleData : public Noncopyable {
diff --git a/WebCore/css/CSSValue.h b/WebCore/css/CSSValue.h
index 0bd6496..ec1b15e 100644
--- a/WebCore/css/CSSValue.h
+++ b/WebCore/css/CSSValue.h
@@ -53,11 +53,16 @@ public:
virtual String cssText() const = 0;
void setCssText(const String&, ExceptionCode&) { } // FIXME: Not implemented.
+ virtual bool isBorderImageValue() const { return false; }
+ virtual bool isCursorImageValue() const { return false; }
+ virtual bool isFontFamilyValue() const { return false; }
virtual bool isFontValue() const { return false; }
virtual bool isImageGeneratorValue() const { return false; }
virtual bool isImageValue() const { return false; }
virtual bool isImplicitInitialValue() const { return false; }
virtual bool isPrimitiveValue() const { return false; }
+ virtual bool isReflectValue() const { return false; }
+ virtual bool isShadowValue() const { return false; }
virtual bool isTimingFunctionValue() const { return false; }
virtual bool isValueList() const { return false; }
virtual bool isWebKitCSSTransformValue() const { return false; }
@@ -67,7 +72,6 @@ public:
virtual bool isSVGPaint() const { return false; }
#endif
- virtual bool isVariableDependentValue() const { return false; }
virtual CSSParserValue parserValue() const { ASSERT_NOT_REACHED(); return CSSParserValue(); }
virtual void addSubresourceStyleURLs(ListHashSet<KURL>&, const CSSStyleSheet*) { }
diff --git a/WebCore/css/CSSVariablesDeclaration.cpp b/WebCore/css/CSSVariablesDeclaration.cpp
deleted file mode 100644
index e40750a..0000000
--- a/WebCore/css/CSSVariablesDeclaration.cpp
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "CSSVariablesDeclaration.h"
-
-#include "CSSParser.h"
-#include "CSSRule.h"
-#include "CSSValueList.h"
-#include "Document.h"
-#include "ExceptionCode.h"
-
-namespace WebCore {
-
-CSSVariablesDeclaration::CSSVariablesDeclaration(StyleBase* parent, const Vector<String>& names, const Vector<RefPtr<CSSValue> >& values)
- : StyleBase(parent)
-{
- m_variableNames = names;
- ASSERT(names.size() == values.size());
- unsigned s = names.size();
- for (unsigned i = 0; i < s; ++i)
- addParsedVariable(names[i], values[i], false);
-}
-
-CSSVariablesDeclaration::~CSSVariablesDeclaration()
-{
-}
-
-String CSSVariablesDeclaration::getVariableValue(const String& variableName)
-{
- CSSValue* val = m_variablesMap.get(variableName).get();
- if (val)
- return val->cssText();
- return "";
-}
-
-String CSSVariablesDeclaration::removeVariable(const String& variableName, ExceptionCode&)
-{
- // FIXME: The spec has this method taking an exception code but no exceptions are
- // specified as being thrown.
- RefPtr<CSSValue> val = m_variablesMap.take(variableName);
- String result = val ? val->cssText() : "";
- if (val) {
- int s = m_variableNames.size();
- for (int i = 0; i < s; ++i) {
- if (m_variableNames[i] == variableName) {
- m_variableNames.remove(i);
- i--;
- s--;
- }
- }
-
- setNeedsStyleRecalc();
- }
-
- // FIXME: Communicate this change so that the document will update.
- return result;
-}
-
-void CSSVariablesDeclaration::setVariable(const String& variableName, const String& variableValue, ExceptionCode& excCode)
-{
- // Try to parse the variable value into a Value*. If it fails we throw an exception.
- CSSParser parser(useStrictParsing());
- if (!parser.parseVariable(this, variableName, variableValue)) // If the parse succeeds, it will call addParsedVariable (our internal method for doing the add) with the parsed Value*.
- excCode = SYNTAX_ERR;
- else
- setNeedsStyleRecalc();
-}
-
-void CSSVariablesDeclaration::addParsedVariable(const String& variableName, PassRefPtr<CSSValue> variableValue, bool updateNamesList)
-{
-// FIXME: Disabling declarations as variable values for now since they no longer have a common base class with CSSValues.
-#if 0
- variableValue->setParent(this); // Needed to connect variables that are CSSMutableStyleDeclarations, since the parent couldn't be set until now.
-#endif
-
- // Don't leak duplicates. For multiple variables with the same name, the last one
- // declared will win.
- CSSValue* current = m_variablesMap.take(variableName).get();
- if (!current && updateNamesList)
- m_variableNames.append(variableName);
- m_variablesMap.set(variableName, variableValue);
-
- // FIXME: Communicate this change so the document will update.
-}
-
-CSSValueList* CSSVariablesDeclaration::getParsedVariable(const String& variableName)
-{
- CSSValue* result = m_variablesMap.get(variableName).get();
- if (result->isValueList())
- return static_cast<CSSValueList*>(result);
- return 0;
-}
-
-CSSMutableStyleDeclaration* CSSVariablesDeclaration::getParsedVariableDeclarationBlock(const String&)
-{
-// FIXME: Disabling declarations as variable values for now since they no longer have a common base class with CSSValues.
-#if 0
- StyleBase* result = m_variablesMap.get(variableName).get();
-
- if (result->isMutableStyleDeclaration())
- return static_cast<CSSMutableStyleDeclaration*>(result);
-#endif
- return 0;
-}
-
-unsigned CSSVariablesDeclaration::length() const
-{
- return m_variableNames.size();
-}
-
-String CSSVariablesDeclaration::item(unsigned index)
-{
- if (index >= m_variableNames.size())
- return "";
- return m_variableNames[index];
-}
-
-CSSRule* CSSVariablesDeclaration::parentRule()
-{
- return (parent() && parent()->isRule()) ? static_cast<CSSRule*>(parent()) : 0;
-}
-
-String CSSVariablesDeclaration::cssText() const
-{
- String result = "{ ";
- unsigned s = m_variableNames.size();
- for (unsigned i = 0; i < s; ++i) {
- result += m_variableNames[i] + ": ";
- result += m_variablesMap.get(m_variableNames[i])->cssText();
- if (i < s - 1)
- result += "; ";
- }
- result += " }";
- return result;
-}
-
-void CSSVariablesDeclaration::setCssText(const String&)
-{
- // FIXME: It's not clear if this is actually settable.
-}
-
-void CSSVariablesDeclaration::setNeedsStyleRecalc()
-{
- // FIXME: Make this much better (it has the same problem CSSMutableStyleDeclaration does).
- StyleBase* root = this;
- while (StyleBase* parent = root->parent())
- root = parent;
- if (root->isCSSStyleSheet())
- static_cast<CSSStyleSheet*>(root)->document()->styleSelectorChanged(DeferRecalcStyle);
-}
-
-}
diff --git a/WebCore/css/CSSVariablesDeclaration.h b/WebCore/css/CSSVariablesDeclaration.h
deleted file mode 100644
index 6838743..0000000
--- a/WebCore/css/CSSVariablesDeclaration.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef CSSVariablesDeclaration_h
-#define CSSVariablesDeclaration_h
-
-#include "PlatformString.h"
-#include "StyleBase.h"
-#include <wtf/HashMap.h>
-#include <wtf/RefPtr.h>
-#include <wtf/Vector.h>
-#include <wtf/text/StringHash.h>
-
-namespace WebCore {
-
-typedef int ExceptionCode;
-
-class CSSMutableStyleDeclaration;
-class CSSRule;
-class CSSValue;
-class CSSValueList;
-
-class CSSVariablesDeclaration : public StyleBase {
-public:
- static PassRefPtr<CSSVariablesDeclaration> create(StyleBase* owningRule, const Vector<String>& names, const Vector<RefPtr<CSSValue> >& values)
- {
- return adoptRef(new CSSVariablesDeclaration(owningRule, names, values));
- }
- virtual ~CSSVariablesDeclaration();
-
- String getVariableValue(const String&);
- String removeVariable(const String&, ExceptionCode&);
- void setVariable(const String&, const String&, ExceptionCode&);
-
- unsigned length() const;
- String item(unsigned index);
-
- CSSRule* parentRule();
-
- String cssText() const;
- void setCssText(const String&); // FIXME: The spec contradicts itself regarding whether or not cssText is settable.
-
- void addParsedVariable(const String& variableName, PassRefPtr<CSSValue> variableValue, bool updateNamesList = true);
-
- CSSValueList* getParsedVariable(const String& variableName);
- CSSMutableStyleDeclaration* getParsedVariableDeclarationBlock(const String& variableName);
-
-private:
- CSSVariablesDeclaration(StyleBase* owningRule, const Vector<String>& names, const Vector<RefPtr<CSSValue> >& values);
-
- void setNeedsStyleRecalc();
-
-protected:
- Vector<String> m_variableNames;
- HashMap<String, RefPtr<CSSValue> > m_variablesMap;
-};
-
-} // namespace WebCore
-
-#endif // CSSVariablesDeclaration_h
diff --git a/WebCore/css/CSSVariablesDeclaration.idl b/WebCore/css/CSSVariablesDeclaration.idl
deleted file mode 100644
index 672bfe2..0000000
--- a/WebCore/css/CSSVariablesDeclaration.idl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module css {
-
- interface [
- HasIndexGetter
- ] CSSVariablesDeclaration {
- attribute DOMString cssText;
-
- DOMString getVariableValue(in DOMString variableName);
- DOMString removeVariable(in DOMString variableName)
- raises(DOMException);
- void setVariable(in DOMString variableName,
- in DOMString value)
- raises(DOMException);
- readonly attribute unsigned long length;
- DOMString item(in unsigned long index);
- readonly attribute CSSRule parentRule;
- };
-
-}
diff --git a/WebCore/css/CSSVariablesRule.h b/WebCore/css/CSSVariablesRule.h
deleted file mode 100644
index d2cea39..0000000
--- a/WebCore/css/CSSVariablesRule.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef CSSVariablesRule_h
-#define CSSVariablesRule_h
-
-#include "CSSRule.h"
-#include "CSSVariablesDeclaration.h"
-#include <wtf/RefPtr.h>
-
-namespace WebCore {
-
-class CSSStyleSheet;
-class MediaList;
-
-class CSSVariablesRule : public CSSRule {
-public:
- static PassRefPtr<CSSVariablesRule> create(CSSStyleSheet* parent, MediaList* mediaList, bool variablesKeyword)
- {
- return adoptRef(new CSSVariablesRule(parent, mediaList, variablesKeyword));
- }
-
- virtual ~CSSVariablesRule();
-
- // CSSVariablesRule interface
- MediaList* media() const { return m_lstMedia.get(); }
- CSSVariablesDeclaration* variables() { return m_variables.get(); }
-
- // Inherited from CSSRule
- virtual unsigned short type() const { return VARIABLES_RULE; }
- virtual String cssText() const;
- virtual bool isVariablesRule() { return true; }
-
- // Used internally. Does not notify the document of the change. Only intended
- // for use on initial parse.
- void setDeclaration(PassRefPtr<CSSVariablesDeclaration> decl) { m_variables = decl; }
-
-private:
- CSSVariablesRule(CSSStyleSheet* parent, MediaList*, bool variablesKeyword);
-
- RefPtr<MediaList> m_lstMedia;
- RefPtr<CSSVariablesDeclaration> m_variables;
- bool m_variablesKeyword;
-};
-
-} // namespace WebCore
-
-#endif // CSSVariablesRule_h
diff --git a/WebCore/css/FontFamilyValue.h b/WebCore/css/FontFamilyValue.h
index 087d22a..3f7d3a3 100644
--- a/WebCore/css/FontFamilyValue.h
+++ b/WebCore/css/FontFamilyValue.h
@@ -41,6 +41,7 @@ public:
private:
FontFamilyValue(const String& familyName);
+ virtual bool isFontFamilyValue() const { return true; }
String m_familyName;
};
diff --git a/WebCore/css/SVGCSSStyleSelector.cpp b/WebCore/css/SVGCSSStyleSelector.cpp
index 5ddaf99..5f3c46b 100644
--- a/WebCore/css/SVGCSSStyleSelector.cpp
+++ b/WebCore/css/SVGCSSStyleSelector.cpp
@@ -161,7 +161,8 @@ void CSSStyleSelector::applySVGProperty(int id, CSSValue* value)
case CSSPropertyKerning:
{
HANDLE_INHERIT_AND_INITIAL(kerning, Kerning);
- svgstyle->setKerning(SVGLength::fromCSSPrimitiveValue(primitiveValue));
+ if (primitiveValue)
+ svgstyle->setKerning(SVGLength::fromCSSPrimitiveValue(primitiveValue));
break;
}
case CSSPropertyDominantBaseline:
@@ -261,10 +262,11 @@ void CSSStyleSelector::applySVGProperty(int id, CSSValue* value)
Vector<SVGLength> array;
size_t length = dashes->length();
for (size_t i = 0; i < length; ++i) {
- CSSPrimitiveValue* dash = static_cast<CSSPrimitiveValue*>(dashes->itemWithoutBoundsCheck(i));
- if (!dash)
+ CSSValue* currValue = dashes->itemWithoutBoundsCheck(i);
+ if (!currValue->isPrimitiveValue())
continue;
+ CSSPrimitiveValue* dash = static_cast<CSSPrimitiveValue*>(dashes->itemWithoutBoundsCheck(i));
array.append(SVGLength::fromCSSPrimitiveValue(dash));
}
@@ -549,8 +551,13 @@ void CSSStyleSelector::applySVGProperty(int id, CSSValue* value)
return;
CSSValueList *list = static_cast<CSSValueList*>(value);
- ASSERT(list->length() == 1);
- ShadowValue* item = static_cast<ShadowValue*>(list->itemWithoutBoundsCheck(0));
+ if (!list->length())
+ return;
+
+ CSSValue* firstValue = list->itemWithoutBoundsCheck(0);
+ if (!firstValue->isShadowValue())
+ return;
+ ShadowValue* item = static_cast<ShadowValue*>(firstValue);
int x = item->x->computeLengthInt(style(), m_rootElementStyle);
int y = item->y->computeLengthInt(style(), m_rootElementStyle);
int blur = item->blur ? item->blur->computeLengthInt(style(), m_rootElementStyle) : 0;
diff --git a/WebCore/css/ShadowValue.h b/WebCore/css/ShadowValue.h
index a88a0e7..fab1071 100644
--- a/WebCore/css/ShadowValue.h
+++ b/WebCore/css/ShadowValue.h
@@ -58,6 +58,8 @@ private:
PassRefPtr<CSSPrimitiveValue> spread,
PassRefPtr<CSSPrimitiveValue> style,
PassRefPtr<CSSPrimitiveValue> color);
+
+ virtual bool isShadowValue() const { return true; }
};
} // namespace
diff --git a/WebCore/css/StyleBase.h b/WebCore/css/StyleBase.h
index a53b2c5..94efa01 100644
--- a/WebCore/css/StyleBase.h
+++ b/WebCore/css/StyleBase.h
@@ -53,7 +53,6 @@ namespace WebCore {
virtual bool isKeyframeRule() { return false; }
virtual bool isKeyframesRule() { return false; }
virtual bool isMediaRule() { return false; }
- virtual bool isVariablesRule() { return false; }
virtual bool isPageRule() { return false; }
virtual bool isRule() { return false; }
diff --git a/WebCore/css/StyleSheet.cpp b/WebCore/css/StyleSheet.cpp
index 4f20a20..854b63c 100644
--- a/WebCore/css/StyleSheet.cpp
+++ b/WebCore/css/StyleSheet.cpp
@@ -20,10 +20,29 @@
#include "config.h"
#include "StyleSheet.h"
+#include "HTMLNames.h"
#include "MediaList.h"
+#include "Node.h"
+#include "SVGNames.h"
namespace WebCore {
+#if !ASSERT_DISABLED
+static bool isAcceptableStyleSheetParent(Node* parentNode)
+{
+ // Only these nodes can be parents of StyleSheets, and they need to call clearOwnerNode() when moved out of document.
+ return !parentNode
+ || parentNode->isDocumentNode()
+ || parentNode->hasTagName(HTMLNames::linkTag)
+ || parentNode->hasTagName(HTMLNames::styleTag)
+ || parentNode->nodeType() == Node::PROCESSING_INSTRUCTION_NODE
+#if ENABLE(SVG)
+ || parentNode->hasTagName(SVGNames::styleTag)
+#endif
+ ;
+}
+#endif
+
StyleSheet::StyleSheet(StyleSheet* parentSheet, const String& originalURL, const KURL& finalURL)
: StyleList(parentSheet)
, m_parentNode(0)
@@ -40,6 +59,7 @@ StyleSheet::StyleSheet(Node* parentNode, const String& originalURL, const KURL&
, m_finalURL(finalURL)
, m_disabled(false)
{
+ ASSERT(isAcceptableStyleSheetParent(parentNode));
}
StyleSheet::StyleSheet(StyleBase* owner, const String& originalURL, const KURL& finalURL)
diff --git a/WebCore/css/StyleSheet.h b/WebCore/css/StyleSheet.h
index 621733d..2ff9a01 100644
--- a/WebCore/css/StyleSheet.h
+++ b/WebCore/css/StyleSheet.h
@@ -40,6 +40,7 @@ public:
void setDisabled(bool disabled) { m_disabled = disabled; styleSheetChanged(); }
Node* ownerNode() const { return m_parentNode; }
+ void clearOwnerNode() { m_parentNode = 0; }
StyleSheet *parentStyleSheet() const;
// Note that href is the URL that started the redirect chain that led to
diff --git a/WebCore/css/WebKitCSSMatrix.cpp b/WebCore/css/WebKitCSSMatrix.cpp
index 3714760..33cc91e 100644
--- a/WebCore/css/WebKitCSSMatrix.cpp
+++ b/WebCore/css/WebKitCSSMatrix.cpp
@@ -36,25 +36,12 @@
namespace WebCore {
-WebKitCSSMatrix::WebKitCSSMatrix()
- : StyleBase(0)
-{
-}
-
-WebKitCSSMatrix::WebKitCSSMatrix(const WebKitCSSMatrix& m)
- : StyleBase(0)
- , m_matrix(m.m_matrix)
-{
-}
-
WebKitCSSMatrix::WebKitCSSMatrix(const TransformationMatrix& m)
- : StyleBase(0)
- , m_matrix(m)
+ : m_matrix(m)
{
}
WebKitCSSMatrix::WebKitCSSMatrix(const String& s, ExceptionCode& ec)
- : StyleBase(0)
{
setMatrixValue(s, ec);
}
@@ -65,7 +52,7 @@ WebKitCSSMatrix::~WebKitCSSMatrix()
void WebKitCSSMatrix::setMatrixValue(const String& string, ExceptionCode& ec)
{
- CSSParser p(useStrictParsing());
+ CSSParser p(true);
RefPtr<CSSMutableStyleDeclaration> styleDeclaration = CSSMutableStyleDeclaration::create();
if (p.parseValue(styleDeclaration.get(), CSSPropertyWebkitTransform, string, true)) {
// Convert to TransformOperations. This can fail if a property
diff --git a/WebCore/css/WebKitCSSMatrix.h b/WebCore/css/WebKitCSSMatrix.h
index 56bf76b..2357a69 100644
--- a/WebCore/css/WebKitCSSMatrix.h
+++ b/WebCore/css/WebKitCSSMatrix.h
@@ -28,23 +28,13 @@
#include "ExceptionCode.h"
#include "PlatformString.h"
-#include "StyleBase.h"
#include "TransformationMatrix.h"
-#include <wtf/PassRefPtr.h>
#include <wtf/RefPtr.h>
namespace WebCore {
-class WebKitCSSMatrix : public StyleBase {
+class WebKitCSSMatrix : public RefCounted<WebKitCSSMatrix> {
public:
- static PassRefPtr<WebKitCSSMatrix> create()
- {
- return adoptRef(new WebKitCSSMatrix());
- }
- static PassRefPtr<WebKitCSSMatrix> create(const WebKitCSSMatrix& m)
- {
- return adoptRef(new WebKitCSSMatrix(m));
- }
static PassRefPtr<WebKitCSSMatrix> create(const TransformationMatrix& m)
{
return adoptRef(new WebKitCSSMatrix(m));
@@ -104,7 +94,7 @@ public:
void setM43(double f) { m_matrix.setM43(f); }
void setM44(double f) { m_matrix.setM44(f); }
- void setMatrixValue(const String& string, ExceptionCode&);
+ void setMatrixValue(const String&, ExceptionCode&);
// The following math function return a new matrix with the
// specified operation applied. The this value is not modified.
@@ -146,8 +136,6 @@ public:
String toString() const;
protected:
- WebKitCSSMatrix();
- WebKitCSSMatrix(const WebKitCSSMatrix&);
WebKitCSSMatrix(const TransformationMatrix&);
WebKitCSSMatrix(const String&, ExceptionCode&);
diff --git a/WebCore/css/html.css b/WebCore/css/html.css
index a201adc..d091806 100644
--- a/WebCore/css/html.css
+++ b/WebCore/css/html.css
@@ -229,14 +229,20 @@ caption {
ul, menu, dir {
display: block;
list-style-type: disc;
- margin: 1__qem 0 1em 0;
+ -webkit-margin-before: 1__qem;
+ -webkit-margin-after: 1em;
+ -webkit-margin-start: 0;
+ -webkit-margin-end: 0;
-webkit-padding-start: 40px
}
ol {
display: block;
list-style-type: decimal;
- margin: 1__qem 0 1em 0;
+ -webkit-margin-before: 1__qem;
+ -webkit-margin-after: 1em;
+ -webkit-margin-start: 0;
+ -webkit-margin-end: 0;
-webkit-padding-start: 40px
}
@@ -259,7 +265,10 @@ dd {
dl {
display: block;
- margin: 1__qem 0 1em 0
+ -webkit-margin-before: 1__qem;
+ -webkit-margin-after: 1em;
+ -webkit-margin-start: 0;
+ -webkit-margin-end: 0;
}
dt {
@@ -267,8 +276,8 @@ dt {
}
ol ul, ul ol, ul ul, ol ol {
- margin-top: 0;
- margin-bottom: 0
+ -webkit-margin-before: 0;
+ -webkit-margin-after: 0
}
/* form elements */
diff --git a/WebCore/css/themeQtMobile.css b/WebCore/css/themeQtMobile.css
index 5cc39c8..8b0c548 100644
--- a/WebCore/css/themeQtMobile.css
+++ b/WebCore/css/themeQtMobile.css
@@ -33,7 +33,8 @@ select {
padding: 2px 18px 3px 18px;
border: 1px solid gray;
-webkit-border-radius:5px;
- background: -webkit-gradient(linear, left bottom, left top, color-stop(0.0, #e5e5e5), color-stop(0.4, #ffffff));
+ background: -webkit-gradient(linear, left bottom, left top, color-stop(0.0, rgba(0, 0, 0, 0.35)), color-stop(0.4, rgba(0, 0, 0, 0.0)));
+ background-color: #ffffff;
color: #3e3e3e;
}
@@ -76,7 +77,8 @@ input[type="number"],
input[type="url"],
textarea {
border: 1px solid gray;
- background: -webkit-gradient(linear, left top, left 30, color-stop(0.0, #bfbfbf), color-stop(0.2, #ffffff));
+ background: -webkit-gradient(linear, left top, left 30, color-stop(0.0, rgba(0, 0, 0, 0.35)), color-stop(0.2, rgba(0, 0, 0, 0.0)));
+ background-color: #ffffff;
color: #3e3e3e;
-webkit-border-radius:5px;
}
@@ -93,7 +95,8 @@ input[type="number"]:disabled,
input[type="url"]:disabled,
textarea:disabled {
border: 1px solid gray;
- background: -webkit-gradient(linear, left top, left 30, color-stop(0.0, #e5e5e5), color-stop(0.2, #ffffff));
+ background: -webkit-gradient(linear, left top, left 30, color-stop(0.0, rgba(0, 0, 0, 0.3)), color-stop(0.2, rgba(0, 0, 0, 0.0)));
+ background-color: #ffffff;
color: #e5e5e5;
}
diff --git a/WebCore/css/tokenizer.flex b/WebCore/css/tokenizer.flex
index 4d226d9..bd4808d 100644
--- a/WebCore/css/tokenizer.flex
+++ b/WebCore/css/tokenizer.flex
@@ -41,7 +41,6 @@ nth [\+-]?{intnum}*n([\+-]{intnum})?
<mediaquery>"not" {yyTok = MEDIA_NOT; return yyTok;}
<mediaquery>"only" {yyTok = MEDIA_ONLY; return yyTok;}
<mediaquery>"and" {yyTok = MEDIA_AND; return yyTok;}
-<forkeyword>"for" {BEGIN(mediaquery); yyTok = VARIABLES_FOR; return yyTok; }
{string} {yyTok = STRING; return yyTok;}
{ident} {yyTok = IDENT; return yyTok;}
@@ -77,9 +76,6 @@ nth [\+-]?{intnum}*n([\+-]{intnum})?
"@-webkit-value" {yyTok = WEBKIT_VALUE_SYM; return yyTok; }
"@-webkit-mediaquery" {BEGIN(mediaquery); yyTok = WEBKIT_MEDIAQUERY_SYM; return yyTok; }
"@-webkit-selector" {yyTok = WEBKIT_SELECTOR_SYM; return yyTok; }
-"@-webkit-variables" {BEGIN(mediaquery); yyTok = WEBKIT_VARIABLES_SYM; return yyTok; }
-"@-webkit-define" {BEGIN(forkeyword); yyTok = WEBKIT_DEFINE_SYM; return yyTok; }
-"@-webkit-variables-decls" { yyTok = WEBKIT_VARIABLES_DECLS_SYM; return yyTok; }
"@-webkit-keyframes" {yyTok = WEBKIT_KEYFRAMES_SYM; return yyTok; }
"@-webkit-keyframe-rule" {yyTok = WEBKIT_KEYFRAME_RULE_SYM; return yyTok; }
@@ -113,7 +109,6 @@ nth [\+-]?{intnum}*n([\+-]{intnum})?
"not(" {yyTok = NOTFUNCTION; return yyTok;}
"url("{w}{string}{w}")" {yyTok = URI; return yyTok;}
"url("{w}{url}{w}")" {yyTok = URI; return yyTok;}
-"-webkit-var("{w}{ident}{w}")" { yyTok = VARCALL; return yyTok; }
{ident}"(" {yyTok = FUNCTION; return yyTok;}
U\+{range} {yyTok = UNICODERANGE; return yyTok;}
diff --git a/WebCore/dom/AsyncScriptRunner.cpp b/WebCore/dom/AsyncScriptRunner.cpp
index a72df7c..7f5f1b6 100644
--- a/WebCore/dom/AsyncScriptRunner.cpp
+++ b/WebCore/dom/AsyncScriptRunner.cpp
@@ -48,7 +48,7 @@ AsyncScriptRunner::~AsyncScriptRunner()
}
}
-void AsyncScriptRunner::executeScriptSoon(ScriptElementData* data, CachedResourceHandle<CachedScript> cachedScript)
+void AsyncScriptRunner::executeScriptSoon(ScriptElement* data, CachedResourceHandle<CachedScript> cachedScript)
{
ASSERT_ARG(data, data);
@@ -80,7 +80,7 @@ void AsyncScriptRunner::timerFired(Timer<AsyncScriptRunner>* timer)
RefPtr<Document> protect(m_document);
- Vector<pair<ScriptElementData*, CachedResourceHandle<CachedScript> > > scripts;
+ Vector<pair<ScriptElement*, CachedResourceHandle<CachedScript> > > scripts;
scripts.swap(m_scriptsToExecuteSoon);
size_t size = scripts.size();
for (size_t i = 0; i < size; ++i) {
diff --git a/WebCore/dom/AsyncScriptRunner.h b/WebCore/dom/AsyncScriptRunner.h
index 57bee84..1a051a8 100644
--- a/WebCore/dom/AsyncScriptRunner.h
+++ b/WebCore/dom/AsyncScriptRunner.h
@@ -36,14 +36,14 @@ namespace WebCore {
class CachedScript;
class Document;
-class ScriptElementData;
+class ScriptElement;
class AsyncScriptRunner : public Noncopyable {
public:
static PassOwnPtr<AsyncScriptRunner> create(Document* document) { return new AsyncScriptRunner(document); }
~AsyncScriptRunner();
- void executeScriptSoon(ScriptElementData*, CachedResourceHandle<CachedScript>);
+ void executeScriptSoon(ScriptElement*, CachedResourceHandle<CachedScript>);
bool hasPendingScripts() const { return !m_scriptsToExecuteSoon.isEmpty(); }
void suspend();
void resume();
@@ -54,7 +54,7 @@ private:
void timerFired(Timer<AsyncScriptRunner>*);
Document* m_document;
- Vector<std::pair<ScriptElementData*, CachedResourceHandle<CachedScript> > > m_scriptsToExecuteSoon;
+ Vector<std::pair<ScriptElement*, CachedResourceHandle<CachedScript> > > m_scriptsToExecuteSoon;
Timer<AsyncScriptRunner> m_timer;
};
diff --git a/WebCore/dom/Attr.idl b/WebCore/dom/Attr.idl
index d959cd1..bff9c7b 100644
--- a/WebCore/dom/Attr.idl
+++ b/WebCore/dom/Attr.idl
@@ -42,8 +42,10 @@ module core {
readonly attribute boolean isId;
- // extensions
+#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
+ // This extension is no longer needed, but it has to remain available in Objective C, as it's public API.
readonly attribute CSSStyleDeclaration style;
+#endif
};
}
diff --git a/WebCore/dom/ContainerNode.cpp b/WebCore/dom/ContainerNode.cpp
index 79d233a..e158828 100644
--- a/WebCore/dom/ContainerNode.cpp
+++ b/WebCore/dom/ContainerNode.cpp
@@ -35,11 +35,11 @@
#include "InlineTextBox.h"
#include "InspectorInstrumentation.h"
#include "MutationEvent.h"
+#include "ResourceLoadScheduler.h"
#include "Page.h"
#include "RenderBox.h"
#include "RenderTheme.h"
#include "RootInlineBox.h"
-#include "loader.h"
#include <wtf/CurrentTime.h>
#include <wtf/Vector.h>
@@ -101,7 +101,7 @@ bool ContainerNode::insertBefore(PassRefPtr<Node> newChild, Node* refChild, Exce
{
// Check that this node is not "floating".
// If it is, it can be deleted as a side effect of sending mutation events.
- ASSERT(refCount() || parent());
+ ASSERT(refCount() || parentNode());
ec = 0;
@@ -165,7 +165,7 @@ bool ContainerNode::insertBefore(PassRefPtr<Node> newChild, Node* refChild, Exce
notifyChildInserted(child);
// Add child to the rendering tree.
- if (attached() && !child->attached() && child->parent() == this) {
+ if (attached() && !child->attached() && child->parentNode() == this) {
if (shouldLazyAttach)
child->lazyAttach();
else
@@ -184,7 +184,7 @@ bool ContainerNode::insertBefore(PassRefPtr<Node> newChild, Node* refChild, Exce
void ContainerNode::insertBeforeCommon(Node* nextChild, Node* newChild)
{
ASSERT(newChild);
- ASSERT(!newChild->parent()); // Use insertBefore if you need to handle reparenting (and want DOM mutation events).
+ ASSERT(!newChild->parentNode()); // Use insertBefore if you need to handle reparenting (and want DOM mutation events).
ASSERT(!newChild->nextSibling());
ASSERT(!newChild->previousSibling());
@@ -240,7 +240,7 @@ bool ContainerNode::replaceChild(PassRefPtr<Node> newChild, Node* oldChild, Exce
{
// Check that this node is not "floating".
// If it is, it can be deleted as a side effect of sending mutation events.
- ASSERT(refCount() || parent());
+ ASSERT(refCount() || parentNode());
ec = 0;
@@ -334,7 +334,7 @@ bool ContainerNode::replaceChild(PassRefPtr<Node> newChild, Node* oldChild, Exce
notifyChildInserted(child.get());
// Add child to the rendering tree
- if (attached() && !child->attached() && child->parent() == this) {
+ if (attached() && !child->attached() && child->parentNode() == this) {
if (shouldLazyAttach)
child->lazyAttach();
else
@@ -355,8 +355,11 @@ bool ContainerNode::replaceChild(PassRefPtr<Node> newChild, Node* oldChild, Exce
void ContainerNode::willRemove()
{
- for (Node *n = m_firstChild; n != 0; n = n->nextSibling())
- n->willRemove();
+ NodeVector nodes;
+ for (Node* n = m_lastChild; n; n = n->previousSibling())
+ nodes.append(n);
+ for (; nodes.size(); nodes.removeLast())
+ nodes.last().get()->willRemove();
Node::willRemove();
}
@@ -388,7 +391,7 @@ bool ContainerNode::removeChild(Node* oldChild, ExceptionCode& ec)
{
// Check that this node is not "floating".
// If it is, it can be deleted as a side effect of sending mutation events.
- ASSERT(refCount() || parent());
+ ASSERT(refCount() || parentNode());
ec = 0;
@@ -547,7 +550,7 @@ bool ContainerNode::appendChild(PassRefPtr<Node> newChild, ExceptionCode& ec, bo
{
// Check that this node is not "floating".
// If it is, it can be deleted as a side effect of sending mutation events.
- ASSERT(refCount() || parent());
+ ASSERT(refCount() || parentNode());
ec = 0;
@@ -601,7 +604,7 @@ bool ContainerNode::appendChild(PassRefPtr<Node> newChild, ExceptionCode& ec, bo
notifyChildInserted(child);
// Add child to the rendering tree
- if (attached() && !child->attached() && child->parent() == this) {
+ if (attached() && !child->attached() && child->parentNode() == this) {
if (shouldLazyAttach)
child->lazyAttach();
else
@@ -621,7 +624,7 @@ bool ContainerNode::appendChild(PassRefPtr<Node> newChild, ExceptionCode& ec, bo
void ContainerNode::parserAddChild(PassRefPtr<Node> newChild)
{
ASSERT(newChild);
- ASSERT(!newChild->parent()); // Use appendChild if you need to handle reparenting (and want DOM mutation events).
+ ASSERT(!newChild->parentNode()); // Use appendChild if you need to handle reparenting (and want DOM mutation events).
#if ENABLE(INSPECTOR)
InspectorInstrumentation::willInsertDOMNode(document(), newChild.get(), this);
@@ -655,7 +658,7 @@ void ContainerNode::suspendPostAttachCallbacks()
s_shouldReEnableMemoryCacheCallsAfterAttach = true;
}
}
- cache()->loader()->suspendPendingRequests();
+ resourceLoadScheduler()->suspendPendingRequests();
}
++s_attachDepth;
}
@@ -670,7 +673,7 @@ void ContainerNode::resumePostAttachCallbacks()
if (Page* page = document()->page())
page->setMemoryCacheClientCallsEnabled(true);
}
- cache()->loader()->resumePendingRequests();
+ resourceLoadScheduler()->resumePendingRequests();
}
--s_attachDepth;
}
@@ -873,6 +876,8 @@ bool ContainerNode::getLowerRightCorner(FloatPoint& point) const
if (o->isText()) {
RenderText* text = toRenderText(o);
IntRect linesBox = text->linesBoundingBox();
+ if (!linesBox.x() && !linesBox.width() && !linesBox.y() && !linesBox.height())
+ continue;
point.move(linesBox.x() + linesBox.width(), linesBox.y() + linesBox.height());
} else {
RenderBox* box = toRenderBox(o);
@@ -1005,7 +1010,8 @@ static void notifyChildInserted(Node* child)
RefPtr<Node> c = child;
RefPtr<Document> document = child->document();
- if (c->parentNode() && c->parentNode()->inDocument())
+ Node* parentOrHostNode = c->parentOrHostNode();
+ if (parentOrHostNode && parentOrHostNode->inDocument())
c->insertedIntoDocument();
else
c->insertedIntoTree(true);
diff --git a/WebCore/dom/DOMAllInOne.cpp b/WebCore/dom/DOMAllInOne.cpp
index c1d536a..2f3510d 100644
--- a/WebCore/dom/DOMAllInOne.cpp
+++ b/WebCore/dom/DOMAllInOne.cpp
@@ -69,6 +69,7 @@
#include "EntityReference.cpp"
#include "ErrorEvent.cpp"
#include "Event.cpp"
+#include "EventContext.cpp"
#include "EventNames.cpp"
#include "EventTarget.cpp"
#include "ExceptionBase.cpp"
@@ -126,5 +127,6 @@
#include "WebKitAnimationEvent.cpp"
#include "WebKitTransitionEvent.cpp"
#include "WheelEvent.cpp"
+#include "WindowEventContext.cpp"
#include "XMLDocumentParser.cpp"
#include "XMLDocumentParserScope.cpp"
diff --git a/WebCore/dom/DOMTimeStamp.h b/WebCore/dom/DOMTimeStamp.h
new file mode 100644
index 0000000..ff61520
--- /dev/null
+++ b/WebCore/dom/DOMTimeStamp.h
@@ -0,0 +1,50 @@
+/*
+ * 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 DOMTimeStamp_h
+#define DOMTimeStamp_h
+
+namespace WebCore {
+
+typedef unsigned long long DOMTimeStamp;
+
+inline DOMTimeStamp convertSecondsToDOMTimeStamp(double seconds)
+{
+ return static_cast<DOMTimeStamp>(seconds * 1000.0);
+}
+
+inline double convertDOMTimeStampToSeconds(DOMTimeStamp milliseconds)
+{
+ return milliseconds / 1000.0;
+}
+
+} // namespace WebCore
+
+#endif // DOMTimeStamp_h
diff --git a/WebCore/dom/Document.cpp b/WebCore/dom/Document.cpp
index 978ca44..e0f3944 100644
--- a/WebCore/dom/Document.cpp
+++ b/WebCore/dom/Document.cpp
@@ -594,6 +594,17 @@ Document::~Document()
if (m_styleSheets)
m_styleSheets->documentDestroyed();
+ if (m_elemSheet)
+ m_elemSheet->clearOwnerNode();
+ if (m_mappedElementSheet)
+ m_mappedElementSheet->clearOwnerNode();
+ if (m_pageUserSheet)
+ m_pageUserSheet->clearOwnerNode();
+ if (m_pageGroupUserSheets) {
+ for (size_t i = 0; i < m_pageGroupUserSheets->size(); ++i)
+ (*m_pageGroupUserSheets)[i]->clearOwnerNode();
+ }
+
m_weakReference->clear();
}
@@ -1524,6 +1535,11 @@ void Document::unscheduleStyleRecalc()
m_pendingStyleRecalcShouldForce = false;
}
+bool Document::isPendingStyleRecalc() const
+{
+ return m_styleRecalcTimer.isActive() && !m_inStyleRecalc;
+}
+
void Document::styleRecalcTimerFired(Timer<Document>*)
{
updateStyleIfNeeded();
@@ -3010,7 +3026,8 @@ void Document::recalcStyleSelector()
StyleSheet* sheet = 0;
if (n->nodeType() == PROCESSING_INSTRUCTION_NODE) {
- // Processing instruction (XML documents only)
+ // Processing instruction (XML documents only).
+ // We don't support linking to embedded CSS stylesheets, see <https://bugs.webkit.org/show_bug.cgi?id=49281> for discussion.
ProcessingInstruction* pi = static_cast<ProcessingInstruction*>(n);
sheet = pi->sheet();
#if ENABLE(XSLT)
@@ -3022,25 +3039,6 @@ void Document::recalcStyleSelector()
return;
}
#endif
- if (!sheet && !pi->localHref().isEmpty()) {
- // Processing instruction with reference to an element in this document - e.g.
- // <?xml-stylesheet href="#mystyle">, with the element
- // <foo id="mystyle">heading { color: red; }</foo> at some location in
- // the document
- Element* elem = getElementById(pi->localHref().impl());
- if (elem) {
- String sheetText("");
- for (Node* c = elem->firstChild(); c; c = c->nextSibling()) {
- if (c->nodeType() == TEXT_NODE || c->nodeType() == CDATA_SECTION_NODE)
- sheetText += c->nodeValue();
- }
-
- RefPtr<CSSStyleSheet> cssSheet = CSSStyleSheet::create(this);
- cssSheet->parseString(sheetText);
- pi->setCSSStyleSheet(cssSheet);
- sheet = cssSheet.get();
- }
- }
} else if ((n->isHTMLElement() && (n->hasTagName(linkTag) || n->hasTagName(styleTag)))
#if ENABLE(SVG)
|| (n->isSVGElement() && n->hasTagName(SVGNames::styleTag))
@@ -4253,9 +4251,11 @@ void Document::finishedParsing()
ASSERT(!scriptableDocumentParser() || !m_parser->isParsing());
ASSERT(!scriptableDocumentParser() || m_readyState != Loading);
setParsing(false);
- if (!m_documentTiming.domContentLoaded)
- m_documentTiming.domContentLoaded = currentTime();
+ if (!m_documentTiming.domContentLoadedStart)
+ m_documentTiming.domContentLoadedStart = currentTime();
dispatchEvent(Event::create(eventNames().DOMContentLoadedEvent, true, false));
+ if (!m_documentTiming.domContentLoadedEnd)
+ m_documentTiming.domContentLoadedEnd = currentTime();
if (Frame* f = frame()) {
// FrameLoader::finishedParsing() might end up calling Document::implicitClose() if all
@@ -4432,6 +4432,25 @@ void Document::setIconURL(const String& iconURL, const String& type)
f->loader()->setIconURL(m_iconURL);
}
+void Document::registerFormElementWithFormAttribute(Element* control)
+{
+ ASSERT(control->fastHasAttribute(formAttr));
+ m_formElementsWithFormAttribute.add(control);
+}
+
+void Document::unregisterFormElementWithFormAttribute(Element* control)
+{
+ m_formElementsWithFormAttribute.remove(control);
+}
+
+void Document::resetFormElementsOwner(HTMLFormElement* form)
+{
+ typedef FormElementListHashSet::iterator Iterator;
+ Iterator end = m_formElementsWithFormAttribute.end();
+ for (Iterator it = m_formElementsWithFormAttribute.begin(); it != end; ++it)
+ static_cast<HTMLFormControlElement*>(*it)->resetFormOwner(form);
+}
+
void Document::setUseSecureKeyboardEntryWhenActive(bool usesSecureKeyboard)
{
if (m_useSecureKeyboardEntryWhenActive == usesSecureKeyboard)
diff --git a/WebCore/dom/Document.h b/WebCore/dom/Document.h
index b4af55d..ef1dbf2 100644
--- a/WebCore/dom/Document.h
+++ b/WebCore/dom/Document.h
@@ -319,8 +319,10 @@ public:
*
* @param centerX x reference for the rectangle in CSS pixels
* @param centerY y reference for the rectangle in CSS pixels
- * @param hPadding How much to expand the rectangle horizontally
- * @param vPadding How much to expand the rectangle vertically
+ * @param topPadding How much to expand the top of the rectangle
+ * @param rightPadding How much to expand the right of the rectangle
+ * @param bottomPadding How much to expand the bottom of the rectangle
+ * @param leftPadding How much to expand the left of the rectangle
* @param ignoreClipping whether or not to ignore the root scroll frame when retrieving the element.
* If false, this method returns null for coordinates outside of the viewport.
*/
@@ -483,6 +485,10 @@ public:
bool hasStateForNewFormElements() const;
bool takeStateForFormElement(AtomicStringImpl* name, AtomicStringImpl* type, String& state);
+ void registerFormElementWithFormAttribute(Element*);
+ void unregisterFormElementWithFormAttribute(Element*);
+ void resetFormElementsOwner(HTMLFormElement*);
+
FrameView* view() const; // can be NULL
Frame* frame() const { return m_frame; } // can be NULL
Page* page() const; // can be NULL
@@ -667,6 +673,7 @@ public:
void scheduleForcedStyleRecalc();
void scheduleStyleRecalc();
void unscheduleStyleRecalc();
+ bool isPendingStyleRecalc() const;
void styleRecalcTimerFired(Timer<Document>*);
void attachNodeIterator(NodeIterator*);
@@ -1214,6 +1221,7 @@ private:
typedef ListHashSet<Element*, 64> FormElementListHashSet;
FormElementListHashSet m_formElementsWithState;
+ FormElementListHashSet m_formElementsWithFormAttribute;
typedef HashMap<FormElementKey, Vector<String>, FormElementKeyHash, FormElementKeyHashTraits> FormElementStateMap;
FormElementStateMap m_stateForNewFormElements;
diff --git a/WebCore/dom/Document.idl b/WebCore/dom/Document.idl
index 4a37acc..138757f 100644
--- a/WebCore/dom/Document.idl
+++ b/WebCore/dom/Document.idl
@@ -325,15 +325,15 @@ module core {
#endif
#if defined(ENABLE_TOUCH_EVENTS) && ENABLE_TOUCH_EVENTS
- [ReturnsNew] Touch createTouch(in DOMWindow window,
- in EventTarget target,
- in long identifier,
- in long pageX,
- in long pageY,
- in long ScreenX,
- in long screenY)
+ [ReturnsNew, EnabledAtRuntime] Touch createTouch(in DOMWindow window,
+ in EventTarget target,
+ in long identifier,
+ in long pageX,
+ in long pageY,
+ in long ScreenX,
+ in long screenY)
raises (DOMException);
- [ReturnsNew] TouchList createTouchList()
+ [ReturnsNew, EnabledAtRuntime] TouchList createTouchList()
raises (DOMException);
#endif
diff --git a/WebCore/dom/DocumentTiming.h b/WebCore/dom/DocumentTiming.h
index a0bbb8c..7abc219 100644
--- a/WebCore/dom/DocumentTiming.h
+++ b/WebCore/dom/DocumentTiming.h
@@ -32,14 +32,16 @@ struct DocumentTiming {
DocumentTiming()
: domLoading(0.0)
, domInteractive(0.0)
- , domContentLoaded(0.0)
+ , domContentLoadedStart(0.0)
+ , domContentLoadedEnd(0.0)
, domComplete(0.0)
{
}
double domLoading;
double domInteractive;
- double domContentLoaded;
+ double domContentLoadedStart;
+ double domContentLoadedEnd;
double domComplete;
};
diff --git a/WebCore/dom/DocumentType.cpp b/WebCore/dom/DocumentType.cpp
index 9012b68..ed4b96c 100644
--- a/WebCore/dom/DocumentType.cpp
+++ b/WebCore/dom/DocumentType.cpp
@@ -59,9 +59,9 @@ PassRefPtr<Node> DocumentType::cloneNode(bool /*deep*/)
void DocumentType::insertedIntoDocument()
{
// Our document node can be null if we were created by a DOMImplementation. We use the parent() instead.
- ASSERT(parent() && parent()->isDocumentNode());
- if (parent() && parent()->isDocumentNode()) {
- Document* doc = static_cast<Document*>(parent());
+ ASSERT(parentNode() && parentNode()->isDocumentNode());
+ if (parentNode() && parentNode()->isDocumentNode()) {
+ Document* doc = static_cast<Document*>(parentNode());
if (!doc->doctype())
doc->setDocType(this);
}
diff --git a/WebCore/dom/Element.cpp b/WebCore/dom/Element.cpp
index 9afde07..5497465 100644
--- a/WebCore/dom/Element.cpp
+++ b/WebCore/dom/Element.cpp
@@ -159,7 +159,7 @@ PassRefPtr<Element> Element::cloneElementWithChildren()
PassRefPtr<Element> Element::cloneElementWithoutChildren()
{
- RefPtr<Element> clone = document()->createElement(tagQName(), false);
+ RefPtr<Element> clone = cloneElementWithoutAttributesAndChildren();
// This will catch HTML elements in the wrong namespace that are not correctly copied.
// This is a sanity check as HTML overloads some of the DOM methods.
ASSERT(isHTMLElement() == clone->isHTMLElement());
@@ -173,6 +173,11 @@ PassRefPtr<Element> Element::cloneElementWithoutChildren()
return clone.release();
}
+PassRefPtr<Element> Element::cloneElementWithoutAttributesAndChildren() const
+{
+ return document()->createElement(tagQName(), false);
+}
+
void Element::removeAttribute(const QualifiedName& name, ExceptionCode& ec)
{
if (m_attributeMap) {
@@ -1518,7 +1523,7 @@ AtomicString Element::computeInheritedLanguage() const
value = static_cast<const Document*>(n)->contentLanguage();
}
- n = n->parent();
+ n = n->parentNode();
}
return value;
diff --git a/WebCore/dom/Element.h b/WebCore/dom/Element.h
index 1a85650..7d4b94c 100644
--- a/WebCore/dom/Element.h
+++ b/WebCore/dom/Element.h
@@ -377,6 +377,7 @@ private:
// cloneNode is private so that non-virtual cloneElementWithChildren and cloneElementWithoutChildren
// are used instead.
virtual PassRefPtr<Node> cloneNode(bool deep);
+ virtual PassRefPtr<Element> cloneElementWithoutAttributesAndChildren() const;
QualifiedName m_tagName;
virtual NodeRareData* createRareData();
diff --git a/WebCore/dom/Event.cpp b/WebCore/dom/Event.cpp
index 9293a9a..c8da461 100644
--- a/WebCore/dom/Event.cpp
+++ b/WebCore/dom/Event.cpp
@@ -39,7 +39,7 @@ Event::Event()
, m_cancelBubble(false)
, m_eventPhase(0)
, m_currentTarget(0)
- , m_createTime(static_cast<DOMTimeStamp>(currentTime() * 1000.0))
+ , m_createTime(convertSecondsToDOMTimeStamp(currentTime()))
{
}
@@ -54,7 +54,7 @@ Event::Event(const AtomicString& eventType, bool canBubbleArg, bool cancelableAr
, m_cancelBubble(false)
, m_eventPhase(0)
, m_currentTarget(0)
- , m_createTime(static_cast<DOMTimeStamp>(currentTime() * 1000.0))
+ , m_createTime(convertSecondsToDOMTimeStamp(currentTime()))
{
}
@@ -229,6 +229,13 @@ bool Event::isDeviceOrientationEvent() const
}
#endif
+#if ENABLE(WEB_AUDIO)
+bool Event::isAudioProcessingEvent() const
+{
+ return false;
+}
+#endif
+
bool Event::fromUserGesture()
{
if (!UserGestureIndicator::processingUserGesture())
diff --git a/WebCore/dom/Event.h b/WebCore/dom/Event.h
index 82ac8ec..0d2f2b9 100644
--- a/WebCore/dom/Event.h
+++ b/WebCore/dom/Event.h
@@ -24,6 +24,7 @@
#ifndef Event_h
#define Event_h
+#include "DOMTimeStamp.h"
#include "EventTarget.h"
#include <wtf/RefCounted.h>
#include <wtf/text/AtomicString.h>
@@ -32,9 +33,6 @@ namespace WebCore {
class Clipboard;
- // FIXME: this should probably defined elsewhere.
- typedef unsigned long long DOMTimeStamp;
-
class Event : public RefCounted<Event> {
public:
enum PhaseType {
@@ -131,6 +129,9 @@ namespace WebCore {
virtual bool isIDBErrorEvent() const;
virtual bool isIDBSuccessEvent() const;
#endif
+#if ENABLE(WEB_AUDIO)
+ virtual bool isAudioProcessingEvent() const;
+#endif
#if ENABLE(WORKERS)
virtual bool isErrorEvent() const;
#endif
diff --git a/WebCore/css/CSSVariableDependentValue.cpp b/WebCore/dom/EventContext.cpp
index 2eadc1c..2a5c521 100644
--- a/WebCore/css/CSSVariableDependentValue.cpp
+++ b/WebCore/dom/EventContext.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 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
@@ -10,10 +10,10 @@
* 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
+ * 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 INC. OR
+ * 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
@@ -21,29 +21,31 @@
* 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 "CSSVariableDependentValue.h"
+#include "EventContext.h"
-#include "CSSValueList.h"
+#include "DOMWindow.h"
+#include "Document.h"
+#include "Event.h"
+#include "Node.h"
namespace WebCore {
-CSSVariableDependentValue::CSSVariableDependentValue(PassRefPtr<CSSValueList> list)
-: m_list(list)
-{
-}
-
-CSSVariableDependentValue::~CSSVariableDependentValue()
+EventContext::EventContext(PassRefPtr<Node> node, PassRefPtr<EventTarget> currentTarget, PassRefPtr<EventTarget> target)
+ : m_node(node)
+ , m_currentTarget(currentTarget)
+ , m_target(target)
{
}
-String CSSVariableDependentValue::cssText() const
+void EventContext::handleLocalEvents(Event* event) const
{
- if (m_list)
- return m_list->cssText();
- return "";
+ event->setTarget(m_target.get());
+ event->setCurrentTarget(m_currentTarget.get());
+ m_node->handleLocalEvents(event);
}
}
diff --git a/WebCore/css/CSSVariablesRule.cpp b/WebCore/dom/EventContext.h
index 0771952..9bab9d4 100644
--- a/WebCore/css/CSSVariablesRule.cpp
+++ b/WebCore/dom/EventContext.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 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
@@ -10,10 +10,10 @@
* 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
+ * 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 INC. OR
+ * 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
@@ -21,41 +21,45 @@
* 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 "CSSVariablesRule.h"
+#ifndef EventContext_h
+#define EventContext_h
-#include "MediaList.h"
-#include "PlatformString.h"
-#include <wtf/HashMap.h>
+#include <wtf/RefPtr.h>
namespace WebCore {
-CSSVariablesRule::CSSVariablesRule(CSSStyleSheet* parent, MediaList* mediaList, bool variablesKeyword)
- : CSSRule(parent)
- , m_lstMedia(mediaList)
- , m_variablesKeyword(variablesKeyword)
-{
-}
+class EventTarget;
+class Event;
+class Node;
+
+class EventContext {
+public:
+ // FIXME: Use ContainerNode instead of Node.
+ EventContext(PassRefPtr<Node>, PassRefPtr<EventTarget> currentTarget, PassRefPtr<EventTarget> target);
-CSSVariablesRule::~CSSVariablesRule()
+ Node* node() const;
+ EventTarget* target() const;
+ void handleLocalEvents(Event*) const;
+
+private:
+ RefPtr<Node> m_node;
+ RefPtr<EventTarget> m_currentTarget;
+ RefPtr<EventTarget> m_target;
+};
+
+inline Node* EventContext::node() const
{
+ return m_node.get();
}
-String CSSVariablesRule::cssText() const
+inline EventTarget* EventContext::target() const
{
- String result = m_variablesKeyword ? "@-webkit-variables " : "@-webkit-define ";
- if (m_lstMedia) {
- if (!m_variablesKeyword)
- result += "for ";
- result += m_lstMedia->mediaText();
- result += " ";
- }
- if (m_variables)
- result += m_variables->cssText();
- result += ";";
- return result;
+ return m_target.get();
}
}
+
+#endif // EventContext_h
diff --git a/WebCore/dom/EventNames.h b/WebCore/dom/EventNames.h
index 4d39acf..d19f043 100644
--- a/WebCore/dom/EventNames.h
+++ b/WebCore/dom/EventNames.h
@@ -178,6 +178,8 @@ namespace WebCore {
macro(webglcontextrestored) \
macro(webglcontextcreationerror) \
\
+ macro(audioprocess) \
+ \
// end of DOM_EVENT_NAMES_FOR_EACH
class EventNames : public Noncopyable {
diff --git a/WebCore/dom/EventTarget.cpp b/WebCore/dom/EventTarget.cpp
index 42cbb32..5f2f8a7 100644
--- a/WebCore/dom/EventTarget.cpp
+++ b/WebCore/dom/EventTarget.cpp
@@ -118,6 +118,13 @@ SVGElementInstance* EventTarget::toSVGElementInstance()
}
#endif
+#if ENABLE(WEB_AUDIO)
+JavaScriptAudioNode* EventTarget::toJavaScriptAudioNode()
+{
+ return 0;
+}
+#endif
+
#if ENABLE(WEB_SOCKETS)
WebSocket* EventTarget::toWebSocket()
{
diff --git a/WebCore/dom/EventTarget.h b/WebCore/dom/EventTarget.h
index feff4ae..ddcb663 100644
--- a/WebCore/dom/EventTarget.h
+++ b/WebCore/dom/EventTarget.h
@@ -51,6 +51,7 @@ namespace WebCore {
class FileWriter;
class IDBRequest;
class IDBTransaction;
+ class JavaScriptAudioNode;
class MessagePort;
class Node;
class Notification;
@@ -115,6 +116,11 @@ namespace WebCore {
virtual SharedWorker* toSharedWorker();
virtual SharedWorkerContext* toSharedWorkerContext();
#endif
+
+#if ENABLE(WEB_AUDIO)
+ virtual JavaScriptAudioNode* toJavaScriptAudioNode();
+#endif
+
#if ENABLE(WEB_SOCKETS)
virtual WebSocket* toWebSocket();
#endif
diff --git a/WebCore/dom/KeyboardEvent.h b/WebCore/dom/KeyboardEvent.h
index 30a2ef0..02f9f63 100644
--- a/WebCore/dom/KeyboardEvent.h
+++ b/WebCore/dom/KeyboardEvent.h
@@ -73,7 +73,7 @@ namespace WebCore {
const String& keyIdentifier, unsigned keyLocation,
bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool altGraphKey = false);
- String keyIdentifier() const { return m_keyIdentifier; }
+ const String& keyIdentifier() const { return m_keyIdentifier; }
unsigned keyLocation() const { return m_keyLocation; }
bool getModifierState(const String& keyIdentifier) const;
diff --git a/WebCore/dom/MouseRelatedEvent.cpp b/WebCore/dom/MouseRelatedEvent.cpp
index 61c35e8..072656e 100644
--- a/WebCore/dom/MouseRelatedEvent.cpp
+++ b/WebCore/dom/MouseRelatedEvent.cpp
@@ -168,7 +168,7 @@ void MouseRelatedEvent::receivedTarget()
// we should test and fix this.
Node* n = targ;
while (n && !n->renderer())
- n = n->parent();
+ n = n->parentNode();
if (n) {
RenderLayer* layer = n->renderer()->enclosingLayer();
layer->updateLayerPosition();
diff --git a/WebCore/dom/Node.cpp b/WebCore/dom/Node.cpp
index cea2e07..3c0deb6 100644
--- a/WebCore/dom/Node.cpp
+++ b/WebCore/dom/Node.cpp
@@ -50,6 +50,7 @@
#include "DynamicNodeList.h"
#include "Element.h"
#include "Event.h"
+#include "EventContext.h"
#include "EventException.h"
#include "EventHandler.h"
#include "EventListener.h"
@@ -85,6 +86,7 @@
#include "WebKitAnimationEvent.h"
#include "WebKitTransitionEvent.h"
#include "WheelEvent.h"
+#include "WindowEventContext.h"
#include "XMLNames.h"
#include "htmlediting.h"
#include <wtf/HashSet.h>
@@ -739,9 +741,9 @@ inline void Node::setStyleChange(StyleChangeType changeType)
inline void Node::markAncestorsWithChildNeedsStyleRecalc()
{
- for (ContainerNode* p = parentNode(); p && !p->childNeedsStyleRecalc(); p = p->parentNode())
+ for (ContainerNode* p = parentOrHostNode(); p && !p->childNeedsStyleRecalc(); p = p->parentOrHostNode())
p->setChildNeedsStyleRecalc();
-
+
if (document()->childNeedsStyleRecalc())
document()->scheduleStyleRecalc();
}
@@ -1326,7 +1328,7 @@ void Node::createRendererIfNeeded()
ASSERT(!renderer());
- ContainerNode* parent = parentNode();
+ ContainerNode* parent = parentOrHostNode();
ASSERT(parent);
RenderObject* parentRenderer = parent->renderer();
@@ -2280,14 +2282,9 @@ void Node::getSubresourceURLs(ListHashSet<KURL>& urls) const
addSubresourceAttributeURLs(urls);
}
-ContainerNode* Node::eventParentNode()
-{
- return parentNode();
-}
-
Node* Node::enclosingLinkEventParentOrSelf()
{
- for (Node* node = this; node; node = node->eventParentNode()) {
+ for (Node* node = this; node; node = node->parentOrHostNode()) {
// For imagemaps, the enclosing link node is the associated area element not the image itself.
// So we don't let images be the enclosingLinkNode, even though isLink sometimes returns true
// for them.
@@ -2558,12 +2555,13 @@ void Node::handleLocalEvents(Event* event)
fireEventListeners(event);
}
-#if ENABLE(SVG)
-static inline SVGElementInstance* eventTargetAsSVGElementInstance(Node* referenceNode)
+static inline EventTarget* eventTargetRespectingSVGTargetRules(Node* referenceNode)
{
ASSERT(referenceNode);
+
+#if ENABLE(SVG)
if (!referenceNode->isSVGElement())
- return 0;
+ return referenceNode;
// Spec: The event handling for the non-exposed tree works as if the referenced element had been textually included
// as a deeply cloned child of the 'use' element, except that events are dispatched to the SVGElementInstance objects
@@ -2577,36 +2575,41 @@ static inline SVGElementInstance* eventTargetAsSVGElementInstance(Node* referenc
if (SVGElementInstance* instance = static_cast<SVGUseElement*>(shadowTreeParentElement)->instanceForShadowTreeElement(referenceNode))
return instance;
}
+#endif
- return 0;
+ return referenceNode;
}
-#endif
-static inline EventTarget* eventTargetRespectingSVGTargetRules(Node* referenceNode)
+void Node::getEventAncestors(Vector<EventContext>& ancestors, EventTarget* originalTarget, EventDispatchBehavior behavior)
{
- ASSERT(referenceNode);
+ if (!inDocument())
+ return;
-#if ENABLE(SVG)
- if (SVGElementInstance* instance = eventTargetAsSVGElementInstance(referenceNode)) {
- ASSERT(instance->shadowTreeElement() == referenceNode);
- return instance;
- }
-#endif
+ EventTarget* target = originalTarget;
+ Node* ancestor = this;
+ bool shouldSkipNextAncestor = false;
+ while (true) {
+ if (ancestor->isShadowNode()) {
+ if (behavior == StayInsideShadowDOM)
+ return;
+ ancestor = ancestor->shadowParentNode();
+ if (!shouldSkipNextAncestor)
+ target = ancestor;
+ } else
+ ancestor = ancestor->parentNode();
- return referenceNode;
-}
+ if (!ancestor)
+ return;
-void Node::eventAncestors(Vector<RefPtr<ContainerNode> > &ancestors)
-{
- if (inDocument()) {
- for (ContainerNode* ancestor = eventParentNode(); ancestor; ancestor = ancestor->eventParentNode()) {
#if ENABLE(SVG)
- // Skip <use> shadow tree elements.
- if (ancestor->isSVGElement() && ancestor->isShadowNode())
- continue;
+ // Skip SVGShadowTreeRootElement.
+ shouldSkipNextAncestor = ancestor->isSVGElement() && ancestor->isShadowNode();
+ if (shouldSkipNextAncestor)
+ continue;
#endif
- ancestors.append(ancestor);
- }
+ // FIXME: Unroll the extra loop inside eventTargetRespectingSVGTargetRules into this loop.
+ ancestors.append(EventContext(ancestor, eventTargetRespectingSVGTargetRules(ancestor), target));
+
}
}
@@ -2621,6 +2624,11 @@ bool Node::dispatchEvent(PassRefPtr<Event> prpEvent)
return dispatchGenericEvent(event.release());
}
+static const EventContext* topEventContext(const Vector<EventContext>& ancestors)
+{
+ return ancestors.isEmpty() ? 0 : &ancestors.last();
+}
+
bool Node::dispatchGenericEvent(PassRefPtr<Event> prpEvent)
{
RefPtr<Event> event(prpEvent);
@@ -2633,20 +2641,13 @@ bool Node::dispatchGenericEvent(PassRefPtr<Event> prpEvent)
// If the node is not in a document just send the event to it.
// Be sure to ref all of nodes since event handlers could result in the last reference going away.
RefPtr<Node> thisNode(this);
- Vector<RefPtr<ContainerNode> > ancestors;
- eventAncestors(ancestors);
+ RefPtr<EventTarget> originalTarget = event->target();
+ Vector<EventContext> ancestors;
+ getEventAncestors(ancestors, originalTarget.get(), event->isMutationEvent() ? StayInsideShadowDOM : RetargetEvent);
- // Set up a pointer to indicate whether / where to dispatch window events.
- // We don't dispatch load events to the window. That quirk was originally
- // added because Mozilla doesn't propagate load events to the window object.
- DOMWindow* targetForWindowEvents = 0;
- if (event->type() != eventNames().loadEvent) {
- Node* topLevelContainer = ancestors.isEmpty() ? this : ancestors.last().get();
- if (topLevelContainer->isDocumentNode())
- targetForWindowEvents = static_cast<Document*>(topLevelContainer)->domWindow();
- }
+ WindowEventContext windowContext(event.get(), this, topEventContext(ancestors));
- InspectorInstrumentationCookie cookie = InspectorInstrumentation::willDispatchEvent(document(), *event, targetForWindowEvents, this, ancestors);
+ InspectorInstrumentationCookie cookie = InspectorInstrumentation::willDispatchEvent(document(), *event, windowContext.window(), this, ancestors);
// Give the target node a chance to do some work before DOM event handlers get a crack.
void* data = preDispatchEventHandler(event.get());
@@ -2656,22 +2657,17 @@ bool Node::dispatchGenericEvent(PassRefPtr<Event> prpEvent)
// Trigger capturing event handlers, starting at the top and working our way down.
event->setEventPhase(Event::CAPTURING_PHASE);
- if (targetForWindowEvents) {
- event->setCurrentTarget(targetForWindowEvents);
- targetForWindowEvents->fireEventListeners(event.get());
- if (event->propagationStopped())
- goto doneDispatching;
- }
+ if (windowContext.handleLocalEvents(event.get()) && event->propagationStopped())
+ goto doneDispatching;
+
for (size_t i = ancestors.size(); i; --i) {
- ContainerNode* ancestor = ancestors[i - 1].get();
- event->setCurrentTarget(eventTargetRespectingSVGTargetRules(ancestor));
- ancestor->handleLocalEvents(event.get());
+ ancestors[i - 1].handleLocalEvents(event.get());
if (event->propagationStopped())
goto doneDispatching;
}
event->setEventPhase(Event::AT_TARGET);
-
+ event->setTarget(originalTarget.get());
event->setCurrentTarget(eventTargetRespectingSVGTargetRules(this));
handleLocalEvents(event.get());
if (event->propagationStopped())
@@ -2683,21 +2679,15 @@ bool Node::dispatchGenericEvent(PassRefPtr<Event> prpEvent)
size_t size = ancestors.size();
for (size_t i = 0; i < size; ++i) {
- ContainerNode* ancestor = ancestors[i].get();
- event->setCurrentTarget(eventTargetRespectingSVGTargetRules(ancestor));
- ancestor->handleLocalEvents(event.get());
- if (event->propagationStopped() || event->cancelBubble())
- goto doneDispatching;
- }
- if (targetForWindowEvents) {
- event->setCurrentTarget(targetForWindowEvents);
- targetForWindowEvents->fireEventListeners(event.get());
+ ancestors[i].handleLocalEvents(event.get());
if (event->propagationStopped() || event->cancelBubble())
goto doneDispatching;
}
+ windowContext.handleLocalEvents(event.get());
}
doneDispatching:
+ event->setTarget(originalTarget.get());
event->setCurrentTarget(0);
event->setEventPhase(0);
@@ -2718,8 +2708,7 @@ doneDispatching:
if (event->bubbles()) {
size_t size = ancestors.size();
for (size_t i = 0; i < size; ++i) {
- ContainerNode* ancestor = ancestors[i].get();
- ancestor->defaultEventHandler(event.get());
+ ancestors[i].node()->defaultEventHandler(event.get());
ASSERT(!event->defaultPrevented());
if (event->defaultHandled())
goto doneWithDefault;
@@ -2729,6 +2718,10 @@ doneDispatching:
doneWithDefault:
+ // Ensure that after event dispatch, the event's target object is the
+ // outermost shadow DOM boundary.
+ event->setTarget(windowContext.target());
+ event->setCurrentTarget(0);
InspectorInstrumentation::didDispatchEvent(cookie);
return !event->defaultPrevented();
diff --git a/WebCore/dom/Node.h b/WebCore/dom/Node.h
index 3e5a444..17c1580 100644
--- a/WebCore/dom/Node.h
+++ b/WebCore/dom/Node.h
@@ -49,6 +49,7 @@ class Document;
class DynamicNodeList;
class Element;
class Event;
+class EventContext;
class EventListener;
class FloatPoint;
class Frame;
@@ -85,6 +86,11 @@ enum StyleChangeType {
SyntheticStyleChange = 3 << nodeStyleChangeShift
};
+enum EventDispatchBehavior {
+ RetargetEvent,
+ StayInsideShadowDOM
+};
+
class Node : public EventTarget, public TreeShared<ContainerNode>, public ScriptWrappable {
friend class Document;
public:
@@ -204,16 +210,14 @@ public:
Node* shadowAncestorNode();
Node* shadowTreeRootNode();
bool isInShadowTree();
-
- // The node's parent for the purpose of event capture and bubbling.
- virtual ContainerNode* eventParentNode();
+ // Node's parent or shadow tree host.
+ ContainerNode* parentOrHostNode();
// Returns the enclosing event parent node (or self) that, when clicked, would trigger a navigation.
Node* enclosingLinkEventParentOrSelf();
// Node ancestors when concerned about event flow.
- // FIXME: Should be named getEventAncestors.
- void eventAncestors(Vector<RefPtr<ContainerNode> > &ancestors);
+ void getEventAncestors(Vector<EventContext>& ancestors, EventTarget*, EventDispatchBehavior = RetargetEvent);
bool isBlockFlow() const;
bool isBlockFlowOrBlockTable() const;
@@ -705,6 +709,13 @@ inline void addSubresourceURL(ListHashSet<KURL>& urls, const KURL& url)
urls.add(url);
}
+inline ContainerNode* Node::parentOrHostNode()
+{
+ if (ContainerNode* parent = parentNode())
+ return parent;
+ return shadowParentNode();
+}
+
} //namespace
#ifndef NDEBUG
diff --git a/WebCore/dom/PendingScript.cpp b/WebCore/dom/PendingScript.cpp
index 42e225a..18f6071 100644
--- a/WebCore/dom/PendingScript.cpp
+++ b/WebCore/dom/PendingScript.cpp
@@ -40,7 +40,7 @@ PendingScript::~PendingScript()
PassRefPtr<Element> PendingScript::releaseElementAndClear()
{
setCachedScript(0);
- m_startingLineNumber = 0;
+ m_startingPosition = TextPosition1::belowRangePosition();
m_watchingForLoad = false;
return m_element.release();
}
diff --git a/WebCore/dom/PendingScript.h b/WebCore/dom/PendingScript.h
index 44e1e49..083507a 100644
--- a/WebCore/dom/PendingScript.h
+++ b/WebCore/dom/PendingScript.h
@@ -28,6 +28,7 @@
#include "CachedResourceClient.h"
#include "CachedResourceHandle.h"
+#include <wtf/text/TextPosition.h>
#include <wtf/PassRefPtr.h>
namespace WebCore {
@@ -43,14 +44,14 @@ class Element;
class PendingScript : public CachedResourceClient {
public:
PendingScript()
- : m_startingLineNumber(0)
+ : m_startingPosition(TextPosition1::belowRangePosition())
, m_watchingForLoad(false)
{
}
PendingScript(const PendingScript& other)
: CachedResourceClient(other)
- , m_startingLineNumber(other.m_startingLineNumber)
+ , m_startingPosition(other.m_startingPosition)
, m_watchingForLoad(other.m_watchingForLoad)
, m_element(other.m_element)
{
@@ -64,7 +65,7 @@ public:
if (this == &other)
return *this;
- m_startingLineNumber = other.m_startingLineNumber;
+ m_startingPosition = other.m_startingPosition;
m_watchingForLoad = other.m_watchingForLoad;
m_element = other.m_element;
setCachedScript(other.cachedScript());
@@ -74,7 +75,7 @@ public:
// FIXME: No setter means this is never set to anything other than 0.
// This is either unnecessary or incorrect.
- int startingLineNumber() const { return m_startingLineNumber; }
+ TextPosition1 startingPosition() const { return m_startingPosition; }
bool watchingForLoad() const { return m_watchingForLoad; }
void setWatchingForLoad(bool b) { m_watchingForLoad = b; }
@@ -89,7 +90,7 @@ public:
virtual void notifyFinished(CachedResource*);
private:
- int m_startingLineNumber; // Only used for inline script tags.
+ TextPosition1 m_startingPosition; // Only used for inline script tags.
bool m_watchingForLoad;
RefPtr<Element> m_element;
CachedResourceHandle<CachedScript> m_cachedScript;
diff --git a/WebCore/dom/Position.cpp b/WebCore/dom/Position.cpp
index 8c03224..d56613e 100644
--- a/WebCore/dom/Position.cpp
+++ b/WebCore/dom/Position.cpp
@@ -751,13 +751,13 @@ bool Position::isCandidate() const
return false;
if (renderer->isBR())
- return m_offset == 0 && !nodeIsUserSelectNone(node()->parent());
+ return !m_offset && !nodeIsUserSelectNone(node()->parentNode());
if (renderer->isText())
return !nodeIsUserSelectNone(node()) && inRenderedText();
if (isTableElement(node()) || editingIgnoresContent(node()))
- return (atFirstEditingPositionForNode() || atLastEditingPositionForNode()) && !nodeIsUserSelectNone(node()->parent());
+ return (atFirstEditingPositionForNode() || atLastEditingPositionForNode()) && !nodeIsUserSelectNone(node()->parentNode());
if (m_anchorNode->hasTagName(htmlTag))
return false;
diff --git a/WebCore/dom/PositionIterator.cpp b/WebCore/dom/PositionIterator.cpp
index d2c3a3f..767e705 100644
--- a/WebCore/dom/PositionIterator.cpp
+++ b/WebCore/dom/PositionIterator.cpp
@@ -147,13 +147,13 @@ bool PositionIterator::isCandidate() const
return false;
if (renderer->isBR())
- return !m_offsetInAnchor && !Position::nodeIsUserSelectNone(m_anchorNode->parent());
+ return !m_offsetInAnchor && !Position::nodeIsUserSelectNone(m_anchorNode->parentNode());
if (renderer->isText())
return !Position::nodeIsUserSelectNone(m_anchorNode) && Position(*this).inRenderedText();
if (isTableElement(m_anchorNode) || editingIgnoresContent(m_anchorNode))
- return (atStartOfNode() || atEndOfNode()) && !Position::nodeIsUserSelectNone(m_anchorNode->parent());
+ return (atStartOfNode() || atEndOfNode()) && !Position::nodeIsUserSelectNone(m_anchorNode->parentNode());
if (!m_anchorNode->hasTagName(htmlTag) && renderer->isBlockFlow()) {
if (toRenderBlock(renderer)->height() || m_anchorNode->hasTagName(bodyTag)) {
diff --git a/WebCore/dom/ProcessingInstruction.cpp b/WebCore/dom/ProcessingInstruction.cpp
index 38a49a0..80c58f3 100644
--- a/WebCore/dom/ProcessingInstruction.cpp
+++ b/WebCore/dom/ProcessingInstruction.cpp
@@ -56,6 +56,9 @@ PassRefPtr<ProcessingInstruction> ProcessingInstruction::create(Document* docume
ProcessingInstruction::~ProcessingInstruction()
{
+ if (m_sheet)
+ m_sheet->clearOwnerNode();
+
if (m_cachedSheet)
m_cachedSheet->removeClient(this);
}
@@ -200,6 +203,11 @@ bool ProcessingInstruction::sheetLoaded()
void ProcessingInstruction::setCSSStyleSheet(const String& href, const KURL& baseURL, const String& charset, const CachedCSSStyleSheet* sheet)
{
+ if (!inDocument()) {
+ ASSERT(!m_sheet);
+ return;
+ }
+
#if ENABLE(XSLT)
ASSERT(!m_isXSL);
#endif
@@ -274,6 +282,12 @@ void ProcessingInstruction::removedFromDocument()
document()->removeStyleSheetCandidateNode(this);
+ if (m_sheet) {
+ ASSERT(m_sheet->ownerNode() == this);
+ m_sheet->clearOwnerNode();
+ m_sheet = 0;
+ }
+
if (m_cachedSheet)
document()->styleSelectorChanged(DeferRecalcStyle);
}
diff --git a/WebCore/dom/ScriptElement.cpp b/WebCore/dom/ScriptElement.cpp
index 28c7594..6c8441d 100644
--- a/WebCore/dom/ScriptElement.cpp
+++ b/WebCore/dom/ScriptElement.cpp
@@ -51,58 +51,72 @@
namespace WebCore {
-void ScriptElement::insertedIntoDocument(ScriptElementData& data, const String& sourceUrl)
+ScriptElement::ScriptElement(Element* element, bool createdByParser, bool isEvaluated)
+ : m_element(element)
+ , m_cachedScript(0)
+ , m_createdByParser(createdByParser)
+ , m_requested(false)
+ , m_isEvaluated(isEvaluated)
+ , m_firedLoad(false)
{
- if (data.createdByParser() && !data.isAsynchronous())
+ ASSERT(m_element);
+}
+
+ScriptElement::~ScriptElement()
+{
+ stopLoadRequest();
+}
+
+void ScriptElement::insertedIntoDocument(const String& sourceUrl)
+{
+ if (createdByParser() && !isAsynchronous())
return;
// http://www.whatwg.org/specs/web-apps/current-work/#script
if (!sourceUrl.isEmpty()) {
- data.requestScript(sourceUrl);
+ requestScript(sourceUrl);
return;
}
// If there's an empty script node, we shouldn't evaluate the script
// because if a script is inserted afterwards (by setting text or innerText)
// it should be evaluated, and evaluateScript only evaluates a script once.
- data.evaluateScript(ScriptSourceCode(data.scriptContent(), data.element()->document()->url())); // FIXME: Provide a real starting line number here.
+ evaluateScript(ScriptSourceCode(scriptContent(), element()->document()->url())); // FIXME: Provide a real starting line number here.
}
-void ScriptElement::removedFromDocument(ScriptElementData& data)
+void ScriptElement::removedFromDocument()
{
// Eventually stop loading any not-yet-finished content
- data.stopLoadRequest();
+ stopLoadRequest();
}
-void ScriptElement::childrenChanged(ScriptElementData& data)
+void ScriptElement::childrenChanged()
{
- if (data.createdByParser())
+ if (createdByParser())
return;
- Element* element = data.element();
-
// If a node is inserted as a child of the script element
// and the script element has been inserted in the document
// we evaluate the script.
- if (element->inDocument() && element->firstChild())
- data.evaluateScript(ScriptSourceCode(data.scriptContent(), element->document()->url())); // FIXME: Provide a real starting line number here
+ if (m_element->inDocument() && m_element->firstChild())
+ evaluateScript(ScriptSourceCode(scriptContent(), m_element->document()->url())); // FIXME: Provide a real starting line number here
}
-void ScriptElement::finishParsingChildren(ScriptElementData& data, const String& sourceUrl)
+void ScriptElement::finishParsingChildren(const String& sourceUrl)
{
// The parser just reached </script>. If we have no src and no text,
// allow dynamic loading later.
- if (sourceUrl.isEmpty() && data.scriptContent().isEmpty())
- data.setCreatedByParser(false);
+ if (sourceUrl.isEmpty() && scriptContent().isEmpty())
+ m_createdByParser = false;
}
-void ScriptElement::handleSourceAttribute(ScriptElementData& data, const String& sourceUrl)
+void ScriptElement::handleSourceAttribute(const String& sourceUrl)
{
- if (data.ignoresLoadRequest() || sourceUrl.isEmpty())
+ if (ignoresLoadRequest() || sourceUrl.isEmpty())
return;
- data.requestScript(sourceUrl);
+ requestScript(sourceUrl);
}
// Helper function
@@ -129,26 +143,7 @@ static bool isSupportedJavaScriptLanguage(const String& language)
return languages.contains(language);
}
-// ScriptElementData
-ScriptElementData::ScriptElementData(ScriptElement* scriptElement, Element* element)
- : m_scriptElement(scriptElement)
- , m_element(element)
- , m_cachedScript(0)
- , m_createdByParser(false)
- , m_requested(false)
- , m_evaluated(false)
- , m_firedLoad(false)
-{
- ASSERT(m_scriptElement);
- ASSERT(m_element);
-}
-
-ScriptElementData::~ScriptElementData()
-{
- stopLoadRequest();
-}
-
-void ScriptElementData::requestScript(const String& sourceUrl)
+void ScriptElement::requestScript(const String& sourceUrl)
{
Document* document = m_element->document();
@@ -175,12 +170,12 @@ void ScriptElementData::requestScript(const String& sourceUrl)
return;
}
- m_scriptElement->dispatchErrorEvent();
+ dispatchErrorEvent();
}
-void ScriptElementData::evaluateScript(const ScriptSourceCode& sourceCode)
+void ScriptElement::evaluateScript(const ScriptSourceCode& sourceCode)
{
- if (m_evaluated || sourceCode.isEmpty() || !shouldExecuteAsJavaScript())
+ if (m_isEvaluated || sourceCode.isEmpty() || !shouldExecuteAsJavaScript())
return;
RefPtr<Document> document = m_element->document();
@@ -189,7 +184,7 @@ void ScriptElementData::evaluateScript(const ScriptSourceCode& sourceCode)
if (!frame->script()->canExecuteScripts(AboutToExecuteScript))
return;
- m_evaluated = true;
+ m_isEvaluated = true;
// http://www.whatwg.org/specs/web-apps/current-work/#script
@@ -205,7 +200,22 @@ void ScriptElementData::evaluateScript(const ScriptSourceCode& sourceCode)
}
}
-void ScriptElementData::stopLoadRequest()
+void ScriptElement::executeScript(const ScriptSourceCode& sourceCode)
+{
+ if (m_isEvaluated || sourceCode.isEmpty())
+ return;
+ RefPtr<Document> document = m_element->document();
+ ASSERT(document);
+ Frame* frame = document->frame();
+ if (!frame)
+ return;
+
+ m_isEvaluated = true;
+
+ frame->script()->executeScript(sourceCode);
+}
+
+void ScriptElement::stopLoadRequest()
{
if (m_cachedScript) {
m_cachedScript->removeClient(this);
@@ -213,31 +223,31 @@ void ScriptElementData::stopLoadRequest()
}
}
-void ScriptElementData::execute(CachedScript* cachedScript)
+void ScriptElement::execute(CachedScript* cachedScript)
{
ASSERT(cachedScript);
if (cachedScript->errorOccurred())
- m_scriptElement->dispatchErrorEvent();
+ dispatchErrorEvent();
else {
evaluateScript(ScriptSourceCode(cachedScript));
- m_scriptElement->dispatchLoadEvent();
+ dispatchLoadEvent();
}
cachedScript->removeClient(this);
}
-void ScriptElementData::notifyFinished(CachedResource* o)
+void ScriptElement::notifyFinished(CachedResource* o)
{
ASSERT_UNUSED(o, o == m_cachedScript);
m_element->document()->asyncScriptRunner()->executeScriptSoon(this, m_cachedScript);
m_cachedScript = 0;
}
-bool ScriptElementData::ignoresLoadRequest() const
+bool ScriptElement::ignoresLoadRequest() const
{
- return m_evaluated || m_requested || m_createdByParser || !m_element->inDocument();
+ return m_isEvaluated || m_requested || m_createdByParser || !m_element->inDocument();
}
-bool ScriptElementData::shouldExecuteAsJavaScript() const
+bool ScriptElement::shouldExecuteAsJavaScript() const
{
/*
Mozilla 1.8 accepts javascript1.0 - javascript1.7, but WinIE 7 accepts only javascript1.1 - javascript1.3.
@@ -248,20 +258,20 @@ bool ScriptElementData::shouldExecuteAsJavaScript() const
FIXME: Is this HTML5 compliant?
*/
- String type = m_scriptElement->typeAttributeValue();
+ String type = typeAttributeValue();
if (!type.isEmpty()) {
if (!MIMETypeRegistry::isSupportedJavaScriptMIMEType(type.stripWhiteSpace().lower()))
return false;
} else {
- String language = m_scriptElement->languageAttributeValue();
+ String language = languageAttributeValue();
if (!language.isEmpty() && !isSupportedJavaScriptLanguage(language))
return false;
}
// No type or language is specified, so we assume the script to be JavaScript.
- String forAttribute = m_scriptElement->forAttributeValue();
- String eventAttribute = m_scriptElement->eventAttributeValue();
+ String forAttribute = forAttributeValue();
+ String eventAttribute = eventAttributeValue();
if (!forAttribute.isEmpty() && !eventAttribute.isEmpty()) {
forAttribute = forAttribute.stripWhiteSpace();
if (!equalIgnoringCase(forAttribute, "window"))
@@ -275,10 +285,10 @@ bool ScriptElementData::shouldExecuteAsJavaScript() const
return true;
}
-String ScriptElementData::scriptCharset() const
+String ScriptElement::scriptCharset() const
{
// First we try to get encoding from charset attribute.
- String charset = m_scriptElement->charsetAttributeValue().stripWhiteSpace();
+ String charset = charsetAttributeValue().stripWhiteSpace();
// If charset has not been declared in script tag, fall back to frame encoding.
if (charset.isEmpty()) {
@@ -289,7 +299,7 @@ String ScriptElementData::scriptCharset() const
return charset;
}
-String ScriptElementData::scriptContent() const
+String ScriptElement::scriptContent() const
{
Vector<UChar> val;
Text* firstTextNode = 0;
@@ -316,18 +326,18 @@ String ScriptElementData::scriptContent() const
return String::adopt(val);
}
-bool ScriptElementData::isAsynchronous() const
+bool ScriptElement::isAsynchronous() const
{
// Only external scripts may be asynchronous.
// See: http://dev.w3.org/html5/spec/Overview.html#attr-script-async
- return !m_scriptElement->sourceAttributeValue().isEmpty() && m_scriptElement->asyncAttributeValue();
+ return !sourceAttributeValue().isEmpty() && asyncAttributeValue();
}
-bool ScriptElementData::isDeferred() const
+bool ScriptElement::isDeferred() const
{
// Only external scripts may be deferred and async trumps defer to allow for backward compatibility.
// See: http://dev.w3.org/html5/spec/Overview.html#attr-script-defer
- return !m_scriptElement->sourceAttributeValue().isEmpty() && !m_scriptElement->asyncAttributeValue() && m_scriptElement->deferAttributeValue();
+ return !sourceAttributeValue().isEmpty() && !asyncAttributeValue() && deferAttributeValue();
}
ScriptElement* toScriptElement(Element* element)
diff --git a/WebCore/dom/ScriptElement.h b/WebCore/dom/ScriptElement.h
index c663e43..b6beb6e 100644
--- a/WebCore/dom/ScriptElement.h
+++ b/WebCore/dom/ScriptElement.h
@@ -28,79 +28,66 @@ namespace WebCore {
class CachedScript;
class Element;
-class ScriptElementData;
+class ScriptElement;
class ScriptSourceCode;
-class ScriptElement {
+class ScriptElement : private CachedResourceClient {
public:
- ScriptElement() { }
- virtual ~ScriptElement() { }
+ ScriptElement(Element*, bool createdByParser, bool isEvaluated);
+ virtual ~ScriptElement();
+
+ Element* element() const { return m_element; }
- virtual String scriptContent() const = 0;
+ // A charset for loading the script (may be overridden by HTTP headers or a BOM).
+ String scriptCharset() const;
- virtual String sourceAttributeValue() const = 0;
- virtual String charsetAttributeValue() const = 0;
- virtual String typeAttributeValue() const = 0;
- virtual String languageAttributeValue() const = 0;
- virtual String forAttributeValue() const = 0;
- virtual String eventAttributeValue() const = 0;
- virtual bool asyncAttributeValue() const = 0;
- virtual bool deferAttributeValue() const = 0;
+ String scriptContent() const;
+ bool shouldExecuteAsJavaScript() const;
+ void executeScript(const ScriptSourceCode&);
+ void execute(CachedScript*);
+ // XML parser calls these
+ virtual String sourceAttributeValue() const = 0;
virtual void dispatchLoadEvent() = 0;
virtual void dispatchErrorEvent() = 0;
- // A charset for loading the script (may be overridden by HTTP headers or a BOM).
- virtual String scriptCharset() const = 0;
-
- virtual bool shouldExecuteAsJavaScript() const = 0;
-
protected:
- // Helper functions used by our parent classes.
- static void insertedIntoDocument(ScriptElementData&, const String& sourceUrl);
- static void removedFromDocument(ScriptElementData&);
- static void childrenChanged(ScriptElementData&);
- static void finishParsingChildren(ScriptElementData&, const String& sourceUrl);
- static void handleSourceAttribute(ScriptElementData&, const String& sourceUrl);
-};
+ bool haveFiredLoadEvent() const { return m_firedLoad; }
+ void setHaveFiredLoadEvent(bool firedLoad) { m_firedLoad = firedLoad; }
+ bool createdByParser() const { return m_createdByParser; }
+ bool isEvaluated() const { return m_isEvaluated; }
-// HTML/SVGScriptElement hold this struct as member variable
-// and pass it to the static helper functions in ScriptElement
-class ScriptElementData : private CachedResourceClient {
-public:
- ScriptElementData(ScriptElement*, Element*);
- virtual ~ScriptElementData();
+ // Helper functions used by our parent classes.
+ void insertedIntoDocument(const String& sourceUrl);
+ void removedFromDocument();
+ void childrenChanged();
+ void finishParsingChildren(const String& sourceUrl);
+ void handleSourceAttribute(const String& sourceUrl);
+private:
bool ignoresLoadRequest() const;
- bool shouldExecuteAsJavaScript() const;
-
- String scriptContent() const;
- String scriptCharset() const;
bool isAsynchronous() const;
bool isDeferred() const;
- Element* element() const { return m_element; }
- bool createdByParser() const { return m_createdByParser; }
- void setCreatedByParser(bool value) { m_createdByParser = value; }
- bool haveFiredLoadEvent() const { return m_firedLoad; }
- void setHaveFiredLoadEvent(bool firedLoad) { m_firedLoad = firedLoad; }
-
void requestScript(const String& sourceUrl);
void evaluateScript(const ScriptSourceCode&);
void stopLoadRequest();
- void execute(CachedScript*);
-
-private:
virtual void notifyFinished(CachedResource*);
-private:
- ScriptElement* m_scriptElement;
+ virtual String charsetAttributeValue() const = 0;
+ virtual String typeAttributeValue() const = 0;
+ virtual String languageAttributeValue() const = 0;
+ virtual String forAttributeValue() const = 0;
+ virtual String eventAttributeValue() const = 0;
+ virtual bool asyncAttributeValue() const = 0;
+ virtual bool deferAttributeValue() const = 0;
+
Element* m_element;
CachedResourceHandle<CachedScript> m_cachedScript;
bool m_createdByParser; // HTML5: "parser-inserted"
bool m_requested;
- bool m_evaluated; // HTML5: "already started"
+ bool m_isEvaluated; // HTML5: "already started"
bool m_firedLoad;
};
diff --git a/WebCore/dom/ScriptableDocumentParser.h b/WebCore/dom/ScriptableDocumentParser.h
index 8b16304..d9bf85c 100644
--- a/WebCore/dom/ScriptableDocumentParser.h
+++ b/WebCore/dom/ScriptableDocumentParser.h
@@ -27,10 +27,10 @@
#define ScriptableDocumentParser_h
#include "DecodedDataDocumentParser.h"
+#include <wtf/text/TextPosition.h>
namespace WebCore {
-class SegmentedString;
class XSSAuditor;
class ScriptableDocumentParser : public DecodedDataDocumentParser {
@@ -47,7 +47,7 @@ public:
// These are used to expose the current line/column to the scripting system.
virtual int lineNumber() const = 0;
- virtual int columnNumber() const = 0;
+ virtual TextPosition0 textPosition() const = 0;
XSSAuditor* xssAuditor() const { return m_xssAuditor; }
void setXSSAuditor(XSSAuditor* auditor) { m_xssAuditor = auditor; }
diff --git a/WebCore/dom/SelectElement.cpp b/WebCore/dom/SelectElement.cpp
index 886eee7..34a4961 100644
--- a/WebCore/dom/SelectElement.cpp
+++ b/WebCore/dom/SelectElement.cpp
@@ -512,7 +512,6 @@ void SelectElement::reset(SelectElementData& data, Element* element)
element->setNeedsStyleRecalc();
}
-#if !ARROW_KEYS_POP_MENU
enum SkipDirection {
SkipBackwards = -1,
SkipForwards = 1
@@ -533,7 +532,6 @@ static int nextValidIndex(const Vector<Element*>& listItems, int listIndex, Skip
}
return lastGoodIndex;
}
-#endif
void SelectElement::menuListDefaultEventHandler(SelectElementData& data, Element* element, Event* event, HTMLFormElement* htmlForm)
{
@@ -541,24 +539,28 @@ void SelectElement::menuListDefaultEventHandler(SelectElementData& data, Element
if (!element->renderer() || !event->isKeyboardEvent())
return;
- String keyIdentifier = static_cast<KeyboardEvent*>(event)->keyIdentifier();
+ const String& keyIdentifier = static_cast<KeyboardEvent*>(event)->keyIdentifier();
bool handled = false;
#if ARROW_KEYS_POP_MENU
- if (keyIdentifier == "Down" || keyIdentifier == "Up") {
- element->focus();
+ if (!isSpatialNavigationEnabled(element->document()->frame())) {
+ if (keyIdentifier == "Down" || keyIdentifier == "Up") {
+ element->focus();
- if (!element->renderer()) // Calling focus() may cause us to lose our renderer, in which case do not want to handle the event.
- return;
+ if (!element->renderer()) // Calling focus() may cause us to lose our renderer, in which case do not want to handle the event.
+ return;
- // Save the selection so it can be compared to the new selection when dispatching change events during setSelectedIndex,
- // which gets called from RenderMenuList::valueChanged, which gets called after the user makes a selection from the menu.
- saveLastSelection(data, element);
- if (RenderMenuList* menuList = toRenderMenuList(element->renderer()))
- menuList->showPopup();
- handled = true;
+ // Save the selection so it can be compared to the new selection when dispatching change events during setSelectedIndex,
+ // which gets called from RenderMenuList::valueChanged, which gets called after the user makes a selection from the menu.
+ saveLastSelection(data, element);
+ if (RenderMenuList* menuList = toRenderMenuList(element->renderer()))
+ menuList->showPopup();
+
+ event->setDefaultHandled();
+ }
+ return;
}
-#else
+#endif
// When using spatial navigation, we want to be able to navigate away from the select element
// when the user hits any of the arrow keys, instead of changing the selection.
if (isSpatialNavigationEnabled(element->document()->frame()))
@@ -591,7 +593,7 @@ void SelectElement::menuListDefaultEventHandler(SelectElementData& data, Element
if (handled && listIndex >= 0 && (unsigned)listIndex < listItems.size())
setSelectedIndex(data, element, listToOptionIndex(data, element, listIndex));
-#endif
+
if (handled)
event->setDefaultHandled();
}
@@ -605,6 +607,13 @@ void SelectElement::menuListDefaultEventHandler(SelectElementData& data, Element
int keyCode = static_cast<KeyboardEvent*>(event)->keyCode();
bool handled = false;
+ if (keyCode == ' ' && isSpatialNavigationEnabled(element->document()->frame())) {
+ // Use space to toggle arrow key handling for selection change or spatial navigation.
+ data.setActiveSelectionState(!data.activeSelectionState());
+ event->setDefaultHandled();
+ return;
+ }
+
#if SPACE_OR_RETURN_POP_MENU
if (keyCode == ' ' || keyCode == '\r') {
element->focus();
@@ -644,10 +653,6 @@ void SelectElement::menuListDefaultEventHandler(SelectElementData& data, Element
// listIndex should already be selected, but this will fire the onchange handler.
setSelectedIndex(data, element, listToOptionIndex(data, element, listIndex), true, true);
handled = true;
- } else if (keyCode == ' ' && isSpatialNavigationEnabled(element->document()->frame())) {
- // Use space to trigger arrow key handling for selection change or spatial navigation.
- data.setActiveSelectionState(!data.activeSelectionState());
- handled = true;
}
#endif
if (handled)
@@ -743,13 +748,13 @@ void SelectElement::listBoxDefaultEventHandler(SelectElementData& data, Element*
event->setDefaultHandled();
}
- } else if (event->type() == eventNames().mouseupEvent && event->isMouseEvent() && static_cast<MouseEvent*>(event)->button() == LeftButton && element->document()->frame()->eventHandler()->autoscrollRenderer() != element->renderer())
+ } else if (event->type() == eventNames().mouseupEvent && event->isMouseEvent() && static_cast<MouseEvent*>(event)->button() == LeftButton && element->document()->frame()->eventHandler()->autoscrollRenderer() != element->renderer()) {
// This makes sure we fire dispatchFormControlChangeEvent for a single click. For drag selection, onChange will fire when the autoscroll timer stops.
listBoxOnChange(data, element);
- else if (event->type() == eventNames().keydownEvent) {
+ } else if (event->type() == eventNames().keydownEvent) {
if (!event->isKeyboardEvent())
return;
- String keyIdentifier = static_cast<KeyboardEvent*>(event)->keyIdentifier();
+ const String& keyIdentifier = static_cast<KeyboardEvent*>(event)->keyIdentifier();
int endIndex = 0;
if (data.activeSelectionEndIndex() < 0) {
diff --git a/WebCore/dom/StyleElement.cpp b/WebCore/dom/StyleElement.cpp
index f318326..157e8f9 100644
--- a/WebCore/dom/StyleElement.cpp
+++ b/WebCore/dom/StyleElement.cpp
@@ -43,13 +43,6 @@ StyleElement::~StyleElement()
{
}
-StyleSheet* StyleElement::sheet(Element* e)
-{
- if (!m_sheet)
- createSheet(e, 0);
- return m_sheet.get();
-}
-
void StyleElement::insertedIntoDocument(Document* document, Element* element)
{
ASSERT(document);
@@ -67,11 +60,14 @@ void StyleElement::removedFromDocument(Document* document, Element* element)
ASSERT(element);
document->removeStyleSheetCandidateNode(element);
- // If we're in document teardown, then we don't need to do any notification of our sheet's removal.
- if (!document->renderer())
- return;
+ if (m_sheet) {
+ ASSERT(m_sheet->ownerNode() == element);
+ m_sheet->clearOwnerNode();
+ m_sheet = 0;
+ }
- if (m_sheet)
+ // If we're in document teardown, then we don't need to do any notification of our sheet's removal.
+ if (document->renderer())
document->styleSelectorChanged(DeferRecalcStyle);
}
@@ -88,7 +84,6 @@ void StyleElement::finishParsingChildren(Element* element)
{
ASSERT(element);
process(element);
- sheet(element);
m_createdByParser = false;
}
@@ -124,6 +119,7 @@ void StyleElement::process(Element* e)
void StyleElement::createSheet(Element* e, int startLineNumber, const String& text)
{
ASSERT(e);
+ ASSERT(e->inDocument());
Document* document = e->document();
if (m_sheet) {
if (m_sheet->isLoading())
diff --git a/WebCore/dom/StyleElement.h b/WebCore/dom/StyleElement.h
index 65f6310..05c07c5 100644
--- a/WebCore/dom/StyleElement.h
+++ b/WebCore/dom/StyleElement.h
@@ -37,7 +37,7 @@ protected:
virtual const AtomicString& type() const = 0;
virtual const AtomicString& media() const = 0;
- StyleSheet* sheet(Element*);
+ StyleSheet* sheet() { return m_sheet.get(); }
bool isLoading() const;
bool sheetLoaded(Document*);
diff --git a/WebCore/dom/StyledElement.cpp b/WebCore/dom/StyledElement.cpp
index 7384c0b..9a7c9c8 100644
--- a/WebCore/dom/StyledElement.cpp
+++ b/WebCore/dom/StyledElement.cpp
@@ -267,22 +267,25 @@ CSSStyleDeclaration* StyledElement::style()
return getInlineStyleDecl();
}
-void StyledElement::addCSSProperty(Attribute* attr, int id, const String &value)
+void StyledElement::addCSSProperty(Attribute* attribute, int id, const String &value)
{
- if (!attr->decl()) createMappedDecl(attr);
- attr->decl()->setProperty(id, value, false);
+ if (!attribute->decl())
+ createMappedDecl(attribute);
+ attribute->decl()->setProperty(id, value, false);
}
-void StyledElement::addCSSProperty(Attribute* attr, int id, int value)
+void StyledElement::addCSSProperty(Attribute* attribute, int id, int value)
{
- if (!attr->decl()) createMappedDecl(attr);
- attr->decl()->setProperty(id, value, false);
+ if (!attribute->decl())
+ createMappedDecl(attribute);
+ attribute->decl()->setProperty(id, value, false);
}
-void StyledElement::addCSSImageProperty(Attribute* attr, int id, const String& url)
+void StyledElement::addCSSImageProperty(Attribute* attribute, int id, const String& url)
{
- if (!attr->decl()) createMappedDecl(attr);
- attr->decl()->setImageProperty(id, url, false);
+ if (!attribute->decl())
+ createMappedDecl(attribute);
+ attribute->decl()->setImageProperty(id, url, false);
}
void StyledElement::addCSSLength(Attribute* attr, int id, const String &value)
diff --git a/WebCore/dom/Text.cpp b/WebCore/dom/Text.cpp
index 6271f11..47c532e 100644
--- a/WebCore/dom/Text.cpp
+++ b/WebCore/dom/Text.cpp
@@ -240,9 +240,10 @@ bool Text::rendererIsNeeded(RenderStyle *style)
RenderObject* Text::createRenderer(RenderArena* arena, RenderStyle*)
{
#if ENABLE(SVG)
- if (parentNode()->isSVGElement()
+ Node* parentOrHost = parentOrHostNode();
+ if (parentOrHost->isSVGElement()
#if ENABLE(SVG_FOREIGN_OBJECT)
- && !parentNode()->hasTagName(SVGNames::foreignObjectTag)
+ && !parentOrHost->hasTagName(SVGNames::foreignObjectTag)
#endif
)
return new (arena) RenderSVGInlineText(this, dataImpl());
diff --git a/WebCore/dom/ViewportArguments.cpp b/WebCore/dom/ViewportArguments.cpp
index d2e6684..c3d1fc4 100644
--- a/WebCore/dom/ViewportArguments.cpp
+++ b/WebCore/dom/ViewportArguments.cpp
@@ -78,6 +78,8 @@ ViewportAttributes computeViewportAttributes(ViewportArguments args, int desktop
// Resolve non-'auto' width and height to pixel values.
if (deviceDPI != 1.0) {
+ availableWidth /= result.devicePixelRatio;
+ availableHeight /= result.devicePixelRatio;
deviceWidth /= result.devicePixelRatio;
deviceHeight /= result.devicePixelRatio;
diff --git a/WebCore/dom/WindowEventContext.cpp b/WebCore/dom/WindowEventContext.cpp
new file mode 100644
index 0000000..0709330
--- /dev/null
+++ b/WebCore/dom/WindowEventContext.cpp
@@ -0,0 +1,64 @@
+/*
+ * 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 COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "config.h"
+#include "WindowEventContext.h"
+
+#include "DOMWindow.h"
+#include "Document.h"
+#include "Event.h"
+#include "EventContext.h"
+#include "Node.h"
+
+namespace WebCore {
+
+WindowEventContext::WindowEventContext(Event* event, PassRefPtr<Node> node, const EventContext* topEventContext)
+{
+ // We don't dispatch load events to the window. This quirk was originally
+ // added because Mozilla doesn't propagate load events to the window object.
+ if (event->type() == eventNames().loadEvent)
+ return;
+
+ Node* topLevelContainer = topEventContext ? topEventContext->node() : node.get();
+ if (!topLevelContainer->isDocumentNode())
+ return;
+
+ m_window = static_cast<Document*>(topLevelContainer)->domWindow();
+ m_target = topEventContext ? topEventContext->target() : node.get();
+}
+
+bool WindowEventContext::handleLocalEvents(Event* event)
+{
+ if (!m_window)
+ return false;
+
+ event->setTarget(target());
+ event->setCurrentTarget(window());
+ m_window->fireEventListeners(event);
+ return true;
+}
+
+}
diff --git a/WebCore/css/CSSVariableDependentValue.h b/WebCore/dom/WindowEventContext.h
index e8dce2e..a19e04d 100644
--- a/WebCore/css/CSSVariableDependentValue.h
+++ b/WebCore/dom/WindowEventContext.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 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
@@ -10,10 +10,10 @@
* 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
+ * 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 INC. OR
+ * 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
@@ -21,37 +21,45 @@
* 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 CSSVariableDependentValue_h
-#define CSSVariableDependentValue_h
+#ifndef WindowEventContext_h
+#define WindowEventContext_h
-#include "CSSValue.h"
+#include <wtf/RefPtr.h>
namespace WebCore {
-class CSSValueList;
+class DOMWindow;
+class EventTarget;
+class EventContext;
+class Event;
+class Node;
-class CSSVariableDependentValue : public CSSValue {
+class WindowEventContext {
public:
- static PassRefPtr<CSSVariableDependentValue> create(PassRefPtr<CSSValueList> valueList)
- {
- return adoptRef(new CSSVariableDependentValue(valueList));
- }
- virtual ~CSSVariableDependentValue();
-
- virtual String cssText() const;
-
- bool isVariableDependentValue() const { return true; }
+ WindowEventContext(Event*, PassRefPtr<Node>, const EventContext*);
- CSSValueList* valueList() const { return m_list.get(); }
+ DOMWindow* window() const;
+ EventTarget* target() const;
+ bool handleLocalEvents(Event* event);
private:
- CSSVariableDependentValue(PassRefPtr<CSSValueList>);
-
- RefPtr<CSSValueList> m_list;
+ RefPtr<DOMWindow> m_window;
+ RefPtr<EventTarget> m_target;
};
+inline DOMWindow* WindowEventContext::window() const
+{
+ return m_window.get();
+}
+
+inline EventTarget* WindowEventContext::target() const
+{
+ return m_target.get();
+}
+
}
-#endif
+#endif // WindowEventContext_h
diff --git a/WebCore/dom/XMLDocumentParser.h b/WebCore/dom/XMLDocumentParser.h
index 358be1f..0bf60a3 100644
--- a/WebCore/dom/XMLDocumentParser.h
+++ b/WebCore/dom/XMLDocumentParser.h
@@ -211,7 +211,7 @@ namespace WebCore {
// WMLErrorHandling uses these functions.
virtual bool wellFormed() const { return !m_sawError; }
virtual int lineNumber() const;
- virtual int columnNumber() const;
+ TextPosition0 textPosition() const;
static bool supportsXMLVersion(const String&);
@@ -238,6 +238,14 @@ namespace WebCore {
bool appendFragmentSource(const String&);
+ int columnNumber() const;
+
+ // This method is introduced to temporary legalize existing line/column
+ // coordinate bug: it is believed that numbers that originally were zero-based
+ // eventually becomes one-based.
+ // FIXME: Investigate and get rid of this method.
+ TextPosition1 textPositionOneBased() const;
+
#if USE(QXMLSTREAM)
private:
void parse();
@@ -317,7 +325,7 @@ public:
CachedResourceHandle<CachedScript> m_pendingScript;
RefPtr<Element> m_scriptElement;
- int m_scriptStartLine;
+ TextPosition1 m_scriptStartPosition;
bool m_parsingFragment;
AtomicString m_defaultNamespaceURI;
diff --git a/WebCore/dom/XMLDocumentParserLibxml2.cpp b/WebCore/dom/XMLDocumentParserLibxml2.cpp
index 77b0af6..7a3285f 100644
--- a/WebCore/dom/XMLDocumentParserLibxml2.cpp
+++ b/WebCore/dom/XMLDocumentParserLibxml2.cpp
@@ -560,7 +560,7 @@ XMLDocumentParser::XMLDocumentParser(Document* document, FrameView* frameView)
, m_lastErrorLine(0)
, m_lastErrorColumn(0)
, m_pendingScript(0)
- , m_scriptStartLine(0)
+ , m_scriptStartPosition(TextPosition1::belowRangePosition())
, m_parsingFragment(false)
, m_scriptingPermission(FragmentScriptingAllowed)
{
@@ -587,7 +587,7 @@ XMLDocumentParser::XMLDocumentParser(DocumentFragment* fragment, Element* parent
, m_lastErrorLine(0)
, m_lastErrorColumn(0)
, m_pendingScript(0)
- , m_scriptStartLine(0)
+ , m_scriptStartPosition(TextPosition1::belowRangePosition())
, m_parsingFragment(true)
, m_scriptingPermission(scriptingPermission)
{
@@ -819,7 +819,7 @@ void XMLDocumentParser::startElementNs(const xmlChar* xmlLocalName, const xmlCha
ScriptElement* scriptElement = toScriptElement(newElement.get());
if (scriptElement)
- m_scriptStartLine = lineNumber();
+ m_scriptStartPosition = textPositionOneBased();
m_currentNode->deprecatedParserAddChild(newElement.get());
@@ -910,7 +910,7 @@ void XMLDocumentParser::endElementNs()
} else
m_scriptElement = 0;
} else
- m_view->frame()->script()->executeScript(ScriptSourceCode(scriptElement->scriptContent(), document()->url(), m_scriptStartLine));
+ scriptElement->executeScript(ScriptSourceCode(scriptElement->scriptContent(), document()->url(), m_scriptStartPosition));
// JavaScript may have detached the parser
if (isDetached())
@@ -1376,14 +1376,39 @@ void* xmlDocPtrForString(CachedResourceLoader* cachedResourceLoader, const Strin
int XMLDocumentParser::lineNumber() const
{
+ // FIXME: The implementation probably returns 1-based int, but method should return 0-based.
return context() ? context()->input->line : 1;
}
int XMLDocumentParser::columnNumber() const
{
+ // FIXME: The implementation probably returns 1-based int, but method should return 0-based.
return context() ? context()->input->col : 1;
}
+TextPosition0 XMLDocumentParser::textPosition() const
+{
+ xmlParserCtxtPtr context = this->context();
+ if (!context)
+ return TextPosition0::minimumPosition();
+ // FIXME: The context probably contains 1-based numbers, but we treat them as 0-based,
+ // to be consistent with fixme's in lineNumber() and columnNumber
+ // methods.
+ return TextPosition0(WTF::ZeroBasedNumber::fromZeroBasedInt(context->input->line),
+ WTF::ZeroBasedNumber::fromZeroBasedInt(context->input->col));
+}
+
+// This method has a correct implementation, in contrast to textPosition() method.
+// It should replace textPosition().
+TextPosition1 XMLDocumentParser::textPositionOneBased() const
+{
+ xmlParserCtxtPtr context = this->context();
+ if (!context)
+ return TextPosition1::minimumPosition();
+ return TextPosition1(WTF::OneBasedNumber::fromOneBasedInt(context->input->line),
+ WTF::OneBasedNumber::fromOneBasedInt(context->input->col));
+}
+
void XMLDocumentParser::stopParsing()
{
DocumentParser::stopParsing();
diff --git a/WebCore/dom/XMLDocumentParserQt.cpp b/WebCore/dom/XMLDocumentParserQt.cpp
index 03b083e..e905e31 100644
--- a/WebCore/dom/XMLDocumentParserQt.cpp
+++ b/WebCore/dom/XMLDocumentParserQt.cpp
@@ -105,7 +105,7 @@ XMLDocumentParser::XMLDocumentParser(Document* document, FrameView* frameView)
, m_lastErrorLine(0)
, m_lastErrorColumn(0)
, m_pendingScript(0)
- , m_scriptStartLine(0)
+ , m_scriptStartPosition(TextPosition1::belowRangePosition())
, m_parsingFragment(false)
, m_scriptingPermission(FragmentScriptingAllowed)
{
@@ -132,7 +132,7 @@ XMLDocumentParser::XMLDocumentParser(DocumentFragment* fragment, Element* parent
, m_lastErrorLine(0)
, m_lastErrorColumn(0)
, m_pendingScript(0)
- , m_scriptStartLine(0)
+ , m_scriptStartPosition(TextPosition1::belowRangePosition())
, m_parsingFragment(true)
, m_scriptingPermission(permission)
{
@@ -192,6 +192,10 @@ void XMLDocumentParser::doWrite(const String& parseString)
QString data(parseString);
if (!data.isEmpty()) {
+ // JavaScript may cause the parser to detach,
+ // keep this alive until this function is done.
+ RefPtr<XMLDocumentParser> protect(this);
+
m_stream.addData(data);
parse();
}
@@ -234,6 +238,18 @@ int XMLDocumentParser::columnNumber() const
return m_stream.columnNumber();
}
+TextPosition0 XMLDocumentParser::textPosition() const
+{
+ return TextPosition0(WTF::ZeroBasedNumber::fromZeroBasedInt(lineNumber()), WTF::ZeroBasedNumber::fromZeroBasedInt(columnNumber()));
+}
+
+// This method incorrectly reinterprets zero-base lineNumber method as one-based number.
+// FIXME: This error is kept for compatibility. We should fix it eventually.
+TextPosition1 XMLDocumentParser::textPositionOneBased() const
+{
+ return TextPosition1(WTF::OneBasedNumber::fromOneBasedInt(lineNumber()), WTF::OneBasedNumber::fromOneBasedInt(columnNumber()));
+}
+
void XMLDocumentParser::stopParsing()
{
ScriptableDocumentParser::stopParsing();
@@ -518,7 +534,7 @@ void XMLDocumentParser::parseStartElement()
ScriptElement* scriptElement = toScriptElement(newElement.get());
if (scriptElement)
- m_scriptStartLine = lineNumber();
+ m_scriptStartPosition = textPositionOneBased();
m_currentNode->deprecatedParserAddChild(newElement.get());
@@ -595,7 +611,7 @@ void XMLDocumentParser::parseEndElement()
} else
m_scriptElement = 0;
} else
- m_view->frame()->script()->executeScript(ScriptSourceCode(scriptElement->scriptContent(), document()->url(), m_scriptStartLine));
+ scriptElement->executeScript(ScriptSourceCode(scriptElement->scriptContent(), document()->url(), m_scriptStartPosition));
}
m_requestingScript = false;
popCurrentNode();
@@ -716,4 +732,3 @@ void XMLDocumentParser::parseDtd()
}
}
-
diff --git a/WebCore/editing/AppendNodeCommand.cpp b/WebCore/editing/AppendNodeCommand.cpp
index eeecdd2..58f7fa6 100644
--- a/WebCore/editing/AppendNodeCommand.cpp
+++ b/WebCore/editing/AppendNodeCommand.cpp
@@ -38,7 +38,7 @@ AppendNodeCommand::AppendNodeCommand(PassRefPtr<Element> parent, PassRefPtr<Node
{
ASSERT(m_parent);
ASSERT(m_node);
- ASSERT(!m_node->parent());
+ ASSERT(!m_node->parentNode());
ASSERT(m_parent->isContentEditable() || !m_parent->attached());
}
diff --git a/WebCore/editing/ApplyStyleCommand.cpp b/WebCore/editing/ApplyStyleCommand.cpp
index 4e1c733..c4aaac8 100644
--- a/WebCore/editing/ApplyStyleCommand.cpp
+++ b/WebCore/editing/ApplyStyleCommand.cpp
@@ -744,9 +744,9 @@ void ApplyStyleCommand::applyRelativeFontStyleChange(CSSMutableStyleDeclaration
static Node* dummySpanAncestorForNode(const Node* node)
{
while (node && !isStyleSpan(node))
- node = node->parent();
+ node = node->parentNode();
- return node ? node->parent() : 0;
+ return node ? node->parentNode() : 0;
}
void ApplyStyleCommand::cleanupUnstyledAppleStyleSpans(Node* dummySpanAncestor)
@@ -778,7 +778,7 @@ HTMLElement* ApplyStyleCommand::splitAncestorsWithUnicodeBidi(Node* node, bool b
Node* highestAncestorWithUnicodeBidi = 0;
Node* nextHighestAncestorWithUnicodeBidi = 0;
int highestAncestorUnicodeBidi = 0;
- for (Node* n = node->parent(); n != block; n = n->parent()) {
+ for (Node* n = node->parentNode(); n != block; n = n->parentNode()) {
int unicodeBidi = getIdentifierValue(computedStyle(n).get(), CSSPropertyUnicodeBidi);
if (unicodeBidi && unicodeBidi != CSSValueNormal) {
highestAncestorUnicodeBidi = unicodeBidi;
@@ -805,12 +805,12 @@ HTMLElement* ApplyStyleCommand::splitAncestorsWithUnicodeBidi(Node* node, bool b
// Split every ancestor through highest ancestor with embedding.
Node* n = node;
while (true) {
- Element* parent = static_cast<Element*>(n->parent());
+ Element* parent = static_cast<Element*>(n->parentNode());
if (before ? n->previousSibling() : n->nextSibling())
splitElement(parent, before ? n : n->nextSibling());
if (parent == highestAncestorWithUnicodeBidi)
break;
- n = n->parent();
+ n = n->parentNode();
}
return unsplitAncestor;
}
@@ -822,8 +822,8 @@ void ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock(Node* node, Node* unsp
return;
Node* parent = 0;
- for (Node* n = node->parent(); n != block && n != unsplitAncestor; n = parent) {
- parent = n->parent();
+ for (Node* n = node->parentNode(); n != block && n != unsplitAncestor; n = parent) {
+ parent = n->parentNode();
if (!n->isStyledElement())
continue;
@@ -854,7 +854,7 @@ void ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock(Node* node, Node* unsp
static Node* highestEmbeddingAncestor(Node* startNode, Node* enclosingNode)
{
- for (Node* n = startNode; n && n != enclosingNode; n = n->parent()) {
+ for (Node* n = startNode; n && n != enclosingNode; n = n->parentNode()) {
if (n->isHTMLElement() && getIdentifierValue(computedStyle(n).get(), CSSPropertyUnicodeBidi) == CSSValueEmbed)
return n;
}
@@ -1620,11 +1620,11 @@ void ApplyStyleCommand::splitTextElementAtEnd(const Position& start, const Posit
Text* text = static_cast<Text*>(end.node());
splitTextNodeContainingElement(text, end.deprecatedEditingOffset());
- Node* prevNode = text->parent()->previousSibling()->lastChild();
+ Node* prevNode = text->parentNode()->previousSibling()->lastChild();
ASSERT(prevNode);
Node* startNode = start.node() == end.node() ? prevNode : start.node();
ASSERT(startNode);
- updateStartEnd(Position(startNode, start.deprecatedEditingOffset()), Position(prevNode->parent(), prevNode->nodeIndex() + 1));
+ updateStartEnd(Position(startNode, start.deprecatedEditingOffset()), Position(prevNode->parentNode(), prevNode->nodeIndex() + 1));
}
bool ApplyStyleCommand::shouldSplitTextElement(Element* element, CSSMutableStyleDeclaration* style)
@@ -1693,7 +1693,7 @@ bool ApplyStyleCommand::mergeStartWithPreviousIfIdentical(const Position &start,
if (start.node()->previousSibling())
return false;
- startNode = start.node()->parent();
+ startNode = start.node()->parentNode();
startOffset = 0;
}
@@ -1730,11 +1730,11 @@ bool ApplyStyleCommand::mergeEndWithNextIfIdentical(const Position &start, const
if (endOffset < caretMaxOffset(endNode))
return false;
- unsigned parentLastOffset = end.node()->parent()->childNodes()->length() - 1;
+ unsigned parentLastOffset = end.node()->parentNode()->childNodes()->length() - 1;
if (end.node()->nextSibling())
return false;
- endNode = end.node()->parent();
+ endNode = end.node()->parentNode();
endOffset = parentLastOffset;
}
diff --git a/WebCore/editing/CompositeEditCommand.cpp b/WebCore/editing/CompositeEditCommand.cpp
index 5579b25..06cfd2b 100644
--- a/WebCore/editing/CompositeEditCommand.cpp
+++ b/WebCore/editing/CompositeEditCommand.cpp
@@ -1185,17 +1185,17 @@ PassRefPtr<Node> CompositeEditCommand::splitTreeToNode(Node* start, Node* end, b
ASSERT(start != end);
RefPtr<Node> node;
- for (node = start; node && node->parent() != end; node = node->parent()) {
- if (!node->parent()->isElementNode())
+ for (node = start; node && node->parentNode() != end; node = node->parentNode()) {
+ if (!node->parentNode()->isElementNode())
break;
- VisiblePosition positionInParent(Position(node->parent(), 0), DOWNSTREAM);
+ VisiblePosition positionInParent(Position(node->parentNode(), 0), DOWNSTREAM);
VisiblePosition positionInNode(Position(node, 0), DOWNSTREAM);
if (positionInParent != positionInNode)
- applyCommandToComposite(SplitElementCommand::create(static_cast<Element*>(node->parent()), node));
+ applyCommandToComposite(SplitElementCommand::create(static_cast<Element*>(node->parentNode()), node));
}
if (splitAncestor) {
splitElement(static_cast<Element*>(end), node);
- return node->parent();
+ return node->parentNode();
}
return node.release();
}
diff --git a/WebCore/editing/DeleteSelectionCommand.cpp b/WebCore/editing/DeleteSelectionCommand.cpp
index 56deac3..b617a27 100644
--- a/WebCore/editing/DeleteSelectionCommand.cpp
+++ b/WebCore/editing/DeleteSelectionCommand.cpp
@@ -314,7 +314,7 @@ static void updatePositionForNodeRemoval(Node* node, Position& position)
{
if (position.isNull())
return;
- if (node->parent() == position.node() && node->nodeIndex() < (unsigned)position.deprecatedEditingOffset())
+ if (node->parentNode() == position.node() && node->nodeIndex() < (unsigned)position.deprecatedEditingOffset())
position = Position(position.node(), position.deprecatedEditingOffset() - 1);
if (position.node() == node || position.node()->isDescendantOf(node))
position = positionInParentBeforeNode(node);
diff --git a/WebCore/editing/Editor.cpp b/WebCore/editing/Editor.cpp
index 327aa5f..530ed36 100644
--- a/WebCore/editing/Editor.cpp
+++ b/WebCore/editing/Editor.cpp
@@ -635,7 +635,7 @@ WritingDirection Editor::textDirectionForSelection(bool& hasNestedOrMultipleEmbe
Node* block = enclosingBlock(node);
WritingDirection foundDirection = NaturalWritingDirection;
- for (; node != block; node = node->parent()) {
+ for (; node != block; node = node->parentNode()) {
if (!node->isStyledElement())
continue;
@@ -2185,46 +2185,30 @@ void Editor::markAllMisspellingsAndBadGrammarInRanges(TextCheckingOptions textCh
return;
// Expand the range to encompass entire paragraphs, since text checking needs that much context.
- int spellingRangeStartOffset = 0;
- int spellingRangeEndOffset = 0;
- int grammarRangeStartOffset = 0;
- int grammarRangeEndOffset = 0;
- int offsetDueToReplacement = 0;
- int paragraphLength = 0;
int selectionOffset = 0;
int ambiguousBoundaryOffset = -1;
bool selectionChanged = false;
bool restoreSelectionAfterChange = false;
bool adjustSelectionForParagraphBoundaries = false;
- String paragraphString;
- RefPtr<Range> paragraphRange;
-
- if (shouldMarkGrammar) {
- // The spelling range should be contained in the paragraph-aligned extension of the grammar range.
- paragraphRange = TextCheckingHelper(client(), grammarRange).paragraphAlignedRange(grammarRangeStartOffset, paragraphString);
- RefPtr<Range> offsetAsRange = Range::create(paragraphRange->startContainer(ec)->document(), paragraphRange->startPosition(), spellingRange->startPosition());
- spellingRangeStartOffset = TextIterator::rangeLength(offsetAsRange.get());
- grammarRangeEndOffset = grammarRangeStartOffset + TextIterator::rangeLength(grammarRange);
- } else {
- paragraphRange = TextCheckingHelper(client(), spellingRange).paragraphAlignedRange(spellingRangeStartOffset, paragraphString);
- }
- spellingRangeEndOffset = spellingRangeStartOffset + TextIterator::rangeLength(spellingRange);
- paragraphLength = paragraphString.length();
- if (paragraphLength <= 0 || (spellingRangeStartOffset >= spellingRangeEndOffset && (!shouldMarkGrammar || grammarRangeStartOffset >= grammarRangeEndOffset)))
+
+ TextCheckingParagraph spellingParagraph(spellingRange);
+ TextCheckingParagraph grammarParagraph(shouldMarkGrammar ? grammarRange : 0);
+ TextCheckingParagraph& paragraph = shouldMarkGrammar ? grammarParagraph : spellingParagraph;
+
+ if (shouldMarkGrammar ? (spellingParagraph.isRangeEmpty() && grammarParagraph.isEmpty()) : spellingParagraph.isEmpty())
return;
if (shouldPerformReplacement) {
if (m_frame->selection()->selectionType() == VisibleSelection::CaretSelection) {
// Attempt to save the caret position so we can restore it later if needed
- RefPtr<Range> offsetAsRange = Range::create(paragraphRange->startContainer(ec)->document(), paragraphRange->startPosition(), paragraphRange->startPosition());
Position caretPosition = m_frame->selection()->end();
- offsetAsRange->setEnd(caretPosition.containerNode(), caretPosition.computeOffsetInContainerNode(), ec);
+ int offset = paragraph.offsetTo(caretPosition, ec);
if (!ec) {
- selectionOffset = TextIterator::rangeLength(offsetAsRange.get());
+ selectionOffset = offset;
restoreSelectionAfterChange = true;
- if (selectionOffset > 0 && (selectionOffset > paragraphLength || paragraphString[selectionOffset - 1] == newlineCharacter))
+ if (selectionOffset > 0 && (selectionOffset > paragraph.textLength() || paragraph.textCharAt(selectionOffset - 1) == newlineCharacter))
adjustSelectionForParagraphBoundaries = true;
- if (selectionOffset > 0 && selectionOffset <= paragraphLength && isAmbiguousBoundaryCharacter(paragraphString[selectionOffset - 1]))
+ if (selectionOffset > 0 && selectionOffset <= paragraph.textLength() && isAmbiguousBoundaryCharacter(paragraph.textCharAt(selectionOffset - 1)))
ambiguousBoundaryOffset = selectionOffset - 1;
}
}
@@ -2250,7 +2234,7 @@ void Editor::markAllMisspellingsAndBadGrammarInRanges(TextCheckingOptions textCh
if (shouldMarkSpelling && isAutomaticSpellingCorrectionEnabled())
checkingTypes |= TextCheckingTypeCorrection;
}
- client()->checkTextOfParagraph(paragraphString.characters(), paragraphLength, checkingTypes, results);
+ client()->checkTextOfParagraph(paragraph.textCharacters(), paragraph.textLength(), checkingTypes, results);
#if SUPPORT_AUTOCORRECTION_PANEL
// If this checking is only for showing correction panel, we shouldn't bother to mark misspellings.
@@ -2258,25 +2242,28 @@ void Editor::markAllMisspellingsAndBadGrammarInRanges(TextCheckingOptions textCh
shouldMarkSpelling = false;
#endif
+ int offsetDueToReplacement = 0;
+
for (unsigned i = 0; i < results.size(); i++) {
+ int spellingRangeEndOffset = spellingParagraph.checkingEnd() + offsetDueToReplacement;
const TextCheckingResult* result = &results[i];
int resultLocation = result->location + offsetDueToReplacement;
int resultLength = result->length;
- if (shouldMarkSpelling && result->type == TextCheckingTypeSpelling && resultLocation >= spellingRangeStartOffset && resultLocation + resultLength <= spellingRangeEndOffset) {
+ if (shouldMarkSpelling && result->type == TextCheckingTypeSpelling && resultLocation >= spellingParagraph.checkingStart() && resultLocation + resultLength <= spellingRangeEndOffset) {
ASSERT(resultLength > 0 && resultLocation >= 0);
- RefPtr<Range> misspellingRange = TextIterator::subrange(spellingRange, resultLocation - spellingRangeStartOffset, resultLength);
+ RefPtr<Range> misspellingRange = spellingParagraph.subrange(resultLocation, resultLength);
misspellingRange->startContainer(ec)->document()->markers()->addMarker(misspellingRange.get(), DocumentMarker::Spelling);
- } else if (shouldMarkGrammar && result->type == TextCheckingTypeGrammar && resultLocation < grammarRangeEndOffset && resultLocation + resultLength > grammarRangeStartOffset) {
+ } else if (shouldMarkGrammar && result->type == TextCheckingTypeGrammar && grammarParagraph.checkingRangeCovers(resultLocation, resultLength)) {
ASSERT(resultLength > 0 && resultLocation >= 0);
for (unsigned j = 0; j < result->details.size(); j++) {
const GrammarDetail* detail = &result->details[j];
ASSERT(detail->length > 0 && detail->location >= 0);
- if (resultLocation + detail->location >= grammarRangeStartOffset && resultLocation + detail->location + detail->length <= grammarRangeEndOffset) {
- RefPtr<Range> badGrammarRange = TextIterator::subrange(grammarRange, resultLocation + detail->location - grammarRangeStartOffset, detail->length);
+ if (grammarParagraph.checkingRangeCovers(resultLocation + detail->location, detail->length)) {
+ RefPtr<Range> badGrammarRange = grammarParagraph.subrange(resultLocation + detail->location, detail->length);
grammarRange->startContainer(ec)->document()->markers()->addMarker(badGrammarRange.get(), DocumentMarker::Grammar, detail->userDescription);
}
}
- } else if ((shouldPerformReplacement || shouldShowCorrectionPanel) && resultLocation + resultLength <= spellingRangeEndOffset && resultLocation + resultLength >= spellingRangeStartOffset
+ } else if ((shouldPerformReplacement || shouldShowCorrectionPanel) && resultLocation + resultLength <= spellingRangeEndOffset && resultLocation + resultLength >= spellingParagraph.checkingStart()
&& (result->type == TextCheckingTypeLink
|| result->type == TextCheckingTypeQuote
|| result->type == TextCheckingTypeDash
@@ -2290,7 +2277,7 @@ void Editor::markAllMisspellingsAndBadGrammarInRanges(TextCheckingOptions textCh
int replacementLength = result->replacement.length();
bool doReplacement = (replacementLength > 0);
- RefPtr<Range> rangeToReplace = TextIterator::subrange(paragraphRange.get(), resultLocation, resultLength);
+ RefPtr<Range> rangeToReplace = paragraph.subrange(resultLocation, resultLength);
VisibleSelection selectionToReplace(rangeToReplace.get(), DOWNSTREAM);
// avoid correcting text after an ambiguous boundary character has been typed
@@ -2356,13 +2343,12 @@ void Editor::markAllMisspellingsAndBadGrammarInRanges(TextCheckingOptions textCh
#endif
if (doReplacement) {
replaceSelectionWithText(result->replacement, false, false);
- spellingRangeEndOffset += replacementLength - resultLength;
offsetDueToReplacement += replacementLength - resultLength;
if (resultLocation < selectionOffset)
selectionOffset += replacementLength - resultLength;
if (result->type == TextCheckingTypeCorrection) {
// Add a marker so that corrections can easily be undone and won't be re-corrected.
- RefPtr<Range> replacedRange = TextIterator::subrange(paragraphRange.get(), resultLocation, replacementLength);
+ RefPtr<Range> replacedRange = paragraph.subrange(resultLocation, replacementLength);
replacedRange->startContainer()->document()->markers()->addMarker(replacedRange.get(), DocumentMarker::Replacement, replacedString);
replacedRange->startContainer()->document()->markers()->addMarker(replacedRange.get(), DocumentMarker::CorrectionIndicator, replacedString);
}
@@ -2374,10 +2360,9 @@ void Editor::markAllMisspellingsAndBadGrammarInRanges(TextCheckingOptions textCh
if (selectionChanged) {
// Restore the caret position if we have made any replacements
- setEnd(paragraphRange.get(), endOfParagraph(startOfNextParagraph(paragraphRange->startPosition())));
- int newLength = TextIterator::rangeLength(paragraphRange.get());
- if (restoreSelectionAfterChange && selectionOffset >= 0 && selectionOffset <= newLength) {
- RefPtr<Range> selectionRange = TextIterator::subrange(paragraphRange.get(), 0, selectionOffset);
+ paragraph.expandRangeToNextEnd();
+ if (restoreSelectionAfterChange && selectionOffset >= 0 && selectionOffset <= paragraph.rangeLength()) {
+ RefPtr<Range> selectionRange = paragraph.subrange(0, selectionOffset);
m_frame->selection()->moveTo(selectionRange->endPosition(), DOWNSTREAM);
if (adjustSelectionForParagraphBoundaries)
m_frame->selection()->modify(SelectionController::AlterationMove, SelectionController::DirectionForward, CharacterGranularity);
@@ -2398,11 +2383,9 @@ void Editor::changeBackToReplacedString(const String& replacedString)
if (!shouldInsertText(replacedString, selection.get(), EditorInsertActionPasted))
return;
- String paragraphString;
- int selectionOffset;
- RefPtr<Range> paragraphRange = TextCheckingHelper(client(), selection).paragraphAlignedRange(selectionOffset, paragraphString);
+ TextCheckingParagraph paragraph(selection);
replaceSelectionWithText(replacedString, false, false);
- RefPtr<Range> changedRange = TextIterator::subrange(paragraphRange.get(), selectionOffset, replacedString.length());
+ RefPtr<Range> changedRange = paragraph.subrange(paragraph.checkingStart(), replacedString.length());
changedRange->startContainer()->document()->markers()->addMarker(changedRange.get(), DocumentMarker::Replacement, String());
}
diff --git a/WebCore/editing/MergeIdenticalElementsCommand.cpp b/WebCore/editing/MergeIdenticalElementsCommand.cpp
index a1cb79f..ff59f49 100644
--- a/WebCore/editing/MergeIdenticalElementsCommand.cpp
+++ b/WebCore/editing/MergeIdenticalElementsCommand.cpp
@@ -67,7 +67,7 @@ void MergeIdenticalElementsCommand::doUnapply()
RefPtr<Node> atChild = m_atChild.release();
- ContainerNode* parent = m_element2->parent();
+ ContainerNode* parent = m_element2->parentNode();
if (!parent || !parent->isContentEditable())
return;
diff --git a/WebCore/editing/SelectionController.cpp b/WebCore/editing/SelectionController.cpp
index bb42662..1164c45 100644
--- a/WebCore/editing/SelectionController.cpp
+++ b/WebCore/editing/SelectionController.cpp
@@ -970,8 +970,11 @@ IntRect SelectionController::absoluteBoundsForLocalRect(const IntRect& rect) con
RenderObject* caretPainter = caretRenderer();
if (!caretPainter)
return IntRect();
-
- return caretPainter->localToAbsoluteQuad(FloatRect(rect)).enclosingBoundingBox();
+
+ IntRect localRect(rect);
+ if (caretPainter->isBox())
+ toRenderBox(caretPainter)->flipForWritingMode(localRect);
+ return caretPainter->localToAbsoluteQuad(FloatRect(localRect)).enclosingBoundingBox();
}
IntRect SelectionController::absoluteCaretBounds()
@@ -1085,6 +1088,8 @@ void SelectionController::paintCaret(GraphicsContext* context, int tx, int ty, c
return;
IntRect drawingRect = localCaretRectForPainting();
+ if (caretRenderer() && caretRenderer()->isBox())
+ toRenderBox(caretRenderer())->flipForWritingMode(drawingRect);
drawingRect.move(tx, ty);
IntRect caret = intersection(drawingRect, clipRect);
if (caret.isEmpty())
diff --git a/WebCore/editing/TextCheckingHelper.cpp b/WebCore/editing/TextCheckingHelper.cpp
index 49674ff..d524cf3 100644
--- a/WebCore/editing/TextCheckingHelper.cpp
+++ b/WebCore/editing/TextCheckingHelper.cpp
@@ -34,6 +34,121 @@
namespace WebCore {
+static PassRefPtr<Range> expandToParagraphBoundary(PassRefPtr<Range> range)
+{
+ ExceptionCode ec = 0;
+ RefPtr<Range> paragraphRange = range->cloneRange(ec);
+ setStart(paragraphRange.get(), startOfParagraph(range->startPosition()));
+ setEnd(paragraphRange.get(), endOfParagraph(range->endPosition()));
+ return paragraphRange;
+}
+
+TextCheckingParagraph::TextCheckingParagraph(PassRefPtr<Range> checkingRange)
+ : m_checkingRange(checkingRange)
+ , m_checkingStart(-1)
+ , m_checkingEnd(-1)
+ , m_checkingLength(-1)
+{
+}
+
+TextCheckingParagraph::~TextCheckingParagraph()
+{
+}
+
+void TextCheckingParagraph::expandRangeToNextEnd()
+{
+ ASSERT(m_checkingRange);
+ setEnd(paragraphRange().get(), endOfParagraph(startOfNextParagraph(paragraphRange()->startPosition())));
+ invalidateParagraphRangeValues();
+}
+
+void TextCheckingParagraph::invalidateParagraphRangeValues()
+{
+ m_checkingStart = m_checkingEnd = -1;
+ m_offsetAsRange = 0;
+ m_text = String();
+}
+
+int TextCheckingParagraph::rangeLength() const
+{
+ ASSERT(m_checkingRange);
+ return TextIterator::rangeLength(paragraphRange().get());
+}
+
+PassRefPtr<Range> TextCheckingParagraph::paragraphRange() const
+{
+ ASSERT(m_checkingRange);
+ if (!m_paragraphRange)
+ m_paragraphRange = expandToParagraphBoundary(checkingRange());
+ return m_paragraphRange;
+}
+
+PassRefPtr<Range> TextCheckingParagraph::subrange(int characterOffset, int characterCount) const
+{
+ ASSERT(m_checkingRange);
+ return TextIterator::subrange(paragraphRange().get(), characterOffset, characterCount);
+}
+
+int TextCheckingParagraph::offsetTo(const Position& position, ExceptionCode& ec) const
+{
+ ASSERT(m_checkingRange);
+ RefPtr<Range> range = offsetAsRange();
+ range->setEnd(position.containerNode(), position.computeOffsetInContainerNode(), ec);
+ if (ec)
+ return 0;
+ return TextIterator::rangeLength(range.get());
+}
+
+bool TextCheckingParagraph::isEmpty() const
+{
+ // Both predicates should have same result, but we check both just for sure.
+ // We need to investigate to remove this redundancy.
+ return isRangeEmpty() || isTextEmpty();
+}
+
+PassRefPtr<Range> TextCheckingParagraph::offsetAsRange() const
+{
+ ASSERT(m_checkingRange);
+ if (!m_offsetAsRange) {
+ ExceptionCode ec = 0;
+ m_offsetAsRange = Range::create(paragraphRange()->startContainer(ec)->document(), paragraphRange()->startPosition(), checkingRange()->startPosition());
+ }
+
+ return m_offsetAsRange;
+}
+
+const String& TextCheckingParagraph::text() const
+{
+ ASSERT(m_checkingRange);
+ if (m_text.isEmpty())
+ m_text = plainText(paragraphRange().get());
+ return m_text;
+}
+
+int TextCheckingParagraph::checkingStart() const
+{
+ ASSERT(m_checkingRange);
+ if (m_checkingStart == -1)
+ m_checkingStart = TextIterator::rangeLength(offsetAsRange().get());
+ return m_checkingStart;
+}
+
+int TextCheckingParagraph::checkingEnd() const
+{
+ ASSERT(m_checkingRange);
+ if (m_checkingEnd == -1)
+ m_checkingEnd = checkingStart() + TextIterator::rangeLength(checkingRange().get());
+ return m_checkingEnd;
+}
+
+int TextCheckingParagraph::checkingLength() const
+{
+ ASSERT(m_checkingRange);
+ if (-1 == m_checkingLength)
+ m_checkingLength = TextIterator::rangeLength(checkingRange().get());
+ return m_checkingLength;
+}
+
TextCheckingHelper::TextCheckingHelper(EditorClient* client, PassRefPtr<Range> range)
: m_client(client)
, m_range(range)
@@ -46,33 +161,6 @@ TextCheckingHelper::~TextCheckingHelper()
{
}
-PassRefPtr<Range> TextCheckingHelper::paragraphAlignedRange(int& offsetIntoParagraphAlignedRange, String& paragraphString) const
-{
-#ifndef BUILDING_ON_TIGER
- ExceptionCode ec = 0;
-
- // Expand range to paragraph boundaries
- RefPtr<Range> paragraphRange = m_range->cloneRange(ec);
- setStart(paragraphRange.get(), startOfParagraph(m_range->startPosition()));
- setEnd(paragraphRange.get(), endOfParagraph(m_range->endPosition()));
-
- // Compute offset from start of expanded range to start of original range
- RefPtr<Range> offsetAsRange = Range::create(paragraphRange->startContainer(ec)->document(), paragraphRange->startPosition(), m_range->startPosition());
- offsetIntoParagraphAlignedRange = TextIterator::rangeLength(offsetAsRange.get());
-
- // Fill in out parameter with string representing entire paragraph range.
- // Someday we might have a caller that doesn't use this, but for now all callers do.
- paragraphString = plainText(paragraphRange.get());
-
- return paragraphRange;
-#else
- ASSERT_NOT_REACHED();
- UNUSED_PARAM(offsetIntoParagraphAlignedRange);
- UNUSED_PARAM(paragraphString);
- return PassRefPtr<Range>(0);
-#endif
-}
-
String TextCheckingHelper::findFirstMisspelling(int& firstMisspellingOffset, bool markAll, RefPtr<Range>& firstMisspellingRange)
{
WordAwareIterator it(m_range.get());
@@ -325,21 +413,15 @@ String TextCheckingHelper::findFirstBadGrammar(GrammarDetail& outGrammarDetail,
// Expand the search range to encompass entire paragraphs, since grammar checking needs that much context.
// Determine the character offset from the start of the paragraph to the start of the original search range,
// since we will want to ignore results in this area.
- int searchRangeStartOffset;
- String paragraphString;
- RefPtr<Range> paragraphRange = paragraphAlignedRange(searchRangeStartOffset, paragraphString);
-
- // Determine the character offset from the start of the paragraph to the end of the original search range,
- // since we will want to ignore results in this area also.
- int searchRangeEndOffset = searchRangeStartOffset + TextIterator::rangeLength(m_range.get());
-
+ TextCheckingParagraph paragraph(m_range);
+
// Start checking from beginning of paragraph, but skip past results that occur before the start of the original search range.
int startOffset = 0;
- while (startOffset < searchRangeEndOffset) {
+ while (startOffset < paragraph.checkingEnd()) {
Vector<GrammarDetail> grammarDetails;
int badGrammarPhraseLocation = -1;
int badGrammarPhraseLength = 0;
- m_client->checkGrammarOfString(paragraphString.characters() + startOffset, paragraphString.length() - startOffset, grammarDetails, &badGrammarPhraseLocation, &badGrammarPhraseLength);
+ m_client->checkGrammarOfString(paragraph.textCharacters() + startOffset, paragraph.textLength() - startOffset, grammarDetails, &badGrammarPhraseLocation, &badGrammarPhraseLength);
if (!badGrammarPhraseLength) {
ASSERT(badGrammarPhraseLocation == -1);
@@ -351,7 +433,7 @@ String TextCheckingHelper::findFirstBadGrammar(GrammarDetail& outGrammarDetail,
// Found some bad grammar. Find the earliest detail range that starts in our search range (if any).
- int badGrammarIndex = findFirstGrammarDetail(grammarDetails, badGrammarPhraseLocation, badGrammarPhraseLength, searchRangeStartOffset, searchRangeEndOffset, markAll);
+ int badGrammarIndex = findFirstGrammarDetail(grammarDetails, badGrammarPhraseLocation, badGrammarPhraseLength, paragraph.checkingStart(), paragraph.checkingEnd(), markAll);
if (badGrammarIndex >= 0) {
ASSERT(static_cast<unsigned>(badGrammarIndex) < grammarDetails.size());
outGrammarDetail = grammarDetails[badGrammarIndex];
@@ -360,8 +442,8 @@ String TextCheckingHelper::findFirstBadGrammar(GrammarDetail& outGrammarDetail,
// If we found a detail in range, then we have found the first bad phrase (unless we found one earlier but
// kept going so we could mark all instances).
if (badGrammarIndex >= 0 && firstBadGrammarPhrase.isEmpty()) {
- outGrammarPhraseOffset = badGrammarPhraseLocation - searchRangeStartOffset;
- firstBadGrammarPhrase = paragraphString.substring(badGrammarPhraseLocation, badGrammarPhraseLength);
+ outGrammarPhraseOffset = badGrammarPhraseLocation - paragraph.checkingStart();
+ firstBadGrammarPhrase = paragraph.textSubstring(badGrammarPhraseLocation, badGrammarPhraseLength);
// Found one. We're done now, unless we're marking each instance.
if (!markAll)
@@ -446,21 +528,18 @@ Vector<String> TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange(bool
return guesses;
// Expand the range to encompass entire paragraphs, since text checking needs that much context.
- int rangeStartOffset;
- String paragraphString;
- RefPtr<Range> paragraphRange = paragraphAlignedRange(rangeStartOffset, paragraphString);
- int rangeLength = TextIterator::rangeLength(m_range.get());
- if (!rangeLength || !paragraphString.length())
+ TextCheckingParagraph paragraph(m_range);
+ if (paragraph.isEmpty())
return guesses;
Vector<TextCheckingResult> results;
uint64_t checkingTypes = checkGrammar ? (TextCheckingTypeSpelling | TextCheckingTypeGrammar) : TextCheckingTypeSpelling;
- m_client->checkTextOfParagraph(paragraphString.characters(), paragraphString.length(), checkingTypes, results);
+ m_client->checkTextOfParagraph(paragraph.textCharacters(), paragraph.textLength(), checkingTypes, results);
for (unsigned i = 0; i < results.size(); i++) {
const TextCheckingResult* result = &results[i];
- if (result->type == TextCheckingTypeSpelling && result->location == rangeStartOffset && result->length == rangeLength) {
- String misspelledWord = paragraphString.substring(rangeStartOffset, rangeLength);
+ if (result->type == TextCheckingTypeSpelling && paragraph.checkingRangeMatches(result->location, result->length)) {
+ String misspelledWord = paragraph.checkingSubstring();
ASSERT(misspelledWord.length());
m_client->getGuessesForWord(misspelledWord, guesses);
m_client->updateSpellingUIWithMisspelledWord(misspelledWord);
@@ -474,12 +553,12 @@ Vector<String> TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange(bool
for (unsigned i = 0; i < results.size(); i++) {
const TextCheckingResult* result = &results[i];
- if (result->type == TextCheckingTypeGrammar && result->location <= rangeStartOffset && result->location + result->length >= rangeStartOffset + rangeLength) {
+ if (result->type == TextCheckingTypeGrammar && paragraph.isCheckingRangeCoveredBy(result->location, result->length)) {
for (unsigned j = 0; j < result->details.size(); j++) {
const GrammarDetail* detail = &result->details[j];
ASSERT(detail->length > 0 && detail->location >= 0);
- if (result->location + detail->location == rangeStartOffset && detail->length == rangeLength) {
- String badGrammarPhrase = paragraphString.substring(result->location, result->length);
+ if (paragraph.checkingRangeMatches(result->location + detail->location, detail->length)) {
+ String badGrammarPhrase = paragraph.textSubstring(result->location, result->length);
ASSERT(badGrammarPhrase.length());
for (unsigned k = 0; k < detail->guesses.size(); k++)
guesses.append(detail->guesses[k]);
diff --git a/WebCore/editing/TextCheckingHelper.h b/WebCore/editing/TextCheckingHelper.h
index 1dd3b3d..4dced05 100644
--- a/WebCore/editing/TextCheckingHelper.h
+++ b/WebCore/editing/TextCheckingHelper.h
@@ -26,6 +26,51 @@
namespace WebCore {
class Range;
+class Position;
+
+class TextCheckingParagraph {
+public:
+ explicit TextCheckingParagraph(PassRefPtr<Range> checkingRange);
+ ~TextCheckingParagraph();
+
+ int rangeLength() const;
+ PassRefPtr<Range> subrange(int characterOffset, int characterCount) const;
+ int offsetTo(const Position&, ExceptionCode&) const;
+ void expandRangeToNextEnd();
+
+ int textLength() const { return text().length(); }
+ String textSubstring(unsigned pos, unsigned len = UINT_MAX) const { return text().substring(pos, len); }
+ const UChar* textCharacters() const { return text().characters(); }
+ UChar textCharAt(int index) const { return text()[index]; }
+
+ bool isEmpty() const;
+ bool isTextEmpty() const { return text().isEmpty(); }
+ bool isRangeEmpty() const { return checkingStart() >= checkingEnd(); }
+
+ int checkingStart() const;
+ int checkingEnd() const;
+ int checkingLength() const;
+ String checkingSubstring() const { return textSubstring(checkingStart(), checkingLength()); }
+
+ bool checkingRangeMatches(int location, int length) const { return location == checkingStart() && length == checkingLength(); }
+ bool isCheckingRangeCoveredBy(int location, int length) const { return location <= checkingStart() && location + length >= checkingStart() + checkingLength(); }
+ bool checkingRangeCovers(int location, int length) const { return location < checkingEnd() && location + length > checkingStart(); }
+
+private:
+ void invalidateParagraphRangeValues();
+ PassRefPtr<Range> checkingRange() const { return m_checkingRange; }
+ PassRefPtr<Range> paragraphRange() const;
+ PassRefPtr<Range> offsetAsRange() const;
+ const String& text() const;
+
+ RefPtr<Range> m_checkingRange;
+ mutable RefPtr<Range> m_paragraphRange;
+ mutable RefPtr<Range> m_offsetAsRange;
+ mutable String m_text;
+ mutable int m_checkingStart;
+ mutable int m_checkingEnd;
+ mutable int m_checkingLength;
+};
class TextCheckingHelper : public Noncopyable {
public:
@@ -41,7 +86,6 @@ public:
bool isUngrammatical(Vector<String>& guessesVector) const;
Vector<String> guessesForMisspelledOrUngrammaticalRange(bool checkGrammar, bool& misspelled, bool& ungrammatical) const;
- PassRefPtr<Range> paragraphAlignedRange(int& offsetIntoParagraphAlignedRange, String& paragraphString) const;
private:
EditorClient* m_client;
RefPtr<Range> m_range;
diff --git a/WebCore/editing/htmlediting.cpp b/WebCore/editing/htmlediting.cpp
index f8f02b9..d08ac2e 100644
--- a/WebCore/editing/htmlediting.cpp
+++ b/WebCore/editing/htmlediting.cpp
@@ -843,7 +843,7 @@ bool isEmptyTableCell(const Node* node)
// Find rendered node
while (node && !node->renderer())
- node = node->parent();
+ node = node->parentNode();
if (!node)
return false;
diff --git a/WebCore/editing/markup.cpp b/WebCore/editing/markup.cpp
index 417de71..4cbdcce 100644
--- a/WebCore/editing/markup.cpp
+++ b/WebCore/editing/markup.cpp
@@ -374,7 +374,7 @@ Node* StyledMarkupAccumulator::serializeNodes(Node* startNode, Node* pastEnd)
ContainerNode* nextParent = next ? next->parentNode() : 0;
if (next != pastEnd && n != nextParent) {
Node* lastAncestorClosedOrSelf = n->isDescendantOf(lastClosed) ? lastClosed : n;
- for (ContainerNode* parent = lastAncestorClosedOrSelf->parent(); parent && parent != nextParent; parent = parent->parentNode()) {
+ for (ContainerNode* parent = lastAncestorClosedOrSelf->parentNode(); parent && parent != nextParent; parent = parent->parentNode()) {
// All ancestors that aren't in the ancestorsToClose list should either be a) unrendered:
if (!parent->renderer())
continue;
diff --git a/WebCore/editing/visible_units.cpp b/WebCore/editing/visible_units.cpp
index 8b11013..7d46374 100644
--- a/WebCore/editing/visible_units.cpp
+++ b/WebCore/editing/visible_units.cpp
@@ -607,10 +607,10 @@ VisiblePosition previousLinePosition(const VisiblePosition &visiblePosition, int
FloatPoint absPos = containingBlock->localToAbsolute(FloatPoint());
if (containingBlock->hasOverflowClip())
absPos -= containingBlock->layer()->scrolledContentOffset();
- RenderObject* renderer = root->closestLeafChildForXPos(x - absPos.x(), isEditablePosition(p))->renderer();
+ RenderObject* renderer = root->closestLeafChildForLogicalLeftPosition(x - absPos.x(), isEditablePosition(p))->renderer();
Node* node = renderer->node();
if (node && editingIgnoresContent(node))
- return Position(node->parent(), node->nodeIndex());
+ return Position(node->parentNode(), node->nodeIndex());
return renderer->positionForPoint(IntPoint(x - absPos.x(), root->lineTop()));
}
@@ -712,10 +712,10 @@ VisiblePosition nextLinePosition(const VisiblePosition &visiblePosition, int x)
FloatPoint absPos = containingBlock->localToAbsolute(FloatPoint());
if (containingBlock->hasOverflowClip())
absPos -= containingBlock->layer()->scrolledContentOffset();
- RenderObject* renderer = root->closestLeafChildForXPos(x - absPos.x(), isEditablePosition(p))->renderer();
+ RenderObject* renderer = root->closestLeafChildForLogicalLeftPosition(x - absPos.x(), isEditablePosition(p))->renderer();
Node* node = renderer->node();
if (node && editingIgnoresContent(node))
- return Position(node->parent(), node->nodeIndex());
+ return Position(node->parentNode(), node->nodeIndex());
return renderer->positionForPoint(IntPoint(x - absPos.x(), root->lineTop()));
}
diff --git a/WebCore/features.pri b/WebCore/features.pri
index 0a39b16..2076c04 100644
--- a/WebCore/features.pri
+++ b/WebCore/features.pri
@@ -8,6 +8,10 @@ CONFIG(production) {
DEFINES += ENABLE_XSLT=0
}
+meegotouch {
+ DEFINES += WTF_USE_MEEGOTOUCH=1
+}
+
## load mobilityconfig if mobility is available
load(mobilityconfig, true)
@@ -60,7 +64,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_RUBY=.): DEFINES += ENABLE_RUBY=1
!contains(DEFINES, ENABLE_METER_TAG=.): DEFINES += ENABLE_METER_TAG=1
!contains(DEFINES, ENABLE_PROGRESS_TAG=.): DEFINES += ENABLE_PROGRESS_TAG=1
!contains(DEFINES, ENABLE_BLOB=.): DEFINES += ENABLE_BLOB=0
diff --git a/WebCore/fileapi/FileWriterSync.cpp b/WebCore/fileapi/FileWriterSync.cpp
new file mode 100644
index 0000000..5fa5137
--- /dev/null
+++ b/WebCore/fileapi/FileWriterSync.cpp
@@ -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:
+ *
+ * * 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"
+
+#if ENABLE(FILE_SYSTEM)
+
+#include "FileWriterSync.h"
+
+namespace WebCore {
+
+void FileWriterSync::write(Blob*, ExceptionCode&)
+{
+ ASSERT_NOT_REACHED(); // FIXME: Not implemented yet.
+}
+
+void FileWriterSync::seek(long long, ExceptionCode&)
+{
+ ASSERT_NOT_REACHED(); // FIXME: Not implemented yet.
+}
+
+void FileWriterSync::truncate(long long, ExceptionCode&)
+{
+ ASSERT_NOT_REACHED(); // FIXME: Not implemented yet.
+}
+
+bool FileWriterSync::canSuspend() const
+{
+ // FIXME: It is not currently possible to suspend a FileWriterSync, so pages with FileWriter can not go into page cache.
+ return false;
+}
+
+bool FileWriterSync::hasPendingActivity() const
+{
+ return ActiveDOMObject::hasPendingActivity();
+}
+
+void FileWriterSync::stop()
+{
+}
+
+
+FileWriterSync::FileWriterSync(ScriptExecutionContext* context)
+ : ActiveDOMObject(context, this)
+ , m_position(0)
+ , m_length(0)
+{
+}
+
+
+FileWriterSync::~FileWriterSync()
+{
+}
+
+
+} // namespace WebCore
+
+#endif // ENABLE(FILE_SYSTEM)
diff --git a/WebCore/fileapi/FileWriterSync.h b/WebCore/fileapi/FileWriterSync.h
new file mode 100644
index 0000000..0051870
--- /dev/null
+++ b/WebCore/fileapi/FileWriterSync.h
@@ -0,0 +1,83 @@
+/*
+ * 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 FileWriterSync_h
+#define FileWriterSync_h
+
+#if ENABLE(FILE_SYSTEM)
+
+#include "ActiveDOMObject.h"
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefCounted.h>
+
+namespace WebCore {
+
+class Blob;
+
+typedef int ExceptionCode;
+
+// FIXME: This is an empty shell waiting for implementation.
+class FileWriterSync : public RefCounted<FileWriterSync>, public ActiveDOMObject {
+public:
+ static PassRefPtr<FileWriterSync> create(ScriptExecutionContext* context)
+ {
+ return adoptRef(new FileWriterSync(context));
+ }
+ virtual ~FileWriterSync();
+
+ void write(Blob* data, ExceptionCode&);
+ void seek(long long position, ExceptionCode&);
+ void truncate(long long length, ExceptionCode&);
+
+ long long position() const { return m_position; }
+ long long length() const { return m_length; }
+
+ // ActiveDOMObject
+ virtual bool canSuspend() const;
+ virtual bool hasPendingActivity() const;
+ virtual void stop();
+
+ using RefCounted<FileWriterSync>::ref;
+ using RefCounted<FileWriterSync>::deref;
+
+private:
+ FileWriterSync(ScriptExecutionContext*);
+
+ friend class RefCounted<FileWriterSync>;
+
+ long long m_position;
+ long long m_length;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(FILE_SYSTEM)
+
+#endif // FileWriter_h
diff --git a/WebCore/fileapi/FileWriterSync.idl b/WebCore/fileapi/FileWriterSync.idl
new file mode 100644
index 0000000..214c509
--- /dev/null
+++ b/WebCore/fileapi/FileWriterSync.idl
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ */
+
+module html {
+ interface [
+ Conditional=FILE_SYSTEM,
+ CallWith=ScriptExecutionContext
+ ] FileWriterSync {
+ // synchronous write/modify methods
+ void write(in Blob data) raises (FileException);
+ void seek(in long long position) raises (FileException);
+ void truncate(in long long size) raises (FileException);
+
+ readonly attribute long long position;
+ readonly attribute long long length;
+ };
+}
diff --git a/WebCore/html/BaseDateAndTimeInputType.cpp b/WebCore/html/BaseDateAndTimeInputType.cpp
index e1126d4..e780ed6 100644
--- a/WebCore/html/BaseDateAndTimeInputType.cpp
+++ b/WebCore/html/BaseDateAndTimeInputType.cpp
@@ -108,6 +108,11 @@ double BaseDateAndTimeInputType::stepBase() const
return parseToDouble(element()->fastGetAttribute(minAttr), defaultStepBase());
}
+bool BaseDateAndTimeInputType::handleKeydownEvent(KeyboardEvent* event)
+{
+ return handleKeydownEventForSpinButton(event) || TextFieldInputType::handleKeydownEvent(event);
+}
+
double BaseDateAndTimeInputType::parseToDouble(const String& src, double defaultValue) const
{
DateComponents date;
diff --git a/WebCore/html/BaseDateAndTimeInputType.h b/WebCore/html/BaseDateAndTimeInputType.h
index 83c1e93..11c60af 100644
--- a/WebCore/html/BaseDateAndTimeInputType.h
+++ b/WebCore/html/BaseDateAndTimeInputType.h
@@ -57,6 +57,7 @@ private:
virtual bool rangeOverflow(const String&) const;
virtual bool stepMismatch(const String&, double) const;
virtual double stepBase() const;
+ virtual bool handleKeydownEvent(KeyboardEvent*);
virtual String serialize(double) const;
};
diff --git a/WebCore/html/EmailInputType.cpp b/WebCore/html/EmailInputType.cpp
index 78bda9c..e61129e 100644
--- a/WebCore/html/EmailInputType.cpp
+++ b/WebCore/html/EmailInputType.cpp
@@ -25,6 +25,7 @@
#include "EmailInputType.h"
#include "HTMLInputElement.h"
+#include "LocalizedStrings.h"
#include "RegularExpression.h"
#include <wtf/PassOwnPtr.h>
@@ -79,4 +80,9 @@ bool EmailInputType::typeMismatch() const
return typeMismatchFor(element()->value());
}
+String EmailInputType::typeMismatchText() const
+{
+ return element()->multiple() ? validationMessageTypeMismatchForMultipleEmailText() : validationMessageTypeMismatchForEmailText();
+}
+
} // namespace WebCore
diff --git a/WebCore/html/EmailInputType.h b/WebCore/html/EmailInputType.h
index b77a9ad..771715a 100644
--- a/WebCore/html/EmailInputType.h
+++ b/WebCore/html/EmailInputType.h
@@ -44,6 +44,7 @@ private:
virtual const AtomicString& formControlType() const;
virtual bool typeMismatchFor(const String&) const;
virtual bool typeMismatch() const;
+ virtual String typeMismatchText() const;
};
} // namespace WebCore
diff --git a/WebCore/html/FileInputType.cpp b/WebCore/html/FileInputType.cpp
index d98d3b6..e9d0b5e 100644
--- a/WebCore/html/FileInputType.cpp
+++ b/WebCore/html/FileInputType.cpp
@@ -22,6 +22,7 @@
#include "config.h"
#include "FileInputType.h"
+#include "Event.h"
#include "File.h"
#include "FileList.h"
#include "FormDataList.h"
@@ -76,6 +77,15 @@ bool FileInputType::valueMissing(const String& value) const
return value.isEmpty();
}
+bool FileInputType::handleDOMActivateEvent(Event* event)
+{
+ if (element()->disabled() || !element()->renderer())
+ return false;
+ toRenderFileUploadControl(element()->renderer())->click();
+ event->setDefaultHandled();
+ return true;
+}
+
RenderObject* FileInputType::createRenderer(RenderArena* arena, RenderStyle*) const
{
return new (arena) RenderFileUploadControl(element());
diff --git a/WebCore/html/FileInputType.h b/WebCore/html/FileInputType.h
index 24430fb..142afaf 100644
--- a/WebCore/html/FileInputType.h
+++ b/WebCore/html/FileInputType.h
@@ -44,6 +44,7 @@ private:
virtual const AtomicString& formControlType() const;
virtual bool appendFormData(FormDataList&, bool) const;
virtual bool valueMissing(const String&) const;
+ virtual bool handleDOMActivateEvent(Event*);
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*) const;
};
diff --git a/WebCore/html/HTMLAreaElement.cpp b/WebCore/html/HTMLAreaElement.cpp
index 0155bce..cebfda2 100644
--- a/WebCore/html/HTMLAreaElement.cpp
+++ b/WebCore/html/HTMLAreaElement.cpp
@@ -165,7 +165,7 @@ Path HTMLAreaElement::getRegion(const IntSize& size) const
HTMLImageElement* HTMLAreaElement::imageElement() const
{
- Node* mapElement = parent();
+ Node* mapElement = parentNode();
if (!mapElement->hasTagName(mapTag))
return 0;
diff --git a/WebCore/html/HTMLAttributeNames.in b/WebCore/html/HTMLAttributeNames.in
index d9759fc..c6792f8 100644
--- a/WebCore/html/HTMLAttributeNames.in
+++ b/WebCore/html/HTMLAttributeNames.in
@@ -94,7 +94,12 @@ expanded
face
focused
for
+form
+formaction
+formenctype
+formmethod
formnovalidate
+formtarget
frame
frameborder
headers
diff --git a/WebCore/html/HTMLButtonElement.cpp b/WebCore/html/HTMLButtonElement.cpp
index b4c8ec0..92fdde5 100644
--- a/WebCore/html/HTMLButtonElement.cpp
+++ b/WebCore/html/HTMLButtonElement.cpp
@@ -170,6 +170,11 @@ void HTMLButtonElement::accessKeyAction(bool sendToAnyElement)
dispatchSimulatedClick(0, sendToAnyElement);
}
+bool HTMLButtonElement::isURLAttribute(Attribute* attr) const
+{
+ return attr->name() == formactionAttr;
+}
+
String HTMLButtonElement::value() const
{
return getAttribute(valueAttr);
diff --git a/WebCore/html/HTMLButtonElement.h b/WebCore/html/HTMLButtonElement.h
index 888c0a8..97a0204 100644
--- a/WebCore/html/HTMLButtonElement.h
+++ b/WebCore/html/HTMLButtonElement.h
@@ -54,6 +54,7 @@ private:
virtual void setActivatedSubmit(bool flag);
virtual void accessKeyAction(bool sendToAnyElement);
+ virtual bool isURLAttribute(Attribute*) const;
virtual bool canStartSelection() const { return false; }
diff --git a/WebCore/html/HTMLButtonElement.idl b/WebCore/html/HTMLButtonElement.idl
index 279e858..2fbba41 100644
--- a/WebCore/html/HTMLButtonElement.idl
+++ b/WebCore/html/HTMLButtonElement.idl
@@ -23,7 +23,11 @@ module html {
interface HTMLButtonElement : HTMLElement {
readonly attribute HTMLFormElement form;
+ attribute [Reflect, URL] DOMString formAction;
+ attribute [Reflect] DOMString formEnctype;
+ attribute [Reflect] DOMString formMethod;
attribute [Reflect] boolean formNoValidate;
+ attribute [Reflect] DOMString formTarget;
readonly attribute ValidityState validity;
attribute [Reflect] DOMString accessKey;
diff --git a/WebCore/html/HTMLElement.cpp b/WebCore/html/HTMLElement.cpp
index bc4bf07..4dcf998 100644
--- a/WebCore/html/HTMLElement.cpp
+++ b/WebCore/html/HTMLElement.cpp
@@ -359,7 +359,7 @@ void HTMLElement::setInnerHTML(const String& html, ExceptionCode& ec)
void HTMLElement::setOuterHTML(const String& html, ExceptionCode& ec)
{
- Node* p = parent();
+ Node* p = parentNode();
if (!p || !p->isHTMLElement()) {
ec = NO_MODIFICATION_ALLOWED_ERR;
return;
@@ -507,7 +507,7 @@ Node* HTMLElement::insertAdjacent(const String& where, Node* newChild, Exception
// Opera also appears to disallow such usage.
if (equalIgnoringCase(where, "beforeBegin")) {
- ContainerNode* parent = this->parent();
+ ContainerNode* parent = this->parentNode();
return (parent && parent->insertBefore(newChild, this, ec)) ? newChild : 0;
}
@@ -518,7 +518,7 @@ Node* HTMLElement::insertAdjacent(const String& where, Node* newChild, Exception
return appendChild(newChild, ec) ? newChild : 0;
if (equalIgnoringCase(where, "afterEnd")) {
- ContainerNode* parent = this->parent();
+ ContainerNode* parent = this->parentNode();
return (parent && parent->insertBefore(newChild, nextSibling(), ec)) ? newChild : 0;
}
@@ -625,7 +625,7 @@ void HTMLElement::addHTMLAlignmentToStyledElement(StyledElement* element, Attrib
bool HTMLElement::supportsFocus() const
{
- return Element::supportsFocus() || (isContentEditable() && parent() && !parent()->isContentEditable());
+ return Element::supportsFocus() || (isContentEditable() && parentNode() && !parentNode()->isContentEditable());
}
bool HTMLElement::isContentEditable() const
diff --git a/WebCore/html/HTMLEmbedElement.cpp b/WebCore/html/HTMLEmbedElement.cpp
index c4f007c..df97280 100644
--- a/WebCore/html/HTMLEmbedElement.cpp
+++ b/WebCore/html/HTMLEmbedElement.cpp
@@ -220,9 +220,9 @@ void HTMLEmbedElement::insertedIntoDocument()
String width = getAttribute(widthAttr);
String height = getAttribute(heightAttr);
if (!width.isEmpty() || !height.isEmpty()) {
- Node* n = parent();
+ Node* n = parentNode();
while (n && !n->hasTagName(objectTag))
- n = n->parent();
+ n = n->parentNode();
if (n) {
if (!width.isEmpty())
static_cast<HTMLObjectElement*>(n)->setAttribute(widthAttr, width);
@@ -247,9 +247,9 @@ void HTMLEmbedElement::attributeChanged(Attribute* attr, bool preserveDecls)
HTMLPlugInImageElement::attributeChanged(attr, preserveDecls);
if ((attr->name() == widthAttr || attr->name() == heightAttr) && !attr->isEmpty()) {
- Node* n = parent();
+ ContainerNode* n = parentNode();
while (n && !n->hasTagName(objectTag))
- n = n->parent();
+ n = n->parentNode();
if (n)
static_cast<HTMLObjectElement*>(n)->setAttribute(attr->name(), attr->value());
}
diff --git a/WebCore/html/HTMLFormControlElement.cpp b/WebCore/html/HTMLFormControlElement.cpp
index 8fa000f..2f5d414 100644
--- a/WebCore/html/HTMLFormControlElement.cpp
+++ b/WebCore/html/HTMLFormControlElement.cpp
@@ -154,6 +154,16 @@ void HTMLFormControlElement::attach()
void HTMLFormControlElement::insertedIntoTree(bool deep)
{
+ if (fastHasAttribute(formAttr)) {
+ document()->registerFormElementWithFormAttribute(this);
+ Element* element = document()->getElementById(fastGetAttribute(formAttr));
+ if (element && element->hasTagName(formTag)) {
+ if (m_form)
+ m_form->removeFormElement(this);
+ m_form = static_cast<HTMLFormElement*>(element);
+ m_form->registerFormElement(this);
+ }
+ }
if (!m_form) {
// This handles the case of a new form element being created by
// JavaScript and inserted inside a form. In the case of the parser
@@ -179,6 +189,9 @@ static inline Node* findRoot(Node* n)
void HTMLFormControlElement::removedFromTree(bool deep)
{
+ if (fastHasAttribute(formAttr))
+ document()->unregisterFormElementWithFormAttribute(this);
+
// If the form and element are both in the same tree, preserve the connection to the form.
// Otherwise, null out our form and remove ourselves from the form's list of elements.
if (m_form && findRoot(this) != findRoot(m_form)) {
@@ -431,6 +444,50 @@ void HTMLFormControlElement::removeFromForm()
m_form = 0;
}
+void HTMLFormControlElement::resetFormOwner(HTMLFormElement* form)
+{
+ if (m_form) {
+ if (!fastHasAttribute(formAttr))
+ return;
+ m_form->removeFormElement(this);
+ }
+ m_form = 0;
+ if (fastHasAttribute(formAttr)) {
+ // The HTML5 spec says that the element should be associated with
+ // the first element in the document to have an ID that equal to
+ // the value of form attribute, so we put the result of
+ // document()->getElementById() over the given element.
+ Element* firstElement = document()->getElementById(fastGetAttribute(formAttr));
+ if (firstElement && firstElement->hasTagName(formTag))
+ m_form = static_cast<HTMLFormElement*>(firstElement);
+ else
+ m_form = form;
+ } else
+ m_form = findFormAncestor();
+ if (m_form)
+ m_form->registerFormElement(this);
+ else
+ document()->checkedRadioButtons().addButton(this);
+}
+
+void HTMLFormControlElement::attributeChanged(Attribute* attr, bool preserveDecls)
+{
+ if (attr->name() == formAttr) {
+ if (!fastHasAttribute(formAttr)) {
+ // The form attribute removed. We need to reset form owner here.
+ if (m_form)
+ m_form->removeFormElement(this);
+ m_form = findFormAncestor();
+ if (m_form)
+ m_form->registerFormElement(this);
+ else
+ document()->checkedRadioButtons().addButton(this);
+ } else
+ resetFormOwner(0);
+ }
+ HTMLElement::attributeChanged(attr, preserveDecls);
+}
+
bool HTMLFormControlElement::isLabelable() const
{
// FIXME: Add meterTag and outputTag to the list once we support them.
diff --git a/WebCore/html/HTMLFormControlElement.h b/WebCore/html/HTMLFormControlElement.h
index 1960fc3..568f63e 100644
--- a/WebCore/html/HTMLFormControlElement.h
+++ b/WebCore/html/HTMLFormControlElement.h
@@ -99,6 +99,9 @@ public:
bool readOnly() const { return m_readOnly; }
+ void resetFormOwner(HTMLFormElement*);
+ virtual void attributeChanged(Attribute*, bool preserveDecls = false);
+
protected:
HTMLFormControlElement(const QualifiedName& tagName, Document*, HTMLFormElement*);
@@ -196,6 +199,9 @@ public:
void setSelectionRange(int start, int end);
PassRefPtr<Range> selection() const;
+ virtual int maxLength() const = 0;
+ virtual String value() const = 0;
+
protected:
HTMLTextFormControlElement(const QualifiedName&, Document*, HTMLFormElement*);
diff --git a/WebCore/html/HTMLFormElement.cpp b/WebCore/html/HTMLFormElement.cpp
index da388d5..1aeb360 100644
--- a/WebCore/html/HTMLFormElement.cpp
+++ b/WebCore/html/HTMLFormElement.cpp
@@ -65,6 +65,8 @@ using namespace HTMLNames;
HTMLFormElement::HTMLFormElement(const QualifiedName& tagName, Document* document)
: HTMLElement(tagName, document)
+ , m_associatedElementsBeforeIndex(0)
+ , m_associatedElementsAfterIndex(0)
, m_wasUserSubmitted(false)
, m_autocomplete(true)
, m_insubmit(false)
@@ -133,6 +135,9 @@ void HTMLFormElement::insertedIntoDocument()
static_cast<HTMLDocument*>(document())->addNamedItem(m_name);
HTMLElement::insertedIntoDocument();
+
+ if (hasID())
+ document()->resetFormElementsOwner(this);
}
void HTMLFormElement::removedFromDocument()
@@ -141,6 +146,9 @@ void HTMLFormElement::removedFromDocument()
static_cast<HTMLDocument*>(document())->removeNamedItem(m_name);
HTMLElement::removedFromDocument();
+
+ if (hasID())
+ document()->resetFormElementsOwner(0);
}
void HTMLFormElement::handleLocalEvents(Event* event)
@@ -388,24 +396,64 @@ template<class T, size_t n> static void removeFromVector(Vector<T*, n> & vec, T*
}
}
+unsigned HTMLFormElement::formElementIndexWithFormAttribute(HTMLFormControlElement* element)
+{
+ // Compares the position of the form element and the inserted element.
+ // Updates the indeces in order to the relation of the position:
+ unsigned short position = compareDocumentPosition(element);
+ if (position & DOCUMENT_POSITION_CONTAINS)
+ ++m_associatedElementsAfterIndex;
+ else if (position & DOCUMENT_POSITION_PRECEDING) {
+ ++m_associatedElementsBeforeIndex;
+ ++m_associatedElementsAfterIndex;
+ }
+
+ if (m_associatedElements.isEmpty())
+ return 0;
+
+ // Does binary search on m_associatedElements in order to find the index
+ // to be inserted.
+ unsigned left = 0, right = m_associatedElements.size() - 1;
+ while (left != right) {
+ unsigned middle = left + ((right - left) / 2);
+ position = element->compareDocumentPosition(m_associatedElements[middle]);
+ if (position & DOCUMENT_POSITION_FOLLOWING)
+ right = middle;
+ else
+ left = middle + 1;
+ }
+
+ position = element->compareDocumentPosition(m_associatedElements[left]);
+ if (position & DOCUMENT_POSITION_FOLLOWING)
+ return left;
+ return left + 1;
+}
+
unsigned HTMLFormElement::formElementIndex(HTMLFormControlElement* e)
{
+ // Treats separately the case where this element has the form attribute
+ // for performance consideration.
+ if (e->fastHasAttribute(formAttr))
+ return formElementIndexWithFormAttribute(e);
+
// Check for the special case where this element is the very last thing in
// the form's tree of children; we don't want to walk the entire tree in that
// common case that occurs during parsing; instead we'll just return a value
// that says "add this form element to the end of the array".
if (e->traverseNextNode(this)) {
- unsigned i = 0;
+ unsigned i = m_associatedElementsBeforeIndex;
for (Node* node = this; node; node = node->traverseNextNode(this)) {
- if (node == e)
+ if (node == e) {
+ ++m_associatedElementsAfterIndex;
return i;
+ }
if (node->isHTMLElement()
&& static_cast<Element*>(node)->isFormControlElement()
&& static_cast<HTMLFormControlElement*>(node)->form() == this)
++i;
}
}
- return m_associatedElements.size();
+ return m_associatedElementsAfterIndex++;
}
void HTMLFormElement::registerFormElement(HTMLFormControlElement* e)
@@ -418,6 +466,18 @@ void HTMLFormElement::registerFormElement(HTMLFormControlElement* e)
void HTMLFormElement::removeFormElement(HTMLFormControlElement* e)
{
m_checkedRadioButtons.removeButton(e);
+ if (e->fastHasAttribute(formAttr)) {
+ unsigned index;
+ for (index = 0; index < m_associatedElements.size(); ++index)
+ if (m_associatedElements[index] == e)
+ break;
+ ASSERT(index < m_associatedElements.size());
+ if (index < m_associatedElementsBeforeIndex)
+ --m_associatedElementsBeforeIndex;
+ if (index < m_associatedElementsAfterIndex)
+ --m_associatedElementsAfterIndex;
+ } else
+ --m_associatedElementsAfterIndex;
removeFromVector(m_associatedElements, e);
}
diff --git a/WebCore/html/HTMLFormElement.h b/WebCore/html/HTMLFormElement.h
index b996d9d..4e06bec 100644
--- a/WebCore/html/HTMLFormElement.h
+++ b/WebCore/html/HTMLFormElement.h
@@ -131,6 +131,7 @@ private:
void submit(Event*, bool activateSubmitButton, bool processingUserGesture, FormSubmissionTrigger);
+ unsigned formElementIndexWithFormAttribute(HTMLFormControlElement*);
unsigned formElementIndex(HTMLFormControlElement*);
// Returns true if the submission should be proceeded.
bool validateInteractively(Event*);
@@ -148,6 +149,8 @@ private:
CheckedRadioButtons m_checkedRadioButtons;
+ unsigned m_associatedElementsBeforeIndex;
+ unsigned m_associatedElementsAfterIndex;
Vector<HTMLFormControlElement*> m_associatedElements;
Vector<HTMLImageElement*> m_imageElements;
diff --git a/WebCore/html/HTMLFrameElementBase.cpp b/WebCore/html/HTMLFrameElementBase.cpp
index cba82a2..47465c6 100644
--- a/WebCore/html/HTMLFrameElementBase.cpp
+++ b/WebCore/html/HTMLFrameElementBase.cpp
@@ -148,16 +148,11 @@ void HTMLFrameElementBase::parseMappedAttribute(Attribute* attr)
HTMLFrameOwnerElement::parseMappedAttribute(attr);
}
-void HTMLFrameElementBase::setName()
+void HTMLFrameElementBase::setNameAndOpenURL()
{
m_frameName = getAttribute(nameAttr);
if (m_frameName.isNull())
m_frameName = getIdAttribute();
-}
-
-void HTMLFrameElementBase::setNameAndOpenURL()
-{
- setName();
openURL();
}
diff --git a/WebCore/html/HTMLFrameElementBase.h b/WebCore/html/HTMLFrameElementBase.h
index ef25f30..8770af5 100644
--- a/WebCore/html/HTMLFrameElementBase.h
+++ b/WebCore/html/HTMLFrameElementBase.h
@@ -59,8 +59,6 @@ private:
virtual bool isURLAttribute(Attribute*) const;
- virtual void setName();
-
virtual void willRemove();
void checkInDocumentTimerFired(Timer<HTMLFrameElementBase>*);
void updateOnReparenting();
diff --git a/WebCore/html/HTMLFrameOwnerElement.h b/WebCore/html/HTMLFrameOwnerElement.h
index c84d7bb..f784f4f 100644
--- a/WebCore/html/HTMLFrameOwnerElement.h
+++ b/WebCore/html/HTMLFrameOwnerElement.h
@@ -65,7 +65,6 @@ protected:
private:
friend class Frame;
- virtual void setName() { }
virtual bool isFrameOwnerElement() const { return true; }
virtual bool isKeyboardFocusable(KeyboardEvent*) const { return m_contentFrame; }
diff --git a/WebCore/html/HTMLInputElement.cpp b/WebCore/html/HTMLInputElement.cpp
index b7b05b1..b704fc1 100644
--- a/WebCore/html/HTMLInputElement.cpp
+++ b/WebCore/html/HTMLInputElement.cpp
@@ -91,8 +91,6 @@ static bool isNumberCharacter(UChar ch)
HTMLInputElement::HTMLInputElement(const QualifiedName& tagName, Document* document, HTMLFormElement* form)
: HTMLTextFormControlElement(tagName, document, form)
- , m_xPos(0)
- , m_yPos(0)
, m_maxResults(-1)
, m_deprecatedTypeNumber(TEXT)
, m_checked(false)
@@ -254,8 +252,44 @@ bool HTMLInputElement::stepMismatch(const String& value) const
return m_inputType->stepMismatch(value, step);
}
+String HTMLInputElement::minimumString() const
+{
+ return m_inputType->serialize(minimum());
+}
+
+String HTMLInputElement::maximumString() const
+{
+ return m_inputType->serialize(maximum());
+}
+
+String HTMLInputElement::stepBaseString() const
+{
+ return m_inputType->serialize(m_inputType->stepBase());
+}
+
+String HTMLInputElement::stepString() const
+{
+ double step;
+ if (!getAllowedValueStep(&step)) {
+ // stepString() should be called only if stepMismatch() can be true.
+ ASSERT_NOT_REACHED();
+ return String();
+ }
+ return serializeForNumberType(step / m_inputType->stepScaleFactor());
+}
+
+String HTMLInputElement::typeMismatchText() const
+{
+ return m_inputType->typeMismatchText();
+}
+
bool HTMLInputElement::getAllowedValueStep(double* step) const
{
+ return getAllowedValueStepWithDecimalPlaces(step, 0);
+}
+
+bool HTMLInputElement::getAllowedValueStepWithDecimalPlaces(double* step, unsigned* decimalPlaces) const
+{
ASSERT(step);
double defaultStep = m_inputType->defaultStep();
double stepScaleFactor = m_inputType->stepScaleFactor();
@@ -264,14 +298,24 @@ bool HTMLInputElement::getAllowedValueStep(double* step) const
const AtomicString& stepString = getAttribute(stepAttr);
if (stepString.isEmpty()) {
*step = defaultStep * stepScaleFactor;
+ if (decimalPlaces)
+ *decimalPlaces = 0;
return true;
}
if (equalIgnoringCase(stepString, "any"))
return false;
double parsed;
- if (!parseToDoubleForNumberType(stepString, &parsed) || parsed <= 0.0) {
- *step = defaultStep * stepScaleFactor;
- return true;
+ if (!decimalPlaces) {
+ if (!parseToDoubleForNumberType(stepString, &parsed) || parsed <= 0.0) {
+ *step = defaultStep * stepScaleFactor;
+ return true;
+ }
+ } else {
+ if (!parseToDoubleForNumberTypeWithDecimalPlaces(stepString, &parsed, decimalPlaces) || parsed <= 0.0) {
+ *step = defaultStep * stepScaleFactor;
+ *decimalPlaces = 0;
+ return true;
+ }
}
// For date, month, week, the parsed value should be an integer for some types.
if (m_inputType->parsedStepValueShouldBeInteger())
@@ -288,7 +332,8 @@ bool HTMLInputElement::getAllowedValueStep(double* step) const
void HTMLInputElement::applyStep(double count, ExceptionCode& ec)
{
double step;
- if (!getAllowedValueStep(&step)) {
+ unsigned stepDecimalPlaces;
+ if (!getAllowedValueStepWithDecimalPlaces(&step, &stepDecimalPlaces)) {
ec = INVALID_STATE_ERR;
return;
}
@@ -303,16 +348,26 @@ void HTMLInputElement::applyStep(double count, ExceptionCode& ec)
ec = INVALID_STATE_ERR;
return;
}
- if (newValue < m_inputType->minimum()) {
+ double acceptableError = m_inputType->acceptableError(step);
+ if (newValue - m_inputType->minimum() < -acceptableError) {
ec = INVALID_STATE_ERR;
return;
}
- double base = m_inputType->stepBase();
- newValue = base + round((newValue - base) / step) * step;
- if (newValue > m_inputType->maximum()) {
+ if (newValue < m_inputType->minimum())
+ newValue = m_inputType->minimum();
+ unsigned baseDecimalPlaces;
+ double base = m_inputType->stepBaseWithDecimalPlaces(&baseDecimalPlaces);
+ baseDecimalPlaces = min(baseDecimalPlaces, 16u);
+ if (newValue < pow(10.0, 21.0)) {
+ double scale = pow(10.0, static_cast<double>(max(stepDecimalPlaces, baseDecimalPlaces)));
+ newValue = round((base + round((newValue - base) / step) * step) * scale) / scale;
+ }
+ if (newValue - m_inputType->maximum() > acceptableError) {
ec = INVALID_STATE_ERR;
return;
}
+ if (newValue > m_inputType->maximum())
+ newValue = m_inputType->maximum();
setValueAsNumber(newValue, ec);
}
@@ -1079,8 +1134,8 @@ void HTMLInputElement::setValueFromRenderer(const String& value)
// File upload controls will always use setFileListFromRenderer.
ASSERT(deprecatedInputType() != FILE);
m_data.setSuggestedValue(String());
- updatePlaceholderVisibility(false);
InputElement::setValueFromRenderer(m_data, this, this, value);
+ updatePlaceholderVisibility(false);
setNeedsValidityCheck();
// Clear autofill flag (and yellow background) on user edit.
@@ -1243,57 +1298,12 @@ void HTMLInputElement::defaultEventHandler(Event* evt)
if (isTextField() && evt->type() == eventNames().textInputEvent && evt->isTextEvent() && static_cast<TextEvent*>(evt)->data() == "\n")
implicitSubmission = true;
- if (deprecatedInputType() == IMAGE && evt->isMouseEvent() && evt->type() == eventNames().clickEvent) {
- // record the mouse position for when we get the DOMActivate event
- MouseEvent* me = static_cast<MouseEvent*>(evt);
- // FIXME: We could just call offsetX() and offsetY() on the event,
- // but that's currently broken, so for now do the computation here.
- if (me->isSimulated() || !renderer()) {
- m_xPos = 0;
- m_yPos = 0;
- } else {
- // FIXME: This doesn't work correctly with transforms.
- // FIXME: pageX/pageY need adjusting for pageZoomFactor(). Use actualPageLocation()?
- IntPoint absOffset = roundedIntPoint(renderer()->localToAbsolute());
- m_xPos = me->pageX() - absOffset.x();
- m_yPos = me->pageY() - absOffset.y();
- }
- }
-
- if (hasSpinButton() && evt->type() == eventNames().keydownEvent && evt->isKeyboardEvent()) {
- String key = static_cast<KeyboardEvent*>(evt)->keyIdentifier();
- int step = 0;
- if (key == "Up")
- step = 1;
- else if (key == "Down")
- step = -1;
- if (step) {
- stepUpFromRenderer(step);
- evt->setDefaultHandled();
- return;
- }
- }
- if (deprecatedInputType() == RANGE && evt->isKeyboardEvent()) {
- handleKeyEventForRange(static_cast<KeyboardEvent*>(evt));
- if (evt->defaultHandled())
- return;
- }
-
- if (isTextField()
- && evt->type() == eventNames().keydownEvent
- && evt->isKeyboardEvent()
- && focused()
- && document()->frame()
- && document()->frame()->editor()->doTextFieldCommandFromEvent(this, static_cast<KeyboardEvent*>(evt))) {
- evt->setDefaultHandled();
+ if (evt->isMouseEvent() && evt->type() == eventNames().clickEvent && m_inputType->handleClickEvent(static_cast<MouseEvent*>(evt)))
return;
- }
- if (deprecatedInputType() == RADIO && evt->type() == eventNames().clickEvent) {
- evt->setDefaultHandled();
+ if (evt->isKeyboardEvent() && evt->type() == eventNames().keydownEvent && m_inputType->handleKeydownEvent(static_cast<KeyboardEvent*>(evt)))
return;
- }
-
+
// Call the base event handler before any of our own event handling for almost all events in text fields.
// Makes editing keyboard handling take precedence over the keydown and keypress handling in this function.
bool callBaseClassEarly = isTextField() && !implicitSubmission
@@ -1308,27 +1318,8 @@ void HTMLInputElement::defaultEventHandler(Event* evt)
// actually submitting the form. For reset inputs, the form is reset. These events are sent when the user clicks
// on the element, or presses enter while it is the active element. JavaScript code wishing to activate the element
// must dispatch a DOMActivate event - a click event will not do the job.
- if (evt->type() == eventNames().DOMActivateEvent && !disabled()) {
- if (deprecatedInputType() == IMAGE || deprecatedInputType() == SUBMIT || deprecatedInputType() == RESET) {
- if (!form())
- return;
- if (deprecatedInputType() == RESET)
- form()->reset();
- else {
- m_activeSubmit = true;
- // FIXME: Would be cleaner to get m_xPos and m_yPos out of the underlying mouse
- // event (if any) here instead of relying on the variables set above when
- // processing the click event. Even better, appendFormData could pass the
- // event in, and then we could get rid of m_xPos and m_yPos altogether!
- if (!form()->prepareSubmit(evt)) {
- m_xPos = 0;
- m_yPos = 0;
- }
- m_activeSubmit = false;
- }
- } else if (deprecatedInputType() == FILE && renderer())
- toRenderFileUploadControl(renderer())->click();
- }
+ if (evt->type() == eventNames().DOMActivateEvent && m_inputType->handleDOMActivateEvent(evt))
+ return;
// Use key press event here since sending simulated mouse events
// on key down blocks the proper sending of the key press event.
@@ -1395,7 +1386,7 @@ void HTMLInputElement::defaultEventHandler(Event* evt)
}
if (evt->type() == eventNames().keydownEvent && evt->isKeyboardEvent()) {
- String key = static_cast<KeyboardEvent*>(evt)->keyIdentifier();
+ const String& key = static_cast<KeyboardEvent*>(evt)->keyIdentifier();
if (key == "U+0020") {
switch (deprecatedInputType()) {
@@ -1456,7 +1447,7 @@ void HTMLInputElement::defaultEventHandler(Event* evt)
if (evt->type() == eventNames().keyupEvent && evt->isKeyboardEvent()) {
bool clickElement = false;
- String key = static_cast<KeyboardEvent*>(evt)->keyIdentifier();
+ const String& key = static_cast<KeyboardEvent*>(evt)->keyIdentifier();
if (key == "U+0020") {
switch (deprecatedInputType()) {
@@ -1587,47 +1578,6 @@ void HTMLInputElement::handleBeforeTextInsertedEvent(Event* event)
InputElement::handleBeforeTextInsertedEvent(m_data, this, this, event);
}
-void HTMLInputElement::handleKeyEventForRange(KeyboardEvent* event)
-{
- if (event->type() != eventNames().keydownEvent)
- return;
- String key = event->keyIdentifier();
- if (key != "Up" && key != "Right" && key != "Down" && key != "Left")
- return;
-
- ExceptionCode ec;
- if (equalIgnoringCase(getAttribute(stepAttr), "any")) {
- double min = m_inputType->minimum();
- double max = m_inputType->maximum();
- // FIXME: Is 1/100 reasonable?
- double step = (max - min) / 100;
- double current = m_inputType->parseToDouble(value(), numeric_limits<double>::quiet_NaN());
- ASSERT(isfinite(current));
- double newValue;
- if (key == "Up" || key == "Right") {
- newValue = current + step;
- if (newValue > max)
- newValue = max;
- } else {
- newValue = current - step;
- if (newValue < min)
- newValue = min;
- }
- if (newValue != current) {
- setValueAsNumber(newValue, ec);
- dispatchFormControlChangeEvent();
- }
- } else {
- int stepMagnification = (key == "Up" || key == "Right") ? 1 : -1;
- String lastStringValue = value();
- stepUp(stepMagnification, ec);
- if (lastStringValue != value())
- dispatchFormControlChangeEvent();
- }
- event->setDefaultHandled();
- return;
-}
-
PassRefPtr<HTMLFormElement> HTMLInputElement::createTemporaryFormForIsIndex()
{
RefPtr<HTMLFormElement> form = HTMLFormElement::create(document());
@@ -1643,7 +1593,7 @@ PassRefPtr<HTMLFormElement> HTMLInputElement::createTemporaryFormForIsIndex()
bool HTMLInputElement::isURLAttribute(Attribute *attr) const
{
- return (attr->name() == srcAttr);
+ return (attr->name() == srcAttr || attr->name() == formactionAttr);
}
String HTMLInputElement::defaultValue() const
diff --git a/WebCore/html/HTMLInputElement.h b/WebCore/html/HTMLInputElement.h
index 1a0490e..9884117 100644
--- a/WebCore/html/HTMLInputElement.h
+++ b/WebCore/html/HTMLInputElement.h
@@ -65,8 +65,14 @@ public:
// Sets the "allowed value step" defined in the HTML spec to the specified double pointer.
// Returns false if there is no "allowed value step."
bool getAllowedValueStep(double*) const;
+ bool getAllowedValueStepWithDecimalPlaces(double*, unsigned*) const;
// For ValidityState.
bool stepMismatch(const String&) const;
+ String minimumString() const;
+ String maximumString() const;
+ String stepBaseString() const;
+ String stepString() const;
+ String typeMismatchText() const;
// Implementations of HTMLInputElement::stepUp() and stepDown().
void stepUp(int, ExceptionCode&);
@@ -170,7 +176,7 @@ public:
KURL src() const;
- int maxLength() const;
+ virtual int maxLength() const;
void setMaxLength(int, ExceptionCode&);
bool multiple() const;
@@ -203,10 +209,6 @@ public:
return document()->checkedRadioButtons();
}
- // FIXME: We should move m_xPos and m_yPos to ImageInputType class.
- int xPosition() const { return m_xPos; }
- int yPosition() const { return m_yPos; }
-
protected:
HTMLInputElement(const QualifiedName&, Document*, HTMLFormElement* = 0);
@@ -336,7 +338,6 @@ private:
void updateCheckedRadioButtons();
void handleBeforeTextInsertedEvent(Event*);
- void handleKeyEventForRange(KeyboardEvent*);
PassRefPtr<HTMLFormElement> createTemporaryFormForIsIndex();
// Helper for stepUp()/stepDown(). Adds step value * count to the current value.
void applyStep(double count, ExceptionCode&);
@@ -350,8 +351,6 @@ private:
#endif
InputElementData m_data;
- int m_xPos;
- int m_yPos;
short m_maxResults;
OwnPtr<HTMLImageLoader> m_imageLoader;
RefPtr<FileList> m_fileList;
diff --git a/WebCore/html/HTMLInputElement.idl b/WebCore/html/HTMLInputElement.idl
index b873826..342e9b8 100644
--- a/WebCore/html/HTMLInputElement.idl
+++ b/WebCore/html/HTMLInputElement.idl
@@ -24,7 +24,11 @@ module html {
attribute [ConvertNullToNullString] DOMString defaultValue;
attribute [Reflect=checked] boolean defaultChecked;
readonly attribute HTMLFormElement form;
+ attribute [Reflect, URL] DOMString formAction;
+ attribute [Reflect] DOMString formEnctype;
+ attribute [Reflect] DOMString formMethod;
attribute [Reflect] boolean formNoValidate;
+ attribute [Reflect] DOMString formTarget;
readonly attribute ValidityState validity;
attribute [Reflect] DOMString accept;
attribute [Reflect] DOMString accessKey;
@@ -84,8 +88,6 @@ module html {
// WinIE extension:
attribute boolean indeterminate;
- // WinIE & FireFox extension:
-
attribute [Custom] long selectionStart;
attribute [Custom] long selectionEnd;
[Custom] void setSelectionRange(in long start, in long end);
diff --git a/WebCore/html/HTMLLinkElement.cpp b/WebCore/html/HTMLLinkElement.cpp
index bc7b99d..bdb33fb 100644
--- a/WebCore/html/HTMLLinkElement.cpp
+++ b/WebCore/html/HTMLLinkElement.cpp
@@ -62,6 +62,9 @@ PassRefPtr<HTMLLinkElement> HTMLLinkElement::create(const QualifiedName& tagName
HTMLLinkElement::~HTMLLinkElement()
{
+ if (m_sheet)
+ m_sheet->clearOwnerNode();
+
if (m_cachedSheet) {
m_cachedSheet->removeClient(this);
if (m_loading && !isDisabled() && !isAlternate())
@@ -189,8 +192,10 @@ void HTMLLinkElement::tokenizeRelAttribute(const AtomicString& rel, RelAttribute
void HTMLLinkElement::process()
{
- if (!inDocument())
+ if (!inDocument()) {
+ ASSERT(!m_sheet);
return;
+ }
String type = m_type.lower();
@@ -279,6 +284,12 @@ void HTMLLinkElement::removedFromDocument()
document()->removeStyleSheetCandidateNode(this);
+ if (m_sheet) {
+ ASSERT(m_sheet->ownerNode() == this);
+ m_sheet->clearOwnerNode();
+ m_sheet = 0;
+ }
+
if (document()->renderer())
document()->styleSelectorChanged(DeferRecalcStyle);
}
@@ -291,6 +302,11 @@ void HTMLLinkElement::finishParsingChildren()
void HTMLLinkElement::setCSSStyleSheet(const String& href, const KURL& baseURL, const String& charset, const CachedCSSStyleSheet* sheet)
{
+ if (!inDocument()) {
+ ASSERT(!m_sheet);
+ return;
+ }
+
m_sheet = CSSStyleSheet::create(this, href, baseURL, charset);
bool strictParsing = !document()->inQuirksMode();
diff --git a/WebCore/html/HTMLMediaElement.cpp b/WebCore/html/HTMLMediaElement.cpp
index 5b75dde..7c061d0 100644
--- a/WebCore/html/HTMLMediaElement.cpp
+++ b/WebCore/html/HTMLMediaElement.cpp
@@ -82,7 +82,7 @@ namespace WebCore {
#if !LOG_DISABLED
static String urlForLogging(const String& url)
{
- static unsigned maximumURLLengthForLogging = 128;
+ static const unsigned maximumURLLengthForLogging = 128;
if (url.length() < maximumURLLengthForLogging)
return url;
@@ -101,6 +101,14 @@ static const char *boolString(bool val)
#define LOG_MEDIA_EVENTS 0
#endif
+#ifndef LOG_CACHED_TIME_WARNINGS
+// Default to not logging warnings about excessive drift in the cached media time because it adds a
+// fair amount of overhead and logging.
+#define LOG_CACHED_TIME_WARNINGS 0
+#endif
+
+static const float invalidMediaTime = -1;
+
using namespace HTMLNames;
HTMLMediaElement::HTMLMediaElement(const QualifiedName& tagName, Document* document)
@@ -134,6 +142,9 @@ HTMLMediaElement::HTMLMediaElement(const QualifiedName& tagName, Document* docum
, m_preload(MediaPlayer::Auto)
, m_displayMode(Unknown)
, m_processingMediaPlayerCallback(0)
+ , m_cachedTime(invalidMediaTime)
+ , m_cachedTimeWallClockUpdateTime(0)
+ , m_minimumWallClockTimeToCacheMediaTime(0)
, m_playing(false)
, m_isWaitingUntilMediaCanStart(false)
, m_shouldDelayLoadEvent(false)
@@ -430,42 +441,6 @@ void HTMLMediaElement::loadTimerFired(Timer<HTMLMediaElement>*)
loadInternal();
}
-static String serializeTimeOffset(float time)
-{
- String timeString = String::number(time);
- // FIXME serialize time offset values properly (format not specified yet)
- timeString.append("s");
- return timeString;
-}
-
-static float parseTimeOffset(const String& timeString, bool* ok = 0)
-{
- const UChar* characters = timeString.characters();
- unsigned length = timeString.length();
-
- if (length && characters[length - 1] == 's')
- length--;
-
- // FIXME parse time offset values (format not specified yet)
- float val = charactersToFloat(characters, length, ok);
- return val;
-}
-
-float HTMLMediaElement::getTimeOffsetAttribute(const QualifiedName& name, float valueOnError) const
-{
- bool ok;
- String timeString = getAttribute(name);
- float result = parseTimeOffset(timeString, &ok);
- if (ok)
- return result;
- return valueOnError;
-}
-
-void HTMLMediaElement::setTimeOffsetAttribute(const QualifiedName& name, float value)
-{
- setAttribute(name, serializeTimeOffset(value));
-}
-
PassRefPtr<MediaError> HTMLMediaElement::error() const
{
return m_error;
@@ -562,6 +537,7 @@ void HTMLMediaElement::prepareForLoad()
m_networkState = NETWORK_EMPTY;
m_readyState = HAVE_NOTHING;
m_readyStateMaximum = HAVE_NOTHING;
+ refreshCachedTime();
m_paused = true;
m_seeking = false;
scheduleEvent(eventNames().emptiedEvent);
@@ -1100,6 +1076,7 @@ void HTMLMediaElement::seek(float time, ExceptionCode& ec)
}
// Get the current time before setting m_seeking, m_lastSeekTime is returned once it is set.
+ refreshCachedTime();
float now = currentTime();
// 2 - If the element's seeking IDL attribute is true, then another instance of this algorithm is
@@ -1204,14 +1181,80 @@ bool HTMLMediaElement::seeking() const
return m_seeking;
}
+void HTMLMediaElement::refreshCachedTime() const
+{
+ m_cachedTime = m_player->currentTime();
+ m_cachedTimeWallClockUpdateTime = WTF::currentTime();
+}
+
+void HTMLMediaElement::invalidateCachedTime()
+{
+ LOG(Media, "HTMLMediaElement::invalidateCachedTime");
+
+ // Don't try to cache movie time when playback first starts as the time reported by the engine
+ // sometimes fluctuates for a short amount of time, so the cached time will be off if we take it
+ // too early.
+ static const double minimumTimePlayingBeforeCacheSnapshot = 0.5;
+
+ m_minimumWallClockTimeToCacheMediaTime = WTF::currentTime() + minimumTimePlayingBeforeCacheSnapshot;
+ m_cachedTime = invalidMediaTime;
+}
+
// playback state
float HTMLMediaElement::currentTime() const
{
+#if LOG_CACHED_TIME_WARNINGS
+ static const double minCachedDeltaForWarning = 0.01;
+#endif
+
if (!m_player)
return 0;
- if (m_seeking)
+
+ if (m_seeking) {
+ LOG(Media, "HTMLMediaElement::currentTime - seeking, returning %f", m_lastSeekTime);
return m_lastSeekTime;
- return m_player->currentTime();
+ }
+
+ if (m_cachedTime != invalidMediaTime && m_paused) {
+#if LOG_CACHED_TIME_WARNINGS
+ float delta = m_cachedTime - m_player->currentTime();
+ if (delta > minCachedDeltaForWarning)
+ LOG(Media, "HTMLMediaElement::currentTime - WARNING, cached time is %f seconds off of media time when paused", delta);
+#endif
+ return m_cachedTime;
+ }
+
+ // Is it too soon use a cached time?
+ double now = WTF::currentTime();
+ double maximumDurationToCacheMediaTime = m_player->maximumDurationToCacheMediaTime();
+
+ if (maximumDurationToCacheMediaTime && m_cachedTime != invalidMediaTime && !m_paused && now > m_minimumWallClockTimeToCacheMediaTime) {
+ double wallClockDelta = now - m_cachedTimeWallClockUpdateTime;
+
+ // Not too soon, use the cached time only if it hasn't expired.
+ if (wallClockDelta < maximumDurationToCacheMediaTime) {
+ float adjustedCacheTime = static_cast<float>(m_cachedTime + (m_playbackRate * wallClockDelta));
+
+#if LOG_CACHED_TIME_WARNINGS
+ float delta = adjustedCacheTime - m_player->currentTime();
+ if (delta > minCachedDeltaForWarning)
+ LOG(Media, "HTMLMediaElement::currentTime - WARNING, cached time is %f seconds off of media time when playing", delta);
+#endif
+ return adjustedCacheTime;
+ }
+ }
+
+#if LOG_CACHED_TIME_WARNINGS
+ if (maximumDurationToCacheMediaTime && now > m_minimumWallClockTimeToCacheMediaTime && m_cachedTime != invalidMediaTime) {
+ double wallClockDelta = now - m_cachedTimeWallClockUpdateTime;
+ float delta = m_cachedTime + (m_playbackRate * wallClockDelta) - m_player->currentTime();
+ LOG(Media, "HTMLMediaElement::currentTime - cached time was %f seconds off of media time when it expired", delta);
+ }
+#endif
+
+ refreshCachedTime();
+
+ return m_cachedTime;
}
void HTMLMediaElement::setCurrentTime(float time, ExceptionCode& ec)
@@ -1515,7 +1558,7 @@ void HTMLMediaElement::beginScrubbing()
void HTMLMediaElement::endScrubbing()
{
- LOG(Media, "HTMLMediaElement::beginScrubbing - m_pausedInternal is %s", boolString(m_pausedInternal));
+ LOG(Media, "HTMLMediaElement::endScrubbing - m_pausedInternal is %s", boolString(m_pausedInternal));
if (m_pausedInternal)
setPausedInternal(false);
@@ -1557,7 +1600,7 @@ void HTMLMediaElement::scheduleTimeupdateEvent(bool periodicEvent)
// Some media engines make multiple "time changed" callbacks at the same time, but we only want one
// event at a given time so filter here
- float movieTime = m_player ? m_player->currentTime() : 0;
+ float movieTime = currentTime();
if (movieTime != m_lastTimeUpdateEventMovieTime) {
scheduleEvent(eventNames().timeupdateEvent);
m_lastTimeUpdateEventWallTime = now;
@@ -1779,15 +1822,17 @@ void HTMLMediaElement::mediaPlayerTimeChanged(MediaPlayer*)
beginProcessingMediaPlayerCallback();
- // Always call scheduleTimeupdateEvent when the media engine reports a time discontinuity,
- // it will only queue a 'timeupdate' event if we haven't already posted one at the current
- // movie time.
- scheduleTimeupdateEvent(false);
+ invalidateCachedTime();
// 4.8.10.9 step 14 & 15. Needed if no ReadyState change is associated with the seek.
if (m_seeking && m_readyState >= HAVE_CURRENT_DATA)
finishSeek();
+ // Always call scheduleTimeupdateEvent when the media engine reports a time discontinuity,
+ // it will only queue a 'timeupdate' event if we haven't already posted one at the current
+ // movie time.
+ scheduleTimeupdateEvent(false);
+
float now = currentTime();
float dur = duration();
if (!isnan(dur) && dur && now >= dur) {
@@ -1846,6 +1891,9 @@ void HTMLMediaElement::mediaPlayerRateChanged(MediaPlayer*)
LOG(Media, "HTMLMediaElement::mediaPlayerRateChanged");
beginProcessingMediaPlayerCallback();
+
+ invalidateCachedTime();
+
// Stash the rate in case the one we tried to set isn't what the engine is
// using (eg. it can't handle the rate we set)
m_playbackRate = m_player->rate();
@@ -2042,6 +2090,7 @@ void HTMLMediaElement::updatePlayState()
if (m_pausedInternal) {
if (!m_player->paused())
m_player->pause();
+ refreshCachedTime();
m_playbackProgressTimer.stop();
return;
}
@@ -2054,6 +2103,7 @@ void HTMLMediaElement::updatePlayState()
if (shouldBePlaying) {
setDisplayMode(Video);
+ invalidateCachedTime();
if (playerPaused) {
// Set rate before calling play in case the rate was set before the media engine was setup.
@@ -2068,6 +2118,7 @@ void HTMLMediaElement::updatePlayState()
} else { // Should not be playing right now
if (!playerPaused)
m_player->pause();
+ refreshCachedTime();
m_playbackProgressTimer.stop();
m_playing = false;
diff --git a/WebCore/html/HTMLMediaElement.h b/WebCore/html/HTMLMediaElement.h
index e5e7ae0..61221b8 100644
--- a/WebCore/html/HTMLMediaElement.h
+++ b/WebCore/html/HTMLMediaElement.h
@@ -197,9 +197,6 @@ private:
virtual void defaultEventHandler(Event*);
- float getTimeOffsetAttribute(const QualifiedName&, float valueOnError) const;
- void setTimeOffsetAttribute(const QualifiedName&, float value);
-
// ActiveDOMObject functions.
virtual bool canSuspend() const;
virtual void suspend(ReasonForSuspension);
@@ -293,6 +290,9 @@ private:
void setShouldDelayLoadEvent(bool);
+ void invalidateCachedTime();
+ void refreshCachedTime() const;
+
// Restrictions to change default behaviors. This is effectively a compile time choice at the moment
// because there are no accessor functions.
enum BehaviorRestrictions {
@@ -352,6 +352,10 @@ private:
// calling the media engine recursively.
int m_processingMediaPlayerCallback;
+ mutable float m_cachedTime;
+ mutable double m_cachedTimeWallClockUpdateTime;
+ mutable double m_minimumWallClockTimeToCacheMediaTime;
+
bool m_playing : 1;
bool m_isWaitingUntilMediaCanStart : 1;
bool m_shouldDelayLoadEvent : 1;
diff --git a/WebCore/html/HTMLObjectElement.cpp b/WebCore/html/HTMLObjectElement.cpp
index 7020517..c07d050 100644
--- a/WebCore/html/HTMLObjectElement.cpp
+++ b/WebCore/html/HTMLObjectElement.cpp
@@ -346,7 +346,7 @@ void HTMLObjectElement::renderFallbackContent()
return;
// Before we give up and use fallback content, check to see if this is a MIME type issue.
- if (m_imageLoader && m_imageLoader->image()) {
+ if (m_imageLoader && m_imageLoader->image() && m_imageLoader->image()->status() != CachedResource::LoadError) {
m_serviceType = m_imageLoader->image()->response().mimeType();
if (!isImageType()) {
// If we don't think we have an image type anymore, then ditch the image loader.
diff --git a/WebCore/html/HTMLOutputElement.cpp b/WebCore/html/HTMLOutputElement.cpp
index dee21ae..b83263e 100644
--- a/WebCore/html/HTMLOutputElement.cpp
+++ b/WebCore/html/HTMLOutputElement.cpp
@@ -58,7 +58,6 @@ const AtomicString& HTMLOutputElement::formControlType() const
void HTMLOutputElement::parseMappedAttribute(Attribute* attr)
{
- // FIXME: Should handle the 'form' attribute here.
if (attr->name() == HTMLNames::forAttr)
setFor(attr->value());
else
@@ -75,11 +74,6 @@ void HTMLOutputElement::setFor(const String& value)
m_tokens->setValue(value);
}
-void HTMLOutputElement::setForm(const String& /*id*/)
-{
- // FIXME: Implement this function.
-}
-
void HTMLOutputElement::childrenChanged(bool createdByParser, Node*, Node*, int)
{
if (createdByParser || m_isSetTextContentInProgress) {
diff --git a/WebCore/html/HTMLOutputElement.h b/WebCore/html/HTMLOutputElement.h
index df807fb..83ecee2 100644
--- a/WebCore/html/HTMLOutputElement.h
+++ b/WebCore/html/HTMLOutputElement.h
@@ -43,7 +43,6 @@ public:
virtual bool willValidate() const { return false; }
- void setForm(const String&);
String value() const;
void setValue(const String&);
String defaultValue() const;
diff --git a/WebCore/html/HTMLScriptElement.cpp b/WebCore/html/HTMLScriptElement.cpp
index 9e776e6..0ee93df 100644
--- a/WebCore/html/HTMLScriptElement.cpp
+++ b/WebCore/html/HTMLScriptElement.cpp
@@ -35,17 +35,16 @@ namespace WebCore {
using namespace HTMLNames;
-inline HTMLScriptElement::HTMLScriptElement(const QualifiedName& tagName, Document* document, bool createdByParser)
+inline HTMLScriptElement::HTMLScriptElement(const QualifiedName& tagName, Document* document, bool createdByParser, bool isEvaluated)
: HTMLElement(tagName, document)
- , m_data(this, this)
+ , ScriptElement(this, createdByParser, isEvaluated)
{
ASSERT(hasTagName(scriptTag));
- m_data.setCreatedByParser(createdByParser);
}
PassRefPtr<HTMLScriptElement> HTMLScriptElement::create(const QualifiedName& tagName, Document* document, bool createdByParser)
{
- return adoptRef(new HTMLScriptElement(tagName, document, createdByParser));
+ return adoptRef(new HTMLScriptElement(tagName, document, createdByParser, false));
}
bool HTMLScriptElement::isURLAttribute(Attribute* attr) const
@@ -53,14 +52,9 @@ bool HTMLScriptElement::isURLAttribute(Attribute* attr) const
return attr->name() == srcAttr;
}
-bool HTMLScriptElement::shouldExecuteAsJavaScript() const
-{
- return m_data.shouldExecuteAsJavaScript();
-}
-
void HTMLScriptElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
{
- ScriptElement::childrenChanged(m_data);
+ ScriptElement::childrenChanged();
HTMLElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
}
@@ -69,7 +63,7 @@ void HTMLScriptElement::parseMappedAttribute(Attribute* attr)
const QualifiedName& attrName = attr->name();
if (attrName == srcAttr)
- handleSourceAttribute(m_data, attr->value());
+ handleSourceAttribute(attr->value());
else if (attrName == onloadAttr)
setAttributeEventListener(eventNames().loadEvent, createAttributeEventListener(this, attr));
else if (attrName == onbeforeloadAttr)
@@ -82,25 +76,20 @@ void HTMLScriptElement::parseMappedAttribute(Attribute* attr)
void HTMLScriptElement::finishParsingChildren()
{
- ScriptElement::finishParsingChildren(m_data, sourceAttributeValue());
+ ScriptElement::finishParsingChildren(sourceAttributeValue());
HTMLElement::finishParsingChildren();
}
void HTMLScriptElement::insertedIntoDocument()
{
HTMLElement::insertedIntoDocument();
- ScriptElement::insertedIntoDocument(m_data, sourceAttributeValue());
+ ScriptElement::insertedIntoDocument(sourceAttributeValue());
}
void HTMLScriptElement::removedFromDocument()
{
HTMLElement::removedFromDocument();
- ScriptElement::removedFromDocument(m_data);
-}
-
-String HTMLScriptElement::text() const
-{
- return m_data.scriptContent();
+ ScriptElement::removedFromDocument();
}
void HTMLScriptElement::setText(const String &value)
@@ -124,16 +113,6 @@ KURL HTMLScriptElement::src() const
return document()->completeURL(sourceAttributeValue());
}
-String HTMLScriptElement::scriptCharset() const
-{
- return m_data.scriptCharset();
-}
-
-String HTMLScriptElement::scriptContent() const
-{
- return m_data.scriptContent();
-}
-
void HTMLScriptElement::addSubresourceAttributeURLs(ListHashSet<KURL>& urls) const
{
HTMLElement::addSubresourceAttributeURLs(urls);
@@ -183,8 +162,8 @@ bool HTMLScriptElement::deferAttributeValue() const
void HTMLScriptElement::dispatchLoadEvent()
{
- ASSERT(!m_data.haveFiredLoadEvent());
- m_data.setHaveFiredLoadEvent(true);
+ ASSERT(!haveFiredLoadEvent());
+ setHaveFiredLoadEvent(true);
dispatchEvent(Event::create(eventNames().loadEvent, false, false));
}
@@ -194,4 +173,9 @@ void HTMLScriptElement::dispatchErrorEvent()
dispatchEvent(Event::create(eventNames().errorEvent, true, false));
}
+PassRefPtr<Element> HTMLScriptElement::cloneElementWithoutAttributesAndChildren() const
+{
+ return adoptRef(new HTMLScriptElement(tagQName(), document(), false, isEvaluated()));
+}
+
}
diff --git a/WebCore/html/HTMLScriptElement.h b/WebCore/html/HTMLScriptElement.h
index a5629ee..5b91ecc 100644
--- a/WebCore/html/HTMLScriptElement.h
+++ b/WebCore/html/HTMLScriptElement.h
@@ -33,21 +33,15 @@ class HTMLScriptElement : public HTMLElement, public ScriptElement {
public:
static PassRefPtr<HTMLScriptElement> create(const QualifiedName&, Document*, bool createdByParser);
- virtual bool shouldExecuteAsJavaScript() const;
-
- String text() const;
+ String text() const { return scriptContent(); }
void setText(const String&);
KURL src() const;
- virtual String scriptCharset() const;
-
- bool haveFiredLoadEvent() const { return m_data.haveFiredLoadEvent(); }
+ bool haveFiredLoadEvent() const { return ScriptElement::haveFiredLoadEvent(); }
private:
- HTMLScriptElement(const QualifiedName&, Document*, bool createdByParser);
-
- virtual String scriptContent() const;
+ HTMLScriptElement(const QualifiedName&, Document*, bool createdByParser, bool isEvaluated);
virtual void parseMappedAttribute(Attribute*);
virtual void insertedIntoDocument();
@@ -71,7 +65,7 @@ private:
virtual void dispatchLoadEvent();
virtual void dispatchErrorEvent();
- ScriptElementData m_data;
+ PassRefPtr<Element> cloneElementWithoutAttributesAndChildren() const;
};
} //namespace
diff --git a/WebCore/html/HTMLStyleElement.cpp b/WebCore/html/HTMLStyleElement.cpp
index 1066c75..7c2512b 100644
--- a/WebCore/html/HTMLStyleElement.cpp
+++ b/WebCore/html/HTMLStyleElement.cpp
@@ -41,6 +41,12 @@ inline HTMLStyleElement::HTMLStyleElement(const QualifiedName& tagName, Document
ASSERT(hasTagName(styleTag));
}
+HTMLStyleElement::~HTMLStyleElement()
+{
+ if (m_sheet)
+ m_sheet->clearOwnerNode();
+}
+
PassRefPtr<HTMLStyleElement> HTMLStyleElement::create(const QualifiedName& tagName, Document* document, bool createdByParser)
{
return adoptRef(new HTMLStyleElement(tagName, document, createdByParser));
@@ -80,11 +86,6 @@ void HTMLStyleElement::childrenChanged(bool changedByParser, Node* beforeChange,
HTMLElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
}
-StyleSheet* HTMLStyleElement::sheet()
-{
- return StyleElement::sheet(this);
-}
-
const AtomicString& HTMLStyleElement::media() const
{
return getAttribute(mediaAttr);
diff --git a/WebCore/html/HTMLStyleElement.h b/WebCore/html/HTMLStyleElement.h
index b4013b8..3d6958f 100644
--- a/WebCore/html/HTMLStyleElement.h
+++ b/WebCore/html/HTMLStyleElement.h
@@ -33,10 +33,11 @@ class StyleSheet;
class HTMLStyleElement : public HTMLElement, private StyleElement {
public:
static PassRefPtr<HTMLStyleElement> create(const QualifiedName&, Document*, bool createdByParser);
+ virtual ~HTMLStyleElement();
void setType(const AtomicString&);
- StyleSheet* sheet();
+ using StyleElement::sheet;
private:
HTMLStyleElement(const QualifiedName&, Document*, bool createdByParser);
diff --git a/WebCore/html/HTMLTableElement.cpp b/WebCore/html/HTMLTableElement.cpp
index f6344d4..e554620 100644
--- a/WebCore/html/HTMLTableElement.cpp
+++ b/WebCore/html/HTMLTableElement.cpp
@@ -205,7 +205,7 @@ PassRefPtr<HTMLElement> HTMLTableElement::insertRow(int index, ExceptionCode& ec
ContainerNode* parent;
if (lastRow)
- parent = row ? row->parent() : lastRow->parent();
+ parent = row ? row->parentNode() : lastRow->parentNode();
else {
parent = lastBody();
if (!parent) {
diff --git a/WebCore/html/HTMLTableRowsCollection.cpp b/WebCore/html/HTMLTableRowsCollection.cpp
index b38c271..20143d9 100644
--- a/WebCore/html/HTMLTableRowsCollection.cpp
+++ b/WebCore/html/HTMLTableRowsCollection.cpp
@@ -39,17 +39,17 @@ using namespace HTMLNames;
static bool isInHead(Element* row)
{
- return row->parent() && static_cast<Element*>(row->parent())->hasLocalName(theadTag);
+ return row->parentNode() && static_cast<Element*>(row->parentNode())->hasLocalName(theadTag);
}
static bool isInBody(Element* row)
{
- return row->parent() && static_cast<Element*>(row->parent())->hasLocalName(tbodyTag);
+ return row->parentNode() && static_cast<Element*>(row->parentNode())->hasLocalName(tbodyTag);
}
static bool isInFoot(Element* row)
{
- return row->parent() && static_cast<Element*>(row->parent())->hasLocalName(tfootTag);
+ return row->parentNode() && static_cast<Element*>(row->parentNode())->hasLocalName(tfootTag);
}
HTMLTableRowElement* HTMLTableRowsCollection::rowAfter(HTMLTableElement* table, HTMLTableRowElement* previous)
@@ -58,7 +58,7 @@ HTMLTableRowElement* HTMLTableRowsCollection::rowAfter(HTMLTableElement* table,
// Start by looking for the next row in this section.
// Continue only if there is none.
- if (previous && previous->parent() != table) {
+ if (previous && previous->parentNode() != table) {
for (child = previous->nextSibling(); child; child = child->nextSibling()) {
if (child->hasTagName(trTag))
return static_cast<HTMLTableRowElement*>(child);
@@ -69,7 +69,7 @@ HTMLTableRowElement* HTMLTableRowsCollection::rowAfter(HTMLTableElement* table,
if (!previous)
child = table->firstChild();
else if (isInHead(previous))
- child = previous->parent()->nextSibling();
+ child = previous->parentNode()->nextSibling();
for (; child; child = child->nextSibling()) {
if (child->hasTagName(theadTag)) {
for (Node* grandchild = child->firstChild(); grandchild; grandchild = grandchild->nextSibling()) {
@@ -82,10 +82,10 @@ HTMLTableRowElement* HTMLTableRowsCollection::rowAfter(HTMLTableElement* table,
// If still looking at top level and bodies, find the next row in top level or the first in the next body section.
if (!previous || isInHead(previous))
child = table->firstChild();
- else if (previous->parent() == table)
+ else if (previous->parentNode() == table)
child = previous->nextSibling();
else if (isInBody(previous))
- child = previous->parent()->nextSibling();
+ child = previous->parentNode()->nextSibling();
for (; child; child = child->nextSibling()) {
if (child->hasTagName(trTag))
return static_cast<HTMLTableRowElement*>(child);
@@ -101,7 +101,7 @@ HTMLTableRowElement* HTMLTableRowsCollection::rowAfter(HTMLTableElement* table,
if (!previous || !isInFoot(previous))
child = table->firstChild();
else
- child = previous->parent()->nextSibling();
+ child = previous->parentNode()->nextSibling();
for (; child; child = child->nextSibling()) {
if (child->hasTagName(tfootTag)) {
for (Node* grandchild = child->firstChild(); grandchild; grandchild = grandchild->nextSibling()) {
diff --git a/WebCore/html/HTMLTagNames.in b/WebCore/html/HTMLTagNames.in
index 2b2c1fe..be2cf90 100644
--- a/WebCore/html/HTMLTagNames.in
+++ b/WebCore/html/HTMLTagNames.in
@@ -100,9 +100,9 @@ plaintext interfaceName=HTMLElement
pre
progress interfaceName=HTMLProgressElement, conditional=PROGRESS_TAG
q interfaceName=HTMLQuoteElement
-rp interfaceName=HTMLElement, conditional=RUBY
-rt interfaceName=HTMLElement, conditional=RUBY
-ruby interfaceName=HTMLElement, conditional=RUBY
+rp interfaceName=HTMLElement
+rt interfaceName=HTMLElement
+ruby interfaceName=HTMLElement
s interfaceName=HTMLElement
samp interfaceName=HTMLElement
script constructorNeedsCreatedByParser
diff --git a/WebCore/html/HTMLTextAreaElement.h b/WebCore/html/HTMLTextAreaElement.h
index d951c02..669fcd8 100644
--- a/WebCore/html/HTMLTextAreaElement.h
+++ b/WebCore/html/HTMLTextAreaElement.h
@@ -40,12 +40,12 @@ public:
bool shouldWrapText() const { return m_wrap != NoWrap; }
- String value() const;
+ virtual String value() const;
void setValue(const String&);
String defaultValue() const;
void setDefaultValue(const String&);
int textLength() const { return value().length(); }
- int maxLength() const;
+ virtual int maxLength() const;
void setMaxLength(int, ExceptionCode&);
bool valueMissing(const String& value) const { return isRequiredFormControl() && !disabled() && !readOnly() && value.isEmpty(); }
bool tooLong(const String&, NeedsToCheckDirtyFlag) const;
diff --git a/WebCore/html/HTMLViewSourceDocument.cpp b/WebCore/html/HTMLViewSourceDocument.cpp
index f7217eb..27eaf51 100644
--- a/WebCore/html/HTMLViewSourceDocument.cpp
+++ b/WebCore/html/HTMLViewSourceDocument.cpp
@@ -277,7 +277,7 @@ int HTMLViewSourceDocument::addRange(const String& source, int start, int end, c
}
addText(text, className);
if (!className.isEmpty() && m_current != m_tbody)
- m_current = static_cast<Element*>(m_current->parent());
+ m_current = static_cast<Element*>(m_current->parentNode());
return end;
}
diff --git a/WebCore/html/ImageInputType.cpp b/WebCore/html/ImageInputType.cpp
index de24188..7a76174 100644
--- a/WebCore/html/ImageInputType.cpp
+++ b/WebCore/html/ImageInputType.cpp
@@ -24,6 +24,7 @@
#include "FormDataList.h"
#include "HTMLInputElement.h"
+#include "MouseEvent.h"
#include "RenderImage.h"
#include <wtf/PassOwnPtr.h>
@@ -49,8 +50,8 @@ bool ImageInputType::appendFormData(FormDataList& encoding, bool) const
if (!element()->isActivatedSubmit())
return false;
const AtomicString& name = element()->name();
- encoding.appendData(name.isEmpty() ? "x" : (name + ".x"), element()->xPosition());
- encoding.appendData(name.isEmpty() ? "y" : (name + ".y"), element()->yPosition());
+ encoding.appendData(name.isEmpty() ? "x" : (name + ".x"), m_clickLocation.x());
+ encoding.appendData(name.isEmpty() ? "y" : (name + ".y"), m_clickLocation.y());
if (!name.isEmpty() && !element()->value().isEmpty())
encoding.appendData(name, element()->value());
return true;
@@ -61,6 +62,23 @@ bool ImageInputType::supportsValidation() const
return false;
}
+bool ImageInputType::handleDOMActivateEvent(Event* event)
+{
+ RefPtr<HTMLInputElement> element = this->element();
+ if (element->disabled() || !element->form())
+ return false;
+ element->setActivatedSubmit(true);
+ if (event->underlyingEvent() && event->underlyingEvent()->isMouseEvent()) {
+ MouseEvent* mouseEvent = static_cast<MouseEvent*>(event->underlyingEvent());
+ m_clickLocation = IntPoint(mouseEvent->offsetX(), mouseEvent->offsetY());
+ } else
+ m_clickLocation = IntPoint();
+ element->form()->prepareSubmit(event); // Event handlers can run.
+ element->setActivatedSubmit(false);
+ event->setDefaultHandled();
+ return true;
+}
+
RenderObject* ImageInputType::createRenderer(RenderArena* arena, RenderStyle*) const
{
RenderImage* image = new (arena) RenderImage(element());
diff --git a/WebCore/html/ImageInputType.h b/WebCore/html/ImageInputType.h
index cd76e72..61abf9d 100644
--- a/WebCore/html/ImageInputType.h
+++ b/WebCore/html/ImageInputType.h
@@ -32,6 +32,7 @@
#define ImageInputType_h
#include "BaseButtonInputType.h"
+#include "IntPoint.h"
namespace WebCore {
@@ -46,6 +47,10 @@ private:
virtual bool appendFormData(FormDataList&, bool) const;
virtual bool supportsValidation() const;
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*) const;
+ virtual bool handleDOMActivateEvent(Event*);
+
+ // This is valid only during HTMLFormElement::prepareSubmit().
+ IntPoint m_clickLocation;
};
} // namespace WebCore
diff --git a/WebCore/html/InputType.cpp b/WebCore/html/InputType.cpp
index c870c69..6dd002c 100644
--- a/WebCore/html/InputType.cpp
+++ b/WebCore/html/InputType.cpp
@@ -41,6 +41,7 @@
#include "HiddenInputType.h"
#include "ImageInputType.h"
#include "IsIndexInputType.h"
+#include "LocalizedStrings.h"
#include "MonthInputType.h"
#include "NumberInputType.h"
#include "PasswordInputType.h"
@@ -237,6 +238,13 @@ double InputType::stepBase() const
return 0;
}
+double InputType::stepBaseWithDecimalPlaces(unsigned* decimalPlaces) const
+{
+ if (decimalPlaces)
+ *decimalPlaces = 0;
+ return stepBase();
+}
+
double InputType::defaultStep() const
{
return numeric_limits<double>::quiet_NaN();
@@ -257,6 +265,31 @@ bool InputType::scaledStepValeuShouldBeInteger() const
return false;
}
+double InputType::acceptableError(double) const
+{
+ return 0;
+}
+
+String InputType::typeMismatchText() const
+{
+ return validationMessageTypeMismatchText();
+}
+
+bool InputType::handleClickEvent(MouseEvent*)
+{
+ return false;
+}
+
+bool InputType::handleDOMActivateEvent(Event*)
+{
+ return false;
+}
+
+bool InputType::handleKeydownEvent(KeyboardEvent*)
+{
+ return false;
+}
+
RenderObject* InputType::createRenderer(RenderArena*, RenderStyle* style) const
{
return RenderObject::createObject(element(), style);
@@ -267,6 +300,13 @@ double InputType::parseToDouble(const String&, double defaultValue) const
return defaultValue;
}
+double InputType::parseToDoubleWithDecimalPlaces(const String& src, double defaultValue, unsigned *decimalPlaces) const
+{
+ if (decimalPlaces)
+ *decimalPlaces = 0;
+ return parseToDouble(src, defaultValue);
+}
+
bool InputType::parseToDateComponents(const String&, DateComponents*) const
{
ASSERT_NOT_REACHED();
diff --git a/WebCore/html/InputType.h b/WebCore/html/InputType.h
index f601051..f1a5b6d 100644
--- a/WebCore/html/InputType.h
+++ b/WebCore/html/InputType.h
@@ -38,8 +38,11 @@
namespace WebCore {
class DateComponents;
+class Event;
class FormDataList;
class HTMLInputElement;
+class KeyboardEvent;
+class MouseEvent;
class RenderArena;
class RenderObject;
class RenderStyle;
@@ -90,10 +93,22 @@ public:
virtual double maximum() const;
virtual bool stepMismatch(const String&, double) const;
virtual double stepBase() const;
+ virtual double stepBaseWithDecimalPlaces(unsigned*) const;
virtual double defaultStep() const;
virtual double stepScaleFactor() const;
virtual bool parsedStepValueShouldBeInteger() const;
virtual bool scaledStepValeuShouldBeInteger() const;
+ virtual double acceptableError(double) const;
+ virtual String typeMismatchText() const;
+
+ // Event handlers
+ // If the return value is true, do no further default event handling in the
+ // default event handler. If an event handler calls Event::setDefaultHandled(),
+ // its return value must be true.
+
+ virtual bool handleClickEvent(MouseEvent*);
+ virtual bool handleDOMActivateEvent(Event*);
+ virtual bool handleKeydownEvent(KeyboardEvent*);
// Miscellaneous functions
@@ -104,6 +119,10 @@ public:
// succeeds; Returns defaultValue otherwise. This function can
// return NaN or Infinity only if defaultValue is NaN or Infinity.
virtual double parseToDouble(const String&, double defaultValue) const;
+ // Parses the specified string for the type as parseToDouble() does.
+ // In addition, it stores the number of digits after the decimal point
+ // into *decimalPlaces.
+ virtual double parseToDoubleWithDecimalPlaces(const String& src, double defaultValue, unsigned *decimalPlaces) const;
// Parses the specified string for this InputType, and returns true if it
// is successfully parsed. An instance pointed by the DateComponents*
// parameter will have parsed values and be modified even if the parsing
diff --git a/WebCore/html/MediaDocument.cpp b/WebCore/html/MediaDocument.cpp
index c4f0b14..af66795 100644
--- a/WebCore/html/MediaDocument.cpp
+++ b/WebCore/html/MediaDocument.cpp
@@ -211,7 +211,7 @@ void MediaDocument::replaceMediaElementTimerFired(Timer<MediaDocument>*)
embedElement->setAttribute(typeAttr, frame()->loader()->writer()->mimeType());
ExceptionCode ec;
- videoElement->parent()->replaceChild(embedElement, videoElement, ec);
+ videoElement->parentNode()->replaceChild(embedElement, videoElement, ec);
}
}
diff --git a/WebCore/html/NumberInputType.cpp b/WebCore/html/NumberInputType.cpp
index 28f510c..e290e50 100644
--- a/WebCore/html/NumberInputType.cpp
+++ b/WebCore/html/NumberInputType.cpp
@@ -131,8 +131,8 @@ bool NumberInputType::stepMismatch(const String& value, double step) const
double remainder = fabs(doubleValue - step * round(doubleValue / step));
// Accepts erros in lower fractional part which IEEE 754 single-precision
// can't represent.
- double acceptableError = step / pow(2.0, FLT_MANT_DIG);
- return acceptableError < remainder && remainder < (step - acceptableError);
+ double computedAcceptableError = acceptableError(step);
+ return computedAcceptableError < remainder && remainder < (step - computedAcceptableError);
}
double NumberInputType::stepBase() const
@@ -140,6 +140,11 @@ double NumberInputType::stepBase() const
return parseToDouble(element()->fastGetAttribute(minAttr), defaultStepBase());
}
+double NumberInputType::stepBaseWithDecimalPlaces(unsigned* decimalPlaces) const
+{
+ return parseToDoubleWithDecimalPlaces(element()->fastGetAttribute(minAttr), defaultStepBase(), decimalPlaces);
+}
+
double NumberInputType::defaultStep() const
{
return numberDefaultStep;
@@ -150,6 +155,11 @@ double NumberInputType::stepScaleFactor() const
return numberStepScaleFactor;
}
+bool NumberInputType::handleKeydownEvent(KeyboardEvent* event)
+{
+ return handleKeydownEventForSpinButton(event) || TextFieldInputType::handleKeydownEventForSpinButton(event);
+}
+
double NumberInputType::parseToDouble(const String& src, double defaultValue) const
{
double numberValue;
@@ -159,6 +169,15 @@ double NumberInputType::parseToDouble(const String& src, double defaultValue) co
return numberValue;
}
+double NumberInputType::parseToDoubleWithDecimalPlaces(const String& src, double defaultValue, unsigned *decimalPlaces) const
+{
+ double numberValue;
+ if (!parseToDoubleForNumberTypeWithDecimalPlaces(src, &numberValue, decimalPlaces))
+ return defaultValue;
+ ASSERT(isfinite(numberValue));
+ return numberValue;
+}
+
String NumberInputType::serialize(double value) const
{
if (!isfinite(value))
@@ -166,4 +185,10 @@ String NumberInputType::serialize(double value) const
return serializeForNumberType(value);
}
+double NumberInputType::acceptableError(double step) const
+{
+ return step / pow(2.0, FLT_MANT_DIG);
+}
+
+
} // namespace WebCore
diff --git a/WebCore/html/NumberInputType.h b/WebCore/html/NumberInputType.h
index 262955e..dc6e020 100644
--- a/WebCore/html/NumberInputType.h
+++ b/WebCore/html/NumberInputType.h
@@ -52,10 +52,14 @@ private:
virtual double maximum() const;
virtual bool stepMismatch(const String&, double) const;
virtual double stepBase() const;
+ virtual double stepBaseWithDecimalPlaces(unsigned*) const;
virtual double defaultStep() const;
virtual double stepScaleFactor() const;
+ virtual bool handleKeydownEvent(KeyboardEvent*);
virtual double parseToDouble(const String&, double) const;
+ virtual double parseToDoubleWithDecimalPlaces(const String&, double, unsigned*) const;
virtual String serialize(double) const;
+ virtual double acceptableError(double) const;
};
} // namespace WebCore
diff --git a/WebCore/html/RadioInputType.cpp b/WebCore/html/RadioInputType.cpp
index 5df4bbc..a6c4707 100644
--- a/WebCore/html/RadioInputType.cpp
+++ b/WebCore/html/RadioInputType.cpp
@@ -32,6 +32,7 @@
#include "RadioInputType.h"
#include "HTMLInputElement.h"
+#include "MouseEvent.h"
#include <wtf/PassOwnPtr.h>
namespace WebCore {
@@ -51,4 +52,10 @@ bool RadioInputType::valueMissing(const String&) const
return !element()->checkedRadioButtons().checkedButtonForGroup(element()->name());
}
+bool RadioInputType::handleClickEvent(MouseEvent* event)
+{
+ event->setDefaultHandled();
+ return true;
+}
+
} // namespace WebCore
diff --git a/WebCore/html/RadioInputType.h b/WebCore/html/RadioInputType.h
index 9e7ab00..2798010 100644
--- a/WebCore/html/RadioInputType.h
+++ b/WebCore/html/RadioInputType.h
@@ -43,6 +43,7 @@ private:
RadioInputType(HTMLInputElement* element) : BaseCheckableInputType(element) { }
virtual const AtomicString& formControlType() const;
virtual bool valueMissing(const String&) const;
+ virtual bool handleClickEvent(MouseEvent*);
};
} // namespace WebCore
diff --git a/WebCore/html/RangeInputType.cpp b/WebCore/html/RangeInputType.cpp
index 176d73b..ad47f14 100644
--- a/WebCore/html/RangeInputType.cpp
+++ b/WebCore/html/RangeInputType.cpp
@@ -34,6 +34,7 @@
#include "HTMLInputElement.h"
#include "HTMLNames.h"
#include "HTMLParserIdioms.h"
+#include "KeyboardEvent.h"
#include "RenderSlider.h"
#include <limits>
#include <wtf/MathExtras.h>
@@ -127,6 +128,46 @@ double RangeInputType::stepScaleFactor() const
return rangeStepScaleFactor;
}
+bool RangeInputType::handleKeydownEvent(KeyboardEvent* event)
+{
+ const String& key = event->keyIdentifier();
+ if (key != "Up" && key != "Right" && key != "Down" && key != "Left")
+ return false;
+
+ ExceptionCode ec;
+ if (equalIgnoringCase(element()->fastGetAttribute(stepAttr), "any")) {
+ double min = minimum();
+ double max = maximum();
+ // FIXME: We can't use stepUp() for the step value "any". So, we increase
+ // or decrease the value by 1/100 of the value range. Is it reasonable?
+ double step = (max - min) / 100;
+ double current = parseToDouble(element()->value(), numeric_limits<double>::quiet_NaN());
+ ASSERT(isfinite(current));
+ double newValue;
+ if (key == "Up" || key == "Right") {
+ newValue = current + step;
+ if (newValue > max)
+ newValue = max;
+ } else {
+ newValue = current - step;
+ if (newValue < min)
+ newValue = min;
+ }
+ if (newValue != current) {
+ setValueAsNumber(newValue, ec);
+ element()->dispatchFormControlChangeEvent();
+ }
+ } else {
+ int stepMagnification = (key == "Up" || key == "Right") ? 1 : -1;
+ String lastStringValue = element()->value();
+ element()->stepUp(stepMagnification, ec);
+ if (lastStringValue != element()->value())
+ element()->dispatchFormControlChangeEvent();
+ }
+ event->setDefaultHandled();
+ return true;
+}
+
RenderObject* RangeInputType::createRenderer(RenderArena* arena, RenderStyle*) const
{
return new (arena) RenderSlider(element());
diff --git a/WebCore/html/RangeInputType.h b/WebCore/html/RangeInputType.h
index 64548f6..c2bbb0f 100644
--- a/WebCore/html/RangeInputType.h
+++ b/WebCore/html/RangeInputType.h
@@ -53,6 +53,7 @@ private:
virtual double stepBase() const;
virtual double defaultStep() const;
virtual double stepScaleFactor() const;
+ virtual bool handleKeydownEvent(KeyboardEvent*);
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*) const;
virtual double parseToDouble(const String&, double) const;
virtual String serialize(double) const;
diff --git a/WebCore/html/ResetInputType.cpp b/WebCore/html/ResetInputType.cpp
index 1db7592..b911dee 100644
--- a/WebCore/html/ResetInputType.cpp
+++ b/WebCore/html/ResetInputType.cpp
@@ -31,6 +31,8 @@
#include "config.h"
#include "ResetInputType.h"
+#include "Event.h"
+#include "HTMLInputElement.h"
#include <wtf/PassOwnPtr.h>
namespace WebCore {
@@ -50,4 +52,13 @@ bool ResetInputType::supportsValidation() const
return false;
}
+bool ResetInputType::handleDOMActivateEvent(Event* event)
+{
+ if (element()->disabled() || !element()->form())
+ return false;
+ element()->form()->reset();
+ event->setDefaultHandled();
+ return true;
+}
+
} // namespace WebCore
diff --git a/WebCore/html/ResetInputType.h b/WebCore/html/ResetInputType.h
index ad940b4..153afac 100644
--- a/WebCore/html/ResetInputType.h
+++ b/WebCore/html/ResetInputType.h
@@ -43,6 +43,7 @@ private:
ResetInputType(HTMLInputElement* element) : BaseButtonInputType(element) { }
virtual const AtomicString& formControlType() const;
virtual bool supportsValidation() const;
+ virtual bool handleDOMActivateEvent(Event*);
};
} // namespace WebCore
diff --git a/WebCore/html/SubmitInputType.cpp b/WebCore/html/SubmitInputType.cpp
index 99c808e..2f7d97e 100644
--- a/WebCore/html/SubmitInputType.cpp
+++ b/WebCore/html/SubmitInputType.cpp
@@ -31,6 +31,7 @@
#include "config.h"
#include "SubmitInputType.h"
+#include "Event.h"
#include "FormDataList.h"
#include "HTMLInputElement.h"
#include <wtf/PassOwnPtr.h>
@@ -60,4 +61,16 @@ bool SubmitInputType::supportsValidation() const
return false;
}
+bool SubmitInputType::handleDOMActivateEvent(Event* event)
+{
+ RefPtr<HTMLInputElement> element = this->element();
+ if (element->disabled() || !element->form())
+ return false;
+ element->setActivatedSubmit(true);
+ element->form()->prepareSubmit(event); // Event handlers can run.
+ element->setActivatedSubmit(false);
+ event->setDefaultHandled();
+ return true;
+}
+
} // namespace WebCore
diff --git a/WebCore/html/SubmitInputType.h b/WebCore/html/SubmitInputType.h
index 2fe7ace..d03219c 100644
--- a/WebCore/html/SubmitInputType.h
+++ b/WebCore/html/SubmitInputType.h
@@ -44,6 +44,7 @@ private:
virtual const AtomicString& formControlType() const;
virtual bool appendFormData(FormDataList&, bool) const;
virtual bool supportsValidation() const;
+ virtual bool handleDOMActivateEvent(Event*);
};
} // namespace WebCore
diff --git a/WebCore/html/TextFieldInputType.cpp b/WebCore/html/TextFieldInputType.cpp
index 926d0ac..d93f972 100644
--- a/WebCore/html/TextFieldInputType.cpp
+++ b/WebCore/html/TextFieldInputType.cpp
@@ -31,7 +31,9 @@
#include "config.h"
#include "TextFieldInputType.h"
+#include "Frame.h"
#include "HTMLInputElement.h"
+#include "KeyboardEvent.h"
#include "RenderTextControlSingleLine.h"
#include <wtf/text/WTFString.h>
@@ -47,6 +49,32 @@ bool TextFieldInputType::valueMissing(const String& value) const
return value.isEmpty();
}
+bool TextFieldInputType::handleKeydownEvent(KeyboardEvent* event)
+{
+ if (!element()->focused())
+ return false;
+ Frame* frame = element()->document()->frame();
+ if (!frame || !frame->editor()->doTextFieldCommandFromEvent(element(), event))
+ return false;
+ event->setDefaultHandled();
+ return true;
+}
+
+bool TextFieldInputType::handleKeydownEventForSpinButton(KeyboardEvent* event)
+{
+ const String& key = event->keyIdentifier();
+ int step = 0;
+ if (key == "Up")
+ step = 1;
+ else if (key == "Down")
+ step = -1;
+ else
+ return false;
+ element()->stepUpFromRenderer(step);
+ event->setDefaultHandled();
+ return true;
+}
+
RenderObject* TextFieldInputType::createRenderer(RenderArena* arena, RenderStyle*) const
{
return new (arena) RenderTextControlSingleLine(element(), element()->placeholderShouldBeVisible());
diff --git a/WebCore/html/TextFieldInputType.h b/WebCore/html/TextFieldInputType.h
index 78bec1d..50418aa 100644
--- a/WebCore/html/TextFieldInputType.h
+++ b/WebCore/html/TextFieldInputType.h
@@ -42,6 +42,8 @@ protected:
TextFieldInputType(HTMLInputElement* element) : InputType(element) { }
virtual bool isTextField() const;
virtual bool valueMissing(const String&) const;
+ virtual bool handleKeydownEvent(KeyboardEvent*);
+ bool handleKeydownEventForSpinButton(KeyboardEvent*);
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*) const;
};
diff --git a/WebCore/html/URLInputType.cpp b/WebCore/html/URLInputType.cpp
index 517ffad..1b8f3da 100644
--- a/WebCore/html/URLInputType.cpp
+++ b/WebCore/html/URLInputType.cpp
@@ -32,6 +32,7 @@
#include "URLInputType.h"
#include "HTMLInputElement.h"
+#include "LocalizedStrings.h"
#include "KURL.h"
#include <wtf/PassOwnPtr.h>
@@ -57,4 +58,9 @@ bool URLInputType::typeMismatch() const
return typeMismatchFor(element()->value());
}
+String URLInputType::typeMismatchText() const
+{
+ return validationMessageTypeMismatchForURLText();
+}
+
} // namespace WebCore
diff --git a/WebCore/html/URLInputType.h b/WebCore/html/URLInputType.h
index 82ab1b7..4a6522c 100644
--- a/WebCore/html/URLInputType.h
+++ b/WebCore/html/URLInputType.h
@@ -44,6 +44,7 @@ private:
virtual const AtomicString& formControlType() const;
virtual bool typeMismatchFor(const String&) const;
virtual bool typeMismatch() const;
+ virtual String typeMismatchText() const;
};
} // namespace WebCore
diff --git a/WebCore/html/ValidityState.cpp b/WebCore/html/ValidityState.cpp
index 57fb438..84fc664 100644
--- a/WebCore/html/ValidityState.cpp
+++ b/WebCore/html/ValidityState.cpp
@@ -44,18 +44,45 @@ String ValidityState::validationMessage() const
return m_customErrorMessage;
if (valueMissing())
return validationMessageValueMissingText();
- if (typeMismatch())
- return validationMessageTypeMismatchText();
if (patternMismatch())
return validationMessagePatternMismatchText();
- if (tooLong())
- return validationMessageTooLongText();
- if (rangeUnderflow())
- return validationMessageRangeUnderflowText();
- if (rangeOverflow())
- return validationMessageRangeOverflowText();
- if (stepMismatch())
- return validationMessageStepMismatchText();
+ bool isInputElement = m_control->hasTagName(inputTag);
+ bool isTextAreaElement = m_control->hasTagName(textareaTag);
+ if (typeMismatch()) {
+ if (isInputElement)
+ return static_cast<HTMLInputElement*>(m_control)->typeMismatchText();
+ return validationMessageTypeMismatchText();
+ }
+ if (tooLong()) {
+ if (!isInputElement && !isTextAreaElement) {
+ ASSERT_NOT_REACHED();
+ return String();
+ }
+ HTMLTextFormControlElement* text = static_cast<HTMLTextFormControlElement*>(m_control);
+ return validationMessageTooLongText(numGraphemeClusters(text->value()), text->maxLength());
+ }
+ if (rangeUnderflow()) {
+ if (!isInputElement) {
+ ASSERT_NOT_REACHED();
+ return String();
+ }
+ return validationMessageRangeUnderflowText(static_cast<HTMLInputElement*>(m_control)->minimumString());
+ }
+ if (rangeOverflow()) {
+ if (!isInputElement) {
+ ASSERT_NOT_REACHED();
+ return String();
+ }
+ return validationMessageRangeOverflowText(static_cast<HTMLInputElement*>(m_control)->maximumString());
+ }
+ if (stepMismatch()) {
+ if (!isInputElement) {
+ ASSERT_NOT_REACHED();
+ return String();
+ }
+ HTMLInputElement* input = static_cast<HTMLInputElement*>(m_control);
+ return validationMessageStepMismatchText(input->stepBaseString(), input->stepString());
+ }
return String();
}
diff --git a/WebCore/html/canvas/CanvasRenderingContext2D.cpp b/WebCore/html/canvas/CanvasRenderingContext2D.cpp
index a2d9e98..b9f86ce 100644
--- a/WebCore/html/canvas/CanvasRenderingContext2D.cpp
+++ b/WebCore/html/canvas/CanvasRenderingContext2D.cpp
@@ -793,16 +793,6 @@ void CanvasRenderingContext2D::rect(float x, float y, float width, float height)
return;
}
- if (width < 0) {
- width = -width;
- x -= width;
- }
-
- if (height < 0) {
- height = -height;
- y -= height;
- }
-
m_path.addRect(FloatRect(x, y, width, height));
}
diff --git a/WebCore/html/canvas/WebGLRenderingContext.cpp b/WebCore/html/canvas/WebGLRenderingContext.cpp
index 94dac10..0cbbc8e 100644
--- a/WebCore/html/canvas/WebGLRenderingContext.cpp
+++ b/WebCore/html/canvas/WebGLRenderingContext.cpp
@@ -105,11 +105,9 @@ WebGLRenderingContext::WebGLRenderingContext(HTMLCanvasElement* passedCanvas, Pa
, m_context(context)
, m_videoCache(4)
, m_contextLost(false)
- , m_stencilMask(0xFFFFFFFF)
- , m_stencilFuncRef(0)
- , m_stencilFuncMask(0xFFFFFFFF)
{
ASSERT(m_context);
+ setupFlags();
initializeNewContext();
}
@@ -122,11 +120,15 @@ void WebGLRenderingContext::initializeNewContext()
m_unpackAlignment = 4;
m_unpackFlipY = false;
m_unpackPremultiplyAlpha = false;
+ m_unpackColorspaceConversion = GraphicsContext3D::BROWSER_DEFAULT_WEBGL;
m_boundArrayBuffer = 0;
m_boundElementArrayBuffer = 0;
m_currentProgram = 0;
m_framebufferBinding = 0;
m_renderbufferBinding = 0;
+ m_stencilMask = 0xFFFFFFFF;
+ m_stencilFuncRef = 0;
+ m_stencilFuncMask = 0xFFFFFFFF;
m_vertexAttribState.clear();
int numCombinedTextureImageUnits = 0;
@@ -150,15 +152,26 @@ void WebGLRenderingContext::initializeNewContext()
if (!isGLES2Compliant())
initVertexAttrib0();
- if (isGLES2Compliant())
- m_isDepthStencilSupported = m_context->getExtensions()->supports("GL_OES_packed_depth_stencil");
- else
- m_isDepthStencilSupported = m_context->getExtensions()->supports("GL_EXT_packed_depth_stencil");
-
m_context->reshape(canvas()->width(), canvas()->height());
m_context->viewport(0, 0, canvas()->width(), canvas()->height());
}
+void WebGLRenderingContext::setupFlags()
+{
+ ASSERT(m_context);
+
+ m_isGLES2Compliant = m_context->isGLES2Compliant();
+ m_isErrorGeneratedOnOutOfBoundsAccesses = m_context->getExtensions()->supports("GL_CHROMIUM_strict_attribs");
+ m_isResourceSafe = m_context->getExtensions()->supports("GL_CHROMIUM_resource_safe");
+ if (m_isGLES2Compliant) {
+ m_isGLES2NPOTStrict = !m_context->getExtensions()->supports("GL_OES_texture_npot");
+ m_isDepthStencilSupported = m_context->getExtensions()->supports("GL_OES_packed_depth_stencil");
+ } else {
+ m_isGLES2NPOTStrict = !m_context->getExtensions()->supports("GL_ARB_texture_non_power_of_two");
+ m_isDepthStencilSupported = m_context->getExtensions()->supports("GL_EXT_packed_depth_stencil");
+ }
+}
+
WebGLRenderingContext::~WebGLRenderingContext()
{
detachAndRemoveAllObjects();
@@ -423,6 +436,10 @@ void WebGLRenderingContext::bufferData(unsigned long target, ArrayBuffer* data,
WebGLBuffer* buffer = validateBufferDataParameters(target, usage);
if (!buffer)
return;
+ if (!data) {
+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
+ return;
+ }
if (!isErrorGeneratedOnOutOfBoundsAccesses()) {
if (!buffer->associateBufferData(data)) {
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
@@ -442,6 +459,10 @@ void WebGLRenderingContext::bufferData(unsigned long target, ArrayBufferView* da
WebGLBuffer* buffer = validateBufferDataParameters(target, usage);
if (!buffer)
return;
+ if (!data) {
+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
+ return;
+ }
if (!isErrorGeneratedOnOutOfBoundsAccesses()) {
if (!buffer->associateBufferData(data)) {
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
@@ -461,6 +482,8 @@ void WebGLRenderingContext::bufferSubData(unsigned long target, long offset, Arr
WebGLBuffer* buffer = validateBufferDataParameters(target, GraphicsContext3D::STATIC_DRAW);
if (!buffer)
return;
+ if (!data)
+ return;
if (!isErrorGeneratedOnOutOfBoundsAccesses()) {
if (!buffer->associateBufferSubData(offset, data)) {
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
@@ -480,6 +503,8 @@ void WebGLRenderingContext::bufferSubData(unsigned long target, long offset, Arr
WebGLBuffer* buffer = validateBufferDataParameters(target, GraphicsContext3D::STATIC_DRAW);
if (!buffer)
return;
+ if (!data)
+ return;
if (!isErrorGeneratedOnOutOfBoundsAccesses()) {
if (!buffer->associateBufferSubData(offset, data)) {
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
@@ -1632,6 +1657,8 @@ WebGLGetInfo WebGLRenderingContext::getParameter(unsigned long pname, ExceptionC
return WebGLGetInfo(m_unpackFlipY);
case GraphicsContext3D::UNPACK_PREMULTIPLY_ALPHA_WEBGL:
return WebGLGetInfo(m_unpackPremultiplyAlpha);
+ case GraphicsContext3D::UNPACK_COLORSPACE_CONVERSION_WEBGL:
+ return WebGLGetInfo(m_unpackColorspaceConversion);
case GraphicsContext3D::VENDOR:
return WebGLGetInfo("Webkit (" + m_context->getString(GraphicsContext3D::VENDOR) + ")");
case GraphicsContext3D::VERSION:
@@ -1700,7 +1727,7 @@ WebGLGetInfo WebGLRenderingContext::getRenderbufferParameter(unsigned long targe
if (m_renderbufferBinding->getInternalFormat() == GraphicsContext3D::DEPTH_STENCIL
&& !m_renderbufferBinding->isValid()) {
- ASSERT(!m_isDepthStencilSupported);
+ ASSERT(!isDepthStencilSupported());
long value = 0;
switch (pname) {
case GraphicsContext3D::RENDERBUFFER_WIDTH:
@@ -2148,21 +2175,32 @@ void WebGLRenderingContext::pixelStorei(unsigned long pname, long param)
case GraphicsContext3D::UNPACK_PREMULTIPLY_ALPHA_WEBGL:
m_unpackPremultiplyAlpha = param;
break;
+ case GraphicsContext3D::UNPACK_COLORSPACE_CONVERSION_WEBGL:
+ if (param == GraphicsContext3D::BROWSER_DEFAULT_WEBGL || param == GraphicsContext3D::NONE)
+ m_unpackColorspaceConversion = static_cast<unsigned long>(param);
+ else {
+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
+ return;
+ }
+ break;
case GraphicsContext3D::PACK_ALIGNMENT:
case GraphicsContext3D::UNPACK_ALIGNMENT:
- m_context->pixelStorei(pname, param);
if (param == 1 || param == 2 || param == 4 || param == 8) {
if (pname == GraphicsContext3D::PACK_ALIGNMENT)
m_packAlignment = static_cast<int>(param);
else // GraphicsContext3D::UNPACK_ALIGNMENT:
m_unpackAlignment = static_cast<int>(param);
+ m_context->pixelStorei(pname, param);
+ cleanupAfterGraphicsCall(false);
+ } else {
+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
+ return;
}
break;
default:
m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
return;
}
- cleanupAfterGraphicsCall(false);
}
void WebGLRenderingContext::polygonOffset(double factor, double units)
@@ -2278,12 +2316,12 @@ void WebGLRenderingContext::renderbufferStorage(unsigned long target, unsigned l
cleanupAfterGraphicsCall(false);
break;
case GraphicsContext3D::DEPTH_STENCIL:
- if (m_isDepthStencilSupported) {
+ if (isDepthStencilSupported()) {
m_context->renderbufferStorage(target, Extensions3D::DEPTH24_STENCIL8, width, height);
cleanupAfterGraphicsCall(false);
} else
m_renderbufferBinding->setSize(width, height);
- m_renderbufferBinding->setIsValid(m_isDepthStencilSupported);
+ m_renderbufferBinding->setIsValid(isDepthStencilSupported());
m_renderbufferBinding->setInternalFormat(internalformat);
break;
default:
@@ -2417,7 +2455,7 @@ void WebGLRenderingContext::texImage2DImpl(unsigned target, unsigned level, unsi
{
ec = 0;
Vector<uint8_t> data;
- if (!m_context->extractImageData(image, format, type, flipY, premultiplyAlpha, data)) {
+ if (!m_context->extractImageData(image, format, type, flipY, premultiplyAlpha, m_unpackColorspaceConversion == GraphicsContext3D::NONE, data)) {
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
return;
}
@@ -2603,7 +2641,7 @@ void WebGLRenderingContext::texSubImage2DImpl(unsigned target, unsigned level, u
if (isContextLost())
return;
Vector<uint8_t> data;
- if (!m_context->extractImageData(image, format, type, flipY, premultiplyAlpha, data)) {
+ if (!m_context->extractImageData(image, format, type, flipY, premultiplyAlpha, m_unpackColorspaceConversion == GraphicsContext3D::NONE, data)) {
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
return;
}
@@ -3380,21 +3418,6 @@ WebGLGetInfo WebGLRenderingContext::getWebGLIntArrayParameter(unsigned long pnam
return WebGLGetInfo(Int32Array::create(value, length));
}
-bool WebGLRenderingContext::isGLES2Compliant()
-{
- return m_context->isGLES2Compliant();
-}
-
-bool WebGLRenderingContext::isGLES2NPOTStrict()
-{
- return m_context->isGLES2NPOTStrict();
-}
-
-bool WebGLRenderingContext::isErrorGeneratedOnOutOfBoundsAccesses()
-{
- return m_context->isErrorGeneratedOnOutOfBoundsAccesses();
-}
-
void WebGLRenderingContext::handleNPOTTextures(bool prepareToDraw)
{
bool resetActiveUnit = false;
diff --git a/WebCore/html/canvas/WebGLRenderingContext.h b/WebCore/html/canvas/WebGLRenderingContext.h
index 5f66248..950d704 100644
--- a/WebCore/html/canvas/WebGLRenderingContext.h
+++ b/WebCore/html/canvas/WebGLRenderingContext.h
@@ -54,7 +54,6 @@ class HTMLVideoElement;
class ImageBuffer;
class ImageData;
class IntSize;
-class WebKitCSSMatrix;
class WebGLRenderingContext : public CanvasRenderingContext {
public:
@@ -297,6 +296,7 @@ public:
WebGLRenderingContext(HTMLCanvasElement*, PassRefPtr<GraphicsContext3D>);
void initializeNewContext();
+ void setupFlags();
void addObject(WebGLObject*);
void detachAndRemoveAllObjects();
@@ -312,9 +312,16 @@ public:
markContextChanged();
}
- bool isGLES2Compliant();
- bool isGLES2NPOTStrict();
- bool isErrorGeneratedOnOutOfBoundsAccesses();
+ // Query whether it is built on top of compliant GLES2 implementation.
+ bool isGLES2Compliant() { return m_isGLES2Compliant; }
+ // Query if the GL implementation is NPOT strict.
+ bool isGLES2NPOTStrict() { return m_isGLES2NPOTStrict; }
+ // Query if the GL implementation generates errors on out-of-bounds buffer accesses.
+ bool isErrorGeneratedOnOutOfBoundsAccesses() { return m_isErrorGeneratedOnOutOfBoundsAccesses; }
+ // Query if the GL implementation initializes textures/renderbuffers to 0.
+ bool isResourceSafe() { return m_isResourceSafe; }
+ // Query if depth_stencil buffer is supported.
+ bool isDepthStencilSupported() { return m_isDepthStencilSupported; }
// Helper to return the size in bytes of OpenGL data types
// like GL_FLOAT, GL_INT, etc.
@@ -422,6 +429,7 @@ public:
int m_unpackAlignment;
bool m_unpackFlipY;
bool m_unpackPremultiplyAlpha;
+ unsigned long m_unpackColorspaceConversion;
bool m_contextLost;
long m_stencilBits;
@@ -429,6 +437,10 @@ public:
long m_stencilFuncRef; // Note that this is the user specified value, not the internal clamped value.
unsigned long m_stencilFuncMask;
+ bool m_isGLES2Compliant;
+ bool m_isGLES2NPOTStrict;
+ bool m_isErrorGeneratedOnOutOfBoundsAccesses;
+ bool m_isResourceSafe;
bool m_isDepthStencilSupported;
// Helpers for getParameter and others
diff --git a/WebCore/html/canvas/WebGLRenderingContext.idl b/WebCore/html/canvas/WebGLRenderingContext.idl
index 4d41b78..afac638 100644
--- a/WebCore/html/canvas/WebGLRenderingContext.idl
+++ b/WebCore/html/canvas/WebGLRenderingContext.idl
@@ -37,10 +37,6 @@ module html {
const unsigned int STENCIL_BUFFER_BIT = 0x00000400;
const unsigned int COLOR_BUFFER_BIT = 0x00004000;
- /* Boolean */
- const unsigned int FALSE = 0;
- const unsigned int TRUE = 1;
-
/* BeginMode */
const unsigned int POINTS = 0x0000;
const unsigned int LINES = 0x0001;
@@ -230,7 +226,6 @@ module html {
const unsigned int INT = 0x1404;
const unsigned int UNSIGNED_INT = 0x1405;
const unsigned int FLOAT = 0x1406;
- const unsigned int FIXED = 0x140C;
/* PixelFormat */
const unsigned int DEPTH_COMPONENT = 0x1902;
@@ -398,10 +393,6 @@ module html {
const unsigned int SHADER_SOURCE_LENGTH = 0x8B88;
const unsigned int SHADER_COMPILER = 0x8DFA;
- /* Shader Binary */
- const unsigned int SHADER_BINARY_FORMATS = 0x8DF8;
- const unsigned int NUM_SHADER_BINARY_FORMATS = 0x8DF9;
-
/* Shader Precision-Specified Types */
const unsigned int LOW_FLOAT = 0x8DF0;
const unsigned int MEDIUM_FLOAT = 0x8DF1;
@@ -457,9 +448,11 @@ module html {
const unsigned int INVALID_FRAMEBUFFER_OPERATION = 0x0506;
/* WebGL-specific enums */
- const unsigned int UNPACK_FLIP_Y_WEBGL = 0x9240;
- const unsigned int UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241;
- const unsigned int CONTEXT_LOST_WEBGL = 0x9242;
+ const unsigned int UNPACK_FLIP_Y_WEBGL = 0x9240;
+ const unsigned int UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241;
+ const unsigned int CONTEXT_LOST_WEBGL = 0x9242;
+ const unsigned int UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243;
+ const unsigned int BROWSER_DEFAULT_WEBGL = 0x9244;
[StrictTypeChecking] void activeTexture(in unsigned long texture) raises(DOMException);
[StrictTypeChecking] void attachShader(in WebGLProgram program, in WebGLShader shader) raises(DOMException);
diff --git a/WebCore/html/parser/HTMLConstructionSite.cpp b/WebCore/html/parser/HTMLConstructionSite.cpp
index 7201ac7..c46b9b9 100644
--- a/WebCore/html/parser/HTMLConstructionSite.cpp
+++ b/WebCore/html/parser/HTMLConstructionSite.cpp
@@ -91,7 +91,7 @@ PassRefPtr<ChildType> HTMLConstructionSite::attach(ContainerNode* parent, PassRe
// doesn't. It feels like we're missing a concept somehow.
if (shouldFosterParent()) {
fosterParent(child.get());
- ASSERT(child->attached() || !child->parent() || !child->parent()->attached());
+ ASSERT(child->attached() || !child->parentNode() || !child->parentNode()->attached());
return child.release();
}
@@ -434,7 +434,7 @@ void HTMLConstructionSite::findFosterSite(AttachmentSite& site)
HTMLElementStack::ElementRecord* lastTableElementRecord = m_openElements.topmost(tableTag.localName());
if (lastTableElementRecord) {
Element* lastTableElement = lastTableElementRecord->element();
- if (ContainerNode* parent = lastTableElement->parent()) {
+ if (ContainerNode* parent = lastTableElement->parentNode()) {
site.parent = parent;
site.nextChild = lastTableElement;
return;
diff --git a/WebCore/html/parser/HTMLDocumentParser.cpp b/WebCore/html/parser/HTMLDocumentParser.cpp
index 46530d5..68b59a4 100644
--- a/WebCore/html/parser/HTMLDocumentParser.cpp
+++ b/WebCore/html/parser/HTMLDocumentParser.cpp
@@ -195,12 +195,12 @@ bool HTMLDocumentParser::runScriptsForPausedTreeBuilder()
{
ASSERT(m_treeBuilder->isPaused());
- int scriptStartLine = 0;
- RefPtr<Element> scriptElement = m_treeBuilder->takeScriptToProcess(scriptStartLine);
+ TextPosition1 scriptStartPosition = TextPosition1::belowRangePosition();
+ RefPtr<Element> scriptElement = m_treeBuilder->takeScriptToProcess(scriptStartPosition);
// We will not have a scriptRunner when parsing a DocumentFragment.
if (!m_scriptRunner)
return true;
- return m_scriptRunner->execute(scriptElement.release(), scriptStartLine);
+ return m_scriptRunner->execute(scriptElement.release(), scriptStartPosition);
}
void HTMLDocumentParser::pumpTokenizer(SynchronousMode mode)
@@ -410,9 +410,13 @@ int HTMLDocumentParser::lineNumber() const
return m_tokenizer->lineNumber();
}
-int HTMLDocumentParser::columnNumber() const
+TextPosition0 HTMLDocumentParser::textPosition() const
{
- return m_tokenizer->columnNumber();
+ int lineZeroBased = m_tokenizer->lineNumber();
+ int columnOneBased = m_tokenizer->columnNumber();
+
+ return TextPosition0(WTF::ZeroBasedNumber::fromZeroBasedInt(lineZeroBased),
+ WTF::OneBasedNumber::fromOneBasedInt(columnOneBased).convertToZeroBased());
}
bool HTMLDocumentParser::isWaitingForScripts() const
diff --git a/WebCore/html/parser/HTMLDocumentParser.h b/WebCore/html/parser/HTMLDocumentParser.h
index d9625f1..05053df 100644
--- a/WebCore/html/parser/HTMLDocumentParser.h
+++ b/WebCore/html/parser/HTMLDocumentParser.h
@@ -92,7 +92,7 @@ private:
virtual bool isExecutingScript() const;
virtual void executeScriptsWaitingForStylesheets();
virtual int lineNumber() const;
- virtual int columnNumber() const;
+ virtual TextPosition0 textPosition() const;
// HTMLScriptRunnerHost
virtual void watchForLoad(CachedResource*);
diff --git a/WebCore/html/parser/HTMLParserIdioms.cpp b/WebCore/html/parser/HTMLParserIdioms.cpp
index 0ce5e4d..91ff8d3 100644
--- a/WebCore/html/parser/HTMLParserIdioms.cpp
+++ b/WebCore/html/parser/HTMLParserIdioms.cpp
@@ -96,6 +96,78 @@ bool parseToDoubleForNumberType(const String& string, double* result)
return true;
}
+bool parseToDoubleForNumberTypeWithDecimalPlaces(const String& string, double *result, unsigned *decimalPlaces)
+{
+ if (decimalPlaces)
+ *decimalPlaces = 0;
+
+ if (!parseToDoubleForNumberType(string, result))
+ return false;
+
+ if (!decimalPlaces)
+ return true;
+
+ size_t dotIndex = string.find('.');
+ size_t eIndex = string.find('e');
+ if (eIndex == notFound)
+ eIndex = string.find('E');
+
+ unsigned baseDecimalPlaces = 0;
+ if (dotIndex != notFound) {
+ if (eIndex == notFound)
+ baseDecimalPlaces = string.length() - dotIndex - 1;
+ else
+ baseDecimalPlaces = eIndex - dotIndex - 1;
+ }
+
+ int exponent = 0;
+ if (eIndex != notFound) {
+ unsigned cursor = eIndex + 1, cursorSaved;
+ int digit, exponentSign;
+ int32_t exponent32;
+ size_t length = string.length();
+
+ // Not using String.toInt() in order to perform the same computation as dtoa() does.
+ exponentSign = 0;
+ switch (digit = string[cursor]) {
+ case '-':
+ exponentSign = 1;
+ case '+':
+ digit = string[++cursor];
+ }
+ if (digit >= '0' && digit <= '9') {
+ while (cursor < length && digit == '0')
+ digit = string[++cursor];
+ if (digit > '0' && digit <= '9') {
+ exponent32 = digit - '0';
+ cursorSaved = cursor;
+ while (cursor < length && (digit = string[++cursor]) >= '0' && digit <= '9')
+ exponent32 = (10 * exponent32) + digit - '0';
+ if (cursor - cursorSaved > 8 || exponent32 > 19999)
+ /* Avoid confusion from exponents
+ * so large that e might overflow.
+ */
+ exponent = 19999; /* safe for 16 bit ints */
+ else
+ exponent = static_cast<int>(exponent32);
+ if (exponentSign)
+ exponent = -exponent;
+ } else
+ exponent = 0;
+ }
+ }
+
+ int intDecimalPlaces = baseDecimalPlaces - exponent;
+ if (intDecimalPlaces < 0)
+ *decimalPlaces = 0;
+ else if (intDecimalPlaces > 19999)
+ *decimalPlaces = 19999;
+ else
+ *decimalPlaces = static_cast<unsigned>(intDecimalPlaces);
+
+ return true;
+}
+
// http://www.whatwg.org/specs/web-apps/current-work/#rules-for-parsing-integers
bool parseHTMLInteger(const String& input, int& value)
{
diff --git a/WebCore/html/parser/HTMLParserIdioms.h b/WebCore/html/parser/HTMLParserIdioms.h
index 4839138..4e8e58f 100644
--- a/WebCore/html/parser/HTMLParserIdioms.h
+++ b/WebCore/html/parser/HTMLParserIdioms.h
@@ -44,6 +44,7 @@ String serializeForNumberType(double);
// Leading or trailing illegal characters cause failure, as does passing an empty string.
// The double* parameter may be 0 to check if the string can be parsed without getting the result.
bool parseToDoubleForNumberType(const String&, double*);
+bool parseToDoubleForNumberTypeWithDecimalPlaces(const String&, double*, unsigned*);
// http://www.whatwg.org/specs/web-apps/current-work/#rules-for-parsing-integers
bool parseHTMLInteger(const String&, int&);
diff --git a/WebCore/html/parser/HTMLScriptRunner.cpp b/WebCore/html/parser/HTMLScriptRunner.cpp
index 75db644..7978a0f 100644
--- a/WebCore/html/parser/HTMLScriptRunner.cpp
+++ b/WebCore/html/parser/HTMLScriptRunner.cpp
@@ -32,9 +32,9 @@
#include "Element.h"
#include "Event.h"
#include "Frame.h"
-#include "HTMLScriptRunnerHost.h"
#include "HTMLInputStream.h"
#include "HTMLNames.h"
+#include "HTMLScriptRunnerHost.h"
#include "IgnoreDestructiveWriteCountIncrementer.h"
#include "NestingLevelIncrementer.h"
#include "NotImplemented.h"
@@ -99,7 +99,7 @@ ScriptSourceCode HTMLScriptRunner::sourceFromPendingScript(const PendingScript&
return ScriptSourceCode(script.cachedScript());
}
errorOccurred = false;
- return ScriptSourceCode(script.element()->textContent(), documentURLForScriptExecution(m_document), script.startingLineNumber());
+ return ScriptSourceCode(script.element()->textContent(), documentURLForScriptExecution(m_document), script.startingPosition());
}
bool HTMLScriptRunner::isPendingScriptReady(const PendingScript& script)
@@ -133,29 +133,21 @@ void HTMLScriptRunner::executePendingScriptAndDispatchEvent(PendingScript& pendi
stopWatchingForLoad(pendingScript);
// Clear the pending script before possible rentrancy from executeScript()
- RefPtr<Element> scriptElement = pendingScript.releaseElementAndClear();
- {
+ RefPtr<Element> element = pendingScript.releaseElementAndClear();
+ if (ScriptElement* scriptElement = toScriptElement(element.get())) {
NestingLevelIncrementer nestingLevelIncrementer(m_scriptNestingLevel);
IgnoreDestructiveWriteCountIncrementer ignoreDestructiveWriteCountIncrementer(m_document);
if (errorOccurred)
- scriptElement->dispatchEvent(createScriptErrorEvent());
+ element->dispatchEvent(createScriptErrorEvent());
else {
- executeScript(sourceCode);
- scriptElement->dispatchEvent(createScriptLoadEvent());
+ ASSERT(isExecutingScript());
+ scriptElement->executeScript(sourceCode);
+ element->dispatchEvent(createScriptLoadEvent());
}
}
ASSERT(!m_scriptNestingLevel);
}
-void HTMLScriptRunner::executeScript(const ScriptSourceCode& sourceCode) const
-{
- ASSERT(m_document);
- ASSERT(isExecutingScript());
- if (!m_document->frame())
- return;
- m_document->frame()->script()->executeScript(sourceCode);
-}
-
void HTMLScriptRunner::watchForLoad(PendingScript& pendingScript)
{
ASSERT(!pendingScript.watchingForLoad());
@@ -172,13 +164,13 @@ void HTMLScriptRunner::stopWatchingForLoad(PendingScript& pendingScript)
// This function should match 10.2.5.11 "An end tag whose tag name is 'script'"
// Script handling lives outside the tree builder to keep the each class simple.
-bool HTMLScriptRunner::execute(PassRefPtr<Element> scriptElement, int startLine)
+bool HTMLScriptRunner::execute(PassRefPtr<Element> scriptElement, const TextPosition1& scriptStartPosition)
{
ASSERT(scriptElement);
// FIXME: If scripting is disabled, always just return true;
// Try to execute the script given to us.
- runScript(scriptElement.get(), startLine);
+ runScript(scriptElement.get(), scriptStartPosition);
if (haveParsingBlockingScript()) {
if (m_scriptNestingLevel)
@@ -290,7 +282,7 @@ bool HTMLScriptRunner::requestPendingScript(PendingScript& pendingScript, Elemen
// This method is meant to match the HTML5 definition of "running a script"
// http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#running-a-script
-void HTMLScriptRunner::runScript(Element* script, int startingLineNumber)
+void HTMLScriptRunner::runScript(Element* script, const TextPosition1& scriptStartPosition)
{
ASSERT(m_document);
ASSERT(!haveParsingBlockingScript());
@@ -317,8 +309,8 @@ void HTMLScriptRunner::runScript(Element* script, int startingLineNumber)
// See https://bugs.webkit.org/show_bug.cgi?id=40047
// ASSERT(document()->haveStylesheetsLoaded());
ASSERT(isExecutingScript());
- ScriptSourceCode sourceCode(script->textContent(), documentURLForScriptExecution(m_document), startingLineNumber);
- executeScript(sourceCode);
+ ScriptSourceCode sourceCode(script->textContent(), documentURLForScriptExecution(m_document), scriptStartPosition);
+ scriptElement->executeScript(sourceCode);
}
}
}
diff --git a/WebCore/html/parser/HTMLScriptRunner.h b/WebCore/html/parser/HTMLScriptRunner.h
index be21dd2..6cf74d8 100644
--- a/WebCore/html/parser/HTMLScriptRunner.h
+++ b/WebCore/html/parser/HTMLScriptRunner.h
@@ -28,6 +28,7 @@
#include "PendingScript.h"
#include <wtf/Deque.h>
+#include <wtf/text/TextPosition.h>
#include <wtf/Noncopyable.h>
#include <wtf/PassRefPtr.h>
@@ -52,7 +53,7 @@ public:
void detach();
// Processes the passed in script and any pending scripts if possible.
- bool execute(PassRefPtr<Element> scriptToProcess, int scriptStartLine);
+ bool execute(PassRefPtr<Element> scriptToProcess, const TextPosition1& scriptStartPosition);
bool executeScriptsWaitingForLoad(CachedResource*);
bool hasScriptsWaitingForStylesheets() const { return m_hasScriptsWaitingForStylesheets; }
@@ -68,7 +69,6 @@ private:
void executeParsingBlockingScript();
void executePendingScriptAndDispatchEvent(PendingScript&);
- void executeScript(const ScriptSourceCode&) const;
bool haveParsingBlockingScript() const;
bool executeParsingBlockingScripts();
@@ -76,7 +76,7 @@ private:
void requestDeferredScript(Element*);
bool requestPendingScript(PendingScript&, Element*) const;
- void runScript(Element*, int startingLineNumber);
+ void runScript(Element*, const TextPosition1& scriptStartPosition);
// Helpers for dealing with HTMLScriptRunnerHost
void watchForLoad(PendingScript&);
diff --git a/WebCore/html/parser/HTMLTreeBuilder.cpp b/WebCore/html/parser/HTMLTreeBuilder.cpp
index 6134607..3d39131 100644
--- a/WebCore/html/parser/HTMLTreeBuilder.cpp
+++ b/WebCore/html/parser/HTMLTreeBuilder.cpp
@@ -56,6 +56,11 @@ using namespace HTMLNames;
static const int uninitializedLineNumberValue = -1;
+static TextPosition1 uninitializedPositionValue1()
+{
+ return TextPosition1(WTF::OneBasedNumber::fromOneBasedInt(-1), WTF::OneBasedNumber::base());
+}
+
namespace {
inline bool isHTMLSpaceOrReplacementCharacter(UChar character)
@@ -225,7 +230,7 @@ HTMLFormElement* closestFormAncestor(Element* element)
while (element) {
if (element->hasTagName(formTag))
return static_cast<HTMLFormElement*>(element);
- Node* parent = element->parent();
+ ContainerNode* parent = element->parentNode();
if (!parent || !parent->isElementNode())
return 0;
element = static_cast<Element*>(parent);
@@ -340,8 +345,8 @@ HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, HTMLDocument* documen
, m_insertionMode(InitialMode)
, m_originalInsertionMode(InitialMode)
, m_tokenizer(tokenizer)
- , m_scriptToProcessStartLine(uninitializedLineNumberValue)
- , m_lastScriptElementStartLine(uninitializedLineNumberValue)
+ , m_scriptToProcessStartPosition(uninitializedPositionValue1())
+ , m_lastScriptElementStartPosition(TextPosition0::belowRangePosition())
, m_usePreHTML5ParserQuirks(usePreHTML5ParserQuirks)
, m_hasPendingForeignInsertionModeSteps(false)
{
@@ -359,8 +364,8 @@ HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, DocumentFragment* fra
, m_insertionMode(InitialMode)
, m_originalInsertionMode(InitialMode)
, m_tokenizer(tokenizer)
- , m_scriptToProcessStartLine(uninitializedLineNumberValue)
- , m_lastScriptElementStartLine(uninitializedLineNumberValue)
+ , m_scriptToProcessStartPosition(uninitializedPositionValue1())
+ , m_lastScriptElementStartPosition(TextPosition0::belowRangePosition())
, m_usePreHTML5ParserQuirks(usePreHTML5ParserQuirks)
, m_hasPendingForeignInsertionModeSteps(false)
{
@@ -423,15 +428,15 @@ HTMLTreeBuilder::FragmentParsingContext::~FragmentParsingContext()
{
}
-PassRefPtr<Element> HTMLTreeBuilder::takeScriptToProcess(int& scriptStartLine)
+PassRefPtr<Element> HTMLTreeBuilder::takeScriptToProcess(TextPosition1& scriptStartPosition)
{
// Unpause ourselves, callers may pause us again when processing the script.
// The HTML5 spec is written as though scripts are executed inside the tree
// builder. We pause the parser to exit the tree builder, and then resume
// before running scripts.
m_isPaused = false;
- scriptStartLine = m_scriptToProcessStartLine;
- m_scriptToProcessStartLine = uninitializedLineNumberValue;
+ scriptStartPosition = m_scriptToProcessStartPosition;
+ m_scriptToProcessStartPosition = uninitializedPositionValue1();
return m_scriptToProcess.release();
}
@@ -549,14 +554,14 @@ void HTMLTreeBuilder::processIsindexStartTagForInBody(AtomicHTMLToken& token)
return;
notImplemented(); // Acknowledge self-closing flag
processFakeStartTag(formTag);
- Attribute* actionAttribute = token.getAttributeItem(actionAttr);
+ RefPtr<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);
+ RefPtr<Attribute> promptAttribute = token.getAttributeItem(promptAttr);
if (promptAttribute)
processFakeCharacters(promptAttribute->value());
else
@@ -2190,7 +2195,7 @@ void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token)
m_isPaused = true;
ASSERT(m_tree.currentElement()->hasTagName(scriptTag));
m_scriptToProcess = m_tree.currentElement();
- m_scriptToProcessStartLine = m_lastScriptElementStartLine + 1;
+ m_scriptToProcessStartPosition = WTF::toOneBasedTextPosition(m_lastScriptElementStartPosition);
m_tree.openElements()->pop();
if (isParsingFragment() && m_fragmentContext.scriptingPermission() == FragmentScriptingNotAllowed)
m_scriptToProcess->removeAllChildren();
@@ -2770,7 +2775,10 @@ void HTMLTreeBuilder::processScriptStartTag(AtomicHTMLToken& token)
m_tree.insertScriptElement(token);
m_tokenizer->setState(HTMLTokenizer::ScriptDataState);
m_originalInsertionMode = m_insertionMode;
- m_lastScriptElementStartLine = m_tokenizer->lineNumber();
+
+ TextPosition0 position = TextPosition0(WTF::ZeroBasedNumber::fromZeroBasedInt(m_tokenizer->lineNumber()), WTF::ZeroBasedNumber::base());
+ m_lastScriptElementStartPosition = position;
+
setInsertionMode(TextMode);
}
diff --git a/WebCore/html/parser/HTMLTreeBuilder.h b/WebCore/html/parser/HTMLTreeBuilder.h
index c6fcdfd..0e7597c 100644
--- a/WebCore/html/parser/HTMLTreeBuilder.h
+++ b/WebCore/html/parser/HTMLTreeBuilder.h
@@ -32,6 +32,7 @@
#include "HTMLElementStack.h"
#include "HTMLFormattingElementList.h"
#include "HTMLTokenizer.h"
+#include <wtf/text/TextPosition.h>
#include <wtf/Noncopyable.h>
#include <wtf/OwnPtr.h>
#include <wtf/PassOwnPtr.h>
@@ -71,7 +72,7 @@ public:
void constructTreeFromAtomicToken(AtomicHTMLToken&);
// Must be called when parser is paused before calling the parser again.
- PassRefPtr<Element> takeScriptToProcess(int& scriptStartLine);
+ PassRefPtr<Element> takeScriptToProcess(TextPosition1& scriptStartPosition);
// Done, close any open tags, etc.
void finished();
@@ -248,12 +249,12 @@ private:
HTMLTokenizer* m_tokenizer;
RefPtr<Element> m_scriptToProcess; // <script> tag which needs processing before resuming the parser.
- int m_scriptToProcessStartLine; // Starting line number of the script tag needing processing.
+ TextPosition1 m_scriptToProcessStartPosition; // Starting line number of the script tag needing processing.
// FIXME: We probably want to remove this member. Originally, it was
// created to service the legacy tree builder, but it seems to be used for
// some other things now.
- int m_lastScriptElementStartLine;
+ TextPosition0 m_lastScriptElementStartPosition;
bool m_usePreHTML5ParserQuirks;
diff --git a/WebCore/inspector/CodeGeneratorInspector.pm b/WebCore/inspector/CodeGeneratorInspector.pm
index 3a8a6cb..f5f2453 100644
--- a/WebCore/inspector/CodeGeneratorInspector.pm
+++ b/WebCore/inspector/CodeGeneratorInspector.pm
@@ -38,6 +38,11 @@ $typeTransform{"DOM"} = {
"header" => "InspectorDOMAgent.h",
"domainAccessor" => "m_inspectorController->domAgent()",
};
+$typeTransform{"CSS"} = {
+ "forward" => "InspectorCSSAgent",
+ "header" => "InspectorCSSAgent.h",
+ "domainAccessor" => "m_inspectorController->cssAgent()",
+};
$typeTransform{"ApplicationCache"} = {
"forward" => "InspectorApplicationCacheAgent",
"header" => "InspectorApplicationCacheAgent.h",
diff --git a/WebCore/inspector/Inspector.idl b/WebCore/inspector/Inspector.idl
index 93d5396..29a3ba0 100644
--- a/WebCore/inspector/Inspector.idl
+++ b/WebCore/inspector/Inspector.idl
@@ -207,7 +207,19 @@ module core {
[handler=DOM] void toggleStyleEnabled(in long styleId, in String propertyName, in boolean disabled, out Value style);
[handler=DOM] void setRuleSelector(in long ruleId, in String selector, in long selectedNodeId, out Value rule, out boolean selectorAffectsNode);
[handler=DOM] void addRule(in String selector, in long selectedNodeId, out Value rule, out boolean selectorAffectsNode);
- [handler=DOM] void getSupportedCSSProperties(out Array cssProperties);
+
+ [handler=CSS] void getStylesForNode2(in long nodeId, out Value styles);
+ [handler=CSS] void getComputedStyleForNode2(in long nodeId, out Value style);
+ [handler=CSS] void getInlineStyleForNode2(in long nodeId, out Value style);
+ [handler=CSS] void getAllStyles2(out Array styleSheetIds);
+ [handler=CSS] void getStyleSheet2(in String styleSheetId, out Value styleSheet);
+ [handler=CSS] void setStyleSheetText2(in String styleSheetId, in String text);
+ [handler=CSS] void setPropertyText2(in String styleId, in long propertyIndex, in String text, in boolean overwrite, out Value style);
+ [handler=CSS] void toggleProperty2(in String styleId, in long propertyIndex, in boolean disable, out Value style);
+ [handler=CSS] void setRuleSelector2(in String ruleId, in String selector, out Value rule);
+ [handler=CSS] void addRule2(in long contextNodeId, in String selector, out Value rule);
+ [handler=CSS] void getSupportedCSSProperties(out Array cssProperties);
+ [handler=CSS] void querySelectorAll(in long documentId, in String selector, out Array result);
[handler=Controller] void getCookies(out Array cookies, out String cookiesString);
[handler=Controller] void deleteCookie(in String cookieName, in String domain);
diff --git a/WebCore/inspector/InspectorCSSAgent.cpp b/WebCore/inspector/InspectorCSSAgent.cpp
index d1f7412..37bf2b3 100644
--- a/WebCore/inspector/InspectorCSSAgent.cpp
+++ b/WebCore/inspector/InspectorCSSAgent.cpp
@@ -86,7 +86,12 @@
// shorthandName2 : shorthandValue2
// },
// cssText : <string>, // Optional - declaration text
-// properties : { width, height }
+// properties : {
+// width,
+// height,
+// startOffset, // Optional - for source-based styles only
+// endOffset, // Optional - for source-based styles only
+// }
// }
//
// cssRule = {
@@ -95,7 +100,8 @@
// sourceURL : <string>,
// sourceLine : <string>,
// origin : <string>, // "" || "user-agent" || "user" || "inspector"
-// style : #cssStyle
+// style : #cssStyle,
+// selectorRange: { start: <number>, end: <number> } // Optional - for source-based rules only
// }
//
// cssStyleSheet = {
@@ -137,14 +143,12 @@ CSSStyleRule* InspectorCSSAgent::asCSSStyleRule(StyleBase* styleBase)
return static_cast<CSSStyleRule*>(rule);
}
-InspectorCSSAgent::InspectorCSSAgent(InspectorDOMAgent* domAgent, InspectorFrontend* frontend)
- : m_domAgent(domAgent)
- , m_frontend(frontend)
+InspectorCSSAgent::InspectorCSSAgent()
+ : m_domAgent(0)
, m_lastStyleSheetId(1)
, m_lastRuleId(1)
, m_lastStyleId(1)
{
- m_domAgent->setDOMListener(this);
}
InspectorCSSAgent::~InspectorCSSAgent()
@@ -152,47 +156,76 @@ InspectorCSSAgent::~InspectorCSSAgent()
reset();
}
+void InspectorCSSAgent::setDOMAgent(InspectorDOMAgent* domAgent)
+{
+ if (m_domAgent)
+ m_domAgent->setDOMListener(0);
+ m_domAgent = domAgent;
+ if (m_domAgent)
+ m_domAgent->setDOMListener(this);
+}
+
void InspectorCSSAgent::reset()
{
- m_domAgent->setDOMListener(0);
+ m_idToInspectorStyleSheet.clear();
+ m_cssStyleSheetToInspectorStyleSheet.clear();
+ m_nodeToInspectorStyleSheet.clear();
+ m_documentToInspectorStyleSheet.clear();
}
-void InspectorCSSAgent::getMatchedRulesForNode2(long nodeId, RefPtr<InspectorArray>* result)
+void InspectorCSSAgent::getStylesForNode2(long nodeId, RefPtr<InspectorValue>* result)
{
Element* element = elementForId(nodeId);
if (!element)
return;
+ RefPtr<InspectorObject> resultObject = InspectorObject::create();
+
+ InspectorStyleSheetForInlineStyle* styleSheet = asInspectorStyleSheet(element);
+ if (styleSheet)
+ resultObject->setObject("inlineStyle", styleSheet->buildObjectForStyle(element->style()));
+
+ RefPtr<CSSComputedStyleDeclaration> computedStyleInfo = computedStyle(element, true); // Support the viewing of :visited information in computed style.
+ RefPtr<InspectorStyle> computedInspectorStyle = InspectorStyle::create(InspectorCSSId(), computedStyleInfo.get(), 0);
+ resultObject->setObject("computedStyle", computedInspectorStyle->buildObjectForStyle());
+
CSSStyleSelector* selector = element->ownerDocument()->styleSelector();
RefPtr<CSSRuleList> matchedRules = selector->styleRulesForElement(element, false, true);
- *result = buildArrayForRuleList(matchedRules.get());
-}
+ resultObject->setArray("matchedCSSRules", buildArrayForRuleList(matchedRules.get()));
-void InspectorCSSAgent::getMatchedPseudoRulesForNode2(long nodeId, RefPtr<InspectorArray>* result)
-{
- Element* element = elementForId(nodeId);
- if (!element)
- return;
+ resultObject->setObject("styleAttributes", buildObjectForAttributeStyles(element));
- CSSStyleSelector* selector = element->ownerDocument()->styleSelector();
+ RefPtr<InspectorArray> pseudoElements = InspectorArray::create();
for (PseudoId pseudoId = FIRST_PUBLIC_PSEUDOID; pseudoId < AFTER_LAST_INTERNAL_PSEUDOID; pseudoId = static_cast<PseudoId>(pseudoId + 1)) {
RefPtr<CSSRuleList> matchedRules = selector->pseudoStyleRulesForElement(element, pseudoId, false, true);
if (matchedRules && matchedRules->length()) {
RefPtr<InspectorObject> pseudoStyles = InspectorObject::create();
pseudoStyles->setNumber("pseudoId", static_cast<int>(pseudoId));
pseudoStyles->setArray("rules", buildArrayForRuleList(matchedRules.get()));
- (*result)->pushObject(pseudoStyles.release());
+ pseudoElements->pushObject(pseudoStyles.release());
}
}
-}
+ resultObject->setArray("pseudoElements", pseudoElements.release());
-void InspectorCSSAgent::getAttributeStylesForNode2(long nodeId, RefPtr<InspectorValue>* result)
-{
- Element* element = elementForId(nodeId);
- if (!element)
- return;
+ RefPtr<InspectorArray> inheritedStyles = InspectorArray::create();
+ Element* parentElement = element->parentElement();
+ while (parentElement) {
+ RefPtr<InspectorObject> parentStyle = InspectorObject::create();
+ if (parentElement->style() && parentElement->style()->length()) {
+ InspectorStyleSheetForInlineStyle* styleSheet = asInspectorStyleSheet(parentElement);
+ if (styleSheet)
+ parentStyle->setObject("inlineStyle", styleSheet->buildObjectForStyle(styleSheet->styleForId(InspectorCSSId::createFromParts(styleSheet->id(), "0"))));
+ }
+
+ CSSStyleSelector* parentSelector = parentElement->ownerDocument()->styleSelector();
+ RefPtr<CSSRuleList> parentMatchedRules = parentSelector->styleRulesForElement(parentElement, false, true);
+ parentStyle->setArray("matchedCSSRules", buildArrayForRuleList(parentMatchedRules.get()));
+ inheritedStyles->pushObject(parentStyle.release());
+ parentElement = parentElement->parentElement();
+ }
+ resultObject->setArray("inherited", inheritedStyles.release());
- *result = buildObjectForAttributeStyles(element);
+ *result = resultObject.release();
}
void InspectorCSSAgent::getInlineStyleForNode2(long nodeId, RefPtr<InspectorValue>* style)
@@ -214,42 +247,11 @@ void InspectorCSSAgent::getComputedStyleForNode2(long nodeId, RefPtr<InspectorVa
if (!element)
return;
- DOMWindow* defaultView = element->ownerDocument()->defaultView();
- if (!defaultView)
- return;
-
- RefPtr<CSSStyleDeclaration> computedStyle = defaultView->getComputedStyle(element, "");
- Vector<InspectorStyleProperty> properties;
- RefPtr<InspectorStyle> inspectorStyle = InspectorStyle::create(InspectorCSSId(), computedStyle.get(), 0);
+ RefPtr<CSSComputedStyleDeclaration> computedStyleInfo = computedStyle(element, true);
+ RefPtr<InspectorStyle> inspectorStyle = InspectorStyle::create(InspectorCSSId(), computedStyleInfo.get(), 0);
*style = inspectorStyle->buildObjectForStyle();
}
-void InspectorCSSAgent::getInheritedStylesForNode2(long nodeId, RefPtr<InspectorArray>* style)
-{
- Element* element = elementForId(nodeId);
- if (!element) {
- *style = InspectorArray::create();
- return;
- }
- RefPtr<InspectorArray> inheritedStyles = InspectorArray::create();
- Element* parentElement = element->parentElement();
- while (parentElement) {
- RefPtr<InspectorObject> parentStyle = InspectorObject::create();
- if (parentElement->style() && parentElement->style()->length()) {
- InspectorStyleSheetForInlineStyle* styleSheet = asInspectorStyleSheet(element);
- if (styleSheet)
- parentStyle->setObject("inlineStyle", styleSheet->buildObjectForStyle(styleSheet->styleForId(InspectorCSSId::createFromParts(styleSheet->id(), "0"))));
- }
-
- CSSStyleSelector* parentSelector = parentElement->ownerDocument()->styleSelector();
- RefPtr<CSSRuleList> parentMatchedRules = parentSelector->styleRulesForElement(parentElement, false, true);
- parentStyle->setArray("matchedCSSRules", buildArrayForRuleList(parentMatchedRules.get()));
- inheritedStyles->pushObject(parentStyle.release());
- parentElement = parentElement->parentElement();
- }
- *style = inheritedStyles.release();
-}
-
void InspectorCSSAgent::getAllStyles2(RefPtr<InspectorArray>* styles)
{
const ListHashSet<RefPtr<Document> >& documents = m_domAgent->documents();
@@ -335,8 +337,10 @@ void InspectorCSSAgent::addRule2(const long contextNodeId, const String& selecto
InspectorStyleSheet* inspectorStyleSheet = viaInspectorStyleSheet(node->document(), true);
CSSStyleRule* newRule = inspectorStyleSheet->addRule(selector);
- if (newRule)
- *result = inspectorStyleSheet->buildObjectForRule(newRule);
+ if (!newRule)
+ return;
+
+ *result = inspectorStyleSheet->buildObjectForRule(newRule);
}
void InspectorCSSAgent::getSupportedCSSProperties(RefPtr<InspectorArray>* cssProperties)
@@ -348,6 +352,26 @@ void InspectorCSSAgent::getSupportedCSSProperties(RefPtr<InspectorArray>* cssPro
*cssProperties = properties.release();
}
+void InspectorCSSAgent::querySelectorAll(const long nodeId, const String& selector, RefPtr<InspectorArray>* result)
+{
+ Node* node = m_domAgent->nodeForId(nodeId);
+ if (!node)
+ return;
+ if (!node->isDocumentNode())
+ node = node->ownerDocument();
+ if (!node)
+ return;
+ ExceptionCode ec = 0;
+ RefPtr<NodeList> nodes = static_cast<Document*>(node)->querySelectorAll(selector, ec);
+ if (ec)
+ return;
+ for (unsigned i = 0; i < nodes->length(); ++i) {
+ Node* affectedNode = nodes->item(i);
+ long id = m_domAgent->pushNodePathToFrontend(affectedNode);
+ (*result)->pushNumber(id);
+ }
+}
+
// static
Element* InspectorCSSAgent::inlineStyleElement(CSSStyleDeclaration* style)
{
@@ -488,11 +512,15 @@ PassRefPtr<InspectorObject> InspectorCSSAgent::buildObjectForAttributeStyles(Ele
void InspectorCSSAgent::didRemoveDocument(Document* document)
{
- m_documentToInspectorStyleSheet.remove(document);
+ if (document)
+ m_documentToInspectorStyleSheet.remove(document);
}
void InspectorCSSAgent::didRemoveDOMNode(Node* node)
{
+ if (!node)
+ return;
+
NodeToInspectorStyleSheet::iterator it = m_nodeToInspectorStyleSheet.find(node);
if (it == m_nodeToInspectorStyleSheet.end())
return;
diff --git a/WebCore/inspector/InspectorCSSAgent.h b/WebCore/inspector/InspectorCSSAgent.h
index 341d09a..71ca580 100644
--- a/WebCore/inspector/InspectorCSSAgent.h
+++ b/WebCore/inspector/InspectorCSSAgent.h
@@ -49,26 +49,20 @@ class Node;
#if ENABLE(INSPECTOR)
-class InspectorCSSAgent : public RefCounted<InspectorCSSAgent>, public InspectorDOMAgent::DOMListener {
+class InspectorCSSAgent : public InspectorDOMAgent::DOMListener {
public:
- static PassRefPtr<InspectorCSSAgent> create(InspectorDOMAgent* domAgent, InspectorFrontend* frontend)
- {
- return adoptRef(new InspectorCSSAgent(domAgent, frontend));
- }
-
static CSSStyleSheet* parentStyleSheet(StyleBase*);
static CSSStyleRule* asCSSStyleRule(StyleBase*);
- InspectorCSSAgent(InspectorDOMAgent* domAgent, InspectorFrontend* frontend);
+ InspectorCSSAgent();
~InspectorCSSAgent();
+ void setDOMAgent(InspectorDOMAgent* domAgent);
+
void reset();
- void getMatchedRulesForNode2(long nodeId, RefPtr<InspectorArray>* rules);
- void getMatchedPseudoRulesForNode2(long nodeId, RefPtr<InspectorArray>* rules);
- void getAttributeStylesForNode2(long nodeId, RefPtr<InspectorValue>* styles);
+ void getStylesForNode2(long nodeId, RefPtr<InspectorValue>* result);
void getInlineStyleForNode2(long nodeId, RefPtr<InspectorValue>* style);
void getComputedStyleForNode2(long nodeId, RefPtr<InspectorValue>* style);
- void getInheritedStylesForNode2(long nodeId, RefPtr<InspectorArray>* result);
void getAllStyles2(RefPtr<InspectorArray>* styles);
void getStyleSheet2(const String& styleSheetId, RefPtr<InspectorValue>* result);
void setStyleSheetText2(const String& styleSheetId, const String& text);
@@ -77,6 +71,7 @@ public:
void setRuleSelector2(const String& ruleId, const String& selector, RefPtr<InspectorValue>* result);
void addRule2(const long contextNodeId, const String& selector, RefPtr<InspectorValue>* result);
void getSupportedCSSProperties(RefPtr<InspectorArray>* result);
+ void querySelectorAll(const long nodeId, const String& selector, RefPtr<InspectorArray>* result);
private:
typedef HashMap<String, RefPtr<InspectorStyleSheet> > IdToInspectorStyleSheet;
@@ -101,8 +96,7 @@ private:
virtual void didRemoveDocument(Document*);
virtual void didRemoveDOMNode(Node*);
- RefPtr<InspectorDOMAgent> m_domAgent;
- InspectorFrontend* m_frontend;
+ InspectorDOMAgent* m_domAgent;
IdToInspectorStyleSheet m_idToInspectorStyleSheet;
CSSStyleSheetToInspectorStyleSheet m_cssStyleSheetToInspectorStyleSheet;
diff --git a/WebCore/inspector/InspectorController.cpp b/WebCore/inspector/InspectorController.cpp
index c34130e..c47699f 100644
--- a/WebCore/inspector/InspectorController.cpp
+++ b/WebCore/inspector/InspectorController.cpp
@@ -24,7 +24,7 @@
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
@@ -58,6 +58,7 @@
#include "InjectedScriptHost.h"
#include "InspectorBackend.h"
#include "InspectorBackendDispatcher.h"
+#include "InspectorCSSAgent.h"
#include "InspectorCSSStore.h"
#include "InspectorClient.h"
#include "InspectorDOMAgent.h"
@@ -142,6 +143,7 @@ InspectorController::InspectorController(Page* page, InspectorClient* client)
: m_inspectedPage(page)
, m_client(client)
, m_openingFrontend(false)
+ , m_cssAgent(new InspectorCSSAgent())
, m_cssStore(new InspectorCSSStore(this))
, m_mainResourceIdentifier(0)
, m_expiredConsoleMessageCount(0)
@@ -485,6 +487,8 @@ void InspectorController::connectFrontend()
m_domAgent = InspectorDOMAgent::create(m_cssStore.get(), m_frontend.get());
m_resourceAgent = InspectorResourceAgent::create(m_inspectedPage, m_frontend.get());
+ m_cssAgent->setDOMAgent(m_domAgent.get());
+
#if ENABLE(DATABASE)
m_storageAgent = InspectorStorageAgent::create(m_frontend.get());
#endif
@@ -592,6 +596,9 @@ void InspectorController::releaseFrontendLifetimeAgents()
{
m_resourceAgent.clear();
+ // This should be invoked prior to m_domAgent destruction.
+ m_cssAgent->setDOMAgent(0);
+
// m_domAgent is RefPtr. Remove DOM listeners first to ensure that there are
// no references to the DOM agent from the DOM tree.
if (m_domAgent)
@@ -744,6 +751,7 @@ void InspectorController::didCommitLoad(DocumentLoader* loader)
if (m_frontend) {
m_frontend->reset();
m_domAgent->reset();
+ m_cssAgent->reset();
}
#if ENABLE(WORKERS)
m_workers.clear();
@@ -1605,6 +1613,8 @@ void InspectorController::drawNodeHighlight(GraphicsContext& context) const
IntRect boundingBox = renderer->absoluteBoundingBoxRect(true);
boundingBox.move(mainFrameOffset);
+ IntRect titleReferenceBox = boundingBox;
+
ASSERT(m_inspectedPage);
FrameView* view = m_inspectedPage->mainFrame()->view();
@@ -1632,6 +1642,10 @@ void InspectorController::drawNodeHighlight(GraphicsContext& context) const
IntRect marginBox(borderBox.x() - renderBox->marginLeft(), borderBox.y() - renderBox->marginTop(),
borderBox.width() + renderBox->marginLeft() + renderBox->marginRight(), borderBox.height() + renderBox->marginTop() + renderBox->marginBottom());
+ titleReferenceBox = marginBox;
+ titleReferenceBox.move(mainFrameOffset);
+ titleReferenceBox.move(boundingBox.x(), boundingBox.y());
+
FloatQuad absContentQuad = renderBox->localToAbsoluteQuad(FloatRect(contentBox));
FloatQuad absPaddingQuad = renderBox->localToAbsoluteQuad(FloatRect(paddingBox));
FloatQuad absBorderQuad = renderBox->localToAbsoluteQuad(FloatRect(borderBox));
@@ -1659,7 +1673,7 @@ void InspectorController::drawNodeHighlight(GraphicsContext& context) const
return;
WebCore::Settings* settings = containingFrame->settings();
- drawElementTitle(context, boundingBox, overlayRect, settings);
+ drawElementTitle(context, titleReferenceBox, overlayRect, settings);
}
void InspectorController::drawElementTitle(GraphicsContext& context, const IntRect& boundingBox, const FloatRect& overlayRect, WebCore::Settings* settings) const
@@ -1717,12 +1731,27 @@ void InspectorController::drawElementTitle(GraphicsContext& context, const IntRe
// The initial offsets needed to compensate for a 1px-thick border stroke (which is not a part of the rectangle).
int dx = -borderWidthPx;
int dy = borderWidthPx;
+
+ // If the tip sticks beyond the right of overlayRect, right-align the tip with the said boundary.
if (titleRect.right() > overlayRect.right())
- dx += overlayRect.right() - titleRect.right();
+ dx = overlayRect.right() - titleRect.right();
+
+ // If the tip sticks beyond the left of overlayRect, left-align the tip with the said boundary.
if (titleRect.x() + dx < overlayRect.x())
- dx = overlayRect.x() - titleRect.x();
- if (titleRect.bottom() > overlayRect.bottom())
- dy += overlayRect.bottom() - titleRect.bottom() - borderWidthPx;
+ dx = overlayRect.x() - titleRect.x() - borderWidthPx;
+
+ // If the tip sticks beyond the bottom of overlayRect, show the tip at top of bounding box.
+ if (titleRect.bottom() > overlayRect.bottom()) {
+ dy = boundingBox.y() - titleRect.bottom() - borderWidthPx;
+ // If the tip still sticks beyond the bottom of overlayRect, bottom-align the tip with the said boundary.
+ if (titleRect.bottom() + dy > overlayRect.bottom())
+ dy = overlayRect.bottom() - titleRect.bottom();
+ }
+
+ // If the tip sticks beyond the top of overlayRect, show the tip at top of overlayRect.
+ if (titleRect.y() + dy < overlayRect.y())
+ dy = overlayRect.y() - titleRect.y() + borderWidthPx;
+
titleRect.move(dx, dy);
context.setStrokeColor(tooltipBorderColor, ColorSpaceDeviceRGB);
context.setStrokeThickness(borderWidthPx);
diff --git a/WebCore/inspector/InspectorController.h b/WebCore/inspector/InspectorController.h
index 7dadaa9..ca5a9d9 100644
--- a/WebCore/inspector/InspectorController.h
+++ b/WebCore/inspector/InspectorController.h
@@ -58,6 +58,7 @@ class InspectorArray;
class InspectorBackend;
class InspectorBackendDispatcher;
class InspectorClient;
+class InspectorCSSAgent;
class InspectorCSSStore;
class InspectorDOMAgent;
class InspectorDOMStorageResource;
@@ -298,6 +299,7 @@ private:
void setSearchingForNode(bool enabled, bool* newState);
void setMonitoringXHREnabled(bool enabled, bool* newState);
+ InspectorCSSAgent* cssAgent() { return m_cssAgent.get(); }
InspectorDOMAgent* domAgent() { return m_domAgent.get(); }
void releaseFrontendLifetimeAgents();
@@ -340,6 +342,7 @@ private:
OwnPtr<InspectorFrontendClient> m_inspectorFrontendClient;
bool m_openingFrontend;
OwnPtr<InspectorFrontend> m_frontend;
+ OwnPtr<InspectorCSSAgent> m_cssAgent;
RefPtr<InspectorDOMAgent> m_domAgent;
RefPtr<InspectorStorageAgent> m_storageAgent;
OwnPtr<InspectorCSSStore> m_cssStore;
diff --git a/WebCore/inspector/InspectorDOMAgent.cpp b/WebCore/inspector/InspectorDOMAgent.cpp
index 9316296..894e4b2 100644
--- a/WebCore/inspector/InspectorDOMAgent.cpp
+++ b/WebCore/inspector/InspectorDOMAgent.cpp
@@ -51,6 +51,7 @@
#include "Document.h"
#include "DocumentType.h"
#include "Event.h"
+#include "EventContext.h"
#include "EventListener.h"
#include "EventNames.h"
#include "EventTarget.h"
@@ -613,13 +614,13 @@ void InspectorDOMAgent::getEventListenersForNode(long nodeId, long* outNodeId, R
return;
// The Node's Event Ancestors (not including self)
- Vector<RefPtr<ContainerNode> > ancestors;
- node->eventAncestors(ancestors);
+ Vector<EventContext> ancestors;
+ node->getEventAncestors(ancestors, node);
// Nodes and their Listeners for the concerned event types (order is top to bottom)
Vector<EventListenerInfo> eventInformation;
for (size_t i = ancestors.size(); i; --i) {
- ContainerNode* ancestor = ancestors[i - 1].get();
+ Node* ancestor = ancestors[i - 1].node();
for (size_t j = 0; j < eventTypesLength; ++j) {
AtomicString& type = eventTypes[j];
if (ancestor->hasEventListeners(type))
@@ -1538,15 +1539,6 @@ void InspectorDOMAgent::addRule(const String& selector, long selectedNodeId, Ref
*ruleObject = buildObjectForRule(node->ownerDocument(), newRule);
}
-void InspectorDOMAgent::getSupportedCSSProperties(RefPtr<InspectorArray>* cssProperties)
-{
- RefPtr<InspectorArray> properties = InspectorArray::create();
- for (int i = 0; i < numCSSProperties; ++i)
- properties->pushString(propertyNameStrings[i]);
-
- *cssProperties = properties.release();
-}
-
PassRefPtr<InspectorObject> InspectorDOMAgent::buildObjectForStyle(CSSStyleDeclaration* style, bool bind)
{
RefPtr<InspectorObject> result = InspectorObject::create();
diff --git a/WebCore/inspector/InspectorDOMAgent.h b/WebCore/inspector/InspectorDOMAgent.h
index 6c5fd4b..84ca027 100644
--- a/WebCore/inspector/InspectorDOMAgent.h
+++ b/WebCore/inspector/InspectorDOMAgent.h
@@ -137,7 +137,6 @@ namespace WebCore {
void toggleStyleEnabled(long styleId, const String& propertyName, bool disabled, RefPtr<InspectorValue>* styleObject);
void setRuleSelector(long ruleId, const String& selector, long selectedNodeId, RefPtr<InspectorValue>* ruleObject, bool* selectorAffectsNode);
void addRule(const String& selector, long selectedNodeId, RefPtr<InspectorValue>* ruleObject, bool* selectorAffectsNode);
- void getSupportedCSSProperties(RefPtr<InspectorArray>* cssProperties);
// Methods called from the InspectorController.
void setDocument(Document* document);
diff --git a/WebCore/inspector/InspectorFileSystemAgent.cpp b/WebCore/inspector/InspectorFileSystemAgent.cpp
index 2192fd1..2a0df3c 100644
--- a/WebCore/inspector/InspectorFileSystemAgent.cpp
+++ b/WebCore/inspector/InspectorFileSystemAgent.cpp
@@ -42,6 +42,7 @@
#include "InspectorController.h"
#include "InspectorFrontend.h"
#include "LocalFileSystem.h"
+#include "NotImplemented.h"
#include "Page.h"
#include "RuntimeEnabledFeatures.h"
@@ -66,7 +67,7 @@ public:
ASSERT_NOT_REACHED();
}
- void didOpenFileSystem(const String& name, PassOwnPtr<AsyncFileSystem> fileSystem)
+ void didOpenFileSystem(const String&, PassOwnPtr<AsyncFileSystem> fileSystem)
{
// Agent will be alive even if InspectorController is destroyed until callback is run.
m_agent->didGetFileSystemPath(fileSystem->root(), m_type, m_origin);
@@ -77,22 +78,22 @@ public:
ASSERT_NOT_REACHED();
}
- void didReadDirectoryEntry(const String& name, bool isDirectory)
+ void didReadDirectoryEntry(const String&, bool)
{
ASSERT_NOT_REACHED();
}
- void didReadDirectoryEntries(bool hasMore)
+ void didReadDirectoryEntries(bool)
{
ASSERT_NOT_REACHED();
}
- void didCreateFileWriter(PassOwnPtr<AsyncFileWriter> writer, long long length)
+ void didCreateFileWriter(PassOwnPtr<AsyncFileWriter>, long long)
{
ASSERT_NOT_REACHED();
}
- void didFail(int code)
+ void didFail(int)
{
// FIXME: Is it useful to give back the code to Inspector UI?
m_agent->didGetFileSystemError(m_type, m_origin);
@@ -117,10 +118,18 @@ void InspectorFileSystemAgent::stop()
m_inspectorController = 0;
}
+#if PLATFORM(CHROMIUM)
void InspectorFileSystemAgent::revealFolderInOS(const String& path)
{
+ // FIXME: Remove guard when revealFolderInOS is implemented for non-chromium platforms.
WebCore::revealFolderInOS(path);
}
+#else
+void InspectorFileSystemAgent::revealFolderInOS(const String&)
+{
+ notImplemented();
+}
+#endif
void InspectorFileSystemAgent::getFileSystemPathAsync(unsigned int type, const String& origin)
{
diff --git a/WebCore/inspector/InspectorInstrumentation.cpp b/WebCore/inspector/InspectorInstrumentation.cpp
index 94202c1..cf41527 100644
--- a/WebCore/inspector/InspectorInstrumentation.cpp
+++ b/WebCore/inspector/InspectorInstrumentation.cpp
@@ -35,6 +35,7 @@
#include "DOMWindow.h"
#include "Event.h"
+#include "EventContext.h"
#include "InspectorController.h"
#include "InspectorDOMAgent.h"
#include "InspectorDebuggerAgent.h"
@@ -53,7 +54,7 @@ static const char* const timerFiredEventName = "timerFired";
int InspectorInstrumentation::s_frontendCounter = 0;
-static bool eventHasListeners(const AtomicString& eventType, DOMWindow* window, Node* node, const Vector<RefPtr<ContainerNode> >& ancestors)
+static bool eventHasListeners(const AtomicString& eventType, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors)
{
if (window && window->hasEventListeners(eventType))
return true;
@@ -62,7 +63,7 @@ static bool eventHasListeners(const AtomicString& eventType, DOMWindow* window,
return true;
for (size_t i = 0; i < ancestors.size(); i++) {
- ContainerNode* ancestor = ancestors[i].get();
+ Node* ancestor = ancestors[i].node();
if (ancestor->hasEventListeners(eventType))
return true;
}
@@ -139,7 +140,6 @@ void InspectorInstrumentation::characterDataModifiedImpl(InspectorController* in
domAgent->characterDataModified(characterData);
}
-
void InspectorInstrumentation::willSendXMLHttpRequestImpl(InspectorController* inspectorController, const String& url)
{
#if ENABLE(JAVASCRIPT_DEBUGGER)
@@ -213,7 +213,7 @@ void InspectorInstrumentation::didChangeXHRReadyStateImpl(const InspectorInstrum
timelineAgent->didChangeXHRReadyState();
}
-InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEventImpl(InspectorController* inspectorController, const Event& event, DOMWindow* window, Node* node, const Vector<RefPtr<ContainerNode> >& ancestors)
+InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEventImpl(InspectorController* inspectorController, const Event& event, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors)
{
pauseOnNativeEventIfNeeded(inspectorController, listenerEventCategoryType, event.type(), false);
diff --git a/WebCore/inspector/InspectorInstrumentation.h b/WebCore/inspector/InspectorInstrumentation.h
index 1b62ecb..7f241c4 100644
--- a/WebCore/inspector/InspectorInstrumentation.h
+++ b/WebCore/inspector/InspectorInstrumentation.h
@@ -40,6 +40,7 @@ namespace WebCore {
class CharacterData;
class Element;
+class EventContext;
class InspectorController;
class InspectorTimelineAgent;
class KURL;
@@ -73,7 +74,7 @@ public:
static void didCallFunction(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willChangeXHRReadyState(ScriptExecutionContext*, XMLHttpRequest* request);
static void didChangeXHRReadyState(const InspectorInstrumentationCookie&);
- static InspectorInstrumentationCookie willDispatchEvent(Document*, const Event& event, DOMWindow* window, Node* node, const Vector<RefPtr<ContainerNode> >& ancestors);
+ static InspectorInstrumentationCookie willDispatchEvent(Document*, const Event& event, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors);
static void didDispatchEvent(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willDispatchEventOnWindow(Frame*, const Event& event, DOMWindow* window);
static void didDispatchEventOnWindow(const InspectorInstrumentationCookie&);
@@ -130,7 +131,7 @@ private:
static void didCallFunctionImpl(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willChangeXHRReadyStateImpl(InspectorController*, XMLHttpRequest* request);
static void didChangeXHRReadyStateImpl(const InspectorInstrumentationCookie&);
- static InspectorInstrumentationCookie willDispatchEventImpl(InspectorController*, const Event& event, DOMWindow* window, Node* node, const Vector<RefPtr<ContainerNode> >& ancestors);
+ static InspectorInstrumentationCookie willDispatchEventImpl(InspectorController*, const Event& event, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors);
static void didDispatchEventImpl(const InspectorInstrumentationCookie&);
static InspectorInstrumentationCookie willDispatchEventOnWindowImpl(InspectorController*, const Event& event, DOMWindow* window);
static void didDispatchEventOnWindowImpl(const InspectorInstrumentationCookie&);
@@ -225,7 +226,6 @@ inline void InspectorInstrumentation::characterDataModified(Document* document,
#endif
}
-
inline void InspectorInstrumentation::willSendXMLHttpRequest(ScriptExecutionContext* context, const String& url)
{
#if ENABLE(INSPECTOR)
@@ -293,7 +293,7 @@ inline void InspectorInstrumentation::didChangeXHRReadyState(const InspectorInst
#endif
}
-inline InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEvent(Document* document, const Event& event, DOMWindow* window, Node* node, const Vector<RefPtr<ContainerNode> >& ancestors)
+inline InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEvent(Document* document, const Event& event, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors)
{
#if ENABLE(INSPECTOR)
if (InspectorController* inspectorController = inspectorControllerForDocument(document))
diff --git a/WebCore/inspector/InspectorStyleSheet.cpp b/WebCore/inspector/InspectorStyleSheet.cpp
index dc2a47a..2384795 100644
--- a/WebCore/inspector/InspectorStyleSheet.cpp
+++ b/WebCore/inspector/InspectorStyleSheet.cpp
@@ -37,6 +37,7 @@
#include "Document.h"
#include "Element.h"
#include "HTMLHeadElement.h"
+#include "HTMLParserIdioms.h"
#include "InspectorCSSAgent.h"
#include "InspectorResourceAgent.h"
#include "InspectorValues.h"
@@ -120,6 +121,12 @@ PassRefPtr<InspectorObject> InspectorStyle::buildObjectForStyle() const
return result.release();
}
+// This method does the following preprocessing of |propertyText| with |overwrite| == false and |index| past the last active property:
+// - If the last property (if present) has no subsequent whitespace in the style declaration, a space is prepended to |propertyText|.
+// - If the last property (if present) has no closing ";", the ";" is prepended to the current |propertyText| value.
+//
+// The propertyText (if not empty) is checked to be a valid style declaration (containing at least one property). If not,
+// the method returns false (denoting an error).
bool InspectorStyle::setPropertyText(unsigned index, const String& propertyText, bool overwrite)
{
ASSERT(m_parentStyleSheet);
@@ -132,6 +139,21 @@ bool InspectorStyle::setPropertyText(unsigned index, const String& propertyText,
unsigned propertyStart = 0; // Need to initialize to make the compiler happy.
long propertyLengthDelta;
+ if (propertyText.stripWhiteSpace().length()) {
+ RefPtr<CSSMutableStyleDeclaration> tempMutableStyle = CSSMutableStyleDeclaration::create();
+ CSSParser p;
+ RefPtr<CSSStyleSourceData> sourceData = CSSStyleSourceData::create();
+ p.parseDeclaration(tempMutableStyle.get(), propertyText + " -webkit-boguz-propertee: none", &sourceData);
+ Vector<CSSPropertySourceData>& propertyData = sourceData->propertyData;
+ unsigned propertyCount = propertyData.size();
+ if (!propertyCount)
+ return false;
+
+ // Check for a proper propertyText termination (the parser could at least restore to the PROPERTY_NAME state).
+ if (propertyData.at(propertyCount - 1).name != "-webkit-boguz-propertee")
+ return false;
+ }
+
if (overwrite) {
ASSERT(index < allProperties.size());
InspectorStyleProperty& property = allProperties.at(index);
@@ -146,11 +168,18 @@ bool InspectorStyle::setPropertyText(unsigned index, const String& propertyText,
if (!success)
return false;
} else {
- property.rawText = propertyText;
- if (!propertyText.length()) {
- bool success = enableProperty(index, allProperties);
- return success;
+ unsigned textLength = propertyText.length();
+ unsigned disabledIndex = disabledIndexByOrdinal(index, false, allProperties);
+ if (!textLength) {
+ // Delete disabled property.
+ m_disabledProperties.remove(disabledIndex);
+ } else {
+ // Patch disabled property text.
+ m_disabledProperties.at(disabledIndex).rawText = propertyText;
}
+
+ // We should not shift subsequent disabled properties when altering a disabled property.
+ return true;
}
} else {
// Insert at index.
@@ -172,14 +201,32 @@ bool InspectorStyle::setPropertyText(unsigned index, const String& propertyText,
insertLast = false;
}
}
- if (insertLast)
- propertyStart = sourceData->styleSourceData->styleBodyRange.end;
- text.insert(propertyText, propertyStart);
+ String textToSet = propertyText;
+ if (insertLast) {
+ propertyStart = sourceData->styleSourceData->styleBodyRange.end - sourceData->styleSourceData->styleBodyRange.start;
+ if (propertyStart && propertyText.length()) {
+ const UChar* characters = text.characters();
+
+ unsigned curPos = propertyStart - 1; // The last position of style declaration, since propertyStart points past one.
+ while (curPos && isHTMLSpace(characters[curPos]))
+ --curPos;
+ if (curPos && characters[curPos] != ';') {
+ // Prepend a ";" to the property text if appending to a style declaration where
+ // the last property has no trailing ";".
+ textToSet.insert("; ", 0);
+ } else if (!isHTMLSpace(characters[propertyStart - 1])) {
+ // Prepend a " " if the last declaration character is not an HTML space.
+ textToSet.insert(" ", 0);
+ }
+ }
+ }
+
+ text.insert(textToSet, propertyStart);
m_parentStyleSheet->setStyleText(m_style, text);
}
- // Recompute subsequent disabled property ranges.
+ // Recompute subsequent disabled property ranges if acting on a non-disabled property.
shiftDisabledProperties(disabledIndexByOrdinal(index, true, allProperties), propertyLengthDelta);
return true;
@@ -228,7 +275,7 @@ unsigned InspectorStyle::disabledIndexByOrdinal(unsigned ordinal, bool canUseSub
return UINT_MAX;
}
-bool InspectorStyle::styleText(String* result)
+bool InspectorStyle::styleText(String* result) const
{
// Precondition: m_parentStyleSheet->ensureParsedDataReady() has been called successfully.
RefPtr<CSSRuleSourceData> sourceData = m_parentStyleSheet->ruleSourceDataFor(m_style);
@@ -249,17 +296,17 @@ bool InspectorStyle::disableProperty(unsigned indexToDisable, Vector<InspectorSt
{
// Precondition: |indexToEnable| points to an enabled property.
const InspectorStyleProperty& property = allProperties.at(indexToDisable);
- InspectorStyleProperty disabledProperty(property);
- disabledProperty.disabled = true;
unsigned propertyStart = property.sourceData.range.start;
- // This may have to be negated below.
- long propertyLength = property.sourceData.range.end - propertyStart;
- disabledProperty.sourceData.range.end = propertyStart;
+ InspectorStyleProperty disabledProperty(property);
String oldStyleText;
bool success = styleText(&oldStyleText);
if (!success)
return false;
- disabledProperty.rawText = oldStyleText.substring(propertyStart, propertyLength);
+ disabledProperty.setRawTextFromStyleDeclaration(oldStyleText);
+ disabledProperty.disabled = true;
+ disabledProperty.sourceData.range.end = propertyStart;
+ // This may have to be negated below.
+ long propertyLength = property.sourceData.range.end - propertyStart;
success = replacePropertyInStyleText(property, "");
if (!success)
return false;
@@ -303,13 +350,18 @@ bool InspectorStyle::populateAllProperties(Vector<InspectorStyleProperty>* resul
RefPtr<CSSRuleSourceData> sourceData = (m_parentStyleSheet && m_parentStyleSheet->ensureParsedDataReady()) ? m_parentStyleSheet->ruleSourceDataFor(m_style) : 0;
Vector<CSSPropertySourceData>* sourcePropertyData = sourceData ? &(sourceData->styleSourceData->propertyData) : 0;
if (sourcePropertyData) {
+ String styleDeclaration;
+ bool isStyleTextKnown = styleText(&styleDeclaration);
+ ASSERT_UNUSED(isStyleTextKnown, isStyleTextKnown);
for (Vector<CSSPropertySourceData>::const_iterator it = sourcePropertyData->begin(); it != sourcePropertyData->end(); ++it) {
while (disabledIndex < disabledLength && disabledProperty.sourceData.range.start <= it->range.start) {
result->append(disabledProperty);
if (++disabledIndex < disabledLength)
disabledProperty = m_disabledProperties.at(disabledIndex);
}
- result->append(InspectorStyleProperty(*it, true, false));
+ InspectorStyleProperty p(*it, true, false);
+ p.setRawTextFromStyleDeclaration(styleDeclaration);
+ result->append(p);
sourcePropertyNames.add(it->name);
}
}
@@ -349,10 +401,12 @@ void InspectorStyle::populateObjectWithStyleProperties(InspectorObject* result)
propertiesObject->pushObject(property);
property->setString("status", it->disabled ? "disabled" : "active");
property->setBoolean("parsedOk", propertyEntry.parsedOk);
+ if (it->hasRawText())
+ property->setString("text", it->rawText);
+ property->setString("name", name);
+ property->setString("value", propertyEntry.value);
+ property->setString("priority", propertyEntry.important ? "important" : "");
if (!it->disabled) {
- property->setString("name", name);
- property->setString("value", propertyEntry.value);
- property->setString("priority", propertyEntry.important ? "important" : "");
if (it->hasSource) {
property->setBoolean("implicit", false);
property->setNumber("startOffset", propertyEntry.range.start);
@@ -368,8 +422,7 @@ void InspectorStyle::populateObjectWithStyleProperties(InspectorObject* result)
property->setBoolean("implicit", m_style->isPropertyImplicit(name));
property->setString("status", "style");
}
- } else
- property->setString("text", it->rawText);
+ }
if (propertyEntry.parsedOk) {
// Both for style-originated and parsed source properties.
@@ -592,7 +645,9 @@ PassRefPtr<InspectorObject> InspectorStyleSheet::buildObjectForRule(CSSStyleRule
RefPtr<InspectorObject> result = InspectorObject::create();
result->setString("selectorText", rule->selectorText());
- result->setString("sourceURL", !styleSheet->href().isEmpty() ? styleSheet->href() : m_documentURL);
+ // "sourceURL" is present only for regular rules, otherwise "origin" should be used in the frontend.
+ if (!m_origin.length())
+ result->setString("sourceURL", !styleSheet->href().isEmpty() ? styleSheet->href() : m_documentURL);
result->setNumber("sourceLine", rule->sourceLine());
result->setString("origin", m_origin);
@@ -600,6 +655,16 @@ PassRefPtr<InspectorObject> InspectorStyleSheet::buildObjectForRule(CSSStyleRule
if (canBind())
result->setString("ruleId", ruleId(rule).asString());
+ RefPtr<CSSRuleSourceData> sourceData;
+ if (ensureParsedDataReady())
+ sourceData = ruleSourceDataFor(rule->style());
+ if (sourceData) {
+ RefPtr<InspectorObject> selectorRange = InspectorObject::create();
+ selectorRange->setNumber("start", sourceData->selectorListRange.start);
+ selectorRange->setNumber("end", sourceData->selectorListRange.end);
+ result->setObject("selectorRange", selectorRange.release());
+ }
+
return result.release();
}
@@ -691,6 +756,51 @@ InspectorCSSId InspectorStyleSheet::ruleOrStyleId(CSSStyleDeclaration* style) co
return InspectorCSSId();
}
+void InspectorStyleSheet::fixUnparsedPropertyRanges(CSSRuleSourceData* ruleData, const String& styleSheetText)
+{
+ Vector<CSSPropertySourceData>& propertyData = ruleData->styleSourceData->propertyData;
+ unsigned size = propertyData.size();
+ if (!size)
+ return;
+
+ unsigned styleStart = ruleData->styleSourceData->styleBodyRange.start;
+ const UChar* characters = styleSheetText.characters();
+ CSSPropertySourceData* nextData = &(propertyData.at(0));
+ for (unsigned i = 0; i < size; ++i) {
+ CSSPropertySourceData* currentData = nextData;
+ nextData = i < size - 1 ? &(propertyData.at(i + 1)) : 0;
+
+ if (currentData->parsedOk)
+ continue;
+ if (currentData->range.end > 0 && characters[styleStart + currentData->range.end - 1] == ';')
+ continue;
+
+ unsigned propertyEndInStyleSheet;
+ if (!nextData)
+ propertyEndInStyleSheet = ruleData->styleSourceData->styleBodyRange.end - 1;
+ else
+ propertyEndInStyleSheet = styleStart + nextData->range.start - 1;
+
+ while (isHTMLSpace(characters[propertyEndInStyleSheet]))
+ --propertyEndInStyleSheet;
+
+ // propertyEndInStyleSheet points at the last property text character.
+ unsigned newPropertyEnd = propertyEndInStyleSheet - styleStart + 1; // Exclusive of the last property text character.
+ if (currentData->range.end != newPropertyEnd) {
+ currentData->range.end = newPropertyEnd;
+ unsigned valueStartInStyleSheet = styleStart + currentData->range.start + currentData->name.length();
+ while (valueStartInStyleSheet < propertyEndInStyleSheet && characters[valueStartInStyleSheet] != ':')
+ ++valueStartInStyleSheet;
+ if (valueStartInStyleSheet < propertyEndInStyleSheet)
+ ++valueStartInStyleSheet; // Shift past the ':'.
+ while (valueStartInStyleSheet < propertyEndInStyleSheet && isHTMLSpace(characters[valueStartInStyleSheet]))
+ ++valueStartInStyleSheet;
+ // Need to exclude the trailing ';' from the property value.
+ currentData->value = styleSheetText.substring(valueStartInStyleSheet, propertyEndInStyleSheet - valueStartInStyleSheet + (characters[propertyEndInStyleSheet] == ';' ? 0 : 1));
+ }
+ }
+}
+
Document* InspectorStyleSheet::ownerDocument() const
{
return m_pageStyleSheet->document();
@@ -763,8 +873,10 @@ bool InspectorStyleSheet::ensureSourceData(Node* ownerNode)
if (!rule)
continue;
StyleRuleRangeMap::iterator it = ruleRangeMap.find(rule);
- if (it != ruleRangeMap.end())
+ if (it != ruleRangeMap.end()) {
+ fixUnparsedPropertyRanges(it->second.get(), m_parsedStyleSheet->text());
rangesVector->append(it->second);
+ }
}
m_parsedStyleSheet->setSourceData(rangesVector.release());
@@ -926,6 +1038,12 @@ bool InspectorStyleSheetForInlineStyle::setStyleText(CSSStyleDeclaration* style,
return !ec;
}
+bool InspectorStyleSheetForInlineStyle::text(String* result) const
+{
+ *result = m_element->getAttribute("style");
+ return true;
+}
+
Document* InspectorStyleSheetForInlineStyle::ownerDocument() const
{
return m_element->document();
diff --git a/WebCore/inspector/InspectorStyleSheet.h b/WebCore/inspector/InspectorStyleSheet.h
index 06c4093..e671834 100644
--- a/WebCore/inspector/InspectorStyleSheet.h
+++ b/WebCore/inspector/InspectorStyleSheet.h
@@ -87,6 +87,17 @@ struct InspectorStyleProperty {
{
}
+ void setRawTextFromStyleDeclaration(const String& styleDeclaration)
+ {
+ unsigned start = sourceData.range.start;
+ unsigned end = sourceData.range.end;
+ ASSERT(start < end);
+ ASSERT(end <= styleDeclaration.length());
+ rawText = styleDeclaration.substring(start, end - start);
+ }
+
+ bool hasRawText() const { return !rawText.isEmpty(); }
+
CSSPropertySourceData sourceData;
bool hasSource;
bool disabled;
@@ -117,7 +128,7 @@ public:
private:
static unsigned disabledIndexByOrdinal(unsigned ordinal, bool canUseSubsequent, Vector<InspectorStyleProperty>& allProperties);
- bool styleText(String* result);
+ bool styleText(String* result) const;
bool disableProperty(unsigned indexToDisable, Vector<InspectorStyleProperty>& allProperties);
bool enableProperty(unsigned indexToEnable, Vector<InspectorStyleProperty>& allProperties);
bool populateAllProperties(Vector<InspectorStyleProperty>* result) const;
@@ -162,6 +173,8 @@ public:
protected:
bool canBind() const { return m_origin != "userAgent" && m_origin != "user"; }
InspectorCSSId ruleOrStyleId(CSSStyleDeclaration* style) const;
+ void fixUnparsedPropertyRanges(CSSRuleSourceData* ruleData, const String& styleSheetText);
+ virtual bool text(String* result) const;
virtual Document* ownerDocument() const;
virtual RefPtr<CSSRuleSourceData> ruleSourceDataFor(CSSStyleDeclaration* style) const;
virtual unsigned ruleIndexByStyle(CSSStyleDeclaration*) const;
@@ -174,7 +187,6 @@ protected:
virtual bool setStyleText(CSSStyleDeclaration*, const String&);
private:
- bool text(String* result) const;
bool ensureText() const;
bool ensureSourceData(Node* ownerNode);
bool styleSheetTextWithChangedStyle(CSSStyleDeclaration*, const String& newStyleText, String* result);
@@ -210,6 +222,7 @@ public:
virtual CSSStyleDeclaration* styleForId(const InspectorCSSId& id) const { ASSERT_UNUSED(id, id.ordinal() == "0"); return inlineStyle(); }
protected:
+ virtual bool text(String* result) const;
virtual Document* ownerDocument() const;
virtual RefPtr<CSSRuleSourceData> ruleSourceDataFor(CSSStyleDeclaration* style) const { ASSERT_UNUSED(style, style == inlineStyle()); return m_ruleSourceData; }
virtual unsigned ruleIndexByStyle(CSSStyleDeclaration*) const { return 0; }
diff --git a/WebCore/inspector/front-end/AuditResultView.js b/WebCore/inspector/front-end/AuditResultView.js
index 2636463..5771684 100644
--- a/WebCore/inspector/front-end/AuditResultView.js
+++ b/WebCore/inspector/front-end/AuditResultView.js
@@ -89,7 +89,8 @@ WebInspector.AuditCategoryResultPane.prototype = {
title = String.sprintf("%s (%d)", title, result.violationCount);
}
- var treeElement = new TreeElement(title, null, !!result.children);
+ var treeElement = new TreeElement(null, null, !!result.children);
+ treeElement.titleHTML = title;
parentTreeElement.appendChild(treeElement);
if (result.className)
diff --git a/WebCore/inspector/front-end/AuditRules.js b/WebCore/inspector/front-end/AuditRules.js
index 515ce8e..b78bc96 100644
--- a/WebCore/inspector/front-end/AuditRules.js
+++ b/WebCore/inspector/front-end/AuditRules.js
@@ -277,6 +277,7 @@ WebInspector.AuditRules.UnusedCssRule.prototype = {
doRun: function(resources, result, callback)
{
var self = this;
+
function evalCallback(styleSheets) {
if (!styleSheets.length)
return callback(null);
@@ -287,11 +288,11 @@ WebInspector.AuditRules.UnusedCssRule.prototype = {
for (var i = 0; i < styleSheets.length; ++i) {
var styleSheet = styleSheets[i];
for (var curRule = 0; curRule < styleSheet.rules.length; ++curRule) {
- var rule = styleSheet.rules[curRule];
- if (rule.selectorText.match(pseudoSelectorRegexp))
+ var selectorText = styleSheet.rules[curRule].selectorText;
+ if (selectorText.match(pseudoSelectorRegexp) || testedSelectors[selectorText])
continue;
- selectors.push(rule.selectorText);
- testedSelectors[rule.selectorText] = 1;
+ selectors.push(selectorText);
+ testedSelectors[selectorText] = 1;
}
}
@@ -309,8 +310,10 @@ WebInspector.AuditRules.UnusedCssRule.prototype = {
var unusedRules = [];
for (var curRule = 0; curRule < styleSheet.rules.length; ++curRule) {
var rule = styleSheet.rules[curRule];
- // FIXME: replace this by an exact computation once source ranges are available
- var textLength = rule.style.cssText ? rule.style.cssText.length + rule.selectorText.length : 0;
+ // Exact computation whenever source ranges are available.
+ var textLength = (rule.selectorRange && rule.style.properties.endOffset) ? rule.style.properties.endOffset - rule.selectorRange.start + 1 : 0;
+ if (!textLength && rule.style.cssText)
+ textLength = rule.style.cssText.length + rule.selectorText.length;
stylesheetSize += textLength;
if (!testedSelectors[rule.selectorText] || foundSelectors[rule.selectorText])
continue;
@@ -327,7 +330,7 @@ WebInspector.AuditRules.UnusedCssRule.prototype = {
var pctUnused = Math.round(100 * unusedStylesheetSize / stylesheetSize);
if (!summary)
summary = result.addChild("", true);
- var entry = summary.addChild(String.sprintf("%s: %d%% (estimated) is not used by the current page.", url, pctUnused));
+ var entry = summary.addChild(String.sprintf("%s: %s (%d%%) is not used by the current page.", url, Number.bytesToString(unusedStylesheetSize), pctUnused));
for (var j = 0; j < unusedRules.length; ++j)
entry.addSnippet(unusedRules[j]);
@@ -339,7 +342,7 @@ WebInspector.AuditRules.UnusedCssRule.prototype = {
return callback(null);
var totalUnusedPercent = Math.round(100 * totalUnusedStylesheetSize / totalStylesheetSize);
- summary.value = String.sprintf("%d%% of CSS (estimated) is not used by the current page.", totalUnusedPercent);
+ summary.value = String.sprintf("%s (%d%%) of CSS is not used by the current page.", Number.bytesToString(totalUnusedStylesheetSize), totalUnusedPercent);
callback(result);
}
@@ -349,11 +352,10 @@ WebInspector.AuditRules.UnusedCssRule.prototype = {
var result = {};
for (var i = 0; i < selectorArray.length; ++i) {
try {
- var nodes = document.querySelectorAll(selectorArray[i]);
- if (nodes && nodes.length)
+ if (document.querySelector(selectorArray[i]))
result[selectorArray[i]] = true;
} catch(e) {
- // ignore and mark as unused
+ // Ignore and mark as unused.
}
}
return result;
@@ -362,16 +364,24 @@ WebInspector.AuditRules.UnusedCssRule.prototype = {
WebInspector.AuditRules.evaluateInTargetWindow(routine, [selectors], selectorsCallback.bind(null, callback, styleSheets, testedSelectors));
}
- function routine()
+ function styleSheetCallback(styleSheets, continuation, styleSheet)
{
- var styleSheets = document.styleSheets;
- if (!styleSheets)
- return false;
+ if (styleSheet)
+ styleSheets.push(styleSheet);
+ if (continuation)
+ continuation(styleSheets);
+ }
- return routineResult;
+ function allStylesCallback(styleSheetIds)
+ {
+ if (!styleSheetIds || !styleSheetIds.length)
+ return evalCallback([]);
+ var styleSheets = [];
+ for (var i = 0; i < styleSheetIds.length; ++i)
+ WebInspector.CSSStyleSheet.createForId(styleSheetIds[i], styleSheetCallback.bind(null, styleSheets, i == styleSheetIds.length - 1 ? evalCallback : null));
}
- InspectorBackend.getAllStyles(evalCallback);
+ InspectorBackend.getAllStyles2(allStylesCallback);
}
}
@@ -658,7 +668,7 @@ WebInspector.AuditRules.ImageDimensionsRule.prototype = {
if (completeSrc)
src = completeSrc;
- const computedStyle = WebInspector.CSSStyleDeclaration.parsePayload(styles.computedStyle);
+ const computedStyle = styles.computedStyle;
if (computedStyle.getPropertyValue("position") === "absolute") {
if (!context.imagesLeft)
doneCallback(context);
@@ -669,7 +679,7 @@ WebInspector.AuditRules.ImageDimensionsRule.prototype = {
var heightFound = "height" in styles.styleAttributes;
for (var i = styles.matchedCSSRules.length - 1; i >= 0 && !(widthFound && heightFound); --i) {
- var style = WebInspector.CSSRule.parsePayload(styles.matchedCSSRules[i]).style;
+ var style = styles.matchedCSSRules[i].style;
if (style.getPropertyValue("width") !== "")
widthFound = true;
if (style.getPropertyValue("height") !== "")
@@ -693,7 +703,7 @@ WebInspector.AuditRules.ImageDimensionsRule.prototype = {
return callback(null);
var context = {imagesLeft: imageIds.length, urlToNoDimensionCount: {}};
for (var i = imageIds.length - 1; i >= 0; --i)
- InspectorBackend.getStyles(imageIds[i], true, imageStylesReady.bind(this, imageIds[i], context));
+ WebInspector.cssModel.getStylesAsync(imageIds[i], imageStylesReady.bind(this, imageIds[i], context));
}
function pushImageNodes()
diff --git a/WebCore/inspector/front-end/BreakpointManager.js b/WebCore/inspector/front-end/BreakpointManager.js
index 221a777..3d51092 100644
--- a/WebCore/inspector/front-end/BreakpointManager.js
+++ b/WebCore/inspector/front-end/BreakpointManager.js
@@ -230,10 +230,17 @@ WebInspector.BreakpointManager.prototype = {
debuggerPaused: function(details)
{
- if (details.eventType !== WebInspector.DebuggerEventTypes.NativeBreakpoint)
+ if (details.eventType === WebInspector.DebuggerEventTypes.JavaScriptPause)
return;
- var breakpoint = this._breakpoints[details.eventData.breakpointId];
+ if (details.eventData && details.eventData.breakpointId)
+ var breakpointId = details.eventData.breakpointId;
+ else if (details.callFrames && details.callFrames.length)
+ var breakpointId = WebInspector.Breakpoint.jsBreakpointId(details.callFrames[0].sourceID, details.callFrames[0].line);
+ else
+ return;
+
+ var breakpoint = this._breakpoints[breakpointId];
if (!breakpoint)
return;
@@ -323,6 +330,11 @@ WebInspector.Breakpoint = function(breakpointManager, sourceID, url, line, enabl
this._breakpointManager = breakpointManager;
}
+WebInspector.Breakpoint.jsBreakpointId = function(sourceID, line)
+{
+ return sourceID + ":" + line;
+}
+
WebInspector.Breakpoint.prototype = {
get enabled()
{
@@ -352,7 +364,7 @@ WebInspector.Breakpoint.prototype = {
get id()
{
- return this.sourceID + ":" + this.line;
+ return WebInspector.Breakpoint.jsBreakpointId(this.sourceID, this.line);
},
get condition()
diff --git a/WebCore/inspector/front-end/BreakpointsSidebarPane.js b/WebCore/inspector/front-end/BreakpointsSidebarPane.js
index f010330..47194da 100644
--- a/WebCore/inspector/front-end/BreakpointsSidebarPane.js
+++ b/WebCore/inspector/front-end/BreakpointsSidebarPane.js
@@ -259,9 +259,16 @@ WebInspector.EventListenerBreakpointsSidebarPane = function()
WebInspector.breakpointManager.addEventListener("event-listener-breakpoint-added", this._breakpointAdded, this);
this._breakpointItems = {};
+ this._createCategory("Keyboard", "listener", ["keydown", "keyup", "keypress", "textInput"]);
this._createCategory("Mouse", "listener", ["click", "dblclick", "mousedown", "mouseup", "mouseover", "mousemove", "mouseout", "mousewheel"]);
- this._createCategory("Keyboard", "listener", ["keydown", "keypress", "keyup"]);
- this._createCategory("HTML frame/object", "listener", ["load", "error", "resize", "scroll"]);
+ // FIXME: uncomment following once inspector stops being drop targer in major ports.
+ // Otherwise, inspector page reacts on drop event and tries to load the event data.
+ // this._createCategory("Drag", "listener", ["drag", "drop", "dragstart", "dragend", "dragenter", "dragleave", "dragover"]);
+ this._createCategory("Control", "listener", ["resize", "scroll", "zoom", "focus", "blur", "select", "change", "submit", "reset"]);
+ this._createCategory("Clipboard", "listener", ["copy", "cut", "paste", "beforecopy", "beforecut", "beforepaste"]);
+ this._createCategory("Load", "listener", ["load", "unload", "abort", "error"]);
+ this._createCategory("DOM Mutation", "listener", ["DOMActivate", "DOMFocusIn", "DOMFocusOut", "DOMAttrModified", "DOMCharacterDataModified", "DOMNodeInserted", "DOMNodeInsertedIntoDocument", "DOMNodeRemoved", "DOMNodeRemovedFromDocument", "DOMSubtreeModified", "DOMContentLoaded"]);
+ this._createCategory("Device", "listener", ["deviceorientation", "devicemotion"]);
this._createCategory("Timer", "instrumentation", ["setTimer", "clearTimer", "timerFired"]);
}
@@ -285,6 +292,9 @@ WebInspector.EventListenerBreakpointsSidebarPane.prototype = {
var title = WebInspector.EventListenerBreakpoint.eventNameForUI(eventName);
breakpointItem.element = new TreeElement(title);
categoryItem.element.appendChild(breakpointItem.element);
+ var hitMarker = document.createElement("div");
+ hitMarker.className = "breakpoint-hit-marker";
+ breakpointItem.element.listItemElement.appendChild(hitMarker);
breakpointItem.element.listItemElement.addStyleClass("source-code");
breakpointItem.element.selectable = true;
diff --git a/WebCore/inspector/front-end/CSSStyleModel.js b/WebCore/inspector/front-end/CSSStyleModel.js
index 542a3b3..c3429fd 100644
--- a/WebCore/inspector/front-end/CSSStyleModel.js
+++ b/WebCore/inspector/front-end/CSSStyleModel.js
@@ -83,7 +83,7 @@ WebInspector.CSSStyleModel.prototype = {
userCallback(result);
}
- InspectorBackend.getStyles(nodeId, false, callback.bind(null, userCallback));
+ InspectorBackend.getStylesForNode2(nodeId, callback.bind(null, userCallback));
},
getComputedStyleAsync: function(nodeId, userCallback)
@@ -96,7 +96,7 @@ WebInspector.CSSStyleModel.prototype = {
userCallback(WebInspector.CSSStyleDeclaration.parsePayload(stylePayload));
}
- InspectorBackend.getComputedStyle(nodeId, callback.bind(null, userCallback));
+ InspectorBackend.getComputedStyleForNode2(nodeId, callback.bind(null, userCallback));
},
getInlineStyleAsync: function(nodeId, userCallback)
@@ -109,41 +109,418 @@ WebInspector.CSSStyleModel.prototype = {
userCallback(WebInspector.CSSStyleDeclaration.parsePayload(stylePayload));
}
- InspectorBackend.getInlineStyle(nodeId, callback.bind(null, userCallback));
+ InspectorBackend.getInlineStyleForNode2(nodeId, callback.bind(null, userCallback));
},
- setRuleSelector: function(ruleId, newContent, nodeId, successCallback, failureCallback)
+ setRuleSelector: function(ruleId, nodeId, newSelector, successCallback, failureCallback)
{
- function callback(newRulePayload, doesAffectSelectedNode)
+ function checkAffectsCallback(nodeId, successCallback, rulePayload, selectedNodeIds)
{
- if (!newRulePayload)
+ var doesAffectSelectedNode = (selectedNodeIds.indexOf(nodeId) >= 0);
+ successCallback(WebInspector.CSSRule.parsePayload(rulePayload), doesAffectSelectedNode);
+ }
+
+ function callback(nodeId, successCallback, failureCallback, newSelector, rulePayload)
+ {
+ if (!rulePayload)
failureCallback();
else
- successCallback(WebInspector.CSSRule.parsePayload(newRulePayload), doesAffectSelectedNode);
+ InspectorBackend.querySelectorAll(nodeId, newSelector, checkAffectsCallback.bind(null, nodeId, successCallback, rulePayload));
}
- InspectorBackend.setRuleSelector(ruleId, newContent, nodeId, callback);
+ InspectorBackend.setRuleSelector2(ruleId, newSelector, callback.bind(null, nodeId, successCallback, failureCallback));
},
- addRule: function(nodeId, newContent, successCallback, failureCallback)
+ addRule: function(nodeId, selector, successCallback, failureCallback)
{
- function callback(rule, doesAffectSelectedNode)
+ function checkAffectsCallback(nodeId, successCallback, rulePayload, selectedNodeIds)
+ {
+ var doesAffectSelectedNode = (selectedNodeIds.indexOf(nodeId) >= 0);
+ successCallback(WebInspector.CSSRule.parsePayload(rulePayload), doesAffectSelectedNode);
+ }
+
+ function callback(successCallback, failureCallback, selector, rulePayload)
{
- if (!rule) {
+ if (!rulePayload) {
// Invalid syntax for a selector
failureCallback();
+ } else
+ InspectorBackend.querySelectorAll(nodeId, selector, checkAffectsCallback.bind(null, nodeId, successCallback, rulePayload));
+ }
+
+ InspectorBackend.addRule2(nodeId, selector, callback.bind(null, successCallback, failureCallback, selector));
+ }
+}
+
+WebInspector.CSSStyleDeclaration = function(payload)
+{
+ this.id = payload.styleId;
+ this.properties = payload.properties;
+ this._shorthandValues = payload.shorthandValues;
+ this._livePropertyMap = {}; // LIVE properties (source-based or style-based) : { name -> CSSProperty }
+ this._allProperties = []; // ALL properties: [ CSSProperty ]
+ this._longhandProperties = {}; // shorthandName -> [ CSSProperty ]
+ this.__disabledProperties = {}; // DISABLED properties: { index -> CSSProperty }
+ var payloadPropertyCount = payload.cssProperties.length;
+
+ var propertyIndex = 0;
+ for (var i = 0; i < payloadPropertyCount; ++i) {
+ var property = new WebInspector.CSSProperty.parsePayload(this, i, payload.cssProperties[i]);
+ this._allProperties.push(property);
+ if (property.disabled)
+ this.__disabledProperties[i] = property;
+ if (!property.active && !property.styleBased)
+ continue;
+ var name = property.name;
+ this[propertyIndex] = name;
+ this._livePropertyMap[name] = property;
+
+ // Index longhand properties.
+ if (property.shorthand) { // only for parsed
+ var longhands = this._longhandProperties[property.shorthand];
+ if (!longhands) {
+ longhands = [];
+ this._longhandProperties[property.shorthand] = longhands;
+ }
+ longhands.push(property);
+ }
+ ++propertyIndex;
+ }
+ this.length = propertyIndex;
+ if ("cssText" in payload)
+ this.cssText = payload.cssText;
+}
+
+WebInspector.CSSStyleDeclaration.parsePayload = function(payload)
+{
+ return new WebInspector.CSSStyleDeclaration(payload);
+}
+
+WebInspector.CSSStyleDeclaration.prototype = {
+ get allProperties()
+ {
+ return this._allProperties;
+ },
+
+ getLiveProperty: function(name)
+ {
+ return this._livePropertyMap[name];
+ },
+
+ getPropertyValue: function(name)
+ {
+ var property = this._livePropertyMap[name];
+ return property ? property.value : "";
+ },
+
+ getPropertyPriority: function(name)
+ {
+ var property = this._livePropertyMap[name];
+ return property ? property.priority : "";
+ },
+
+ getPropertyShorthand: function(name)
+ {
+ var property = this._livePropertyMap[name];
+ return property ? property.shorthand : "";
+ },
+
+ isPropertyImplicit: function(name)
+ {
+ var property = this._livePropertyMap[name];
+ return property ? property.implicit : "";
+ },
+
+ styleTextWithShorthands: function()
+ {
+ var cssText = "";
+ var foundProperties = {};
+ for (var i = 0; i < this.length; ++i) {
+ var individualProperty = this[i];
+ var shorthandProperty = this.getPropertyShorthand(individualProperty);
+ var propertyName = (shorthandProperty || individualProperty);
+
+ if (propertyName in foundProperties)
+ continue;
+
+ if (shorthandProperty) {
+ var value = this.getShorthandValue(shorthandProperty);
+ var priority = this.getShorthandPriority(shorthandProperty);
} else {
- var styleRule = WebInspector.CSSRule.parsePayload(rule);
- styleRule.rule = rule;
- successCallback(styleRule, doesAffectSelectedNode);
+ var value = this.getPropertyValue(individualProperty);
+ var priority = this.getPropertyPriority(individualProperty);
}
+
+ foundProperties[propertyName] = true;
+
+ cssText += propertyName + ": " + value;
+ if (priority)
+ cssText += " !" + priority;
+ cssText += "; ";
+ }
+
+ return cssText;
+ },
+
+ getLonghandProperties: function(name)
+ {
+ return this._longhandProperties[name] || [];
+ },
+
+ getShorthandValue: function(shorthandProperty)
+ {
+ var property = this.getLiveProperty(shorthandProperty);
+ return property ? property.value : this._shorthandValues[shorthandProperty];
+ },
+
+ getShorthandPriority: function(shorthandProperty)
+ {
+ var priority = this.getPropertyPriority(shorthandProperty);
+ if (priority)
+ return priority;
+
+ var longhands = this._longhandProperties[shorthandProperty];
+ return longhands ? this.getPropertyPriority(longhands[0]) : null;
+ },
+
+ propertyAt: function(index)
+ {
+ return (index < this.allProperties.length) ? this.allProperties[index] : null;
+ },
+
+ pastLastSourcePropertyIndex: function()
+ {
+ for (var i = this.allProperties.length - 1; i >= 0; --i) {
+ var property = this.allProperties[i];
+ if (property.active || property.disabled)
+ return i + 1;
}
+ return 0;
+ },
- InspectorBackend.addRule(newContent, nodeId, callback);
+ newBlankProperty: function()
+ {
+ return new WebInspector.CSSProperty(this, this.pastLastSourcePropertyIndex(), "", "", "", "active", true, false, false, "");
},
- setCSSText: function(styleId, cssText)
+ insertPropertyAt: function(index, name, value, userCallback)
+ {
+ function callback(userCallback, payload)
+ {
+ if (!userCallback)
+ return;
+
+ if (!payload)
+ userCallback(null);
+ else
+ userCallback(WebInspector.CSSStyleDeclaration.parsePayload(payload));
+ }
+
+ InspectorBackend.setPropertyText2(this.id, index, name + ": " + value + ";", false, callback.bind(null, userCallback));
+ },
+
+ appendProperty: function(name, value, userCallback)
+ {
+ this.insertPropertyAt(this.allProperties.length, name, value, userCallback);
+ }
+}
+
+WebInspector.CSSRule = function(payload)
+{
+ this.id = payload.ruleId;
+ this.selectorText = payload.selectorText;
+ this.sourceLine = payload.sourceLine;
+ this.sourceURL = payload.sourceURL;
+ this.origin = payload.origin;
+ this.style = WebInspector.CSSStyleDeclaration.parsePayload(payload.style);
+ this.style.parentRule = this;
+ this.selectorRange = payload.selectorRange;
+}
+
+WebInspector.CSSRule.parsePayload = function(payload)
+{
+ return new WebInspector.CSSRule(payload);
+}
+
+WebInspector.CSSRule.prototype = {
+ get isUserAgent()
{
- InspectorBackend.setStyleText(styleId, cssText);
+ return this.origin === "user-agent";
+ },
+
+ get isUser()
+ {
+ return this.origin === "user";
+ },
+
+ get isViaInspector()
+ {
+ return this.origin === "inspector";
+ },
+
+ get isRegular()
+ {
+ return this.origin === "";
+ }
+}
+
+WebInspector.CSSProperty = function(ownerStyle, index, name, value, priority, status, parsedOk, implicit, shorthand, text)
+{
+ this.ownerStyle = ownerStyle;
+ this.index = index;
+ this.name = name;
+ this.value = value;
+ this.priority = priority;
+ this.status = status;
+ this.parsedOk = parsedOk;
+ this.implicit = implicit;
+ this.shorthand = shorthand;
+ this.text = text;
+}
+
+WebInspector.CSSProperty.parsePayload = function(ownerStyle, index, payload)
+{
+ var result = new WebInspector.CSSProperty(
+ ownerStyle, index, payload.name, payload.value, payload.priority, payload.status, payload.parsedOk, payload.implicit, payload.shorthandName, payload.text);
+ return result;
+}
+
+WebInspector.CSSProperty.prototype = {
+ get propertyText()
+ {
+ if (this.text !== undefined)
+ return this.text;
+
+ if (this.name === "")
+ return "";
+ return this.name + ": " + this.value + (this.priority ? " !" + this.priority : "") + ";";
+ },
+
+ get isLive()
+ {
+ return this.active || this.styleBased;
+ },
+
+ get active()
+ {
+ return this.status === "active";
+ },
+
+ get styleBased()
+ {
+ return this.status === "style";
+ },
+
+ get inactive()
+ {
+ return this.status === "inactive";
+ },
+
+ get disabled()
+ {
+ return this.status === "disabled";
+ },
+
+ // Replaces "propertyName: propertyValue [!important];" in the stylesheet by an arbitrary propertyText.
+ setText: function(propertyText, userCallback)
+ {
+ function callback(userCallback, stylePayload)
+ {
+ if (stylePayload)
+ this.text = propertyText;
+
+ if (!userCallback)
+ return;
+ if (!stylePayload)
+ userCallback(null);
+ else {
+ var style = WebInspector.CSSStyleDeclaration.parsePayload(stylePayload);
+ userCallback(style);
+ }
+ }
+
+ if (!this.ownerStyle)
+ throw "No ownerStyle for property";
+
+ // An index past all the properties adds a new property to the style.
+ InspectorBackend.setPropertyText2(this.ownerStyle.id, this.index, propertyText, this.index < this.ownerStyle.pastLastSourcePropertyIndex(), callback.bind(this, userCallback));
+ },
+
+ setValue: function(newValue, userCallback)
+ {
+ var text = this.name + ": " + newValue + (this.priority ? " !" + this.priority : "") + ";"
+ this.setText(text, userCallback);
+ },
+
+ setDisabled: function(disabled, userCallback)
+ {
+ if (!this.ownerStyle && userCallback)
+ userCallback(null);
+ if (disabled === this.disabled && userCallback)
+ userCallback(this.ownerStyle);
+
+ function callback(userCallback, stylePayload)
+ {
+ if (!userCallback)
+ return;
+ if (!stylePayload)
+ userCallback(null);
+ else {
+ var style = WebInspector.CSSStyleDeclaration.parsePayload(stylePayload);
+ userCallback(style);
+ }
+ }
+
+ InspectorBackend.toggleProperty2(this.ownerStyle.id, this.index, disabled, callback.bind(this, userCallback));
+ }
+}
+
+WebInspector.CSSStyleSheet = function(payload)
+{
+ this.id = payload.styleSheetId;
+ this.sourceURL = payload.sourceURL;
+ this.title = payload.title;
+ this.disabled = payload.disabled;
+ this.rules = [];
+ this.styles = {};
+ for (var i = 0; i < payload.rules.length; ++i) {
+ var rule = WebInspector.CSSRule.parsePayload(payload.rules[i]);
+ this.rules.push(rule);
+ if (rule.style)
+ this.styles[rule.style.id] = rule.style;
+ }
+ if ("text" in payload)
+ this._text = payload.text;
+}
+
+WebInspector.CSSStyleSheet.createForId = function(styleSheetId, userCallback)
+{
+ function callback(userCallback, styleSheetPayload)
+ {
+ if (!styleSheetPayload)
+ userCallback(null);
+ else
+ userCallback(new WebInspector.CSSStyleSheet(styleSheetPayload));
+ }
+ InspectorBackend.getStyleSheet2(styleSheetId, callback.bind(this, userCallback));
+}
+
+WebInspector.CSSStyleSheet.prototype = {
+ getText: function()
+ {
+ return this._text;
+ },
+
+ setText: function(newText, userCallback)
+ {
+ function callback(userCallback, styleSheetPayload)
+ {
+ if (!styleSheetPayload)
+ userCallback(null);
+ else
+ userCallback(new WebInspector.CSSStyleSheet(styleSheetPayload));
+ }
+
+ InspectorBackend.setStyleSheetText2(this.id, newText, callback.bind(this, userCallback));
}
}
diff --git a/WebCore/inspector/front-end/CallStackSidebarPane.js b/WebCore/inspector/front-end/CallStackSidebarPane.js
index 08c1942..b2e6a5c 100644
--- a/WebCore/inspector/front-end/CallStackSidebarPane.js
+++ b/WebCore/inspector/front-end/CallStackSidebarPane.js
@@ -173,11 +173,12 @@ WebInspector.CallStackSidebarPane.prototype = {
_breakpointHit: function(event)
{
var breakpoint = event.data.breakpoint;
-
- var statusMessageElement = document.createElement("div");
- statusMessageElement.className = "info";
- breakpoint.populateStatusMessageElement(statusMessageElement, event.data.eventData);
- this.bodyElement.appendChild(statusMessageElement);
+ if (breakpoint.populateStatusMessageElement) {
+ var statusMessageElement = document.createElement("div");
+ statusMessageElement.className = "info";
+ breakpoint.populateStatusMessageElement(statusMessageElement, event.data.eventData);
+ this.bodyElement.appendChild(statusMessageElement);
+ }
}
}
diff --git a/WebCore/inspector/front-end/DOMAgent.js b/WebCore/inspector/front-end/DOMAgent.js
index 470e775..37bf549 100644
--- a/WebCore/inspector/front-end/DOMAgent.js
+++ b/WebCore/inspector/front-end/DOMAgent.js
@@ -524,296 +524,6 @@ WebInspector.EventListeners.getEventListenersForNodeAsync = function(node, callb
InspectorBackend.getEventListenersForNode(node.id, callback);
}
-WebInspector.CSSStyleDeclaration = function(payload)
-{
- this.id = payload.styleId;
- this.properties = payload.properties;
- this._shorthandValues = payload.shorthandValues;
- this._livePropertyMap = {}; // LIVE properties (source-based or style-based) : { name -> CSSProperty }
- this._allProperties = []; // ALL properties: [ CSSProperty ]
- this._longhandProperties = {}; // shorthandName -> [ CSSProperty ]
- this.__disabledProperties = {}; // DISABLED properties: { index -> CSSProperty }
- var payloadPropertyCount = payload.cssProperties.length;
-
- var propertyIndex = 0;
- for (var i = 0; i < payloadPropertyCount; ++i) {
- var property = new WebInspector.CSSProperty.parsePayload(this, i, payload.cssProperties[i]);
- this._allProperties.push(property);
- if (property.disabled)
- this.__disabledProperties[i] = property;
- if (!property.active && !property.styleBased)
- continue;
- var name = property.name;
- this[propertyIndex] = name;
- this._livePropertyMap[name] = property;
-
- // Index longhand properties.
- if (property.shorthand) { // only for parsed
- var longhands = this._longhandProperties[property.shorthand];
- if (!longhands) {
- longhands = [];
- this._longhandProperties[property.shorthand] = longhands;
- }
- longhands.push(property);
- }
- ++propertyIndex;
- }
- this.length = propertyIndex;
-}
-
-WebInspector.CSSStyleDeclaration.parsePayload = function(payload)
-{
- return new WebInspector.CSSStyleDeclaration(payload);
-}
-
-WebInspector.CSSStyleDeclaration.prototype = {
- get allProperties()
- {
- return this._allProperties;
- },
-
- getLiveProperty: function(name)
- {
- return this._livePropertyMap[name];
- },
-
- getPropertyValue: function(name)
- {
- var property = this._livePropertyMap[name];
- return property ? property.value : "";
- },
-
- getPropertyPriority: function(name)
- {
- var property = this._livePropertyMap[name];
- return property ? property.priority : "";
- },
-
- getPropertyShorthand: function(name)
- {
- var property = this._livePropertyMap[name];
- return property ? property.shorthand : "";
- },
-
- isPropertyImplicit: function(name)
- {
- var property = this._livePropertyMap[name];
- return property ? property.implicit : "";
- },
-
- styleTextWithShorthands: function()
- {
- var cssText = "";
- var foundProperties = {};
- for (var i = 0; i < this.length; ++i) {
- var individualProperty = this[i];
- var shorthandProperty = this.getPropertyShorthand(individualProperty);
- var propertyName = (shorthandProperty || individualProperty);
-
- if (propertyName in foundProperties)
- continue;
-
- if (shorthandProperty) {
- var value = this.getShorthandValue(shorthandProperty);
- var priority = this.getShorthandPriority(shorthandProperty);
- } else {
- var value = this.getPropertyValue(individualProperty);
- var priority = this.getPropertyPriority(individualProperty);
- }
-
- foundProperties[propertyName] = true;
-
- cssText += propertyName + ": " + value;
- if (priority)
- cssText += " !" + priority;
- cssText += "; ";
- }
-
- return cssText;
- },
-
- getLonghandProperties: function(name)
- {
- return this._longhandProperties[name] || [];
- },
-
- getShorthandValue: function(shorthandProperty)
- {
- var property = this.getLiveProperty(shorthandProperty);
- return property ? property.value : this._shorthandValues[shorthandProperty];
- },
-
- getShorthandPriority: function(shorthandProperty)
- {
- var priority = this.getPropertyPriority(shorthandProperty);
- if (priority)
- return priority;
-
- var longhands = this._longhandProperties[shorthandProperty];
- return longhands ? this.getPropertyPriority(longhands[0]) : null;
- },
-
- appendProperty: function(propertyName, propertyValue, userCallback)
- {
- function setPropertyCallback(userCallback, success, stylePayload)
- {
- if (!success)
- userCallback(null);
- else
- userCallback(WebInspector.CSSStyleDeclaration.parsePayload(stylePayload));
- }
-
- // FIXME(apavlov): this should be migrated to the new InspectorCSSAgent API once it is enabled.
- InspectorBackend.applyStyleText(this.id, propertyName + ": " + propertyValue + ";", propertyName, setPropertyCallback.bind(this, userCallback));
- },
-
- propertyAt: function(index)
- {
- return (index < this.allProperties.length) ? this.allProperties[index] : null;
- }
-}
-
-WebInspector.CSSRule = function(payload)
-{
- this.id = payload.ruleId;
- this.selectorText = payload.selectorText;
- this.sourceLine = payload.sourceLine;
- this.sourceURL = payload.sourceURL;
- this.origin = payload.origin;
- this.style = WebInspector.CSSStyleDeclaration.parsePayload(payload.style);
- this.style.parentRule = this;
-}
-
-WebInspector.CSSRule.parsePayload = function(payload)
-{
- return new WebInspector.CSSRule(payload);
-}
-
-WebInspector.CSSRule.prototype = {
- get isUserAgent()
- {
- return this.origin === "user-agent";
- },
-
- get isUser()
- {
- return this.origin === "user";
- },
-
- get isViaInspector()
- {
- return this.origin === "inspector";
- },
-
- get isRegular()
- {
- return this.origin === "";
- }
-}
-
-WebInspector.CSSProperty = function(ownerStyle, index, name, value, priority, status, parsedOk, implicit, shorthand, text)
-{
- this.ownerStyle = ownerStyle;
- this.index = index;
- this.name = name;
- this.value = value;
- this.priority = priority;
- this.status = status;
- this.parsedOk = parsedOk;
- this.implicit = implicit;
- this.shorthand = shorthand;
- this.text = text;
-}
-
-WebInspector.CSSProperty.parsePayload = function(ownerStyle, index, payload)
-{
- var result = new WebInspector.CSSProperty(
- ownerStyle, index, payload.name, payload.value, payload.priority, payload.status, payload.parsedOk, payload.implicit, payload.shorthandName, payload.text);
- return result;
-}
-
-WebInspector.CSSProperty.prototype = {
- get propertyText()
- {
- if (this.text !== undefined)
- return this.text;
-
- return this.name + ": " + this.value + (this.priority ? " !" + this.priority : "") + ";";
- },
-
- get isLive()
- {
- return this.active || this.styleBased;
- },
-
- get active()
- {
- return this.status === "active";
- },
-
- get styleBased()
- {
- return this.status === "style";
- },
-
- get inactive()
- {
- return this.status === "inactive";
- },
-
- get disabled()
- {
- return this.status === "disabled";
- },
-
- // Replaces "propertyName: propertyValue [!important];" in the stylesheet by an arbitrary propertyText.
- setText: function(propertyText, userCallback)
- {
- function callback(userCallback, success, stylePayload)
- {
- if (!userCallback)
- return;
- if (!success)
- userCallback(null);
- else {
- var style = WebInspector.CSSStyleDeclaration.parsePayload(stylePayload);
- userCallback(style);
- }
- }
-
- if (!this.ownerStyle)
- throw "No ownerStyle for property";
- InspectorBackend.applyStyleText(this.ownerStyle.id, propertyText, this.name, callback.bind(this, userCallback));
- },
-
- setValue: function(newValue, userCallback)
- {
- var text = this.name + ": " + newValue + (this.priority ? " !" + this.priority : "") + ";"
- this.setText(text, userCallback);
- },
-
- setDisabled: function(disabled, userCallback)
- {
- if (!this.ownerStyle && userCallback)
- userCallback(null);
- if (disabled === this.disabled && userCallback)
- userCallback(this.ownerStyle);
-
- function callback(userCallback, stylePayload)
- {
- if (!userCallback)
- return;
- if (!stylePayload)
- userCallback(null);
- else {
- var style = WebInspector.CSSStyleDeclaration.parsePayload(stylePayload);
- userCallback(style);
- }
- }
- InspectorBackend.toggleStyleEnabled(this.ownerStyle.id, this.name, disabled, callback.bind(this, userCallback));
- }
-}
-
WebInspector.attributesUpdated = function()
{
this.domAgent._attributesUpdated.apply(this.domAgent, arguments);
diff --git a/WebCore/inspector/front-end/DatabaseQueryView.js b/WebCore/inspector/front-end/DatabaseQueryView.js
index a179eaa..111246f 100644
--- a/WebCore/inspector/front-end/DatabaseQueryView.js
+++ b/WebCore/inspector/front-end/DatabaseQueryView.js
@@ -139,7 +139,7 @@ WebInspector.DatabaseQueryView.prototype = {
_queryFinished: function(query, columnNames, values)
{
- var dataGrid = WebInspector.panels.storage.dataGridForResult(columnNames, values);
+ var dataGrid = WebInspector.panels.resources.dataGridForResult(columnNames, values);
var trimmedQuery = query.trim();
if (dataGrid) {
@@ -149,7 +149,7 @@ WebInspector.DatabaseQueryView.prototype = {
}
if (trimmedQuery.match(/^create /i) || trimmedQuery.match(/^drop table /i))
- WebInspector.panels.storage.updateDatabaseTables(this.database);
+ WebInspector.panels.resources.updateDatabaseTables(this.database);
},
_queryError: function(query, error)
diff --git a/WebCore/inspector/front-end/DatabaseTableView.js b/WebCore/inspector/front-end/DatabaseTableView.js
index b234b9a..1a886ff 100644
--- a/WebCore/inspector/front-end/DatabaseTableView.js
+++ b/WebCore/inspector/front-end/DatabaseTableView.js
@@ -58,7 +58,7 @@ WebInspector.DatabaseTableView.prototype = {
{
this.element.removeChildren();
- var dataGrid = WebInspector.panels.storage.dataGridForResult(columnNames, values);
+ var dataGrid = WebInspector.panels.resources.dataGridForResult(columnNames, values);
if (!dataGrid) {
var emptyMsgElement = document.createElement("div");
emptyMsgElement.className = "storage-empty-view";
diff --git a/WebCore/inspector/front-end/ElementsTreeOutline.js b/WebCore/inspector/front-end/ElementsTreeOutline.js
index 4404051..f893ca0 100644
--- a/WebCore/inspector/front-end/ElementsTreeOutline.js
+++ b/WebCore/inspector/front-end/ElementsTreeOutline.js
@@ -265,21 +265,28 @@ WebInspector.ElementsTreeOutline.prototype = {
return;
var contextMenu = new WebInspector.ContextMenu();
-
- var href = event.target.enclosingNodeOrSelfWithClass("webkit-html-resource-link") || event.target.enclosingNodeOrSelfWithClass("webkit-html-external-link");
- var tag = event.target.enclosingNodeOrSelfWithClass("webkit-html-tag");
- var textNode = event.target.enclosingNodeOrSelfWithClass("webkit-html-text-node");
- var needSeparator;
- if (href)
- needSeparator = WebInspector.panels.elements.populateHrefContextMenu(contextMenu, event, href);
- if (tag && listItem.treeElement._populateTagContextMenu) {
- if (needSeparator)
- contextMenu.appendSeparator();
- listItem.treeElement._populateTagContextMenu(contextMenu, event);
- } else if (textNode && listItem.treeElement._populateTextContextMenu) {
- if (needSeparator)
- contextMenu.appendSeparator();
- listItem.treeElement._populateTextContextMenu(contextMenu, textNode);
+ if (this.showInElementsPanelEnabled) {
+ function focusElement()
+ {
+ WebInspector.panels.elements.focusedDOMNode = listItem.treeElement.representedObject;
+ }
+ contextMenu.appendItem(WebInspector.UIString("Reveal in Elements Panel"), focusElement.bind(this));
+ } else {
+ var href = event.target.enclosingNodeOrSelfWithClass("webkit-html-resource-link") || event.target.enclosingNodeOrSelfWithClass("webkit-html-external-link");
+ var tag = event.target.enclosingNodeOrSelfWithClass("webkit-html-tag");
+ var textNode = event.target.enclosingNodeOrSelfWithClass("webkit-html-text-node");
+ var needSeparator;
+ if (href)
+ needSeparator = WebInspector.panels.elements.populateHrefContextMenu(contextMenu, event, href);
+ if (tag && listItem.treeElement._populateTagContextMenu) {
+ if (needSeparator)
+ contextMenu.appendSeparator();
+ listItem.treeElement._populateTagContextMenu(contextMenu, event);
+ } else if (textNode && listItem.treeElement._populateTextContextMenu) {
+ if (needSeparator)
+ contextMenu.appendSeparator();
+ listItem.treeElement._populateTextContextMenu(contextMenu, textNode);
+ }
}
contextMenu.show(event);
}
@@ -593,8 +600,8 @@ WebInspector.ElementsTreeElement.prototype = {
if (childNodeCount > this.expandedChildCount) {
var targetButtonIndex = expandedChildCount;
if (!this.expandAllButtonElement) {
- var title = "<button class=\"show-all-nodes\" value=\"\" />";
- var item = new TreeElement(title, null, false);
+ var item = new TreeElement(null, null, false);
+ item.titleHTML = "<button class=\"show-all-nodes\" value=\"\" />";
item.selectable = false;
item.expandAllButton = true;
this.insertChild(item, targetButtonIndex);
@@ -1175,8 +1182,7 @@ WebInspector.ElementsTreeElement.prototype = {
if (this._editing)
return;
- var title = this._nodeTitleInfo(WebInspector.linkifyURL).title;
- this.title = "<span class=\"highlight\">" + title + "</span>";
+ this.titleHTML = "<span class=\"highlight\">" + this._nodeTitleInfo(WebInspector.linkifyURL).titleHTML + "</span>";
delete this.selectionElement;
this.updateSelection();
this._preventFollowingLinksOnDoubleClick();
@@ -1226,53 +1232,54 @@ WebInspector.ElementsTreeElement.prototype = {
_nodeTitleInfo: function(linkify)
{
var node = this.representedObject;
- var info = {title: "", hasChildren: this.hasChildren};
+ var info = {titleHTML: "", hasChildren: this.hasChildren};
switch (node.nodeType) {
case Node.DOCUMENT_NODE:
- info.title = "Document";
+ info.titleHTML = "Document";
break;
case Node.DOCUMENT_FRAGMENT_NODE:
- info.title = "Document Fragment";
+ info.titleHTML = "Document Fragment";
break;
case Node.ATTRIBUTE_NODE:
var value = node.value || "\u200B"; // Zero width space to force showing an empty value.
- info.title = this._attributeHTML(node.name, value);
+ info.titleHTML = this._attributeHTML(node.name, value);
break;
case Node.ELEMENT_NODE:
var tagName = this.treeOutline.nodeNameToCorrectCase(node.nodeName).escapeHTML();
if (this._elementCloseTag) {
- info.title = this._tagHTML(tagName, true, true);
+ info.titleHTML = this._tagHTML(tagName, true, true);
info.hasChildren = false;
break;
}
- info.title = this._tagHTML(tagName, false, false, linkify);
+ var titleHTML = this._tagHTML(tagName, false, false, linkify);
var textChild = onlyTextChild.call(node);
var showInlineText = textChild && textChild.textContent.length < Preferences.maxInlineTextChildLength;
if (!this.expanded && (!showInlineText && (this.treeOutline.isXMLMimeType || !WebInspector.ElementsTreeElement.ForbiddenClosingTagElements[tagName]))) {
if (this.hasChildren)
- info.title += "<span class=\"webkit-html-text-node\">&#8230;</span>&#8203;";
- info.title += this._tagHTML(tagName, true, false);
+ titleHTML += "<span class=\"webkit-html-text-node\">&#8230;</span>&#8203;";
+ titleHTML += this._tagHTML(tagName, true, false);
}
// If this element only has a single child that is a text node,
// just show that text and the closing tag inline rather than
// create a subtree for them
if (showInlineText) {
- info.title += "<span class=\"webkit-html-text-node\">" + textChild.nodeValue.escapeHTML() + "</span>&#8203;" + this._tagHTML(tagName, true, false);
+ titleHTML += "<span class=\"webkit-html-text-node\">" + textChild.nodeValue.escapeHTML() + "</span>&#8203;" + this._tagHTML(tagName, true, false);
info.hasChildren = false;
}
+ info.titleHTML = titleHTML;
break;
case Node.TEXT_NODE:
if (isNodeWhitespace.call(node))
- info.title = "(whitespace)";
+ info.titleHTML = "(whitespace)";
else {
if (node.parentNode && node.parentNode.nodeName.toLowerCase() === "script") {
var newNode = document.createElement("span");
@@ -1281,7 +1288,7 @@ WebInspector.ElementsTreeElement.prototype = {
var javascriptSyntaxHighlighter = new WebInspector.DOMSyntaxHighlighter("text/javascript");
javascriptSyntaxHighlighter.syntaxHighlightNode(newNode);
- info.title = "<span class=\"webkit-html-text-node webkit-html-js-node\">" + newNode.innerHTML.replace(/^[\n\r]*/, "").replace(/\s*$/, "") + "</span>";
+ info.titleHTML = "<span class=\"webkit-html-text-node webkit-html-js-node\">" + newNode.innerHTML.replace(/^[\n\r]*/, "").replace(/\s*$/, "") + "</span>";
} else if (node.parentNode && node.parentNode.nodeName.toLowerCase() === "style") {
var newNode = document.createElement("span");
newNode.textContent = node.textContent;
@@ -1289,35 +1296,35 @@ WebInspector.ElementsTreeElement.prototype = {
var cssSyntaxHighlighter = new WebInspector.DOMSyntaxHighlighter("text/css");
cssSyntaxHighlighter.syntaxHighlightNode(newNode);
- info.title = "<span class=\"webkit-html-text-node webkit-html-css-node\">" + newNode.innerHTML.replace(/^[\n\r]*/, "").replace(/\s*$/, "") + "</span>";
- } else {
- info.title = "\"<span class=\"webkit-html-text-node\">" + node.nodeValue.escapeHTML() + "</span>\"";
- }
+ info.titleHTML = "<span class=\"webkit-html-text-node webkit-html-css-node\">" + newNode.innerHTML.replace(/^[\n\r]*/, "").replace(/\s*$/, "") + "</span>";
+ } else
+ info.titleHTML = "\"<span class=\"webkit-html-text-node\">" + node.nodeValue.escapeHTML() + "</span>\"";
}
break;
case Node.COMMENT_NODE:
- info.title = "<span class=\"webkit-html-comment\">&lt;!--" + node.nodeValue.escapeHTML() + "--&gt;</span>";
+ info.titleHTML = "<span class=\"webkit-html-comment\">&lt;!--" + node.nodeValue.escapeHTML() + "--&gt;</span>";
break;
case Node.DOCUMENT_TYPE_NODE:
- info.title = "<span class=\"webkit-html-doctype\">&lt;!DOCTYPE " + node.nodeName;
+ var titleHTML = "<span class=\"webkit-html-doctype\">&lt;!DOCTYPE " + node.nodeName;
if (node.publicId) {
- info.title += " PUBLIC \"" + node.publicId + "\"";
+ titleHTML += " PUBLIC \"" + node.publicId + "\"";
if (node.systemId)
- info.title += " \"" + node.systemId + "\"";
+ titleHTML += " \"" + node.systemId + "\"";
} else if (node.systemId)
- info.title += " SYSTEM \"" + node.systemId + "\"";
+ titleHTML += " SYSTEM \"" + node.systemId + "\"";
if (node.internalSubset)
- info.title += " [" + node.internalSubset + "]";
- info.title += "&gt;</span>";
+ titleHTML += " [" + node.internalSubset + "]";
+ titleHTML += "&gt;</span>";
+ info.titleHTML = titleHTML;
break;
case Node.CDATA_SECTION_NODE:
- info.title = "<span class=\"webkit-html-text-node\">&lt;![CDATA[" + node.nodeValue.escapeHTML() + "]]&gt;</span>";
+ info.titleHTML = "<span class=\"webkit-html-text-node\">&lt;![CDATA[" + node.nodeValue.escapeHTML() + "]]&gt;</span>";
break;
default:
- info.title = this.treeOutline.nodeNameToCorrectCase(node.nodeName).collapseWhitespace().escapeHTML();
+ info.titleHTML = this.treeOutline.nodeNameToCorrectCase(node.nodeName).collapseWhitespace().escapeHTML();
}
return info;
diff --git a/WebCore/inspector/front-end/ExtensionAPI.js b/WebCore/inspector/front-end/ExtensionAPI.js
index 7d6d76c..e526cf5 100644
--- a/WebCore/inspector/front-end/ExtensionAPI.js
+++ b/WebCore/inspector/front-end/ExtensionAPI.js
@@ -85,13 +85,6 @@ EventSinkImpl.prototype = {
}
}
-function EventSink(type, customDispatch)
-{
- var impl = new EventSinkImpl(type, customDispatch);
- this.addListener = bind(impl.addListener, impl);
- this.removeListener = bind(impl.removeListener, impl);
-}
-
function InspectorExtensionAPI()
{
this.audits = new Audits();
@@ -183,6 +176,7 @@ Panels.prototype = {
function PanelImpl(id)
{
this._id = id;
+ this.onSelectionChanged = new EventSink("panel-objectSelected-" + id);
}
PanelImpl.prototype = {
@@ -213,25 +207,12 @@ PanelImpl.prototype = {
}
}
-function Panel(id)
-{
- var impl = new PanelImpl(id);
- this.createSidebarPane = bind(impl.createSidebarPane, impl);
- this.createWatchExpressionSidebarPane = bind(impl.createWatchExpressionSidebarPane, impl);
- this.onSelectionChanged = new EventSink("panel-objectSelected-" + id);
-}
-
function ExtensionPanel(id)
{
Panel.call(this, id);
this.onSearch = new EventSink("panel-search-" + id);
}
-ExtensionPanel.prototype = {
-}
-
-ExtensionPanel.prototype.__proto__ = Panel.prototype;
-
function ExtensionSidebarPaneImpl(id)
{
this._id = id;
@@ -249,17 +230,10 @@ ExtensionSidebarPaneImpl.prototype = {
}
}
-function ExtensionSidebarPane(id, impl)
-{
- if (!impl)
- impl = new ExtensionSidebarPaneImpl(id);
- this.setHeight = bind(impl.setHeight, impl);
- this.setExpanded = bind(impl.setExpanded, impl);
-}
-
function WatchExpressionSidebarPaneImpl(id)
{
ExtensionSidebarPaneImpl.call(this, id);
+ this.onUpdated = new EventSink("watch-sidebar-updated-" + id);
}
WatchExpressionSidebarPaneImpl.prototype = {
@@ -274,13 +248,12 @@ WatchExpressionSidebarPaneImpl.prototype = {
}
}
+WatchExpressionSidebarPaneImpl.prototype.__proto__ = ExtensionSidebarPaneImpl.prototype;
+
function WatchExpressionSidebarPane(id)
{
var impl = new WatchExpressionSidebarPaneImpl(id);
ExtensionSidebarPane.call(this, id, impl);
- this.setExpression = bind(impl.setExpression, impl);
- this.setObject = bind(impl.setObject, impl);
- this.onUpdated = new EventSink("watch-sidebar-updated-" + id);
}
function Audits()
@@ -296,7 +269,7 @@ Audits.prototype = {
}
}
-function AuditCategory(id)
+function AuditCategoryImpl(id)
{
function customDispatch(request)
{
@@ -308,22 +281,13 @@ function AuditCategory(id)
auditResult.done();
}
}
- var impl = new AuditCategoryImpl(id);
+ this._id = id;
this.onAuditStarted = new EventSink("audit-started-" + id, customDispatch);
}
-function AuditCategoryImpl(id)
+function AuditResultImpl(id)
{
this._id = id;
-}
-
-function AuditResult(id)
-{
- var impl = new AuditResultImpl(id);
-
- this.addResult = bind(impl.addResult, impl);
- this.createResult = bind(impl.createResult, impl);
- this.done = bind(impl.done, impl);
var formatterTypes = [
"url",
@@ -331,19 +295,7 @@ function AuditResult(id)
"text"
];
for (var i = 0; i < formatterTypes.length; ++i)
- this[formatterTypes[i]] = bind(impl._nodeFactory, null, formatterTypes[i]);
-}
-
-AuditResult.prototype = {
- get Severity()
- {
- return private.audits.Severity;
- }
-}
-
-function AuditResultImpl(id)
-{
- this._id = id;
+ this[formatterTypes[i]] = bind(this._nodeFactory, null, formatterTypes[i]);
}
AuditResultImpl.prototype = {
@@ -376,6 +328,11 @@ AuditResultImpl.prototype = {
extensionServer.sendRequest({ command: "stopAuditCategoryRun", resultId: this._id });
},
+ get Severity()
+ {
+ return private.audits.Severity;
+ },
+
_nodeFactory: function(type)
{
return {
@@ -503,6 +460,34 @@ function bind(func, thisObject)
return function() { return func.apply(thisObject, args.concat(Array.prototype.slice.call(arguments, 0))); };
}
+function populateInterfaceClass(interface, implementation)
+{
+ for (var member in implementation) {
+ if (member.charAt(0) === "_")
+ continue;
+ var value = implementation[member];
+ interface[member] = typeof value === "function" ? bind(value, implementation)
+ : interface[member] = implementation[member];
+ }
+}
+
+function declareInterfaceClass(implConstructor)
+{
+ return function()
+ {
+ var impl = { __proto__: implConstructor.prototype };
+ implConstructor.apply(impl, arguments);
+ populateInterfaceClass(this, impl);
+ }
+}
+
+var EventSink = declareInterfaceClass(EventSinkImpl);
+var Panel = declareInterfaceClass(PanelImpl);
+var ExtensionSidebarPane = declareInterfaceClass(ExtensionSidebarPaneImpl);
+var WatchExpressionSidebarPane = declareInterfaceClass(WatchExpressionSidebarPaneImpl);
+var AuditCategory = declareInterfaceClass(AuditCategoryImpl);
+var AuditResult = declareInterfaceClass(AuditResultImpl);
+
var extensionServer = new ExtensionServerClient();
webInspector = new InspectorExtensionAPI();
diff --git a/WebCore/inspector/front-end/ExtensionServer.js b/WebCore/inspector/front-end/ExtensionServer.js
index 6ffa33a..7229785 100644
--- a/WebCore/inspector/front-end/ExtensionServer.js
+++ b/WebCore/inspector/front-end/ExtensionServer.js
@@ -277,8 +277,8 @@ WebInspector.ExtensionServer.prototype = {
if (!resource)
return this._status.E_NOTFOUND(typeof id + ": " + id);
- WebInspector.panels.storage.showResource(resource, message.line);
- WebInspector.showPanel("storage");
+ WebInspector.panels.resources.showResource(resource, message.line);
+ WebInspector.showPanel("resources");
},
_dispatchCallback: function(requestId, port, result)
diff --git a/WebCore/inspector/front-end/Images/auditsIcon.png b/WebCore/inspector/front-end/Images/auditsIcon.png
index 8d1f752..ebeafdc 100644
--- a/WebCore/inspector/front-end/Images/auditsIcon.png
+++ b/WebCore/inspector/front-end/Images/auditsIcon.png
Binary files differ
diff --git a/WebCore/inspector/front-end/Images/storageIcon.png b/WebCore/inspector/front-end/Images/storageIcon.png
deleted file mode 100644
index 79c7bb3..0000000
--- a/WebCore/inspector/front-end/Images/storageIcon.png
+++ /dev/null
Binary files differ
diff --git a/WebCore/inspector/front-end/NetworkPanel.js b/WebCore/inspector/front-end/NetworkPanel.js
index 71433af..a695167 100644
--- a/WebCore/inspector/front-end/NetworkPanel.js
+++ b/WebCore/inspector/front-end/NetworkPanel.js
@@ -392,7 +392,7 @@ WebInspector.NetworkPanel.prototype = {
var maxTime = -1;
for (var i = 0; i < this._resources.length; ++i) {
var resource = this._resources[i];
- transferSize += resource.cached ? 0 : resource.transferSize;
+ transferSize += (resource.cached || !resource.transferSize) ? 0 : resource.transferSize;
if (resource.isMainResource)
baseTime = resource.startTime;
if (resource.endTime > maxTime)
@@ -864,7 +864,7 @@ WebInspector.NetworkPanel.prototype = {
view.show(this._viewsContainerElement);
if (line) {
- view.selectContentTab(true);
+ view.selectContentTab();
if (view.revealLine)
view.revealLine(line);
if (view.highlightLine)
diff --git a/WebCore/inspector/front-end/ObjectPropertiesSection.js b/WebCore/inspector/front-end/ObjectPropertiesSection.js
index 015039c..e13e5eb 100644
--- a/WebCore/inspector/front-end/ObjectPropertiesSection.js
+++ b/WebCore/inspector/front-end/ObjectPropertiesSection.js
@@ -76,7 +76,8 @@ WebInspector.ObjectPropertiesSection.prototype = {
if (!this.propertiesTreeOutline.children.length) {
var title = "<div class=\"info\">" + this.emptyPlaceholder + "</div>";
- var infoElement = new TreeElement(title, null, false);
+ var infoElement = new TreeElement(null, null, false);
+ infoElement.titleHTML = title;
this.propertiesTreeOutline.appendChild(infoElement);
}
this.propertiesForTest = properties;
@@ -186,6 +187,8 @@ WebInspector.ObjectPropertyTreeElement.prototype = {
this.valueElement.addStyleClass("error");
if (this.property.value.type)
this.valueElement.addStyleClass("console-formatted-" + this.property.value.type);
+ if (this.property.value.type === "node")
+ this.valueElement.addEventListener("contextmenu", this._contextMenuEventFired.bind(this), true);
this.listItemElement.removeChildren();
@@ -195,6 +198,24 @@ WebInspector.ObjectPropertyTreeElement.prototype = {
this.hasChildren = this.property.value.hasChildren;
},
+ _contextMenuEventFired: function()
+ {
+ function selectNode(nodeId)
+ {
+ if (nodeId)
+ WebInspector.panels.elements.focusedDOMNode = WebInspector.domAgent.nodeForId(nodeId);
+ }
+
+ function revealElement()
+ {
+ this.property.value.pushNodeToFrontend(selectNode);
+ }
+
+ var contextMenu = new WebInspector.ContextMenu();
+ contextMenu.appendItem(WebInspector.UIString("Reveal in Elements Panel"), revealElement.bind(this));
+ contextMenu.show(event);
+ },
+
updateSiblings: function()
{
if (this.parent.root)
diff --git a/WebCore/inspector/front-end/ResourceManager.js b/WebCore/inspector/front-end/ResourceManager.js
index bb34561..223e435 100644
--- a/WebCore/inspector/front-end/ResourceManager.js
+++ b/WebCore/inspector/front-end/ResourceManager.js
@@ -250,7 +250,7 @@ WebInspector.ResourceManager.prototype = {
resource.type = WebInspector.Resource.Type[type];
resource.content = sourceString;
- WebInspector.panels.storage.refreshResource(resource);
+ WebInspector.panels.resources.refreshResource(resource);
WebInspector.panels.network.refreshResource(resource);
},
@@ -404,7 +404,7 @@ WebInspector.ResourceManager.prototype = {
else if (resourceForURL instanceof Array)
resourceForURL.push(resource);
else
- this._resourcesByURL[resource.url] = [resourceForURL];
+ this._resourcesByURL[resource.url] = [resourceForURL, resource];
},
_unbindResourceURL: function(resource)
@@ -489,7 +489,7 @@ WebInspector.ResourceTreeModel.prototype = {
addOrUpdateFrame: function(frame)
{
var tmpResource = new WebInspector.Resource(null, frame.url);
- WebInspector.panels.storage.addOrUpdateFrame(frame.parentId, frame.id, frame.name, tmpResource.displayName);
+ WebInspector.panels.resources.addOrUpdateFrame(frame.parentId, frame.id, frame.name, tmpResource.displayName);
var subframes = this._subframes[frame.parentId];
if (!subframes) {
subframes = {};
@@ -508,19 +508,19 @@ WebInspector.ResourceTreeModel.prototype = {
var resourcesForFrame = this._resourcesByFrameId[frame.id];
for (var i = 0; resourcesForFrame && i < resourcesForFrame.length; ++i) {
WebInspector.resourceManager._bindResourceURL(resourcesForFrame[i]);
- WebInspector.panels.storage.addResourceToFrame(frame.id, resourcesForFrame[i]);
+ WebInspector.panels.resources.addResourceToFrame(frame.id, resourcesForFrame[i]);
}
},
frameDetachedFromParent: function(frameId)
{
this._clearChildFramesAndResources(frameId, 0);
- WebInspector.panels.storage.removeFrame(frameId);
+ WebInspector.panels.resources.removeFrame(frameId);
},
_clearChildFramesAndResources: function(frameId, loaderId)
{
- WebInspector.panels.storage.removeResourcesFromFrame(frameId);
+ WebInspector.panels.resources.removeResourcesFromFrame(frameId);
this._clearResources(frameId, loaderId);
var subframes = this._subframes[frameId];
@@ -528,7 +528,7 @@ WebInspector.ResourceTreeModel.prototype = {
return;
for (var childFrameId in subframes) {
- WebInspector.panels.storage.removeFrame(childFrameId);
+ WebInspector.panels.resources.removeFrame(childFrameId);
this._clearChildFramesAndResources(childFrameId, loaderId);
}
delete this._subframes[frameId];
@@ -543,7 +543,7 @@ WebInspector.ResourceTreeModel.prototype = {
}
resourcesForFrame.push(resource);
- WebInspector.panels.storage.addResourceToFrame(frameId, resource);
+ WebInspector.panels.resources.addResourceToFrame(frameId, resource);
},
_clearResources: function(frameId, loaderToPreserveId)
diff --git a/WebCore/inspector/front-end/ResourceView.js b/WebCore/inspector/front-end/ResourceView.js
index 3ca7fcc..19e3052 100644
--- a/WebCore/inspector/front-end/ResourceView.js
+++ b/WebCore/inspector/front-end/ResourceView.js
@@ -39,12 +39,12 @@ WebInspector.ResourceView = function(resource)
this.headersElement = document.createElement("div");
this.headersElement.className = "resource-view-headers";
- this.tabbedPane.appendTab("headers", WebInspector.UIString("Headers"), this.headersElement, this._selectHeadersTab.bind(this, true));
+ this.tabbedPane.appendTab("headers", WebInspector.UIString("Headers"), this.headersElement, this._selectTab.bind(this, "headers"));
if (this.hasContentTab()) {
this.contentElement = document.createElement("div");
this.contentElement.className = "resource-view-content";
- this.tabbedPane.appendTab("content", WebInspector.UIString("Content"), this.contentElement, this.selectContentTab.bind(this, true));
+ this.tabbedPane.appendTab("content", WebInspector.UIString("Content"), this.contentElement, this._selectTab.bind(this, "content"));
}
this.headersListElement = document.createElement("ol");
@@ -145,29 +145,26 @@ WebInspector.ResourceView.prototype = {
this._cookiesView.resize();
},
- _selectTab: function()
+ selectContentTab: function()
{
- var preferredTab = WebInspector.settings.resourceViewTab;
- if (this._headersVisible && this._cookiesView && preferredTab === "cookies")
- this._selectCookiesTab();
- else if (this._headersVisible && (!this.hasContentTab() || preferredTab === "headers"))
- this._selectHeadersTab();
- else
- this._innerSelectContentTab();
+ this._selectTab("content");
},
- _selectHeadersTab: function(updatePrefs)
+ _selectTab: function(tab)
{
- if (updatePrefs)
- WebInspector.settings.resourceViewTab = "headers";
- this.tabbedPane.selectTabById("headers");
- },
-
- selectContentTab: function(updatePrefs)
- {
- if (updatePrefs)
- WebInspector.settings.resourceViewTab = "content";
- this._innerSelectContentTab();
+ if (tab)
+ WebInspector.settings.resourceViewTab = tab;
+ else {
+ var preferredTab = WebInspector.settings.resourceViewTab;
+ tab = "content";
+
+ // Honor user tab preference (if we can). Fallback to content if headers not visible, headers otherwise.
+ if (this._headersVisible)
+ tab = this.tabbedPane.hasTab(preferredTab) ? preferredTab : "headers";
+ }
+ this.tabbedPane.selectTabById(tab);
+ if (tab === "content" && this.hasContentTab())
+ this.contentTabSelected();
},
hasContentTab: function()
@@ -176,25 +173,9 @@ WebInspector.ResourceView.prototype = {
return false;
},
- _selectCookiesTab: function(updatePrefs)
- {
- if (updatePrefs)
- WebInspector.settings.resourceViewTab = "cookies";
- this.tabbedPane.selectTabById("cookies");
- this._cookiesView.resize();
- },
-
- _innerSelectContentTab: function()
- {
- this.tabbedPane.selectTabById("content");
- this.resize();
- if (this.hasContentTab())
- this.contentTabSelected();
- },
-
_refreshURL: function()
{
- this.urlTreeElement.title = "<div class=\"header-name\">" + WebInspector.UIString("Request URL") + ":</div>" +
+ this.urlTreeElement.titleHTML = "<div class=\"header-name\">" + WebInspector.UIString("Request URL") + ":</div>" +
"<div class=\"header-value source-code\">" + this.resource.url.escapeHTML() + "</div>";
},
@@ -230,7 +211,8 @@ WebInspector.ResourceView.prototype = {
this.requestPayloadTreeElement.removeChildren();
var title = "<div class=\"raw-form-data header-value source-code\">" + formData.escapeHTML() + "</div>";
- var parmTreeElement = new TreeElement(title, null, false);
+ var parmTreeElement = new TreeElement(null, null, false);
+ parmTreeElement.titleHTML = title;
parmTreeElement.selectable = false;
this.requestPayloadTreeElement.appendChild(parmTreeElement);
},
@@ -239,7 +221,7 @@ WebInspector.ResourceView.prototype = {
{
parmsTreeElement.removeChildren();
- parmsTreeElement.title = title + "<span class=\"header-count\">" + WebInspector.UIString(" (%d)", parms.length) + "</span>";
+ parmsTreeElement.titleHTML = title + "<span class=\"header-count\">" + WebInspector.UIString(" (%d)", parms.length) + "</span>";
for (var i = 0; i < parms.length; ++i) {
var name = parms[i].name;
@@ -265,7 +247,8 @@ WebInspector.ResourceView.prototype = {
var title = "<div class=\"header-name\">" + name.escapeHTML() + ":</div>";
title += "<div class=\"header-value source-code\">" + valueEscaped + "</div>";
- var parmTreeElement = new TreeElement(title, null, false);
+ var parmTreeElement = new TreeElement(null, null, false);
+ parmTreeElement.titleHTML = title;
parmTreeElement.selectable = false;
parmTreeElement.tooltip = this._decodeHover;
parmTreeElement.ondblclick = this._toggleURLdecoding.bind(this);
@@ -328,10 +311,10 @@ WebInspector.ResourceView.prototype = {
var statusTextEscaped = this.resource.statusCode + " " + this.resource.statusText.escapeHTML();
statusCodeImage = "<img class=\"resource-status-image\" src=\"" + statusImageSource + "\" title=\"" + statusTextEscaped + "\">";
- requestMethodElement.title = "<div class=\"header-name\">" + WebInspector.UIString("Request Method") + ":</div>" +
+ requestMethodElement.titleHTML = "<div class=\"header-name\">" + WebInspector.UIString("Request Method") + ":</div>" +
"<div class=\"header-value source-code\">" + this.resource.requestMethod + "</div>";
- statusCodeElement.title = "<div class=\"header-name\">" + WebInspector.UIString("Status Code") + ":</div>" +
+ statusCodeElement.titleHTML = "<div class=\"header-name\">" + WebInspector.UIString("Status Code") + ":</div>" +
statusCodeImage + "<div class=\"header-value source-code\">" + statusTextEscaped + "</div>";
}
},
@@ -341,7 +324,7 @@ WebInspector.ResourceView.prototype = {
headersTreeElement.removeChildren();
var length = headers.length;
- headersTreeElement.title = title.escapeHTML() + "<span class=\"header-count\">" + WebInspector.UIString(" (%d)", length) + "</span>";
+ headersTreeElement.titleHTML = title.escapeHTML() + "<span class=\"header-count\">" + WebInspector.UIString(" (%d)", length) + "</span>";
headersTreeElement.hidden = !length;
var length = headers.length;
@@ -349,7 +332,8 @@ WebInspector.ResourceView.prototype = {
var title = "<div class=\"header-name\">" + headers[i].header.escapeHTML() + ":</div>";
title += "<div class=\"header-value source-code\">" + headers[i].value.escapeHTML() + "</div>"
- var headerTreeElement = new TreeElement(title, null, false);
+ var headerTreeElement = new TreeElement(null, null, false);
+ headerTreeElement.titleHTML = title;
headerTreeElement.selectable = false;
headersTreeElement.appendChild(headerTreeElement);
}
@@ -358,7 +342,8 @@ WebInspector.ResourceView.prototype = {
var title = "<div class=\"header-name\">" + additionalRow.header.escapeHTML() + ":</div>";
title += "<div class=\"header-value source-code\">" + additionalRow.value.escapeHTML() + "</div>"
- var headerTreeElement = new TreeElement(title, null, false);
+ var headerTreeElement = new TreeElement(null, null, false);
+ headerTreeElement.titleHTML = title;
headerTreeElement.selectable = false;
headersTreeElement.appendChild(headerTreeElement);
}
@@ -370,7 +355,7 @@ WebInspector.ResourceView.prototype = {
if (!this.resource.requestCookies && !this.resource.responseCookies)
return;
this._cookiesView = new WebInspector.ResourceCookiesTab();
- this.tabbedPane.appendTab("cookies", WebInspector.UIString("Cookies"), this._cookiesView.element, this._selectCookiesTab.bind(this, true));
+ this.tabbedPane.appendTab("cookies", WebInspector.UIString("Cookies"), this._cookiesView, this._selectTab.bind(this, "cookies"));
}
this._cookiesView.requestCookies = this.resource.requestCookies;
this._cookiesView.responseCookies = this.resource.responseCookies;
@@ -391,6 +376,12 @@ WebInspector.ResourceCookiesTab = function()
}
WebInspector.ResourceCookiesTab.prototype = {
+ show: function(parentElement)
+ {
+ WebInspector.CookiesTable.prototype.show.call(this, parentElement);
+ this.resize();
+ },
+
set requestCookies(cookies)
{
if (this._requestCookies === cookies)
diff --git a/WebCore/inspector/front-end/StoragePanel.js b/WebCore/inspector/front-end/ResourcesPanel.js
index eb4eabb..5285dae 100644
--- a/WebCore/inspector/front-end/StoragePanel.js
+++ b/WebCore/inspector/front-end/ResourcesPanel.js
@@ -27,9 +27,9 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-WebInspector.StoragePanel = function(database)
+WebInspector.ResourcesPanel = function(database)
{
- WebInspector.Panel.call(this, "storage");
+ WebInspector.Panel.call(this, "resources");
WebInspector.settings.installApplicationSetting("resourcesLastSelectedItem", {});
@@ -79,7 +79,7 @@ WebInspector.StoragePanel = function(database)
this.sidebarElement.addEventListener("mouseout", this._onmouseout.bind(this), false);
}
-WebInspector.StoragePanel.prototype = {
+WebInspector.ResourcesPanel.prototype = {
get toolbarItemLabel()
{
return WebInspector.UIString("Resources");
@@ -193,7 +193,7 @@ WebInspector.StoragePanel.prototype = {
parentTreeElement.insertChild(frameTreeElement, i);
return;
}
- if (child.nameForSorting.localeCompare(frameTreeElement.nameForSorting) > 0) {
+ if (child.displayName.localeCompare(frameTreeElement.displayName) > 0) {
parentTreeElement.insertChild(frameTreeElement, i);
return;
}
@@ -359,7 +359,7 @@ WebInspector.StoragePanel.prototype = {
if (line) {
var view = WebInspector.ResourceManager.resourceViewForResource(resource);
- view.selectContentTab(true);
+ view.selectContentTab();
if (view.revealLine)
view.revealLine(line);
if (view.highlightLine)
@@ -762,7 +762,7 @@ WebInspector.StoragePanel.prototype = {
}
}
-WebInspector.StoragePanel.prototype.__proto__ = WebInspector.Panel.prototype;
+WebInspector.ResourcesPanel.prototype.__proto__ = WebInspector.Panel.prototype;
WebInspector.BaseStorageTreeElement = function(storagePanel, representedObject, title, iconClass, hasChildren)
{
@@ -900,21 +900,24 @@ WebInspector.FrameTreeElement.prototype = {
InspectorBackend.hideFrameHighlight();
},
- get nameForSorting()
+ get displayName()
{
- return this._nameForSorting;
+ return this._displayName;
},
setTitles: function(title, subtitle)
{
- this._nameForSorting = (title ? title : "") + (subtitle ? subtitle : "");
+ this._displayName = "";
if (this.parent) {
- if (title)
+ if (title) {
this.titleElement.textContent = title;
+ this._displayName = title;
+ }
if (subtitle) {
var subtitleElement = document.createElement("span");
subtitleElement.className = "base-storage-tree-element-subtitle";
subtitleElement.textContent = "(" + subtitle + ")";
+ this._displayName += " (" + subtitle + ")";
this.titleElement.appendChild(subtitleElement);
}
} else {
diff --git a/WebCore/inspector/front-end/ScriptsPanel.js b/WebCore/inspector/front-end/ScriptsPanel.js
index 66260f9..32c7f21 100644
--- a/WebCore/inspector/front-end/ScriptsPanel.js
+++ b/WebCore/inspector/front-end/ScriptsPanel.js
@@ -135,8 +135,8 @@ WebInspector.ScriptsPanel = function()
if (Preferences.nativeInstrumentationEnabled) {
this.sidebarPanes.domBreakpoints = WebInspector.createDOMBreakpointsSidebarPane();
this.sidebarPanes.xhrBreakpoints = WebInspector.createXHRBreakpointsSidebarPane();
+ this.sidebarPanes.eventListenerBreakpoints = new WebInspector.EventListenerBreakpointsSidebarPane();
}
- this.sidebarPanes.eventListenerBreakpoints = new WebInspector.EventListenerBreakpointsSidebarPane();
this.sidebarPanes.workers = new WebInspector.WorkersSidebarPane();
@@ -462,8 +462,8 @@ WebInspector.ScriptsPanel.prototype = {
if (Preferences.nativeInstrumentationEnabled) {
this.sidebarPanes.domBreakpoints.reset();
this.sidebarPanes.xhrBreakpoints.reset();
+ this.sidebarPanes.eventListenerBreakpoints.reset();
}
- this.sidebarPanes.eventListenerBreakpoints.reset();
this.sidebarPanes.workers.reset();
}
},
diff --git a/WebCore/inspector/front-end/Settings.js b/WebCore/inspector/front-end/Settings.js
index 4fd0c83..1acc2e0 100644
--- a/WebCore/inspector/front-end/Settings.js
+++ b/WebCore/inspector/front-end/Settings.js
@@ -46,7 +46,8 @@ var Preferences = {
nativeInstrumentationEnabled: false,
resourceExportEnabled: false,
fileSystemEnabled: false,
- useDataURLForResourceImageIcons: true
+ useDataURLForResourceImageIcons: true,
+ debugMode: false
}
WebInspector.Settings = function()
diff --git a/WebCore/inspector/front-end/StylesSidebarPane.js b/WebCore/inspector/front-end/StylesSidebarPane.js
index 6d1b541..1ad0ece 100644
--- a/WebCore/inspector/front-end/StylesSidebarPane.js
+++ b/WebCore/inspector/front-end/StylesSidebarPane.js
@@ -589,6 +589,8 @@ WebInspector.StylePropertiesSection = function(styleRule, editable, isInherited,
this._selectorElement = document.createElement("span");
this._selectorElement.textContent = styleRule.selectorText;
this.titleElement.appendChild(this._selectorElement);
+ if (Preferences.debugMode)
+ this._selectorElement.addEventListener("click", this._debugShowStyle.bind(this), false);
var openBrace = document.createElement("span");
openBrace.textContent = " {";
@@ -719,11 +721,6 @@ WebInspector.StylePropertiesSection.prototype = {
onpopulate: function()
{
- function sorter(a, b)
- {
- return a.name.localeCompare(b.name);
- }
-
var style = this.styleRule.style;
var handledProperties = {};
@@ -734,8 +731,6 @@ WebInspector.StylePropertiesSection.prototype = {
for (var i = 0; i < allProperties.length; ++i)
this.uniqueProperties.push(allProperties[i]);
- this.uniqueProperties.sort(sorter);
-
// Collect all shorthand names.
for (var i = 0; i < this.uniqueProperties.length; ++i) {
var property = this.uniqueProperties[i];
@@ -745,6 +740,7 @@ WebInspector.StylePropertiesSection.prototype = {
shorthandNames[property.shorthand] = true;
}
+ // Collect all shorthand names.
for (var i = 0; i < this.uniqueProperties.length; ++i) {
var property = this.uniqueProperties[i];
var disabled = property.disabled;
@@ -783,10 +779,10 @@ WebInspector.StylePropertiesSection.prototype = {
return null;
},
- addNewBlankProperty: function()
+ addNewBlankProperty: function(optionalIndex)
{
var style = this.styleRule.style;
- var property = new WebInspector.CSSProperty(style, style.allProperties.length, "", "", "", "style", true, false, false, undefined);
+ var property = style.newBlankProperty();
var item = new WebInspector.StylePropertyTreeElement(this.styleRule, style, property, false, false, false);
this.propertiesTreeOutline.appendChild(item);
item.listItemElement.textContent = "";
@@ -794,6 +790,39 @@ WebInspector.StylePropertiesSection.prototype = {
return item;
},
+ _debugShowStyle: function(anchor)
+ {
+ var boundHandler;
+ function removeStyleBox(element, event)
+ {
+ if (event.target === element) {
+ event.stopPropagation();
+ return;
+ }
+ document.body.removeChild(element);
+ document.getElementById("main").removeEventListener("mousedown", boundHandler, true);
+ }
+
+ if (!event.shiftKey)
+ return;
+
+ var container = document.createElement("div");
+ var element = document.createElement("span");
+ container.appendChild(element);
+ element.style.background = "yellow";
+ element.style.display = "inline-block";
+ container.style.cssText = "z-index: 2000000; position: absolute; top: 50px; left: 50px; white-space: pre; overflow: auto; background: white; font-family: monospace; font-size: 12px; border: 1px solid black; opacity: 0.85; -webkit-user-select: text; padding: 2px;";
+ container.style.width = (document.body.offsetWidth - 100) + "px";
+ container.style.height = (document.body.offsetHeight - 100) + "px";
+ document.body.appendChild(container);
+ if (this.rule)
+ element.textContent = this.rule.selectorText + " {" + ((this.styleRule.style.cssText !== undefined) ? this.styleRule.style.cssText : "<no cssText>") + "}";
+ else
+ element.textContent = this.styleRule.style.cssText;
+ boundHandler = removeStyleBox.bind(null, container);
+ document.getElementById("main").addEventListener("mousedown", boundHandler, true);
+ },
+
_handleEmptySpaceDoubleClick: function(event)
{
if (event.target.hasStyleClass("header")) {
@@ -885,7 +914,8 @@ WebInspector.StylePropertiesSection.prototype = {
moveToNextIfNeeded.call(self);
}
- WebInspector.cssModel.setRuleSelector(this.rule.id, newContent, this.pane.node.id, successCallback, moveToNextIfNeeded.bind(this));
+ var focusedNode = WebInspector.panels.elements.focusedDOMNode;
+ WebInspector.cssModel.setRuleSelector(this.rule.id, focusedNode ? focusedNode.id : 0, newContent, successCallback, moveToNextIfNeeded.bind(this));
},
editingSelectorCancelled: function()
@@ -977,7 +1007,8 @@ WebInspector.ComputedStylePropertiesSection.prototype = {
var value = property.value;
var title = "<span style='color: gray'>" + selectorText + "</span> - " + value;
var subtitle = " <span style='float:right'>" + section.subtitleElement.innerHTML + "</span>";
- var childElement = new TreeElement(title + subtitle, null, false);
+ var childElement = new TreeElement(null, null, false);
+ childElement.titleHTML = title + subtitle;
treeElement.appendChild(childElement);
if (section.isPropertyOverloaded(property.name))
childElement.listItemElement.addStyleClass("overloaded");
@@ -1093,21 +1124,39 @@ WebInspector.StylePropertyTreeElement.prototype = {
get name()
{
- return this.property.name;
+ if (!this.disabled || !this.property.text)
+ return this.property.name;
+
+ var text = this.property.text;
+ var index = text.indexOf(":");
+ if (index < 1)
+ return this.property.name;
+
+ return text.substring(0, index).trim();
},
get priority()
{
if (this.disabled)
- return this.property.priority;
- return (this.shorthand ? this.style.getShorthandPriority(this.name) : this.property.priority);
+ return ""; // rely upon raw text to render it in the value field
+ return this.property.priority;
},
get value()
{
- if (this.disabled)
+ if (!this.disabled || !this.property.text)
+ return this.property.value;
+
+ var match = this.property.text.match(/(.*);\s*/);
+ if (!match || !match[1])
+ return this.property.value;
+
+ var text = match[1];
+ var index = text.indexOf(":");
+ if (index < 1)
return this.property.value;
- return (this.shorthand ? this.style.getShorthandValue(this.name) : this.property.value);
+
+ return text.substring(index + 1).trim();
},
get parsedOk()
@@ -1301,6 +1350,11 @@ WebInspector.StylePropertyTreeElement.prototype = {
this.listItemElement.appendChild(document.createTextNode(";"));
+ if (!this.parsedOk)
+ this.listItemElement.addStyleClass("not-parsed-ok");
+ if (this.property.inactive)
+ this.listItemElement.addStyleClass("inactive");
+
this.tooltip = this.property.propertyText;
},
@@ -1347,6 +1401,7 @@ WebInspector.StylePropertyTreeElement.prototype = {
else
this.listItemElement.removeStyleClass("implicit");
+ this.selectable = !this.inherited;
if (this.inherited)
this.listItemElement.addStyleClass("inherited");
else
@@ -1477,6 +1532,28 @@ WebInspector.StylePropertyTreeElement.prototype = {
if (selectionRange.commonAncestorContainer !== this.listItemElement && !selectionRange.commonAncestorContainer.isDescendant(this.listItemElement))
return;
+ // If there are several properties in the text, do not handle increments/decrements.
+ var text = event.target.textContent.trim();
+ var openQuote;
+ var wasEscape = false;
+ // Exclude the last character from the check since it is allowed to be ";".
+ for (var i = 0; i < text.length - 1; ++i) {
+ var ch = text.charAt(i);
+ if (ch === "\\") {
+ wasEscape = true;
+ continue;
+ }
+ if (ch === ";" && !openQuote)
+ return; // Do not handle name/value shifts if the property is compound.
+ if ((ch === "'" || ch === "\"") && !wasEscape) {
+ if (!openQuote)
+ openQuote = ch;
+ else if (ch === openQuote)
+ openQuote = null;
+ }
+ wasEscape = false;
+ }
+
const styleValueDelimeters = " \t\n\"':;,/()";
var wordRange = selectionRange.startContainer.rangeOfWord(selectionRange.startOffset, styleValueDelimeters, this.listItemElement);
var wordString = wordRange.toString();
@@ -1554,16 +1631,11 @@ WebInspector.StylePropertyTreeElement.prototype = {
event.preventDefault();
- if (!this.originalCSSText) {
+ if (!("originalPropertyText" in this)) {
// Remember the rule's original CSS text, so it can be restored
// if the editing is canceled and before each apply.
- this.originalCSSText = this.style.styleTextWithShorthands();
- } else {
- // Restore the original CSS text before applying user changes. This is needed to prevent
- // new properties from sticking around if the user adds one, then removes it.
- WebInspector.cssModel.setCSSText(this.style.id, this.originalCSSText);
+ this.originalPropertyText = this.property.propertyText;
}
-
this.applyStyleText(this.listItemElement.textContent);
},
@@ -1574,23 +1646,19 @@ WebInspector.StylePropertyTreeElement.prototype = {
this.expand();
this.listItemElement.removeEventListener("keydown", context.keyDownListener, false);
this.listItemElement.removeEventListener("keypress", context.keyPressListener, false);
- delete this.originalCSSText;
+ delete this.originalPropertyText;
},
editingCancelled: function(element, context)
{
- if (this._newProperty)
- this.treeOutline.removeChild(this);
- else if (this.originalCSSText) {
- WebInspector.cssModel.setCSSText(this.style.id, this.originalCSSText);
-
- if (this.treeOutline.section && this.treeOutline.section.pane)
- this.treeOutline.section.pane.dispatchEventToListeners("style edited");
-
- this.updateAll();
- } else
- this.updateTitle();
-
+ if ("originalPropertyText" in this)
+ this.applyStyleText(this.originalPropertyText, true);
+ else {
+ if (this._newProperty)
+ this.treeOutline.removeChild(this);
+ else
+ this.updateTitle();
+ }
this.editingEnded(context);
},
@@ -1600,7 +1668,11 @@ WebInspector.StylePropertyTreeElement.prototype = {
// Determine where to move to before making changes
var newProperty, moveToPropertyName, moveToSelector;
- var moveTo = (moveDirection === "forward" ? this.nextSibling : this.previousSibling);
+ var moveTo = this;
+ do {
+ moveTo = (moveDirection === "forward" ? moveTo.nextSibling : moveTo.previousSibling);
+ } while(moveTo && !moveTo.selectable);
+
if (moveTo)
moveToPropertyName = moveTo.name;
else if (moveDirection === "forward")
@@ -1630,6 +1702,8 @@ WebInspector.StylePropertyTreeElement.prototype = {
// User has made a change then tabbed, wiping all the original treeElements,
// recalculate the new treeElement for the same property we were going to edit next
+ // FIXME(apavlov): this will not work for multiple same-named properties in a style
+ // (the first one will always be returned).
if (moveTo && !moveTo.parent) {
var treeElement = section.findTreeElementWithName(moveToPropertyName);
if (treeElement)
@@ -1663,9 +1737,8 @@ WebInspector.StylePropertyTreeElement.prototype = {
this.parent.removeChild(this);
section.afterUpdate();
return;
- } else {
+ } else
delete section._afterUpdate;
- }
}
function callback(newStyle)
@@ -1683,13 +1756,9 @@ WebInspector.StylePropertyTreeElement.prototype = {
return;
}
- if (!styleTextLength) {
- // Do remove ourselves from UI when the property removal is confirmed.
- this.parent.removeChild(this);
- } else {
- this.style = newStyle;
- this._styleRule.style = this.style;
- }
+ this.style = newStyle;
+ this.property = newStyle.propertyAt(this.property.index);
+ this._styleRule.style = this.style;
if (section && section.pane)
section.pane.dispatchEventToListeners("style edited");
@@ -1698,6 +1767,10 @@ WebInspector.StylePropertyTreeElement.prototype = {
this.updateAll(true);
}
+ // Append a ";" if the new text does not end in ";".
+ // FIXME: this does not handle trailing comments.
+ if (styleText.length && !/;\s*$/.test(styleText))
+ styleText += ";";
this.property.setText(styleText, callback.bind(this));
}
}
diff --git a/WebCore/inspector/front-end/TabbedPane.js b/WebCore/inspector/front-end/TabbedPane.js
index dec3a0b..1ed9725 100644
--- a/WebCore/inspector/front-end/TabbedPane.js
+++ b/WebCore/inspector/front-end/TabbedPane.js
@@ -31,51 +31,63 @@
WebInspector.TabbedPane = function(element)
{
this.element = element || document.createElement("div");
-
- this.tabsElement = document.createElement("div");
- this.tabsElement.className = "tabbed-pane-header";
- this.element.appendChild(this.tabsElement);
+ this.element.addStyleClass("tabbed-pane");
+ this.tabsElement = this.element.createChild("div", "tabbed-pane-header");
+ this.contentElement = this.element.createChild("div", "tabbed-pane-content");
this._tabObjects = {};
}
WebInspector.TabbedPane.prototype = {
- appendTab: function(id, tabTitle, contentElement, tabClickListener)
+ appendTab: function(id, tabTitle, content, tabClickListener)
{
var tabElement = document.createElement("li");
tabElement.textContent = tabTitle;
tabElement.addEventListener("click", tabClickListener, false);
this.tabsElement.appendChild(tabElement);
- this.element.appendChild(contentElement);
- this._tabObjects[id] = {tab: tabElement, content: contentElement};
+ var tabObject = { tab: tabElement };
+ if (content instanceof HTMLElement) {
+ tabObject.element = content;
+ this.contentElement.appendChild(content);
+ }
+ else {
+ this.contentElement.appendChild(content.element);
+ tabObject.view = content;
+ }
+ this._tabObjects[id] = tabObject;
+ },
+
+ hasTab: function(tabId)
+ {
+ return tabId in this._tabObjects;
},
-
- tabObjectForId: function(id)
+
+ selectTabById: function(tabId)
{
- return this._tabObjects[id];
+ for (var id in this._tabObjects) {
+ if (id === tabId)
+ this._showTab(this._tabObjects[id]);
+ else
+ this._hideTab(this._tabObjects[id]);
+ }
+ return this.hasTab(tabId);
},
- hideTab: function(id)
+ _showTab: function(tabObject)
{
- var tabObject = this._tabObjects[id];
- if (tabObject)
- tabObject.tab.addStyleClass("hidden");
+ tabObject.tab.addStyleClass("selected");
+ if (tabObject.element)
+ tabObject.element.removeStyleClass("hidden");
+ else
+ tabObject.view.visible = true;
},
- selectTabById: function(selectId)
+ _hideTab: function(tabObject)
{
- var selected = false;
- for (var id in this._tabObjects) {
- var tabObject = this._tabObjects[id];
- if (id === selectId) {
- selected = true;
- tabObject.tab.addStyleClass("selected");
- tabObject.content.removeStyleClass("hidden");
- } else {
- tabObject.tab.removeStyleClass("selected");
- tabObject.content.addStyleClass("hidden");
- }
- }
- return selected;
+ tabObject.tab.removeStyleClass("selected");
+ if (tabObject.element)
+ tabObject.element.addStyleClass("hidden");
+ else
+ tabObject.view.visible = false;
}
}
diff --git a/WebCore/inspector/front-end/TextPrompt.js b/WebCore/inspector/front-end/TextPrompt.js
index b6bcd52..e9a73fe 100644
--- a/WebCore/inspector/front-end/TextPrompt.js
+++ b/WebCore/inspector/front-end/TextPrompt.js
@@ -100,22 +100,6 @@ WebInspector.TextPrompt.prototype = {
}
defaultAction.call(this);
break;
- case "U+0041": // Ctrl+A = Move caret to the start of prompt on non-Mac.
- if (!WebInspector.isMac() && event.ctrlKey && !event.metaKey && !event.altKey && !event.shiftKey) {
- handled = true;
- this._moveCaretToStartOfPrompt();
- break;
- }
- defaultAction.call(this);
- break;
- case "U+0045": // Ctrl+E = Move caret to the end of prompt on non-Mac.
- if (!WebInspector.isMac() && event.ctrlKey && !event.metaKey && !event.altKey && !event.shiftKey) {
- handled = true;
- this.moveCaretToEndOfPrompt();
- break;
- }
- defaultAction.call(this);
- break;
default:
defaultAction.call(this);
break;
@@ -379,18 +363,6 @@ WebInspector.TextPrompt.prototype = {
return true;
},
- _moveCaretToStartOfPrompt: function()
- {
- var selection = window.getSelection();
- var selectionRange = document.createRange();
-
- selectionRange.setStart(this.element, 0);
- selectionRange.setEnd(this.element, 0);
-
- selection.removeAllRanges();
- selection.addRange(selectionRange);
- },
-
moveCaretToEndOfPrompt: function()
{
var selection = window.getSelection();
diff --git a/WebCore/inspector/front-end/WebKit.qrc b/WebCore/inspector/front-end/WebKit.qrc
index ebdd4f6..2b87bcc 100644
--- a/WebCore/inspector/front-end/WebKit.qrc
+++ b/WebCore/inspector/front-end/WebKit.qrc
@@ -72,6 +72,7 @@
<file>ResourceCategory.js</file>
<file>ResourceManager.js</file>
<file>ResourceView.js</file>
+ <file>ResourcesPanel.js</file>
<file>ScopeChainSidebarPane.js</file>
<file>Script.js</file>
<file>ScriptsPanel.js</file>
@@ -88,7 +89,6 @@
<file>SourceTokenizer.js</file>
<file>SourceView.js</file>
<file>StatusBarButton.js</file>
- <file>StoragePanel.js</file>
<file>StylesSidebarPane.js</file>
<file>SummaryBar.js</file>
<file>TabbedPane.js</file>
@@ -222,7 +222,6 @@
<file>Images/statusbarMenuButtonSelected.png</file>
<file>Images/statusbarResizerHorizontal.png</file>
<file>Images/statusbarResizerVertical.png</file>
- <file>Images/storageIcon.png</file>
<file>Images/successGreenDot.png</file>
<file>Images/thumbActiveHoriz.png</file>
<file>Images/thumbActiveVert.png</file>
diff --git a/WebCore/inspector/front-end/WorkersSidebarPane.js b/WebCore/inspector/front-end/WorkersSidebarPane.js
index 7d6a00f..177cd15 100644
--- a/WebCore/inspector/front-end/WorkersSidebarPane.js
+++ b/WebCore/inspector/front-end/WorkersSidebarPane.js
@@ -59,7 +59,8 @@ WebInspector.WorkersSidebarPane.prototype = {
this._workers[id] = worker;
var title = WebInspector.linkifyURL(url, WebInspector.displayNameForURL(url), "worker-item", true, url);
- var treeElement = new TreeElement(title, worker, false);
+ var treeElement = new TreeElement(null, worker, false);
+ treeElement.titleHTML = title;
this._treeOutline.appendChild(treeElement);
},
diff --git a/WebCore/inspector/front-end/inspector.css b/WebCore/inspector/front-end/inspector.css
index b26b748..29f2385 100644
--- a/WebCore/inspector/front-end/inspector.css
+++ b/WebCore/inspector/front-end/inspector.css
@@ -219,10 +219,6 @@ body.attached #search-results-matches {
background-image: url(Images/timelineIcon.png);
}
-.toolbar-item.storage .toolbar-icon {
- background-image: url(Images/storageIcon.png);
-}
-
.toolbar-item.profiles .toolbar-icon {
background-image: url(Images/profilesIcon.png);
}
@@ -813,16 +809,12 @@ body.platform-linux .monospace, body.platform-linux .source-code {
}
.resource-view.visible {
- display: block;
+ display: -webkit-box;
}
.resource-view .tabbed-pane-header {
display: none;
- position: absolute;
height: 20px;
- top: 0;
- left: 0;
- right: 0;
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgb(236, 236, 236)), to(rgb(217, 217, 217)));
border-bottom: 1px solid rgb(163, 163, 163);
}
@@ -847,10 +839,6 @@ body.platform-linux .monospace, body.platform-linux .source-code {
overflow: auto;
}
-.resource-view.headers-visible .resource-view-headers {
- top: 20px;
-}
-
.resource-view-headers .outline-disclosure .parent {
-webkit-user-select: none;
font-weight: bold;
@@ -894,11 +882,8 @@ body.platform-linux .monospace, body.platform-linux .source-code {
overflow: auto;
}
-.resource-view.headers-visible .resource-view-content {
- top: 20px;
-}
-
-.resource-view .resource-view-cookies {
+.resource-view-cookies {
+ display: none;
position: absolute;
top: 0;
right: 0;
@@ -906,10 +891,11 @@ body.platform-linux .monospace, body.platform-linux .source-code {
bottom: 0;
overflow: auto;
padding: 12px;
+ height: 100%;
}
-.resource-view.headers-visible .resource-view-cookies {
- top: 20px;
+.resource-view-cookies.visible {
+ display: block;
}
.resource-view-cookies.table .data-grid {
@@ -1033,7 +1019,6 @@ body.platform-linux .monospace, body.platform-linux .source-code {
right: 0;
bottom: 0;
width: 325px;
- background-color: rgb(245, 245, 245);
border-left: 1px solid rgb(64%, 64%, 64%);
cursor: default;
overflow: auto;
@@ -1477,7 +1462,7 @@ body.inactive .placard.selected {
.event-bar {
position: relative;
- left: 10px;
+ margin-left: 10px;
}
.event-bars .event-bar .header {
@@ -1716,7 +1701,6 @@ li.editing .swatch, li.editing .enabled-button, li.editing-sub-part .delete-but
.pane > .body {
position: relative;
display: none;
- background-color: white;
overflow-y: auto;
overflow-x: hidden;
}
@@ -1759,9 +1743,9 @@ li.editing .swatch, li.editing .enabled-button, li.editing-sub-part .delete-but
}
.sidebar-pane-subtitle {
- float: right;
+ position: absolute;
+ right: 0;
font-weight: normal;
- overflow: hidden;
}
body.platform-windows .sidebar-pane-subtitle {
@@ -1928,52 +1912,52 @@ body.inactive .sidebar {
bottom: 0;
}
-.storage.panel .sidebar {
+.resources.panel .sidebar {
padding-left: 0;
z-index: 10;
}
-.storage.panel .sidebar li {
+.resources.panel .sidebar li {
height: 17px;
white-space: nowrap;
text-indent: 0;
margin-left: -2px;
}
-.storage.panel .sidebar li.parent {
+.resources.panel .sidebar li.parent {
text-indent: 0;
margin-left: -12px;
}
-.storage.panel .sidebar li.selected {
+.resources.panel .sidebar li.selected {
color: white;
text-shadow: rgba(0, 0, 0, 0.33) 0 1px 0;
font-weight: bold;
}
-.storage.panel .sidebar li.selected .selection {
+.resources.panel .sidebar li.selected .selection {
background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(162, 177, 207)), to(rgb(120, 138, 177)));
border-top: 1px solid #979797;
height: 17px;
}
-.storage.panel .sidebar :focus li.selected .selection {
+.resources.panel .sidebar :focus li.selected .selection {
background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(92, 147, 213)), to(rgb(21, 83, 170)));
border-top: 1px solid rgb(68, 128, 200);
}
-body.inactive .storage.panel .sidebar li.selected .selection {
+body.inactive .resources.panel .sidebar li.selected .selection {
background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(180, 180, 180)), to(rgb(138, 138, 138)));
border-top: 1px solid rgb(151, 151, 151);
}
-.storage.panel .sidebar .icon {
+.resources.panel .sidebar .icon {
width: 16px;
height: 16px;
float: left;
}
-.storage.panel .base-storage-tree-element-title {
+.resources.panel .base-storage-tree-element-title {
overflow: hidden;
position: relative;
text-overflow: ellipsis;
@@ -1991,7 +1975,7 @@ li.selected .base-storage-tree-element-subtitle {
text-shadow: none;
}
-.storage.panel .status {
+.resources.panel .status {
float: right;
height: 16px;
margin-top: 1px;
@@ -1999,7 +1983,7 @@ li.selected .base-storage-tree-element-subtitle {
line-height: 1em;
}
-.storage.panel li .status .bubble {
+.resources.panel li .status .bubble {
height: 13px;
padding-top: 0;
}
@@ -2632,7 +2616,6 @@ button.enable-toggle-status-bar-item.toggled-on .glyph {
right: 0;
bottom: 0;
width: 225px;
- background-color: rgb(245, 245, 245);
border-left: 1px solid rgb(64%, 64%, 64%);
cursor: default;
overflow: auto;
@@ -2656,6 +2639,16 @@ button.enable-toggle-status-bar-item.toggled-on .glyph {
margin-top: 1px;
}
+.tabbed-pane {
+ -webkit-box-orient: vertical;
+ height: 100%;
+}
+
+.tabbed-pane-content {
+ -webkit-box-flex: 1;
+ position: relative;
+}
+
.tabbed-pane-header {
height: 23px;
padding: 0 10px;
@@ -4125,6 +4118,16 @@ ol.breakpoint-list {
background-color: rgb(255, 255, 194);
}
+li.breakpoint-hit .breakpoint-hit-marker {
+ background-color: rgb(255, 255, 194);
+ height: 18px;
+ left: 0px;
+ margin-top: -16px;
+ position: absolute;
+ right: 0px;
+ z-index: -1;
+}
+
.webkit-html-js-node, .webkit-html-css-node {
white-space: pre;
}
@@ -4219,6 +4222,7 @@ a.worker-item {
cursor: pointer;
text-decoration: none;
}
+
.styles-section {
padding: 2px 2px 4px 4px;
min-height: 18px;
@@ -4236,6 +4240,28 @@ a.worker-item {
background-color: rgb(240, 240, 240);
}
+.styles-section .properties li.not-parsed-ok {
+ margin-left: 0px;
+}
+
+.styles-section .properties li.not-parsed-ok::before {
+ content: url(Images/warningIcon.png);
+ opacity: 0.75;
+ float: left;
+ width: 8px;
+ height: 8px;
+ margin-top: 0;
+ padding-right: 5px;
+ vertical-align: sub;
+ -webkit-user-select: none;
+ cursor: default;
+}
+
+.styles-section .properties .inactive {
+ opacity: 0.75;
+ background-color: rgb(212, 212, 212);
+}
+
.styles-section .header {
white-space: nowrap;
-webkit-background-origin: padding;
@@ -4391,4 +4417,4 @@ a.worker-item:hover {
.cursor-auto {
cursor: auto;
-} \ No newline at end of file
+}
diff --git a/WebCore/inspector/front-end/inspector.html b/WebCore/inspector/front-end/inspector.html
index c681531..e0c72e9 100644
--- a/WebCore/inspector/front-end/inspector.html
+++ b/WebCore/inspector/front-end/inspector.html
@@ -98,7 +98,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<script type="text/javascript" src="NetworkPanel.js"></script>
<script type="text/javascript" src="InjectedFakeWorker.js"></script>
<script type="text/javascript" src="ScriptsPanel.js"></script>
- <script type="text/javascript" src="StoragePanel.js"></script>
+ <script type="text/javascript" src="ResourcesPanel.js"></script>
<script type="text/javascript" src="ProfilesPanel.js"></script>
<script type="text/javascript" src="ConsolePanel.js"></script>
<script type="text/javascript" src="ExtensionAPI.js"></script>
diff --git a/WebCore/inspector/front-end/inspector.js b/WebCore/inspector/front-end/inspector.js
index 8323cad..33b370a 100644
--- a/WebCore/inspector/front-end/inspector.js
+++ b/WebCore/inspector/front-end/inspector.js
@@ -223,9 +223,8 @@ var WebInspector = {
var hiddenPanels = (InspectorFrontendHost.hiddenPanels() || "").split(',');
if (hiddenPanels.indexOf("elements") === -1)
this.panels.elements = new WebInspector.ElementsPanel();
-
- if (hiddenPanels.indexOf("storage") === -1 && hiddenPanels.indexOf("databases") === -1)
- this.panels.storage = new WebInspector.StoragePanel();
+ if (hiddenPanels.indexOf("resources") === -1)
+ this.panels.resources = new WebInspector.ResourcesPanel();
if (hiddenPanels.indexOf("network") === -1)
this.panels.network = new WebInspector.NetworkPanel();
if (hiddenPanels.indexOf("scripts") === -1)
@@ -546,10 +545,6 @@ WebInspector.doLoadedDone = function()
for (var panelName in this.panels)
previousToolbarItem = WebInspector.addPanelToolbarIcon(toolbarElement, this.panels[panelName], previousToolbarItem);
- // FIXME: fix this once renamed StoragePanel.js to ResourcesPanel.js
- this.panels.storage._toolbarItem.removeStyleClass("storage");
- this.panels.storage._toolbarItem.addStyleClass("resources");
-
this.Tips = {
ResourceNotCompressed: {id: 0, message: WebInspector.UIString("You could save bandwidth by having your web server compress this transfer with gzip or zlib.")}
};
@@ -642,11 +637,11 @@ var windowLoaded = function()
} else
WebInspector.loaded();
- window.removeEventListener("load", windowLoaded, false);
+ window.removeEventListener("DOMContentLoaded", windowLoaded, false);
delete windowLoaded;
};
-window.addEventListener("load", windowLoaded, false);
+window.addEventListener("DOMContentLoaded", windowLoaded, false);
WebInspector.dispatch = function(message) {
// We'd like to enforce asynchronous interaction between the inspector controller and the frontend.
@@ -810,8 +805,8 @@ WebInspector.openResource = function(resourceURL, inResourcesPanel)
{
var resource = WebInspector.resourceForURL(resourceURL);
if (inResourcesPanel && resource) {
- WebInspector.panels.storage.showResource(resource);
- WebInspector.showPanel("storage");
+ WebInspector.panels.resources.showResource(resource);
+ WebInspector.showPanel("resources");
} else
InspectorBackend.openInInspectedWindow(resource ? resource.url : resourceURL);
}
@@ -1206,10 +1201,6 @@ WebInspector.showChanges = function()
WebInspector.showPanel = function(panel)
{
- // FIXME: fix this once renamed StoragePanel.js to ResourcesPanel.js
- if (panel === "resources")
- panel = "storage";
-
if (!(panel in this.panels))
panel = "elements";
this.currentPanel = this.panels[panel];
@@ -1217,8 +1208,8 @@ WebInspector.showPanel = function(panel)
WebInspector.selectDatabase = function(o)
{
- WebInspector.showPanel("storage");
- WebInspector.panels.storage.selectDatabase(o);
+ WebInspector.showPanel("resources");
+ WebInspector.panels.resources.selectDatabase(o);
}
WebInspector.consoleMessagesCleared = function()
@@ -1228,8 +1219,8 @@ WebInspector.consoleMessagesCleared = function()
WebInspector.selectDOMStorage = function(o)
{
- WebInspector.showPanel("storage");
- WebInspector.panels.storage.selectDOMStorage(o);
+ WebInspector.showPanel("resources");
+ WebInspector.panels.resources.selectDOMStorage(o);
}
WebInspector.domContentEventFired = function(time)
@@ -1250,55 +1241,55 @@ WebInspector.loadEventFired = function(time)
WebInspector.addDatabase = function(payload)
{
- if (!this.panels.storage)
+ if (!this.panels.resources)
return;
var database = new WebInspector.Database(
payload.id,
payload.domain,
payload.name,
payload.version);
- this.panels.storage.addDatabase(database);
+ this.panels.resources.addDatabase(database);
}
WebInspector.addDOMStorage = function(payload)
{
- if (!this.panels.storage)
+ if (!this.panels.resources)
return;
var domStorage = new WebInspector.DOMStorage(
payload.id,
payload.host,
payload.isLocalStorage);
- this.panels.storage.addDOMStorage(domStorage);
+ this.panels.resources.addDOMStorage(domStorage);
}
WebInspector.updateDOMStorage = function(storageId)
{
- this.panels.storage.updateDOMStorage(storageId);
+ this.panels.resources.updateDOMStorage(storageId);
}
WebInspector.updateApplicationCacheStatus = function(status)
{
- this.panels.storage.updateApplicationCacheStatus(status);
+ this.panels.resources.updateApplicationCacheStatus(status);
}
WebInspector.didGetFileSystemPath = function(root, type, origin)
{
- this.panels.storage.updateFileSystemPath(root, type, origin);
+ this.panels.resources.updateFileSystemPath(root, type, origin);
}
WebInspector.didGetFileSystemError = function(type, origin)
{
- this.panels.storage.updateFileSystemError(type, origin);
+ this.panels.resources.updateFileSystemError(type, origin);
}
WebInspector.didGetFileSystemDisabled = function()
{
- this.panels.storage.setFileSystemDisabled();
+ this.panels.resources.setFileSystemDisabled();
}
WebInspector.updateNetworkState = function(isNowOnline)
{
- this.panels.storage.updateNetworkState(isNowOnline);
+ this.panels.resources.updateNetworkState(isNowOnline);
}
WebInspector.searchingForNodeWasEnabled = function()
@@ -1612,14 +1603,11 @@ WebInspector.displayNameForURL = function(url)
WebInspector._choosePanelToShowSourceLine = function(url, line, preferredPanel)
{
preferredPanel = preferredPanel || "resources";
- // FIXME: remove this once StoragePanel renamed to ResourcesPanel
- if (preferredPanel === "resources")
- preferredPanel = "storage";
var panel = this.panels[preferredPanel];
if (panel && panel.canShowSourceLine(url, line))
return panel;
- panel = this.panels.storage;
+ panel = this.panels.resources;
return panel.canShowSourceLine(url, line) ? panel : null;
}
diff --git a/WebCore/inspector/front-end/networkPanel.css b/WebCore/inspector/front-end/networkPanel.css
index 1e0e813..6b6aebe 100644
--- a/WebCore/inspector/front-end/networkPanel.css
+++ b/WebCore/inspector/front-end/networkPanel.css
@@ -624,20 +624,6 @@
padding-top: 5px;
}
-#network-views .resource-view-headers,
-#network-views .resource-view-content,
-#network-views .resource-view-cookies
-{
- top: 31px;
-}
-
-#network-views.small .resource-view-headers,
-#network-views.small .resource-view-content,
-#network-views.small .resource-view-cookies
-{
- top: 23px;
-}
-
.network.panel:not(.viewing-resource) .data-grid tr.selected {
background-color: transparent;
color: black;
diff --git a/WebCore/inspector/front-end/textViewer.css b/WebCore/inspector/front-end/textViewer.css
index a24a75c..8a96b1f 100644
--- a/WebCore/inspector/front-end/textViewer.css
+++ b/WebCore/inspector/front-end/textViewer.css
@@ -25,8 +25,6 @@
margin: 6px 25px;
padding: 0 7px 1px;
z-index:20;
- max-width: 80%;
-
}
.webkit-html-warning-message {
diff --git a/WebCore/inspector/front-end/treeoutline.js b/WebCore/inspector/front-end/treeoutline.js
index e2f879c..a1e052f 100644
--- a/WebCore/inspector/front-end/treeoutline.js
+++ b/WebCore/inspector/front-end/treeoutline.js
@@ -485,6 +485,15 @@ TreeElement.prototype = {
this._setListItemNodeContent();
},
+ get titleHTML() {
+ return this._titleHTML;
+ },
+
+ set titleHTML(x) {
+ this._titleHTML = x;
+ this._setListItemNodeContent();
+ },
+
get tooltip() {
return this._tooltip;
},
@@ -553,8 +562,13 @@ TreeElement.prototype = {
{
if (!this._listItemNode)
return;
- if (!this._title || typeof this._title === "string")
- this._listItemNode.innerHTML = this._title;
+
+ if (!this._titleHTML && !this._title)
+ this._listItemNode.removeChildren();
+ else if (typeof this._titleHTML === "string")
+ this._listItemNode.innerHTML = this._titleHTML;
+ else if (typeof this._title === "string")
+ this._listItemNode.textContent = this._title;
else {
this._listItemNode.removeChildren();
if (this._title.parentNode)
diff --git a/WebCore/loader/DocumentLoader.cpp b/WebCore/loader/DocumentLoader.cpp
index 0836805..07bae46 100644
--- a/WebCore/loader/DocumentLoader.cpp
+++ b/WebCore/loader/DocumentLoader.cpp
@@ -38,6 +38,7 @@
#endif
#include "CachedPage.h"
#include "CachedResourceLoader.h"
+#include "DOMWindow.h"
#include "Document.h"
#include "DocumentParser.h"
#include "Event.h"
@@ -364,7 +365,13 @@ void DocumentLoader::updateLoading()
return;
}
ASSERT(this == frameLoader()->activeDocumentLoader());
+ bool wasLoading = m_loading;
setLoading(frameLoader()->isLoading());
+
+ if (wasLoading && !m_loading) {
+ if (DOMWindow* window = m_frame->existingDOMWindow())
+ window->finishedLoading();
+ }
}
void DocumentLoader::setFrame(Frame* frame)
@@ -803,10 +810,12 @@ void DocumentLoader::transferLoadingResourcesFromPage(Page* oldPage)
{
ASSERT(oldPage != m_frame->page());
- FrameLoaderClient* frameLoaderClient = frameLoader()->client();
+ FrameLoader* loader = frameLoader();
+ ASSERT(loader);
+
const ResourceRequest& request = originalRequest();
if (isLoadingMainResource()) {
- frameLoaderClient->transferLoadingResourceFromPage(
+ loader->dispatchTransferLoadingResourceFromPage(
m_mainResourceLoader->identifier(), this, request, oldPage);
}
@@ -814,7 +823,7 @@ void DocumentLoader::transferLoadingResourcesFromPage(Page* oldPage)
ResourceLoaderSet::const_iterator it = m_subresourceLoaders.begin();
ResourceLoaderSet::const_iterator end = m_subresourceLoaders.end();
for (; it != end; ++it) {
- frameLoaderClient->transferLoadingResourceFromPage(
+ loader->dispatchTransferLoadingResourceFromPage(
(*it)->identifier(), this, request, oldPage);
}
}
diff --git a/WebCore/loader/DocumentThreadableLoader.cpp b/WebCore/loader/DocumentThreadableLoader.cpp
index a792144..03cea73 100644
--- a/WebCore/loader/DocumentThreadableLoader.cpp
+++ b/WebCore/loader/DocumentThreadableLoader.cpp
@@ -38,6 +38,7 @@
#include "Frame.h"
#include "FrameLoader.h"
#include "ResourceHandle.h"
+#include "ResourceLoadScheduler.h"
#include "ResourceRequest.h"
#include "SecurityOrigin.h"
#include "SubresourceLoader.h"
@@ -319,7 +320,7 @@ void DocumentThreadableLoader::loadRequest(const ResourceRequest& request, Secur
// Clear the loader so that any callbacks from SubresourceLoader::create will not have the old loader.
m_loader = 0;
- m_loader = SubresourceLoader::create(m_document->frame(), this, request, securityCheck, sendLoadCallbacks, sniffContent);
+ m_loader = resourceLoadScheduler()->scheduleSubresourceLoad(m_document->frame(), this, request, ResourceLoadScheduler::Medium, securityCheck, sendLoadCallbacks, sniffContent);
return;
}
diff --git a/WebCore/loader/FormSubmission.cpp b/WebCore/loader/FormSubmission.cpp
index f3f19d2..a9f2680 100644
--- a/WebCore/loader/FormSubmission.cpp
+++ b/WebCore/loader/FormSubmission.cpp
@@ -110,6 +110,17 @@ void FormSubmission::Attributes::parseMethodType(const String& type)
m_method = FormSubmission::GetMethod;
}
+void FormSubmission::Attributes::copyFrom(const Attributes& other)
+{
+ m_method = other.m_method;
+ m_isMultiPartForm = other.m_isMultiPartForm;
+
+ m_action = other.m_action;
+ m_target = other.m_target;
+ m_encodingType = other.m_encodingType;
+ m_acceptCharset = other.m_acceptCharset;
+}
+
inline FormSubmission::FormSubmission(Method method, const KURL& action, const String& target, const String& contentType, PassRefPtr<FormState> state, PassRefPtr<FormData> data, const String& boundary, bool lockHistory, PassRefPtr<Event> event)
: m_method(method)
, m_action(action)
@@ -126,21 +137,40 @@ inline FormSubmission::FormSubmission(Method method, const KURL& action, const S
PassRefPtr<FormSubmission> FormSubmission::create(HTMLFormElement* form, const Attributes& attributes, PassRefPtr<Event> event, bool lockHistory, FormSubmissionTrigger trigger)
{
ASSERT(form);
+
+ HTMLFormControlElement* submitButton = 0;
+ if (event && event->target() && event->target()->toNode())
+ submitButton = static_cast<HTMLFormControlElement*>(event->target()->toNode());
+
+ FormSubmission::Attributes copiedAttributes;
+ copiedAttributes.copyFrom(attributes);
+ if (submitButton) {
+ String attributeValue;
+ if (!(attributeValue = submitButton->getAttribute(formactionAttr)).isNull())
+ copiedAttributes.parseAction(attributeValue);
+ if (!(attributeValue = submitButton->getAttribute(formenctypeAttr)).isNull())
+ copiedAttributes.parseEncodingType(attributeValue);
+ if (!(attributeValue = submitButton->getAttribute(formmethodAttr)).isNull())
+ copiedAttributes.parseMethodType(attributeValue);
+ if (!(attributeValue = submitButton->getAttribute(formtargetAttr)).isNull())
+ copiedAttributes.setTarget(attributeValue);
+ }
+
Document* document = form->document();
- KURL actionURL = document->completeURL(attributes.action().isEmpty() ? document->url().string() : attributes.action());
+ KURL actionURL = document->completeURL(copiedAttributes.action().isEmpty() ? document->url().string() : copiedAttributes.action());
bool isMailtoForm = actionURL.protocolIs("mailto");
bool isMultiPartForm = false;
- String encodingType = attributes.encodingType();
+ String encodingType = copiedAttributes.encodingType();
- if (attributes.method() == PostMethod) {
- isMultiPartForm = attributes.isMultiPartForm();
+ if (copiedAttributes.method() == PostMethod) {
+ isMultiPartForm = copiedAttributes.isMultiPartForm();
if (isMultiPartForm && isMailtoForm) {
encodingType = "application/x-www-form-urlencoded";
isMultiPartForm = false;
}
}
- TextEncoding dataEncoding = isMailtoForm ? UTF8Encoding() : FormDataBuilder::encodingFromAcceptCharset(attributes.acceptCharset(), document);
+ TextEncoding dataEncoding = isMailtoForm ? UTF8Encoding() : FormDataBuilder::encodingFromAcceptCharset(copiedAttributes.acceptCharset(), document);
RefPtr<DOMFormData> domFormData = DOMFormData::create(dataEncoding.encodingForFormSubmission());
Vector<pair<String, String> > formValues;
@@ -166,7 +196,7 @@ PassRefPtr<FormSubmission> FormSubmission::create(HTMLFormElement* form, const A
boundary = formData->boundary().data();
} else {
formData = FormData::create(*(static_cast<FormDataList*>(domFormData.get())), domFormData->encoding());
- if (attributes.method() == PostMethod && isMailtoForm) {
+ if (copiedAttributes.method() == PostMethod && isMailtoForm) {
// Convert the form data into a string that we put into the URL.
appendMailtoPostFormDataToURL(actionURL, *formData, encodingType);
formData = FormData::create();
@@ -174,9 +204,9 @@ PassRefPtr<FormSubmission> FormSubmission::create(HTMLFormElement* form, const A
}
formData->setIdentifier(generateFormDataIdentifier());
- String targetOrBaseTarget = attributes.target().isEmpty() ? document->baseTarget() : attributes.target();
+ String targetOrBaseTarget = copiedAttributes.target().isEmpty() ? document->baseTarget() : copiedAttributes.target();
RefPtr<FormState> formState = FormState::create(form, formValues, document->frame(), trigger);
- return adoptRef(new FormSubmission(attributes.method(), actionURL, targetOrBaseTarget, encodingType, formState.release(), formData.release(), boundary, lockHistory, event));
+ return adoptRef(new FormSubmission(copiedAttributes.method(), actionURL, targetOrBaseTarget, encodingType, formState.release(), formData.release(), boundary, lockHistory, event));
}
KURL FormSubmission::requestURL() const
diff --git a/WebCore/loader/FormSubmission.h b/WebCore/loader/FormSubmission.h
index b935882..d724835 100644
--- a/WebCore/loader/FormSubmission.h
+++ b/WebCore/loader/FormSubmission.h
@@ -72,6 +72,8 @@ public:
const String& acceptCharset() const { return m_acceptCharset; }
void setAcceptCharset(const String& value) { m_acceptCharset = value; }
+ void copyFrom(const Attributes&);
+
private:
Method m_method;
bool m_isMultiPartForm;
diff --git a/WebCore/loader/FrameLoader.cpp b/WebCore/loader/FrameLoader.cpp
index 8277338..6eb9830 100644
--- a/WebCore/loader/FrameLoader.cpp
+++ b/WebCore/loader/FrameLoader.cpp
@@ -209,9 +209,6 @@ FrameLoader::FrameLoader(Frame* frame, FrameLoaderClient* client)
, m_suppressOpenerInNewFrame(false)
, m_sandboxFlags(SandboxAll)
, m_forcedSandboxFlags(SandboxNone)
-#ifndef NDEBUG
- , m_didDispatchDidCommitLoad(false)
-#endif
{
}
@@ -1529,11 +1526,6 @@ bool FrameLoader::willLoadMediaElementURL(KURL& url)
return error.isNull();
}
-ResourceError FrameLoader::interruptionForPolicyChangeError(const ResourceRequest& request)
-{
- return m_client->interruptForPolicyChangeError(request);
-}
-
bool FrameLoader::shouldReloadToHandleUnreachableURL(DocumentLoader* docLoader)
{
KURL unreachableURL = docLoader->unreachableURL();
@@ -1767,8 +1759,17 @@ bool FrameLoader::frameHasLoaded() const
void FrameLoader::transferLoadingResourcesFromPage(Page* oldPage)
{
ASSERT(oldPage != m_frame->page());
- if (isLoading())
+ if (isLoading()) {
activeDocumentLoader()->transferLoadingResourcesFromPage(oldPage);
+ oldPage->progress()->progressCompleted(m_frame);
+ if (m_frame->page())
+ m_frame->page()->progress()->progressStarted(m_frame);
+ }
+}
+
+void FrameLoader::dispatchTransferLoadingResourceFromPage(unsigned long identifier, DocumentLoader* docLoader, const ResourceRequest& request, Page* oldPage)
+{
+ notifier()->dispatchTransferLoadingResourceFromPage(identifier, docLoader, request, oldPage);
}
void FrameLoader::setDocumentLoader(DocumentLoader* loader)
@@ -2187,10 +2188,6 @@ void FrameLoader::finishedLoading()
dl->setPrimaryLoadComplete(true);
m_client->dispatchDidLoadMainResource(dl.get());
checkLoadComplete();
-
- DOMWindow* window = m_frame->existingDOMWindow();
- if (window && window->printDeferred())
- window->print();
}
bool FrameLoader::isHostedByObjectElement() const
@@ -2433,9 +2430,6 @@ void FrameLoader::checkLoadCompleteForThisFrame()
return;
const ResourceError& error = dl->mainDocumentError();
-#ifndef NDEBUG
- m_didDispatchDidCommitLoad = false;
-#endif
if (!error.isNull())
m_client->dispatchDidFailLoad(error);
else
@@ -3325,6 +3319,11 @@ ResourceError FrameLoader::cannotShowURLError(const ResourceRequest& request) co
return m_client->cannotShowURLError(request);
}
+ResourceError FrameLoader::interruptionForPolicyChangeError(const ResourceRequest& request) const
+{
+ return m_client->interruptForPolicyChangeError(request);
+}
+
ResourceError FrameLoader::fileDoesNotExistError(const ResourceResponse& response) const
{
return m_client->fileDoesNotExistError(response);
@@ -3439,10 +3438,6 @@ void FrameLoader::dispatchDidCommitLoad()
if (m_stateMachine.creatingInitialEmptyDocument())
return;
-#ifndef NDEBUG
- m_didDispatchDidCommitLoad = true;
-#endif
-
m_client->dispatchDidCommitLoad();
#if ENABLE(INSPECTOR)
diff --git a/WebCore/loader/FrameLoader.h b/WebCore/loader/FrameLoader.h
index b07ed27..009b179 100644
--- a/WebCore/loader/FrameLoader.h
+++ b/WebCore/loader/FrameLoader.h
@@ -138,6 +138,7 @@ public:
bool isLoading() const;
bool frameHasLoaded() const;
void transferLoadingResourcesFromPage(Page*);
+ void dispatchTransferLoadingResourceFromPage(unsigned long, DocumentLoader*, const ResourceRequest&, Page*);
int numPendingOrLoadingRequests(bool recurse) const;
String referrer() const;
@@ -170,7 +171,7 @@ public:
ResourceError fileDoesNotExistError(const ResourceResponse&) const;
ResourceError blockedError(const ResourceRequest&) const;
ResourceError cannotShowURLError(const ResourceRequest&) const;
- ResourceError interruptionForPolicyChangeError(const ResourceRequest&);
+ ResourceError interruptionForPolicyChangeError(const ResourceRequest&) const;
bool isHostedByObjectElement() const;
bool isLoadingMainFrame() const;
@@ -337,12 +338,6 @@ public:
NetworkingContext* networkingContext() const;
private:
- bool canCachePageContainingThisFrame();
-#ifndef NDEBUG
- void logCanCachePageDecision();
- bool logCanCacheFrameDecision(int indentLevel);
-#endif
-
void checkTimerFired(Timer<FrameLoader>*);
void navigateWithinDocument(HistoryItem*);
@@ -367,8 +362,6 @@ private:
void mainReceivedError(const ResourceError&, bool isComplete);
- void setLoadType(FrameLoadType);
-
static void callContinueLoadAfterNavigationPolicy(void*, const ResourceRequest&, PassRefPtr<FormState>, bool shouldContinue);
static void callContinueLoadAfterNewWindowPolicy(void*, const ResourceRequest&, PassRefPtr<FormState>, const String& frameName, const NavigationAction&, bool shouldContinue);
static void callContinueFragmentScrollAfterNavigationPolicy(void*, const ResourceRequest&, PassRefPtr<FormState>, bool shouldContinue);
@@ -390,8 +383,6 @@ private:
void closeOldDataSources();
void prepareForCachedPageRestore();
- void updateHistoryAfterClientRedirect();
-
bool shouldReloadToHandleUnreachableURL(DocumentLoader*);
void dispatchDidCommitLoad();
@@ -422,8 +413,6 @@ private:
void provisionalLoadStarted();
- bool canCachePage();
-
bool didOpenURL(const KURL&);
void scheduleCheckCompleted();
@@ -499,10 +488,6 @@ private:
SandboxFlags m_sandboxFlags;
SandboxFlags m_forcedSandboxFlags;
-#ifndef NDEBUG
- bool m_didDispatchDidCommitLoad;
-#endif
-
RefPtr<FrameNetworkingContext> m_networkingContext;
};
diff --git a/WebCore/loader/MainResourceLoader.cpp b/WebCore/loader/MainResourceLoader.cpp
index 7e5eb90..85ceb19 100644
--- a/WebCore/loader/MainResourceLoader.cpp
+++ b/WebCore/loader/MainResourceLoader.cpp
@@ -44,6 +44,7 @@
#endif
#include "ResourceError.h"
#include "ResourceHandle.h"
+#include "ResourceLoadScheduler.h"
#include "SchemeRegistry.h"
#include "Settings.h"
#include <wtf/CurrentTime.h>
@@ -548,6 +549,7 @@ bool MainResourceLoader::loadNow(ResourceRequest& r)
if (shouldLoadEmptyBeforeRedirect && !shouldLoadEmpty && defersLoading())
return true;
+ resourceLoadScheduler()->addMainResourceLoad(this);
if (m_substituteData.isValid())
handleDataLoadSoon(r);
else if (shouldLoadEmpty || frameLoader()->representationExistsForURLScheme(url.protocol()))
diff --git a/WebCore/loader/NetscapePlugInStreamLoader.cpp b/WebCore/loader/NetscapePlugInStreamLoader.cpp
index 1225652..8c2a426 100644
--- a/WebCore/loader/NetscapePlugInStreamLoader.cpp
+++ b/WebCore/loader/NetscapePlugInStreamLoader.cpp
@@ -44,9 +44,13 @@ NetscapePlugInStreamLoader::~NetscapePlugInStreamLoader()
{
}
-PassRefPtr<NetscapePlugInStreamLoader> NetscapePlugInStreamLoader::create(Frame* frame, NetscapePlugInStreamLoaderClient* client)
+PassRefPtr<NetscapePlugInStreamLoader> NetscapePlugInStreamLoader::create(Frame* frame, NetscapePlugInStreamLoaderClient* client, const ResourceRequest& request)
{
- return adoptRef(new NetscapePlugInStreamLoader(frame, client));
+ RefPtr<NetscapePlugInStreamLoader> loader(adoptRef(new NetscapePlugInStreamLoader(frame, client)));
+ loader->setShouldBufferData(false);
+ loader->documentLoader()->addPlugInStreamLoader(loader.get());
+ loader->init(request);
+ return loader.release();
}
bool NetscapePlugInStreamLoader::isDone() const
diff --git a/WebCore/loader/NetscapePlugInStreamLoader.h b/WebCore/loader/NetscapePlugInStreamLoader.h
index c8c4cb6..4d7d03b 100644
--- a/WebCore/loader/NetscapePlugInStreamLoader.h
+++ b/WebCore/loader/NetscapePlugInStreamLoader.h
@@ -47,7 +47,7 @@ namespace WebCore {
class NetscapePlugInStreamLoader : public ResourceLoader {
public:
- static PassRefPtr<NetscapePlugInStreamLoader> create(Frame*, NetscapePlugInStreamLoaderClient*);
+ static PassRefPtr<NetscapePlugInStreamLoader> create(Frame*, NetscapePlugInStreamLoaderClient*, const ResourceRequest&);
virtual ~NetscapePlugInStreamLoader();
bool isDone() const;
diff --git a/WebCore/loader/ProgressTracker.cpp b/WebCore/loader/ProgressTracker.cpp
index 6bc2055..cd15433 100644
--- a/WebCore/loader/ProgressTracker.cpp
+++ b/WebCore/loader/ProgressTracker.cpp
@@ -241,7 +241,7 @@ void ProgressTracker::completeProgress(unsigned long identifier)
{
ProgressItem* item = m_progressItems.get(identifier);
- // FIXME: Can this happen?
+ // This can happen if a load fails without receiving any response data.
if (!item)
return;
diff --git a/WebCore/loader/ResourceLoadNotifier.cpp b/WebCore/loader/ResourceLoadNotifier.cpp
index b32b737..d002ef3 100644
--- a/WebCore/loader/ResourceLoadNotifier.cpp
+++ b/WebCore/loader/ResourceLoadNotifier.cpp
@@ -160,6 +160,14 @@ void ResourceLoadNotifier::dispatchDidFinishLoading(DocumentLoader* loader, unsi
#endif
}
+void ResourceLoadNotifier::dispatchTransferLoadingResourceFromPage(unsigned long identifier, DocumentLoader* loader, const ResourceRequest& request, Page* oldPage)
+{
+ ASSERT(oldPage != m_frame->page());
+ m_frame->loader()->client()->transferLoadingResourceFromPage(identifier, loader, request, oldPage);
+
+ oldPage->progress()->completeProgress(identifier);
+}
+
void ResourceLoadNotifier::sendRemainingDelegateMessages(DocumentLoader* loader, unsigned long identifier, const ResourceResponse& response, int length, const ResourceError& error)
{
if (!response.isNull())
diff --git a/WebCore/loader/ResourceLoadNotifier.h b/WebCore/loader/ResourceLoadNotifier.h
index 93fcccc..2f10856 100644
--- a/WebCore/loader/ResourceLoadNotifier.h
+++ b/WebCore/loader/ResourceLoadNotifier.h
@@ -37,6 +37,7 @@ namespace WebCore {
class AuthenticationChallenge;
class DocumentLoader;
class Frame;
+class Page;
class ResourceError;
class ResourceLoader;
class ResourceResponse;
@@ -60,6 +61,7 @@ public:
void dispatchDidReceiveResponse(DocumentLoader*, unsigned long identifier, const ResourceResponse&);
void dispatchDidReceiveContentLength(DocumentLoader*, unsigned long identifier, int length);
void dispatchDidFinishLoading(DocumentLoader*, unsigned long identifier, double finishTime);
+ void dispatchTransferLoadingResourceFromPage(unsigned long, DocumentLoader*, const ResourceRequest&, Page*);
void sendRemainingDelegateMessages(DocumentLoader*, unsigned long identifier, const ResourceResponse&, int length, const ResourceError&);
diff --git a/WebCore/loader/ResourceLoadScheduler.cpp b/WebCore/loader/ResourceLoadScheduler.cpp
new file mode 100644
index 0000000..80bea97
--- /dev/null
+++ b/WebCore/loader/ResourceLoadScheduler.cpp
@@ -0,0 +1,282 @@
+/*
+ Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de)
+ Copyright (C) 2001 Dirk Mueller (mueller@kde.org)
+ Copyright (C) 2002 Waldo Bastian (bastian@kde.org)
+ Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
+ Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ Copyright (C) 2010 Google Inc. All rights reserved.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include "ResourceLoadScheduler.h"
+
+#include "Document.h"
+#include "Frame.h"
+#include "FrameLoader.h"
+#include "InspectorInstrumentation.h"
+#include "KURL.h"
+#include "Logging.h"
+#include "NetscapePlugInStreamLoader.h"
+#include "ResourceLoader.h"
+#include "ResourceRequest.h"
+#include "SubresourceLoader.h"
+
+#define REQUEST_MANAGEMENT_ENABLED 1
+
+namespace WebCore {
+
+#if REQUEST_MANAGEMENT_ENABLED
+static const unsigned maxRequestsInFlightForNonHTTPProtocols = 20;
+// Match the parallel connection count used by the networking layer.
+static unsigned maxRequestsInFlightPerHost;
+#else
+static const unsigned maxRequestsInFlightForNonHTTPProtocols = 10000;
+static const unsigned maxRequestsInFlightPerHost = 10000;
+#endif
+
+ResourceLoadScheduler::HostInformation* ResourceLoadScheduler::hostForURL(const KURL& url, CreateHostPolicy createHostPolicy)
+{
+ if (!url.protocolInHTTPFamily())
+ return m_nonHTTPProtocolHost;
+
+ m_hosts.checkConsistency();
+ String hostName = url.host();
+ HostInformation* host = m_hosts.get(hostName);
+ if (!host && createHostPolicy == CreateIfNotFound) {
+ host = new HostInformation(hostName, maxRequestsInFlightPerHost);
+ m_hosts.add(hostName, host);
+ }
+ return host;
+}
+
+ResourceLoadScheduler* resourceLoadScheduler()
+{
+ ASSERT(isMainThread());
+ DEFINE_STATIC_LOCAL(ResourceLoadScheduler, resourceLoadScheduler, ());
+ return &resourceLoadScheduler;
+}
+
+ResourceLoadScheduler::ResourceLoadScheduler()
+ : m_nonHTTPProtocolHost(new HostInformation(String(), maxRequestsInFlightForNonHTTPProtocols))
+ , m_requestTimer(this, &ResourceLoadScheduler::requestTimerFired)
+ , m_isSuspendingPendingRequests(false)
+{
+#if REQUEST_MANAGEMENT_ENABLED
+ maxRequestsInFlightPerHost = initializeMaximumHTTPConnectionCountPerHost();
+#endif
+}
+
+PassRefPtr<SubresourceLoader> ResourceLoadScheduler::scheduleSubresourceLoad(Frame* frame, SubresourceLoaderClient* client, const ResourceRequest& request, Priority priority, SecurityCheckPolicy securityCheck, bool sendResourceLoadCallbacks, bool shouldContentSniff)
+{
+ PassRefPtr<SubresourceLoader> loader = SubresourceLoader::create(frame, client, request, securityCheck, sendResourceLoadCallbacks, shouldContentSniff);
+ if (loader)
+ scheduleLoad(loader.get(), priority);
+ return loader;
+}
+
+PassRefPtr<NetscapePlugInStreamLoader> ResourceLoadScheduler::schedulePluginStreamLoad(Frame* frame, NetscapePlugInStreamLoaderClient* client, const ResourceRequest& request)
+{
+ PassRefPtr<NetscapePlugInStreamLoader> loader = NetscapePlugInStreamLoader::create(frame, client, request);
+ if (loader)
+ scheduleLoad(loader.get(), Low);
+ return loader;
+}
+
+void ResourceLoadScheduler::addMainResourceLoad(ResourceLoader* resourceLoader)
+{
+ hostForURL(resourceLoader->url(), CreateIfNotFound)->addLoadInProgress(resourceLoader);
+}
+
+void ResourceLoadScheduler::scheduleLoad(ResourceLoader* resourceLoader, Priority priority)
+{
+ ASSERT(resourceLoader);
+#if !REQUEST_MANAGEMENT_ENABLED
+ priority = HighestPriority;
+#endif
+
+ LOG(ResourceLoading, "ResourceLoadScheduler::load resource %p '%s'", resourceLoader, resourceLoader->url().string().latin1().data());
+ HostInformation* host = hostForURL(resourceLoader->url(), CreateIfNotFound);
+ bool hadRequests = host->hasRequests();
+ host->schedule(resourceLoader, priority);
+
+ if (priority > Low || !resourceLoader->url().protocolInHTTPFamily() || (priority == Low && !hadRequests)) {
+ // Try to request important resources immediately.
+ servePendingRequests(host, priority);
+ } else {
+ // Handle asynchronously so early low priority requests don't get scheduled before later high priority ones.
+ InspectorInstrumentation::didScheduleResourceRequest(resourceLoader->frameLoader() ? resourceLoader->frameLoader()->frame()->document() : 0, resourceLoader->url());
+ scheduleServePendingRequests();
+ }
+}
+
+void ResourceLoadScheduler::remove(ResourceLoader* resourceLoader)
+{
+ ASSERT(resourceLoader);
+
+ HostInformation* host = hostForURL(resourceLoader->url());
+ if (host)
+ host->remove(resourceLoader);
+ scheduleServePendingRequests();
+}
+
+void ResourceLoadScheduler::crossOriginRedirectReceived(ResourceLoader* resourceLoader, const KURL& redirectURL)
+{
+ HostInformation* oldHost = hostForURL(resourceLoader->url());
+ ASSERT(oldHost);
+ HostInformation* newHost = hostForURL(redirectURL, CreateIfNotFound);
+
+ if (oldHost->name() == newHost->name())
+ return;
+
+ newHost->addLoadInProgress(resourceLoader);
+ oldHost->remove(resourceLoader);
+}
+
+void ResourceLoadScheduler::servePendingRequests(Priority minimumPriority)
+{
+ LOG(ResourceLoading, "ResourceLoadScheduler::servePendingRequests. m_isSuspendingPendingRequests=%d", m_isSuspendingPendingRequests);
+ if (m_isSuspendingPendingRequests)
+ return;
+
+ m_requestTimer.stop();
+
+ servePendingRequests(m_nonHTTPProtocolHost, minimumPriority);
+
+ Vector<HostInformation*> hostsToServe;
+ m_hosts.checkConsistency();
+ HostMap::iterator end = m_hosts.end();
+ for (HostMap::iterator iter = m_hosts.begin(); iter != end; ++iter)
+ hostsToServe.append(iter->second);
+
+ int size = hostsToServe.size();
+ for (int i = 0; i < size; ++i) {
+ HostInformation* host = hostsToServe[i];
+ if (host->hasRequests())
+ servePendingRequests(host, minimumPriority);
+ else
+ delete m_hosts.take(host->name());
+ }
+}
+
+void ResourceLoadScheduler::servePendingRequests(HostInformation* host, Priority minimumPriority)
+{
+ LOG(ResourceLoading, "ResourceLoadScheduler::servePendingRequests HostInformation.m_name='%s'", host->name().latin1().data());
+
+ for (int priority = HighestPriority; priority >= minimumPriority; --priority) {
+ HostInformation::RequestQueue& requestsPending = host->requestsPending((Priority) priority);
+
+ while (!requestsPending.isEmpty()) {
+ RefPtr<ResourceLoader> resourceLoader = requestsPending.first();
+
+ // For named hosts - which are only http(s) hosts - we should always enforce the connection limit.
+ // For non-named hosts - everything but http(s) - we should only enforce the limit if the document isn't done parsing
+ // and we don't know all stylesheets yet.
+ Document* document = resourceLoader->frameLoader() ? resourceLoader->frameLoader()->frame()->document() : 0;
+ bool shouldLimitRequests = !host->name().isNull() || (document && (document->parsing() || !document->haveStylesheetsLoaded()));
+ if (shouldLimitRequests && host->limitRequests())
+ return;
+
+ resourceLoader->start();
+ if (!resourceLoader->reachedTerminalState())
+ host->addLoadInProgress(resourceLoader.get());
+ requestsPending.removeFirst();
+ }
+ }
+}
+
+void ResourceLoadScheduler::suspendPendingRequests()
+{
+ ASSERT(!m_isSuspendingPendingRequests);
+ m_isSuspendingPendingRequests = true;
+}
+
+void ResourceLoadScheduler::resumePendingRequests()
+{
+ ASSERT(m_isSuspendingPendingRequests);
+ m_isSuspendingPendingRequests = false;
+ if (!m_hosts.isEmpty() || m_nonHTTPProtocolHost->hasRequests())
+ scheduleServePendingRequests();
+}
+
+void ResourceLoadScheduler::scheduleServePendingRequests()
+{
+ LOG(ResourceLoading, "ResourceLoadScheduler::scheduleServePendingRequests, m_requestTimer.isActive()=%u", m_requestTimer.isActive());
+ if (!m_requestTimer.isActive())
+ m_requestTimer.startOneShot(0);
+}
+
+void ResourceLoadScheduler::requestTimerFired(Timer<ResourceLoadScheduler>*)
+{
+ LOG(ResourceLoading, "ResourceLoadScheduler::requestTimerFired\n");
+ servePendingRequests();
+}
+
+ResourceLoadScheduler::HostInformation::HostInformation(const String& name, unsigned maxRequestsInFlight)
+ : m_name(name)
+ , m_maxRequestsInFlight(maxRequestsInFlight)
+{
+}
+
+ResourceLoadScheduler::HostInformation::~HostInformation()
+{
+ ASSERT(m_requestsLoading.isEmpty());
+ for (unsigned p = 0; p <= HighestPriority; p++)
+ ASSERT(m_requestsPending[p].isEmpty());
+}
+
+void ResourceLoadScheduler::HostInformation::schedule(ResourceLoader* resourceLoader, Priority priority)
+{
+ m_requestsPending[priority].append(resourceLoader);
+}
+
+void ResourceLoadScheduler::HostInformation::addLoadInProgress(ResourceLoader* resourceLoader)
+{
+ LOG(ResourceLoading, "HostInformation '%s' loading '%s'. Current count %d", m_name.latin1().data(), resourceLoader->url().string().latin1().data(), m_requestsLoading.size());
+ m_requestsLoading.add(resourceLoader);
+}
+
+void ResourceLoadScheduler::HostInformation::remove(ResourceLoader* resourceLoader)
+{
+ if (m_requestsLoading.contains(resourceLoader)) {
+ m_requestsLoading.remove(resourceLoader);
+ return;
+ }
+
+ for (int priority = HighestPriority; priority >= LowestPriority; --priority) {
+ RequestQueue::iterator end = m_requestsPending[priority].end();
+ for (RequestQueue::iterator it = m_requestsPending[priority].begin(); it != end; ++it) {
+ if (*it == resourceLoader) {
+ m_requestsPending[priority].remove(it);
+ return;
+ }
+ }
+ }
+}
+
+bool ResourceLoadScheduler::HostInformation::hasRequests() const
+{
+ if (!m_requestsLoading.isEmpty())
+ return true;
+ for (unsigned p = 0; p <= HighestPriority; p++) {
+ if (!m_requestsPending[p].isEmpty())
+ return true;
+ }
+ return false;
+}
+
+} // namespace WebCore
diff --git a/WebCore/loader/ResourceLoadScheduler.h b/WebCore/loader/ResourceLoadScheduler.h
new file mode 100644
index 0000000..84f8845
--- /dev/null
+++ b/WebCore/loader/ResourceLoadScheduler.h
@@ -0,0 +1,113 @@
+/*
+ Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de)
+ Copyright (C) 2001 Dirk Mueller <mueller@kde.org>
+ Copyright (C) 2004, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ Copyright (C) 2010 Google Inc. All rights reserved.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+ */
+
+#ifndef ResourceLoadScheduler_h
+#define ResourceLoadScheduler_h
+
+#include "FrameLoaderTypes.h"
+#include "PlatformString.h"
+#include "Timer.h"
+#include <wtf/Deque.h>
+#include <wtf/HashMap.h>
+#include <wtf/HashSet.h>
+#include <wtf/Noncopyable.h>
+#include <wtf/text/StringHash.h>
+
+namespace WebCore {
+
+class Frame;
+class KURL;
+class NetscapePlugInStreamLoader;
+class NetscapePlugInStreamLoaderClient;
+class ResourceLoader;
+class ResourceRequest;
+class SubresourceLoader;
+class SubresourceLoaderClient;
+
+class ResourceLoadScheduler : public Noncopyable {
+public:
+ friend ResourceLoadScheduler* resourceLoadScheduler();
+
+ enum Priority { VeryLow, Low, Medium, High, LowestPriority = VeryLow, HighestPriority = High };
+ PassRefPtr<SubresourceLoader> scheduleSubresourceLoad(Frame*, SubresourceLoaderClient*, const ResourceRequest&, Priority = Low, SecurityCheckPolicy = DoSecurityCheck, bool sendResourceLoadCallbacks = true, bool shouldContentSniff = true);
+ PassRefPtr<NetscapePlugInStreamLoader> schedulePluginStreamLoad(Frame*, NetscapePlugInStreamLoaderClient*, const ResourceRequest&);
+ void addMainResourceLoad(ResourceLoader*);
+ void remove(ResourceLoader*);
+ void crossOriginRedirectReceived(ResourceLoader*, const KURL& redirectURL);
+
+ void servePendingRequests(Priority minimumPriority = VeryLow);
+ void suspendPendingRequests();
+ void resumePendingRequests();
+
+private:
+ ResourceLoadScheduler();
+ ~ResourceLoadScheduler();
+
+ void scheduleLoad(ResourceLoader*, Priority);
+ void scheduleServePendingRequests();
+ void requestTimerFired(Timer<ResourceLoadScheduler>*);
+
+ class HostInformation : public Noncopyable {
+ public:
+ HostInformation(const String&, unsigned);
+ ~HostInformation();
+
+ const String& name() const { return m_name; }
+ void schedule(ResourceLoader*, Priority = VeryLow);
+ void addLoadInProgress(ResourceLoader*);
+ void remove(ResourceLoader*);
+ bool hasRequests() const;
+ bool limitRequests() const { return m_requestsLoading.size() >= m_maxRequestsInFlight; }
+
+ typedef Deque<RefPtr<ResourceLoader> > RequestQueue;
+ RequestQueue& requestsPending(Priority priority) { return m_requestsPending[priority]; }
+
+ private:
+ RequestQueue m_requestsPending[HighestPriority + 1];
+ typedef HashSet<RefPtr<ResourceLoader> > RequestMap;
+ RequestMap m_requestsLoading;
+ const String m_name;
+ const int m_maxRequestsInFlight;
+ };
+
+ enum CreateHostPolicy {
+ CreateIfNotFound,
+ FindOnly
+ };
+
+ HostInformation* hostForURL(const KURL&, CreateHostPolicy = FindOnly);
+ void servePendingRequests(HostInformation*, Priority);
+
+ typedef HashMap<String, HostInformation*, StringHash> HostMap;
+ HostMap m_hosts;
+ HostInformation* m_nonHTTPProtocolHost;
+
+ Timer<ResourceLoadScheduler> m_requestTimer;
+
+ bool m_isSuspendingPendingRequests;
+};
+
+ResourceLoadScheduler* resourceLoadScheduler();
+
+}
+
+#endif
diff --git a/WebCore/loader/ResourceLoader.cpp b/WebCore/loader/ResourceLoader.cpp
index eab5acd..42b6092 100644
--- a/WebCore/loader/ResourceLoader.cpp
+++ b/WebCore/loader/ResourceLoader.cpp
@@ -39,8 +39,9 @@
#include "InspectorInstrumentation.h"
#include "Page.h"
#include "ProgressTracker.h"
-#include "ResourceHandle.h"
#include "ResourceError.h"
+#include "ResourceHandle.h"
+#include "ResourceLoadScheduler.h"
#include "Settings.h"
#include "SharedBuffer.h"
@@ -95,6 +96,8 @@ void ResourceLoader::releaseResources()
m_identifier = 0;
+ resourceLoadScheduler()->remove(this);
+
if (m_handle) {
// Clear out the ResourceHandle's client so that it doesn't try to call
// us back after we release it, unless it has been replaced by someone else.
@@ -107,9 +110,10 @@ void ResourceLoader::releaseResources()
m_deferredRequest = ResourceRequest();
}
-bool ResourceLoader::load(const ResourceRequest& r)
+void ResourceLoader::init(const ResourceRequest& r)
{
ASSERT(!m_handle);
+ ASSERT(m_request.isNull());
ASSERT(m_deferredRequest.isNull());
ASSERT(!m_documentLoader->isSubstituteLoadPending(this));
@@ -125,30 +129,43 @@ bool ResourceLoader::load(const ResourceRequest& r)
clientRequest.setFirstPartyForCookies(document->firstPartyForCookies());
}
- willSendRequest(clientRequest, ResourceResponse());
- if (clientRequest.isNull()) {
- didFail(frameLoader()->cancelledError(r));
- return false;
- }
+ m_request = clientRequest;
+}
+
+void ResourceLoader::start()
+{
+ ASSERT(!m_handle);
+ ASSERT(!m_request.isNull());
+ ASSERT(m_deferredRequest.isNull());
+
+ willSendRequest(m_request, ResourceResponse());
+ if (m_request.isNull()) {
+ didFail(frameLoader()->cancelledError(m_request));
+ return;
+ }
+<<<<<<< HEAD
#if ENABLE(ARCHIVE) // ANDROID extension: disabled to reduce code size
if (m_documentLoader->scheduleArchiveLoad(this, clientRequest, r.url()))
return true;
#endif
+=======
+ if (m_documentLoader->scheduleArchiveLoad(this, m_request, m_request.url()))
+ return;
+>>>>>>> webkit.org at r72274
#if ENABLE(OFFLINE_WEB_APPLICATIONS)
- if (m_documentLoader->applicationCacheHost()->maybeLoadResource(this, clientRequest, r.url()))
- return true;
+ if (m_documentLoader->applicationCacheHost()->maybeLoadResource(this, m_request, m_request.url()))
+ return;
#endif
if (m_defersLoading) {
- m_deferredRequest = clientRequest;
- return true;
+ m_deferredRequest = m_request;
+ return;
}
-
- m_handle = ResourceHandle::create(m_frame->loader()->networkingContext(), clientRequest, this, m_defersLoading, m_shouldContentSniff);
- return true;
+ if (!m_reachedTerminalState)
+ m_handle = ResourceHandle::create(m_frame->loader()->networkingContext(), m_request, this, m_defersLoading, m_shouldContentSniff);
}
void ResourceLoader::setDefersLoading(bool defers)
@@ -157,9 +174,9 @@ void ResourceLoader::setDefersLoading(bool defers)
if (m_handle)
m_handle->setDefersLoading(defers);
if (!defers && !m_deferredRequest.isNull()) {
- ResourceRequest request(m_deferredRequest);
+ m_request = m_deferredRequest;
m_deferredRequest = ResourceRequest();
- load(request);
+ start();
}
}
@@ -234,6 +251,8 @@ void ResourceLoader::willSendRequest(ResourceRequest& request, const ResourceRes
frameLoader()->notifier()->willSendRequest(this, request, redirectResponse);
}
+ if (!redirectResponse.isNull())
+ resourceLoadScheduler()->crossOriginRedirectReceived(this, request.url());
m_request = request;
}
@@ -354,7 +373,7 @@ void ResourceLoader::didCancel(const ResourceError& error)
m_handle->cancel();
m_handle = 0;
}
- if (m_sendResourceLoadCallbacks && !m_calledDidFinishLoad)
+ if (m_sendResourceLoadCallbacks && m_identifier && !m_calledDidFinishLoad)
frameLoader()->notifier()->didFailToLoad(this, error);
releaseResources();
diff --git a/WebCore/loader/ResourceLoader.h b/WebCore/loader/ResourceLoader.h
index 29afbc1..0da76fb 100644
--- a/WebCore/loader/ResourceLoader.h
+++ b/WebCore/loader/ResourceLoader.h
@@ -54,7 +54,7 @@ namespace WebCore {
void cancel();
- virtual bool load(const ResourceRequest&);
+ virtual void init(const ResourceRequest&);
FrameLoader* frameLoader() const;
DocumentLoader* documentLoader() const { return m_documentLoader.get(); }
@@ -126,9 +126,12 @@ namespace WebCore {
virtual AsyncFileStream* createAsyncFileStream(FileStreamClient*);
#endif
+ const KURL& url() const { return m_request.url(); }
ResourceHandle* handle() const { return m_handle.get(); }
bool sendResourceLoadCallbacks() const { return m_sendResourceLoadCallbacks; }
+ bool reachedTerminalState() const { return m_reachedTerminalState; }
+
void setShouldBufferData(bool shouldBufferData);
protected:
@@ -137,12 +140,15 @@ namespace WebCore {
#if ENABLE(OFFLINE_WEB_APPLICATIONS)
friend class ApplicationCacheHost; // for access to request()
#endif
-
+ friend class ResourceLoadScheduler; // for access to start()
+ // start() actually sends the load to the network (unless the load is being
+ // deferred) and should only be called by ResourceLoadScheduler or setDefersLoading().
+ void start();
+
virtual void didCancel(const ResourceError&);
void didFinishLoadingOnePart(double finishTime);
const ResourceRequest& request() const { return m_request; }
- bool reachedTerminalState() const { return m_reachedTerminalState; }
bool cancelled() const { return m_cancelled; }
bool defersLoading() const { return m_defersLoading; }
diff --git a/WebCore/loader/SubresourceLoader.cpp b/WebCore/loader/SubresourceLoader.cpp
index 5377382..3ae4d6f 100644
--- a/WebCore/loader/SubresourceLoader.cpp
+++ b/WebCore/loader/SubresourceLoader.cpp
@@ -86,8 +86,7 @@ PassRefPtr<SubresourceLoader> SubresourceLoader::create(Frame* frame, Subresourc
RefPtr<SubresourceLoader> subloader(adoptRef(new SubresourceLoader(frame, client, sendResourceLoadCallbacks, shouldContentSniff)));
subloader->documentLoader()->addSubresourceLoader(subloader.get());
- if (!subloader->load(newRequest))
- return 0;
+ subloader->init(newRequest);
return subloader.release();
}
diff --git a/WebCore/loader/cache/CachedCSSStyleSheet.cpp b/WebCore/loader/cache/CachedCSSStyleSheet.cpp
index f0016d1..9ec979b 100644
--- a/WebCore/loader/cache/CachedCSSStyleSheet.cpp
+++ b/WebCore/loader/cache/CachedCSSStyleSheet.cpp
@@ -117,10 +117,11 @@ void CachedCSSStyleSheet::checkNotify()
c->setCSSStyleSheet(m_url, m_response.url(), m_decoder->encoding().name(), this);
}
-void CachedCSSStyleSheet::error()
+void CachedCSSStyleSheet::error(CachedResource::Status status)
{
+ setStatus(status);
+ ASSERT(errorOccurred());
setLoading(false);
- setErrorOccurred(true);
checkNotify();
}
diff --git a/WebCore/loader/cache/CachedCSSStyleSheet.h b/WebCore/loader/cache/CachedCSSStyleSheet.h
index abcdb85..a982e03 100644
--- a/WebCore/loader/cache/CachedCSSStyleSheet.h
+++ b/WebCore/loader/cache/CachedCSSStyleSheet.h
@@ -49,7 +49,7 @@ namespace WebCore {
virtual void setEncoding(const String&);
virtual String encoding() const;
virtual void data(PassRefPtr<SharedBuffer> data, bool allDataReceived);
- virtual void error();
+ virtual void error(CachedResource::Status);
void checkNotify();
diff --git a/WebCore/loader/cache/CachedFont.cpp b/WebCore/loader/cache/CachedFont.cpp
index 6297ad1..96654a5 100644
--- a/WebCore/loader/cache/CachedFont.cpp
+++ b/WebCore/loader/cache/CachedFont.cpp
@@ -111,7 +111,7 @@ bool CachedFont::ensureCustomFontData()
if (!m_fontData && !errorOccurred() && !isLoading() && m_data) {
m_fontData = createFontCustomPlatformData(m_data.get());
if (!m_fontData)
- setErrorOccurred(true);
+ setStatus(DecodeError);
}
#endif
return m_fontData;
@@ -206,10 +206,11 @@ void CachedFont::checkNotify()
}
-void CachedFont::error()
+void CachedFont::error(CachedResource::Status status)
{
+ setStatus(status);
+ ASSERT(errorOccurred());
setLoading(false);
- setErrorOccurred(true);
checkNotify();
}
diff --git a/WebCore/loader/cache/CachedFont.h b/WebCore/loader/cache/CachedFont.h
index e1a34e8..5814087 100644
--- a/WebCore/loader/cache/CachedFont.h
+++ b/WebCore/loader/cache/CachedFont.h
@@ -54,7 +54,7 @@ public:
virtual void didAddClient(CachedResourceClient*);
virtual void data(PassRefPtr<SharedBuffer> data, bool allDataReceived);
- virtual void error();
+ virtual void error(CachedResource::Status);
virtual void allClientsRemoved();
diff --git a/WebCore/loader/cache/CachedImage.cpp b/WebCore/loader/cache/CachedImage.cpp
index ce1c9a3..c610b0b 100644
--- a/WebCore/loader/cache/CachedImage.cpp
+++ b/WebCore/loader/cache/CachedImage.cpp
@@ -290,7 +290,7 @@ void CachedImage::data(PassRefPtr<SharedBuffer> data, bool allDataReceived)
IntSize s = imageSize(1.0f);
size_t estimatedDecodedImageSize = s.width() * s.height() * 4; // no overflow check
if (m_image->isNull() || (maxDecodedImageSize > 0 && estimatedDecodedImageSize > maxDecodedImageSize)) {
- error();
+ error(errorOccurred() ? status() : DecodeError);
if (inCache())
cache()->remove(this);
return;
@@ -310,10 +310,11 @@ void CachedImage::data(PassRefPtr<SharedBuffer> data, bool allDataReceived)
}
}
-void CachedImage::error()
+void CachedImage::error(CachedResource::Status status)
{
clear();
- setErrorOccurred(true);
+ setStatus(status);
+ ASSERT(errorOccurred() || httpStatusCodeErrorOccurred());
m_data.clear();
notifyObservers();
setLoading(false);
diff --git a/WebCore/loader/cache/CachedImage.h b/WebCore/loader/cache/CachedImage.h
index 313f3f3..af36534 100644
--- a/WebCore/loader/cache/CachedImage.h
+++ b/WebCore/loader/cache/CachedImage.h
@@ -65,11 +65,11 @@ public:
virtual void destroyDecodedData();
virtual void data(PassRefPtr<SharedBuffer> data, bool allDataReceived);
- virtual void error();
+ virtual void error(CachedResource::Status);
virtual void httpStatusCodeError() { m_httpStatusCodeErrorOccurred = true; }
bool httpStatusCodeErrorOccurred() const { return m_httpStatusCodeErrorOccurred; }
-
+
void checkNotify();
virtual bool isImage() const { return true; }
diff --git a/WebCore/loader/cache/CachedResource.cpp b/WebCore/loader/cache/CachedResource.cpp
index c440ec9..d4eac2e 100644
--- a/WebCore/loader/cache/CachedResource.cpp
+++ b/WebCore/loader/cache/CachedResource.cpp
@@ -66,7 +66,6 @@ CachedResource::CachedResource(const String& url, Type type)
, m_inLiveDecodedResourcesList(false)
, m_requestedFromNetworkingLayer(false)
, m_sendResourceLoadCallbacks(true)
- , m_errorOccurred(false)
, m_inCache(false)
, m_loading(false)
, m_type(type)
@@ -454,7 +453,7 @@ void CachedResource::unregisterHandle(CachedResourceHandleBase* h)
bool CachedResource::canUseCacheValidator() const
{
- if (m_loading || m_errorOccurred)
+ if (m_loading || errorOccurred())
return false;
if (m_response.cacheControlContainsNoStore())
@@ -467,7 +466,7 @@ bool CachedResource::canUseCacheValidator() const
bool CachedResource::mustRevalidate(CachePolicy cachePolicy) const
{
- if (m_errorOccurred) {
+ if (errorOccurred()) {
LOG(ResourceLoading, "CachedResource %p mustRevalidate because of m_errorOccurred\n", this);
return true;
}
diff --git a/WebCore/loader/cache/CachedResource.h b/WebCore/loader/cache/CachedResource.h
index ba02459..ed60f84 100644
--- a/WebCore/loader/cache/CachedResource.h
+++ b/WebCore/loader/cache/CachedResource.h
@@ -70,7 +70,9 @@ public:
enum Status {
Unknown, // let cache decide what to do with it
Pending, // only partially loaded
- Cached // regular case
+ Cached, // regular case
+ LoadError,
+ DecodeError
};
CachedResource(const String& url, Type);
@@ -82,8 +84,8 @@ public:
virtual void setEncoding(const String&) { }
virtual String encoding() const { return String(); }
virtual void data(PassRefPtr<SharedBuffer> data, bool allDataReceived);
- virtual void error() { }
- virtual void httpStatusCodeError() { error(); } // Images keep loading in spite of HTTP errors (for legacy compat with <img>, etc.).
+ virtual void error(CachedResource::Status) { }
+ virtual void httpStatusCodeError() { error(LoadError); } // Images keep loading in spite of HTTP errors (for legacy compat with <img>, etc.).
const String &url() const { return m_url; }
Type type() const { return static_cast<Type>(m_type); }
@@ -174,8 +176,7 @@ public:
String accept() const { return m_accept; }
void setAccept(const String& accept) { m_accept = accept; }
- bool errorOccurred() const { return m_errorOccurred; }
- void setErrorOccurred(bool b) { m_errorOccurred = b; }
+ bool errorOccurred() const { return (status() == LoadError || status() == DecodeError); }
bool sendResourceLoadCallbacks() const { return m_sendResourceLoadCallbacks; }
@@ -251,12 +252,11 @@ private:
bool m_requestedFromNetworkingLayer : 1;
bool m_sendResourceLoadCallbacks : 1;
- bool m_errorOccurred : 1;
bool m_inCache : 1;
bool m_loading : 1;
unsigned m_type : 3; // Type
- unsigned m_status : 2; // Status
+ unsigned m_status : 3; // Status
#ifndef NDEBUG
bool m_deleted;
diff --git a/WebCore/loader/cache/CachedScript.cpp b/WebCore/loader/cache/CachedScript.cpp
index 50a8c17..54b4503 100644
--- a/WebCore/loader/cache/CachedScript.cpp
+++ b/WebCore/loader/cache/CachedScript.cpp
@@ -100,10 +100,11 @@ void CachedScript::checkNotify()
c->notifyFinished(this);
}
-void CachedScript::error()
+void CachedScript::error(CachedResource::Status status)
{
+ setStatus(status);
+ ASSERT(errorOccurred());
setLoading(false);
- setErrorOccurred(true);
checkNotify();
}
diff --git a/WebCore/loader/cache/CachedScript.h b/WebCore/loader/cache/CachedScript.h
index 7311f9b..30fcb1e 100644
--- a/WebCore/loader/cache/CachedScript.h
+++ b/WebCore/loader/cache/CachedScript.h
@@ -46,7 +46,7 @@ namespace WebCore {
virtual void setEncoding(const String&);
virtual String encoding() const;
virtual void data(PassRefPtr<SharedBuffer> data, bool allDataReceived);
- virtual void error();
+ virtual void error(CachedResource::Status);
void checkNotify();
diff --git a/WebCore/loader/cache/CachedXSLStyleSheet.cpp b/WebCore/loader/cache/CachedXSLStyleSheet.cpp
index 5b30e30..ca7bf13 100644
--- a/WebCore/loader/cache/CachedXSLStyleSheet.cpp
+++ b/WebCore/loader/cache/CachedXSLStyleSheet.cpp
@@ -87,10 +87,11 @@ void CachedXSLStyleSheet::checkNotify()
c->setXSLStyleSheet(m_url, m_response.url(), m_sheet);
}
-void CachedXSLStyleSheet::error()
+void CachedXSLStyleSheet::error(CachedResource::Status status)
{
+ setStatus(status);
+ ASSERT(errorOccurred());
setLoading(false);
- setErrorOccurred(true);
checkNotify();
}
diff --git a/WebCore/loader/cache/CachedXSLStyleSheet.h b/WebCore/loader/cache/CachedXSLStyleSheet.h
index 8587b0b..8b29792 100644
--- a/WebCore/loader/cache/CachedXSLStyleSheet.h
+++ b/WebCore/loader/cache/CachedXSLStyleSheet.h
@@ -46,7 +46,7 @@ namespace WebCore {
virtual void setEncoding(const String&);
virtual String encoding() const;
virtual void data(PassRefPtr<SharedBuffer> data, bool allDataReceived);
- virtual void error();
+ virtual void error(CachedResource::Status);
void checkNotify();
diff --git a/WebCore/loader/icon/IconLoader.cpp b/WebCore/loader/icon/IconLoader.cpp
index adfa04b..24562d0 100644
--- a/WebCore/loader/icon/IconLoader.cpp
+++ b/WebCore/loader/icon/IconLoader.cpp
@@ -33,6 +33,7 @@
#include "IconDatabase.h"
#include "Logging.h"
#include "ResourceHandle.h"
+#include "ResourceLoadScheduler.h"
#include "ResourceResponse.h"
#include "ResourceRequest.h"
#include "SharedBuffer.h"
@@ -68,7 +69,7 @@ void IconLoader::startLoading()
// SubresourceLoader::create returns.
m_loadIsInProgress = true;
- RefPtr<SubresourceLoader> loader = SubresourceLoader::create(m_frame, this, m_frame->loader()->iconURL());
+ RefPtr<SubresourceLoader> loader = resourceLoadScheduler()->scheduleSubresourceLoad(m_frame, this, m_frame->loader()->iconURL());
if (!loader)
LOG_ERROR("Failed to start load for icon at url %s", m_frame->loader()->iconURL().string().ascii().data());
diff --git a/WebCore/loader/loader.cpp b/WebCore/loader/loader.cpp
index bd27312..1d32f82 100644
--- a/WebCore/loader/loader.cpp
+++ b/WebCore/loader/loader.cpp
@@ -28,45 +28,20 @@
#include "CachedImage.h"
#include "CachedResource.h"
#include "CachedResourceLoader.h"
-#include "InspectorInstrumentation.h"
#include "Frame.h"
#include "FrameLoader.h"
-#include "HTMLDocument.h"
#include "Logging.h"
#include "Request.h"
#include "ResourceHandle.h"
+#include "ResourceLoadScheduler.h"
#include "ResourceRequest.h"
#include "ResourceResponse.h"
-#include "SecurityOrigin.h"
#include "SharedBuffer.h"
-#include "SubresourceLoader.h"
#include <wtf/Assertions.h>
#include <wtf/Vector.h>
-#define REQUEST_MANAGEMENT_ENABLED 1
-
namespace WebCore {
-#if REQUEST_MANAGEMENT_ENABLED
-// Match the parallel connection count used by the networking layer
-static unsigned maxRequestsInFlightPerHost;
-// Having a limit might still help getting more important resources first
-static const unsigned maxRequestsInFlightForNonHTTPProtocols = 20;
-#else
-static const unsigned maxRequestsInFlightPerHost = 10000;
-static const unsigned maxRequestsInFlightForNonHTTPProtocols = 10000;
-#endif
-
-Loader::Loader()
- : m_requestTimer(this, &Loader::requestTimerFired)
- , m_isSuspendingPendingRequests(false)
-{
- m_nonHTTPProtocolHost = Host::create(AtomicString(), maxRequestsInFlightForNonHTTPProtocols);
-#if REQUEST_MANAGEMENT_ENABLED
- maxRequestsInFlightPerHost = initializeMaximumHTTPConnectionCountPerHost();
-#endif
-}
-
Loader::~Loader()
{
ASSERT_NOT_REACHED();
@@ -95,307 +70,111 @@ static ResourceRequest::TargetType cachedResourceTypeToTargetType(CachedResource
return ResourceRequest::TargetIsSubresource;
}
-Loader::Priority Loader::determinePriority(const CachedResource* resource) const
+static ResourceLoadScheduler::Priority determinePriority(const CachedResource* resource)
{
-#if REQUEST_MANAGEMENT_ENABLED
switch (resource->type()) {
case CachedResource::CSSStyleSheet:
#if ENABLE(XSLT)
case CachedResource::XSLStyleSheet:
#endif
- return High;
- case CachedResource::Script:
+ return ResourceLoadScheduler::High;
+ case CachedResource::Script:
case CachedResource::FontResource:
- return Medium;
+ return ResourceLoadScheduler::Medium;
case CachedResource::ImageResource:
- return Low;
+ return ResourceLoadScheduler::Low;
#if ENABLE(LINK_PREFETCH)
case CachedResource::LinkPrefetch:
- return VeryLow;
+ return ResourceLoadScheduler::VeryLow;
#endif
}
ASSERT_NOT_REACHED();
- return Low;
-#else
- return High;
-#endif
+ return ResourceLoadScheduler::Low;
}
void Loader::load(CachedResourceLoader* cachedResourceLoader, CachedResource* resource, bool incremental, SecurityCheckPolicy securityCheck, bool sendResourceLoadCallbacks)
{
- LOG(ResourceLoading, "Loader::load resource %p '%s'", resource, resource->url().latin1().data());
ASSERT(cachedResourceLoader);
Request* request = new Request(cachedResourceLoader, resource, incremental, securityCheck, sendResourceLoadCallbacks);
- RefPtr<Host> host;
- KURL url(ParsedURLString, resource->url());
- if (url.protocolInHTTPFamily()) {
- m_hosts.checkConsistency();
- AtomicString hostName = url.host();
- host = m_hosts.get(hostName.impl());
- if (!host) {
- host = Host::create(hostName, maxRequestsInFlightPerHost);
- m_hosts.add(hostName.impl(), host);
- }
- } else
- host = m_nonHTTPProtocolHost;
-
- bool hadRequests = host->hasRequests();
- Priority priority = determinePriority(resource);
- host->addRequest(request, priority);
cachedResourceLoader->incrementRequestCount(request->cachedResource());
- if (priority > Low || !url.protocolInHTTPFamily() || (priority == Low && !hadRequests)) {
- // Try to request important resources immediately
- host->servePendingRequests(priority);
- } else {
- // Handle asynchronously so early low priority requests don't get scheduled before later high priority ones
- InspectorInstrumentation::didScheduleResourceRequest(cachedResourceLoader->document(), resource->url());
- scheduleServePendingRequests();
- }
-}
-
-void Loader::scheduleServePendingRequests()
-{
- LOG(ResourceLoading, "Loader::scheduleServePendingRequests, m_requestTimer.isActive()=%u", m_requestTimer.isActive());
- if (!m_requestTimer.isActive())
- m_requestTimer.startOneShot(0);
-}
-
-void Loader::requestTimerFired(Timer<Loader>*)
-{
- LOG(ResourceLoading, "Loader::requestTimerFired\n");
- servePendingRequests();
-}
-
-void Loader::servePendingRequests(Priority minimumPriority)
-{
- LOG(ResourceLoading, "Loader::servePendingRequests. m_isSuspendingPendingRequests=%d", m_isSuspendingPendingRequests);
- if (m_isSuspendingPendingRequests)
- return;
-
- m_requestTimer.stop();
-
- m_nonHTTPProtocolHost->servePendingRequests(minimumPriority);
-
- Vector<Host*> hostsToServe;
- m_hosts.checkConsistency();
- HostMap::iterator i = m_hosts.begin();
- HostMap::iterator end = m_hosts.end();
- for (;i != end; ++i)
- hostsToServe.append(i->second.get());
-
- for (unsigned n = 0; n < hostsToServe.size(); ++n) {
- Host* host = hostsToServe[n];
- if (host->hasRequests())
- host->servePendingRequests(minimumPriority);
- else if (!host->processingResource()){
- AtomicString name = host->name();
- m_hosts.remove(name.impl());
+ ResourceRequest resourceRequest(request->cachedResource()->url());
+ resourceRequest.setTargetType(cachedResourceTypeToTargetType(request->cachedResource()->type()));
+
+ if (!request->cachedResource()->accept().isEmpty())
+ resourceRequest.setHTTPAccept(request->cachedResource()->accept());
+
+ if (request->cachedResource()->isCacheValidator()) {
+ CachedResource* resourceToRevalidate = request->cachedResource()->resourceToRevalidate();
+ ASSERT(resourceToRevalidate->canUseCacheValidator());
+ ASSERT(resourceToRevalidate->isLoaded());
+ const String& lastModified = resourceToRevalidate->response().httpHeaderField("Last-Modified");
+ const String& eTag = resourceToRevalidate->response().httpHeaderField("ETag");
+ if (!lastModified.isEmpty() || !eTag.isEmpty()) {
+ ASSERT(cachedResourceLoader->cachePolicy() != CachePolicyReload);
+ if (cachedResourceLoader->cachePolicy() == CachePolicyRevalidate)
+ resourceRequest.setHTTPHeaderField("Cache-Control", "max-age=0");
+ if (!lastModified.isEmpty())
+ resourceRequest.setHTTPHeaderField("If-Modified-Since", lastModified);
+ if (!eTag.isEmpty())
+ resourceRequest.setHTTPHeaderField("If-None-Match", eTag);
}
}
-}
-
-void Loader::suspendPendingRequests()
-{
- ASSERT(!m_isSuspendingPendingRequests);
- m_isSuspendingPendingRequests = true;
-}
-
-void Loader::resumePendingRequests()
-{
- ASSERT(m_isSuspendingPendingRequests);
- m_isSuspendingPendingRequests = false;
- if (!m_hosts.isEmpty() || m_nonHTTPProtocolHost->hasRequests())
- scheduleServePendingRequests();
-}
-
-void Loader::nonCacheRequestInFlight(const KURL& url)
-{
- if (!url.protocolInHTTPFamily())
- return;
- AtomicString hostName = url.host();
- m_hosts.checkConsistency();
- RefPtr<Host> host = m_hosts.get(hostName.impl());
- if (!host) {
- host = Host::create(hostName, maxRequestsInFlightPerHost);
- m_hosts.add(hostName.impl(), host);
- }
-
- host->nonCacheRequestInFlight();
-}
-
-void Loader::nonCacheRequestComplete(const KURL& url)
-{
- if (!url.protocolInHTTPFamily())
- return;
-
- AtomicString hostName = url.host();
- m_hosts.checkConsistency();
- RefPtr<Host> host = m_hosts.get(hostName.impl());
- ASSERT(host);
- if (!host)
- return;
+#if ENABLE(LINK_PREFETCH)
+ if (request->cachedResource()->type() == CachedResource::LinkPrefetch)
+ resourceRequest.setHTTPHeaderField("X-Purpose", "prefetch");
+#endif
- host->nonCacheRequestComplete();
+ RefPtr<SubresourceLoader> loader = resourceLoadScheduler()->scheduleSubresourceLoad(cachedResourceLoader->document()->frame(),
+ this, resourceRequest, determinePriority(resource), request->shouldDoSecurityCheck(), request->sendResourceLoadCallbacks());
+ if (loader && !loader->reachedTerminalState())
+ m_requestsLoading.add(loader.release(), request);
+ else {
+ // FIXME: What if resources in other frames were waiting for this revalidation?
+ LOG(ResourceLoading, "Cannot start loading '%s'", request->cachedResource()->url().latin1().data());
+ cachedResourceLoader->decrementRequestCount(request->cachedResource());
+ cachedResourceLoader->setLoadInProgress(true);
+ if (resource->resourceToRevalidate())
+ cache()->revalidationFailed(resource);
+ resource->error(CachedResource::LoadError);
+ cachedResourceLoader->setLoadInProgress(false);
+ delete request;
+ }
}
void Loader::cancelRequests(CachedResourceLoader* cachedResourceLoader)
{
cachedResourceLoader->clearPendingPreloads();
- if (m_nonHTTPProtocolHost->hasRequests())
- m_nonHTTPProtocolHost->cancelRequests(cachedResourceLoader);
-
- Vector<Host*> hostsToCancel;
- m_hosts.checkConsistency();
- HostMap::iterator i = m_hosts.begin();
- HostMap::iterator end = m_hosts.end();
- for (;i != end; ++i)
- hostsToCancel.append(i->second.get());
-
- for (unsigned n = 0; n < hostsToCancel.size(); ++n) {
- Host* host = hostsToCancel[n];
- if (host->hasRequests())
- host->cancelRequests(cachedResourceLoader);
+ Vector<SubresourceLoader*, 256> loadersToCancel;
+ RequestMap::iterator end = m_requestsLoading.end();
+ for (RequestMap::iterator i = m_requestsLoading.begin(); i != end; ++i) {
+ Request* r = i->second;
+ if (r->cachedResourceLoader() == cachedResourceLoader)
+ loadersToCancel.append(i->first.get());
}
- scheduleServePendingRequests();
-
- ASSERT(cachedResourceLoader->requestCount() == (cachedResourceLoader->loadInProgress() ? 1 : 0));
-}
-
-Loader::Host::Host(const AtomicString& name, unsigned maxRequestsInFlight)
- : m_name(name)
- , m_maxRequestsInFlight(maxRequestsInFlight)
- , m_numResourcesProcessing(0)
- , m_nonCachedRequestsInFlight(0)
-{
-}
-
-Loader::Host::~Host()
-{
- ASSERT(m_requestsLoading.isEmpty());
- for (unsigned p = 0; p <= High; p++)
- ASSERT(m_requestsPending[p].isEmpty());
-}
-
-void Loader::Host::addRequest(Request* request, Priority priority)
-{
- m_requestsPending[priority].append(request);
-}
-
-void Loader::Host::nonCacheRequestInFlight()
-{
- ++m_nonCachedRequestsInFlight;
-}
-
-void Loader::Host::nonCacheRequestComplete()
-{
- --m_nonCachedRequestsInFlight;
- ASSERT(m_nonCachedRequestsInFlight >= 0);
-
- cache()->loader()->scheduleServePendingRequests();
-}
-
-bool Loader::Host::hasRequests() const
-{
- if (!m_requestsLoading.isEmpty())
- return true;
- for (unsigned p = 0; p <= High; p++) {
- if (!m_requestsPending[p].isEmpty())
- return true;
+ for (unsigned i = 0; i < loadersToCancel.size(); ++i) {
+ SubresourceLoader* loader = loadersToCancel[i];
+ didFail(loader, true);
}
- return false;
}
-void Loader::Host::servePendingRequests(Loader::Priority minimumPriority)
+void Loader::willSendRequest(SubresourceLoader* loader, ResourceRequest&, const ResourceResponse&)
{
- LOG(ResourceLoading, "Host::servePendingRequests '%s'", m_name.string().latin1().data());
- if (cache()->loader()->isSuspendingPendingRequests()) {
- LOG(ResourceLoading, "...isSuspendingPendingRequests");
+ RequestMap::iterator i = m_requestsLoading.find(loader);
+ if (i == m_requestsLoading.end())
return;
- }
-
- bool serveMore = true;
- for (int priority = High; priority >= minimumPriority && serveMore; --priority)
- servePendingRequests(m_requestsPending[priority], serveMore);
-}
-
-void Loader::Host::servePendingRequests(RequestQueue& requestsPending, bool& serveLowerPriority)
-{
- while (!requestsPending.isEmpty()) {
- Request* request = requestsPending.first();
- CachedResourceLoader* cachedResourceLoader = request->cachedResourceLoader();
- bool resourceIsCacheValidator = request->cachedResource()->isCacheValidator();
-
- // For named hosts - which are only http(s) hosts - we should always enforce the connection limit.
- // For non-named hosts - everything but http(s) - we should only enforce the limit if the document isn't done parsing
- // and we don't know all stylesheets yet.
- bool shouldLimitRequests = !m_name.isNull() || cachedResourceLoader->document()->parsing() || !cachedResourceLoader->document()->haveStylesheetsLoaded();
- if (shouldLimitRequests && m_requestsLoading.size() + m_nonCachedRequestsInFlight >= m_maxRequestsInFlight) {
- serveLowerPriority = false;
- return;
- }
- requestsPending.removeFirst();
-
- ResourceRequest resourceRequest(request->cachedResource()->url());
- resourceRequest.setTargetType(cachedResourceTypeToTargetType(request->cachedResource()->type()));
-
- if (!request->cachedResource()->accept().isEmpty())
- resourceRequest.setHTTPAccept(request->cachedResource()->accept());
-
- // Do not set the referrer or HTTP origin here. That's handled by SubresourceLoader::create.
-
- if (resourceIsCacheValidator) {
- CachedResource* resourceToRevalidate = request->cachedResource()->resourceToRevalidate();
- ASSERT(resourceToRevalidate->canUseCacheValidator());
- ASSERT(resourceToRevalidate->isLoaded());
- const String& lastModified = resourceToRevalidate->response().httpHeaderField("Last-Modified");
- const String& eTag = resourceToRevalidate->response().httpHeaderField("ETag");
- if (!lastModified.isEmpty() || !eTag.isEmpty()) {
- ASSERT(cachedResourceLoader->cachePolicy() != CachePolicyReload);
- if (cachedResourceLoader->cachePolicy() == CachePolicyRevalidate)
- resourceRequest.setHTTPHeaderField("Cache-Control", "max-age=0");
- if (!lastModified.isEmpty())
- resourceRequest.setHTTPHeaderField("If-Modified-Since", lastModified);
- if (!eTag.isEmpty())
- resourceRequest.setHTTPHeaderField("If-None-Match", eTag);
- }
- }
-
-#if ENABLE(LINK_PREFETCH)
- if (request->cachedResource()->type() == CachedResource::LinkPrefetch)
- resourceRequest.setHTTPHeaderField("Purpose", "prefetch");
-#endif
-
- RefPtr<SubresourceLoader> loader = SubresourceLoader::create(cachedResourceLoader->document()->frame(),
- this, resourceRequest, request->shouldDoSecurityCheck(), request->sendResourceLoadCallbacks());
- if (loader) {
- m_requestsLoading.add(loader.release(), request);
- request->cachedResource()->setRequestedFromNetworkingLayer();
- LOG(ResourceLoading, "Host '%s' loading '%s'. Current count %d", m_name.string().latin1().data(), request->cachedResource()->url().latin1().data(), m_requestsLoading.size());
- } else {
- // FIXME: What if resources in other frames were waiting for this revalidation?
- LOG(ResourceLoading, "Host '%s' cannot start loading '%s'", m_name.string().latin1().data(), request->cachedResource()->url().latin1().data());
- CachedResource* resource = request->cachedResource();
- cachedResourceLoader->decrementRequestCount(resource);
- cachedResourceLoader->setLoadInProgress(true);
- if (resource->resourceToRevalidate())
- cache()->revalidationFailed(resource);
- resource->error();
- cachedResourceLoader->setLoadInProgress(false);
- delete request;
- }
- }
+
+ Request* request = i->second;
+ request->cachedResource()->setRequestedFromNetworkingLayer();
}
-void Loader::Host::didFinishLoading(SubresourceLoader* loader)
+void Loader::didFinishLoading(SubresourceLoader* loader)
{
- RefPtr<Host> myProtector(this);
-
RequestMap::iterator i = m_requestsLoading.find(loader);
if (i == m_requestsLoading.end())
return;
@@ -412,34 +191,29 @@ void Loader::Host::didFinishLoading(SubresourceLoader* loader)
CachedResource* resource = request->cachedResource();
ASSERT(!resource->resourceToRevalidate());
- LOG(ResourceLoading, "Host '%s' received %s. Current count %d\n", m_name.string().latin1().data(), resource->url().latin1().data(), m_requestsLoading.size());
+ LOG(ResourceLoading, "Received '%s'.", resource->url().latin1().data());
// If we got a 4xx response, we're pretending to have received a network
// error, so we can't send the successful data() and finish() callbacks.
if (!resource->errorOccurred()) {
cachedResourceLoader->setLoadInProgress(true);
resource->data(loader->resourceData(), true);
- resource->finish();
+ if (!resource->errorOccurred())
+ resource->finish();
}
delete request;
-
- cachedResourceLoader->setLoadInProgress(false);
-
+ cachedResourceLoader->setLoadInProgress(false);
cachedResourceLoader->checkForPendingPreloads();
-
- servePendingRequests();
}
-void Loader::Host::didFail(SubresourceLoader* loader, const ResourceError&)
+void Loader::didFail(SubresourceLoader* loader, const ResourceError&)
{
didFail(loader);
}
-void Loader::Host::didFail(SubresourceLoader* loader, bool cancelled)
+void Loader::didFail(SubresourceLoader* loader, bool cancelled)
{
- RefPtr<Host> myProtector(this);
-
loader->clearClient();
RequestMap::iterator i = m_requestsLoading.find(loader);
@@ -457,14 +231,14 @@ void Loader::Host::didFail(SubresourceLoader* loader, bool cancelled)
CachedResource* resource = request->cachedResource();
- LOG(ResourceLoading, "Host '%s' failed to load %s (cancelled=%d). Current count %d\n", m_name.string().latin1().data(), resource->url().latin1().data(), cancelled, m_requestsLoading.size());
+ LOG(ResourceLoading, "Failed to load '%s' (cancelled=%d).\n", resource->url().latin1().data(), cancelled);
if (resource->resourceToRevalidate())
cache()->revalidationFailed(resource);
if (!cancelled) {
cachedResourceLoader->setLoadInProgress(true);
- resource->error();
+ resource->error(CachedResource::LoadError);
}
cachedResourceLoader->setLoadInProgress(false);
@@ -474,14 +248,10 @@ void Loader::Host::didFail(SubresourceLoader* loader, bool cancelled)
delete request;
cachedResourceLoader->checkForPendingPreloads();
-
- servePendingRequests();
}
-void Loader::Host::didReceiveResponse(SubresourceLoader* loader, const ResourceResponse& response)
+void Loader::didReceiveResponse(SubresourceLoader* loader, const ResourceResponse& response)
{
- RefPtr<Host> protector(this);
-
Request* request = m_requestsLoading.get(loader);
// FIXME: This is a workaround for <rdar://problem/5236843>
@@ -510,7 +280,6 @@ void Loader::Host::didReceiveResponse(SubresourceLoader* loader, const ResourceR
delete request;
- servePendingRequests();
return;
}
// Did not get 304 response, continue as a regular resource load.
@@ -541,10 +310,8 @@ void Loader::Host::didReceiveResponse(SubresourceLoader* loader, const ResourceR
}
}
-void Loader::Host::didReceiveData(SubresourceLoader* loader, const char* data, int size)
+void Loader::didReceiveData(SubresourceLoader* loader, const char* data, int size)
{
- RefPtr<Host> protector(this);
-
Request* request = m_requestsLoading.get(loader);
if (!request)
return;
@@ -554,7 +321,7 @@ void Loader::Host::didReceiveData(SubresourceLoader* loader, const char* data, i
if (resource->errorOccurred())
return;
-
+
if (resource->response().httpStatusCode() >= 400) {
resource->httpStatusCodeError();
return;
@@ -570,10 +337,8 @@ void Loader::Host::didReceiveData(SubresourceLoader* loader, const char* data, i
resource->data(loader->resourceData(), false);
}
-void Loader::Host::didReceiveCachedMetadata(SubresourceLoader* loader, const char* data, int size)
+void Loader::didReceiveCachedMetadata(SubresourceLoader* loader, const char* data, int size)
{
- RefPtr<Host> protector(this);
-
Request* request = m_requestsLoading.get(loader);
if (!request)
return;
@@ -583,41 +348,5 @@ void Loader::Host::didReceiveCachedMetadata(SubresourceLoader* loader, const cha
resource->setSerializedCachedMetadata(data, size);
}
-
-void Loader::Host::cancelPendingRequests(RequestQueue& requestsPending, CachedResourceLoader* cachedResourceLoader)
-{
- RequestQueue remaining;
- RequestQueue::iterator end = requestsPending.end();
- for (RequestQueue::iterator it = requestsPending.begin(); it != end; ++it) {
- Request* request = *it;
- if (request->cachedResourceLoader() == cachedResourceLoader) {
- cache()->remove(request->cachedResource());
- cachedResourceLoader->decrementRequestCount(request->cachedResource());
- delete request;
- } else
- remaining.append(request);
- }
- requestsPending.swap(remaining);
-}
-
-void Loader::Host::cancelRequests(CachedResourceLoader* cachedResourceLoader)
-{
- for (unsigned p = 0; p <= High; p++)
- cancelPendingRequests(m_requestsPending[p], cachedResourceLoader);
-
- Vector<SubresourceLoader*, 256> loadersToCancel;
-
- RequestMap::iterator end = m_requestsLoading.end();
- for (RequestMap::iterator i = m_requestsLoading.begin(); i != end; ++i) {
- Request* r = i->second;
- if (r->cachedResourceLoader() == cachedResourceLoader)
- loadersToCancel.append(i->first.get());
- }
-
- for (unsigned i = 0; i < loadersToCancel.size(); ++i) {
- SubresourceLoader* loader = loadersToCancel[i];
- didFail(loader, true);
- }
-}
} //namespace WebCore
diff --git a/WebCore/loader/loader.h b/WebCore/loader/loader.h
index 4d353e0..818f56f 100644
--- a/WebCore/loader/loader.h
+++ b/WebCore/loader/loader.h
@@ -23,94 +23,36 @@
#define loader_h
#include "FrameLoaderTypes.h"
-#include "PlatformString.h"
+#include "SubresourceLoader.h"
#include "SubresourceLoaderClient.h"
-#include "Timer.h"
-#include <wtf/Deque.h>
#include <wtf/HashMap.h>
#include <wtf/Noncopyable.h>
-#include <wtf/text/AtomicString.h>
-#include <wtf/text/AtomicStringImpl.h>
+#include <wtf/RefPtr.h>
namespace WebCore {
class CachedResource;
class CachedResourceLoader;
- class KURL;
class Request;
- class Loader : public Noncopyable {
+ class Loader : public Noncopyable, private SubresourceLoaderClient {
public:
- Loader();
~Loader();
void load(CachedResourceLoader*, CachedResource*, bool incremental = true, SecurityCheckPolicy = DoSecurityCheck, bool sendResourceLoadCallbacks = true);
-
void cancelRequests(CachedResourceLoader*);
-
- enum Priority { VeryLow, Low, Medium, High };
- void servePendingRequests(Priority minimumPriority = VeryLow);
-
- bool isSuspendingPendingRequests() { return m_isSuspendingPendingRequests; }
- void suspendPendingRequests();
- void resumePendingRequests();
-
- void nonCacheRequestInFlight(const KURL&);
- void nonCacheRequestComplete(const KURL&);
private:
- Priority determinePriority(const CachedResource*) const;
- void scheduleServePendingRequests();
-
- void requestTimerFired(Timer<Loader>*);
-
- class Host : public RefCounted<Host>, private SubresourceLoaderClient {
- public:
- static PassRefPtr<Host> create(const AtomicString& name, unsigned maxRequestsInFlight)
- {
- return adoptRef(new Host(name, maxRequestsInFlight));
- }
- ~Host();
-
- const AtomicString& name() const { return m_name; }
- void addRequest(Request*, Priority);
- void nonCacheRequestInFlight();
- void nonCacheRequestComplete();
- void servePendingRequests(Priority minimumPriority = VeryLow);
- void cancelRequests(CachedResourceLoader*);
- bool hasRequests() const;
-
- bool processingResource() const { return m_numResourcesProcessing != 0 || m_nonCachedRequestsInFlight !=0; }
-
- private:
- Host(const AtomicString&, unsigned);
-
- virtual void didReceiveResponse(SubresourceLoader*, const ResourceResponse&);
- virtual void didReceiveData(SubresourceLoader*, const char*, int);
- virtual void didReceiveCachedMetadata(SubresourceLoader*, const char*, int);
- virtual void didFinishLoading(SubresourceLoader*);
- virtual void didFail(SubresourceLoader*, const ResourceError&);
-
- typedef Deque<Request*> RequestQueue;
- void servePendingRequests(RequestQueue& requestsPending, bool& serveLowerPriority);
- void didFail(SubresourceLoader*, bool cancelled = false);
- void cancelPendingRequests(RequestQueue& requestsPending, CachedResourceLoader*);
-
- RequestQueue m_requestsPending[High + 1];
- typedef HashMap<RefPtr<SubresourceLoader>, Request*> RequestMap;
- RequestMap m_requestsLoading;
- const AtomicString m_name;
- const int m_maxRequestsInFlight;
- int m_numResourcesProcessing;
- int m_nonCachedRequestsInFlight;
- };
- typedef HashMap<AtomicStringImpl*, RefPtr<Host> > HostMap;
- HostMap m_hosts;
- RefPtr<Host> m_nonHTTPProtocolHost;
+ virtual void willSendRequest(SubresourceLoader*, ResourceRequest&, const ResourceResponse&);
+ virtual void didReceiveResponse(SubresourceLoader*, const ResourceResponse&);
+ virtual void didReceiveData(SubresourceLoader*, const char*, int);
+ virtual void didReceiveCachedMetadata(SubresourceLoader*, const char*, int);
+ virtual void didFinishLoading(SubresourceLoader*);
+ virtual void didFail(SubresourceLoader*, const ResourceError&);
+ void didFail(SubresourceLoader*, bool cancelled = false);
- Timer<Loader> m_requestTimer;
-
- bool m_isSuspendingPendingRequests;
+ typedef HashMap<RefPtr<SubresourceLoader>, Request*> RequestMap;
+ RequestMap m_requestsLoading;
};
}
diff --git a/WebCore/manual-tests/compositing/caret-in-compositing-frame.html b/WebCore/manual-tests/compositing/caret-in-compositing-frame.html
new file mode 100644
index 0000000..703f3b2
--- /dev/null
+++ b/WebCore/manual-tests/compositing/caret-in-compositing-frame.html
@@ -0,0 +1,7 @@
+<style type="text/css" media="screen">
+ iframe {
+ border: 1px solid black;
+ width: 400px;
+ }
+</style>
+<iframe src="resources/editable-compositing-subframe.html" scrolling="no"></iframe>
diff --git a/WebCore/manual-tests/compositing/resources/editable-compositing-subframe.html b/WebCore/manual-tests/compositing/resources/editable-compositing-subframe.html
new file mode 100644
index 0000000..24b43e8
--- /dev/null
+++ b/WebCore/manual-tests/compositing/resources/editable-compositing-subframe.html
@@ -0,0 +1,9 @@
+<style type="text/css" media="screen">
+ #editable {
+ height: 100px;
+ -webkit-transform: translateZ(0px);
+ }
+</style>
+<div id="editable" contenteditable="true">
+The caret should blink correctly when editing this paragraph.
+</div>
diff --git a/WebCore/manual-tests/display-none-option.html b/WebCore/manual-tests/display-none-option.html
new file mode 100644
index 0000000..30071f3
--- /dev/null
+++ b/WebCore/manual-tests/display-none-option.html
@@ -0,0 +1,11 @@
+<p>
+When you click the following &lt;select&gt;, you should see only two options.
+Mac Safari doesn't pass this test yet.
+See <a href="https://bugs.webkit.org/show_bug.cgi?id=8351">Bug 8351</a> for detail.
+
+<p>
+<select>
+ <option>First choice</option>
+ <option style="display: none">You must NOT see this</option>
+ <option>Second choice</option>
+</select>
diff --git a/WebCore/manual-tests/print-onload-with-image.html b/WebCore/manual-tests/print-onload-with-image.html
new file mode 100644
index 0000000..4d34a11
--- /dev/null
+++ b/WebCore/manual-tests/print-onload-with-image.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=UTF-8">
+<title>Print Test</title>
+</head>
+<body onload="window.print()">
+<img src="http://code.google.com/p/chromium/logo?cct=1287781185">
+<H1>Hello, world.</h1>
+<p>
+This webpage should pop up a print dialog.
+</p>
+</body>
+</html>
diff --git a/WebCore/manual-tests/select-scroll.html b/WebCore/manual-tests/select-scroll.html
new file mode 100644
index 0000000..95b8a5a
--- /dev/null
+++ b/WebCore/manual-tests/select-scroll.html
@@ -0,0 +1,34 @@
+<p>
+When you click the following &lt;select&gt;, you should see a scrollbar,
+and should be able to scroll down to see "Z" as the last option.
+See <a href="https://bugs.webkit.org/show_bug.cgi?id=49306">Bug 49306</a> for detail.
+
+<p>
+<select>
+ <option>A</option>
+ <option>B</option>
+ <option>C</option>
+ <option>D</option>
+ <option>E</option>
+ <option>F</option>
+ <option>G</option>
+ <option>H</option>
+ <option>I</option>
+ <option>J</option>
+ <option>K</option>
+ <option>L</option>
+ <option>M</option>
+ <option>N</option>
+ <option>O</option>
+ <option>P</option>
+ <option>Q</option>
+ <option>R</option>
+ <option>S</option>
+ <option>T</option>
+ <option>U</option>
+ <option>V</option>
+ <option>W</option>
+ <option>X</option>
+ <option>Y</option>
+ <option>Z</option>
+</select>
diff --git a/WebCore/manual-tests/svg-deep-clone-to-new-doc.html b/WebCore/manual-tests/svg-deep-clone-to-new-doc.html
new file mode 100644
index 0000000..faf0ef5
--- /dev/null
+++ b/WebCore/manual-tests/svg-deep-clone-to-new-doc.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8" />
+
+ <!-- To run this test: Open this page, close the window, and (hopefully) don't crash.-->
+
+ <script>
+ function gc()
+ {
+ if (window.GCController)
+ GCController.collect();
+ else
+ for (var i = 0; i < 10000; ++i) // Allocate a sufficient number of objects to force a GC.
+ ({});
+ }
+ window.onload = init;
+
+ function init() {
+ var iframe = document.getElementById("iframe");
+ var thesvgdiv = document.getElementById('thediv');
+ var theclone = thesvgdiv.cloneNode(true);
+ iframe.contentDocument.body.appendChild(theclone);
+ setTimeout(function() {
+ iframe.style.display = 'none';
+ iframe.parentNode.removeChild(iframe);
+ gc();
+ window.close();
+ }, 500);
+ }
+ </script>
+</head>
+
+<body>
+ <div>
+ <div id="thediv">
+ <svg id="thesvg" width="12cm" height="3.6cm" viewBox="0 0 1000 300">
+ <defs>
+ <lineargradient id="orange_red" x2="0" y2="1" >
+ <stop stop-color="yellow" />
+ <stop offset="1" stop-color="red" />
+ </lineargradient>
+ </defs>
+ <path id="MyPath" d="M 100 200 C 200 100 300 0 400 100 C 500 200 600 300 700 200 C 800 100 900 100 900 100" fill="none" stroke="red" />
+ <text font-family="Verdana" font-size="72.5" fill="url(#orange_red)" >
+ <textpath xlink:href="#MyPath"> Look mom, SVG in HTML! </textpath>
+ </text>
+ (If you had an HTML5 compliant browser, the previous text would be colored and on a path.)
+ </svg>
+ </div>
+ <div>
+ <iframe id="iframe" width="50%" height="50%"></iframe>
+ </div>
+ </div>
+</body>
+</html> \ No newline at end of file
diff --git a/WebCore/mathml/RenderMathMLFraction.cpp b/WebCore/mathml/RenderMathMLFraction.cpp
index 1000604..1435be7 100644
--- a/WebCore/mathml/RenderMathMLFraction.cpp
+++ b/WebCore/mathml/RenderMathMLFraction.cpp
@@ -167,7 +167,7 @@ void RenderMathMLFraction::paint(PaintInfo& info, int tx, int ty)
info.context->restore();
}
-int RenderMathMLFraction::baselinePosition(bool firstLine, LineDirectionMode lineDirection, LinePositionMode linePositionMode) const
+int RenderMathMLFraction::baselinePosition(FontBaseline, bool firstLine, LineDirectionMode lineDirection, LinePositionMode linePositionMode) const
{
if (firstChild() && firstChild()->isRenderMathMLBlock()) {
RenderMathMLBlock* numerator = toRenderMathMLBlock(firstChild());
@@ -177,7 +177,7 @@ int RenderMathMLFraction::baselinePosition(bool firstLine, LineDirectionMode lin
// a good guess.
return numerator->offsetHeight() + style()->fontSize() / 3;
}
- return RenderBlock::baselinePosition(firstLine, lineDirection, linePositionMode);
+ return RenderBlock::baselinePosition(AlphabeticBaseline, firstLine, lineDirection, linePositionMode);
}
}
diff --git a/WebCore/mathml/RenderMathMLFraction.h b/WebCore/mathml/RenderMathMLFraction.h
index d0f3fe0..8a3a9ed 100644
--- a/WebCore/mathml/RenderMathMLFraction.h
+++ b/WebCore/mathml/RenderMathMLFraction.h
@@ -38,7 +38,7 @@ public:
RenderMathMLFraction(Element* fraction);
virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0);
virtual void updateFromElement();
- virtual int baselinePosition(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
+ virtual int baselinePosition(FontBaseline, bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
virtual void paint(PaintInfo&, int tx, int ty);
protected:
virtual void layout();
diff --git a/WebCore/mathml/RenderMathMLOperator.cpp b/WebCore/mathml/RenderMathMLOperator.cpp
index 9f35480..72c997b 100644
--- a/WebCore/mathml/RenderMathMLOperator.cpp
+++ b/WebCore/mathml/RenderMathMLOperator.cpp
@@ -332,11 +332,11 @@ RenderBlock* RenderMathMLOperator::createGlyph(UChar glyph, int size, int charRe
return container;
}
-int RenderMathMLOperator::baselinePosition(bool firstLine, LineDirectionMode lineDirection, LinePositionMode linePositionMode) const
+int RenderMathMLOperator::baselinePosition(FontBaseline, bool firstLine, LineDirectionMode lineDirection, LinePositionMode linePositionMode) const
{
if (m_isStacked)
return m_stretchHeight * 2 / 3 - (m_stretchHeight - static_cast<int>(m_stretchHeight / gOperatorExpansion)) / 2;
- return RenderBlock::baselinePosition(firstLine, lineDirection, linePositionMode);
+ return RenderBlock::baselinePosition(AlphabeticBaseline, firstLine, lineDirection, linePositionMode);
}
}
diff --git a/WebCore/mathml/RenderMathMLOperator.h b/WebCore/mathml/RenderMathMLOperator.h
index 7091b34..6501494 100644
--- a/WebCore/mathml/RenderMathMLOperator.h
+++ b/WebCore/mathml/RenderMathMLOperator.h
@@ -41,7 +41,7 @@ public:
virtual void stretchToHeight(int pixelHeight);
virtual void updateFromElement();
virtual bool isChildAllowed(RenderObject*, RenderStyle*) const;
- virtual int baselinePosition(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
+ virtual int baselinePosition(FontBaseline, bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
protected:
virtual void layout();
diff --git a/WebCore/mathml/RenderMathMLRow.cpp b/WebCore/mathml/RenderMathMLRow.cpp
index ae911fc..ad54846 100644
--- a/WebCore/mathml/RenderMathMLRow.cpp
+++ b/WebCore/mathml/RenderMathMLRow.cpp
@@ -119,15 +119,15 @@ void RenderMathMLRow::layout()
}
-int RenderMathMLRow::baselinePosition(bool firstLine, LineDirectionMode direction, LinePositionMode linePositionMode) const
+int RenderMathMLRow::baselinePosition(FontBaseline, bool firstLine, LineDirectionMode direction, LinePositionMode linePositionMode) const
{
if (firstChild() && firstChild()->isRenderMathMLBlock()) {
RenderMathMLBlock* block = toRenderMathMLBlock(firstChild());
if (block->isRenderMathMLOperator())
- return block->y() + block->baselinePosition(firstLine, direction, linePositionMode);
+ return block->y() + block->baselinePosition(AlphabeticBaseline, firstLine, direction, linePositionMode);
}
- return RenderBlock::baselinePosition(firstLine, direction, linePositionMode);
+ return RenderBlock::baselinePosition(AlphabeticBaseline, firstLine, direction, linePositionMode);
}
}
diff --git a/WebCore/mathml/RenderMathMLRow.h b/WebCore/mathml/RenderMathMLRow.h
index c877561..62a0d09 100644
--- a/WebCore/mathml/RenderMathMLRow.h
+++ b/WebCore/mathml/RenderMathMLRow.h
@@ -37,7 +37,7 @@ public:
RenderMathMLRow(Node* container);
virtual bool isRenderMathMLRow() const { return true; }
virtual int nonOperatorHeight() const;
- virtual int baselinePosition(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
+ virtual int baselinePosition(FontBaseline, bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
virtual void stretchToHeight(int) {}
protected:
virtual void layout();
diff --git a/WebCore/mathml/RenderMathMLSubSup.cpp b/WebCore/mathml/RenderMathMLSubSup.cpp
index 6c9c6b9..f4ed506 100644
--- a/WebCore/mathml/RenderMathMLSubSup.cpp
+++ b/WebCore/mathml/RenderMathMLSubSup.cpp
@@ -173,7 +173,7 @@ void RenderMathMLSubSup::layout()
}
}
-int RenderMathMLSubSup::baselinePosition(bool firstLine, LineDirectionMode direction, LinePositionMode linePositionMode) const
+int RenderMathMLSubSup::baselinePosition(FontBaseline, bool firstLine, LineDirectionMode direction, LinePositionMode linePositionMode) const
{
RenderObject* base = firstChild();
if (!base)
@@ -194,13 +194,13 @@ int RenderMathMLSubSup::baselinePosition(bool firstLine, LineDirectionMode direc
// FIXME: The last bit of this calculation should be more exact. Why is the 2-3px scaled for zoom necessary?
// The baseline is top spacing of the base + the baseline of the base + adjusted space for zoom
float zoomFactor = style()->effectiveZoom();
- return topAdjust + box->baselinePosition(firstLine, direction, linePositionMode) + static_cast<int>((zoomFactor > 1.25 ? 2 : 3) * zoomFactor);
+ return topAdjust + box->baselinePosition(AlphabeticBaseline, firstLine, direction, linePositionMode) + static_cast<int>((zoomFactor > 1.25 ? 2 : 3) * zoomFactor);
}
break;
case Sup:
case Sub:
RenderBoxModelObject* box = toRenderBoxModelObject(base);
- baseline = box->baselinePosition(firstLine, direction, linePositionMode);
+ baseline = box->baselinePosition(AlphabeticBaseline, firstLine, direction, linePositionMode);
break;
}
diff --git a/WebCore/mathml/RenderMathMLSubSup.h b/WebCore/mathml/RenderMathMLSubSup.h
index 3e62eb0..7a9d310 100644
--- a/WebCore/mathml/RenderMathMLSubSup.h
+++ b/WebCore/mathml/RenderMathMLSubSup.h
@@ -41,7 +41,7 @@ public:
virtual bool hasBase() const { return true; }
virtual int nonOperatorHeight() const;
virtual void stretchToHeight(int pixelHeight);
- virtual int baselinePosition(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
+ virtual int baselinePosition(FontBaseline, bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
protected:
virtual void layout();
diff --git a/WebCore/mathml/RenderMathMLUnderOver.cpp b/WebCore/mathml/RenderMathMLUnderOver.cpp
index a76f6b1..a3de697 100644
--- a/WebCore/mathml/RenderMathMLUnderOver.cpp
+++ b/WebCore/mathml/RenderMathMLUnderOver.cpp
@@ -158,7 +158,7 @@ void RenderMathMLUnderOver::layout()
if (!over->firstChild()->isBoxModelObject())
break;
- int overSpacing = static_cast<int>(gOverSpacingAdjustment * (getOffsetHeight(over) - toRenderBoxModelObject(over->firstChild())->baselinePosition(true, HorizontalLine)));
+ int overSpacing = static_cast<int>(gOverSpacingAdjustment * (getOffsetHeight(over) - toRenderBoxModelObject(over->firstChild())->baselinePosition(AlphabeticBaseline, true, HorizontalLine)));
// base row wrapper
base = over->nextSibling();
@@ -188,7 +188,7 @@ void RenderMathMLUnderOver::layout()
// FIXME: We need to look at the space between a single maximum height of
// the line boxes and the baseline and squeeze them together
- int underSpacing = baseHeight - toRenderBoxModelObject(base)->baselinePosition(true, HorizontalLine);
+ int underSpacing = baseHeight - toRenderBoxModelObject(base)->baselinePosition(AlphabeticBaseline, true, HorizontalLine);
// adjust the base's intrusion into the under
RenderObject* under = lastChild();
@@ -209,7 +209,7 @@ void RenderMathMLUnderOver::layout()
// FIXME: bases that ascend higher than the line box intrude into the over
if (!over->firstChild()->isBoxModelObject())
break;
- int overSpacing = static_cast<int>(gOverSpacingAdjustment * (getOffsetHeight(over) - toRenderBoxModelObject(over->firstChild())->baselinePosition(true, HorizontalLine)));
+ int overSpacing = static_cast<int>(gOverSpacingAdjustment * (getOffsetHeight(over) - toRenderBoxModelObject(over->firstChild())->baselinePosition(AlphabeticBaseline, true, HorizontalLine)));
// base row wrapper
base = over->nextSibling();
@@ -229,7 +229,7 @@ void RenderMathMLUnderOver::layout()
// FIXME: We need to look at the space between a single maximum height of
// the line boxes and the baseline and squeeze them together
- int underSpacing = baseHeight - toRenderBoxModelObject(base)->baselinePosition(true, HorizontalLine);
+ int underSpacing = baseHeight - toRenderBoxModelObject(base)->baselinePosition(AlphabeticBaseline, true, HorizontalLine);
RenderObject* under = lastChild();
if (under && under->firstChild()->isRenderInline() && underSpacing > 0)
@@ -243,11 +243,11 @@ void RenderMathMLUnderOver::layout()
RenderBlock::layout();
}
-int RenderMathMLUnderOver::baselinePosition(bool firstLine, LineDirectionMode direction, LinePositionMode linePositionMode) const
+int RenderMathMLUnderOver::baselinePosition(FontBaseline, bool firstLine, LineDirectionMode direction, LinePositionMode linePositionMode) const
{
RenderObject* current = firstChild();
if (!current)
- return RenderBlock::baselinePosition(firstLine, direction, linePositionMode);
+ return RenderBlock::baselinePosition(AlphabeticBaseline, firstLine, direction, linePositionMode);
int baseline = 0;
switch (m_kind) {
@@ -260,7 +260,7 @@ int RenderMathMLUnderOver::baselinePosition(bool firstLine, LineDirectionMode di
RenderObject* base = current->firstChild();
if (!base || !base->isBoxModelObject())
break;
- baseline += toRenderBoxModelObject(base)->baselinePosition(firstLine, HorizontalLine, linePositionMode);
+ baseline += toRenderBoxModelObject(base)->baselinePosition(AlphabeticBaseline, firstLine, HorizontalLine, linePositionMode);
// added the negative top margin
baseline += current->style()->marginTop().value();
}
@@ -268,7 +268,7 @@ int RenderMathMLUnderOver::baselinePosition(bool firstLine, LineDirectionMode di
case Under:
RenderObject* base = current->firstChild();
if (base && base->isBoxModelObject())
- baseline += toRenderBoxModelObject(base)->baselinePosition(true, HorizontalLine);
+ baseline += toRenderBoxModelObject(base)->baselinePosition(AlphabeticBaseline, true, HorizontalLine);
}
// FIXME: Where is the extra 2-3px adjusted for zoom coming from?
diff --git a/WebCore/mathml/RenderMathMLUnderOver.h b/WebCore/mathml/RenderMathMLUnderOver.h
index 88edea8..fbab72a 100644
--- a/WebCore/mathml/RenderMathMLUnderOver.h
+++ b/WebCore/mathml/RenderMathMLUnderOver.h
@@ -40,7 +40,7 @@ public:
virtual void layout();
virtual bool hasBase() const { return true; }
virtual int nonOperatorHeight() const;
- virtual int baselinePosition(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
+ virtual int baselinePosition(FontBaseline, bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
virtual void stretchToHeight(int pixelHeight);
private:
enum UnderOverType { Under, Over, UnderOver };
diff --git a/WebCore/page/Console.cpp b/WebCore/page/Console.cpp
index 1481ebd..34db538 100644
--- a/WebCore/page/Console.cpp
+++ b/WebCore/page/Console.cpp
@@ -173,6 +173,18 @@ void Console::addMessage(MessageType type, MessageLevel level, PassOwnPtr<Script
if (!acceptNoArguments && !arguments->argumentCount())
return;
+ if (Console::shouldPrintExceptions()) {
+ printSourceURLAndLine(lastCaller.sourceURL(), 0);
+ printMessageSourceAndLevelPrefix(JSMessageSource, level);
+
+ for (unsigned i = 0; i < arguments->argumentCount(); ++i) {
+ String argAsString;
+ if (arguments->argumentAt(i).getString(arguments->globalState(), argAsString))
+ printf(" %s", argAsString.utf8().data());
+ }
+ printf("\n");
+ }
+
String message;
if (arguments->getFirstArgumentAsString(message))
page->chrome()->client()->addMessageToConsole(JSMessageSource, type, level, message, lastCaller.lineNumber(), lastCaller.sourceURL());
@@ -180,19 +192,6 @@ void Console::addMessage(MessageType type, MessageLevel level, PassOwnPtr<Script
#if ENABLE(INSPECTOR)
page->inspectorController()->addMessageToConsole(JSMessageSource, type, level, message, arguments, callStack);
#endif
-
- if (!Console::shouldPrintExceptions())
- return;
-
- printSourceURLAndLine(lastCaller.sourceURL(), 0);
- printMessageSourceAndLevelPrefix(JSMessageSource, level);
-
- for (unsigned i = 0; i < arguments->argumentCount(); ++i) {
- String argAsString;
- if (arguments->argumentAt(i).getString(arguments->globalState(), argAsString))
- printf(" %s", argAsString.utf8().data());
- }
- printf("\n");
}
void Console::debug(PassOwnPtr<ScriptArguments> arguments, PassOwnPtr<ScriptCallStack> callStack)
diff --git a/WebCore/page/DOMWindow.cpp b/WebCore/page/DOMWindow.cpp
index 5f878a5..bfb5b4f 100644
--- a/WebCore/page/DOMWindow.cpp
+++ b/WebCore/page/DOMWindow.cpp
@@ -392,8 +392,8 @@ bool DOMWindow::canShowModalDialogNow(const Frame* frame)
}
DOMWindow::DOMWindow(Frame* frame)
- : m_printDeferred(false),
- m_frame(frame)
+ : m_shouldPrintWhenFinishedLoading(false)
+ , m_frame(frame)
{
}
@@ -892,11 +892,11 @@ void DOMWindow::print()
if (!page)
return;
- if (m_frame->loader()->isLoading()) {
- m_printDeferred = true;
+ if (m_frame->loader()->activeDocumentLoader()->isLoading()) {
+ m_shouldPrintWhenFinishedLoading = true;
return;
}
- m_printDeferred = false;
+ m_shouldPrintWhenFinishedLoading = false;
page->chrome()->print(m_frame);
}
@@ -1583,6 +1583,14 @@ void DOMWindow::releaseEvents()
// Not implemented.
}
+void DOMWindow::finishedLoading()
+{
+ if (m_shouldPrintWhenFinishedLoading) {
+ m_shouldPrintWhenFinishedLoading = false;
+ print();
+ }
+}
+
EventTargetData* DOMWindow::eventTargetData()
{
return &m_eventTargetData;
diff --git a/WebCore/page/DOMWindow.h b/WebCore/page/DOMWindow.h
index 2156791..d87a386 100644
--- a/WebCore/page/DOMWindow.h
+++ b/WebCore/page/DOMWindow.h
@@ -91,7 +91,6 @@ namespace WebCore {
virtual DOMWindow* toDOMWindow() { return this; }
virtual ScriptExecutionContext* scriptExecutionContext() const;
- bool printDeferred() const { return m_printDeferred; }
Frame* frame() const { return m_frame; }
void disconnectFrame();
@@ -366,6 +365,8 @@ namespace WebCore {
void captureEvents();
void releaseEvents();
+ void finishedLoading();
+
// These methods are used for GC marking. See JSDOMWindow::markChildren(MarkStack&) in
// JSDOMWindowCustom.cpp.
Screen* optionalScreen() const { return m_screen.get(); }
@@ -410,7 +411,7 @@ namespace WebCore {
RefPtr<SecurityOrigin> m_securityOrigin;
KURL m_url;
- bool m_printDeferred;
+ bool m_shouldPrintWhenFinishedLoading;
Frame* m_frame;
mutable RefPtr<Screen> m_screen;
mutable RefPtr<DOMSelection> m_selection;
diff --git a/WebCore/page/DOMWindow.idl b/WebCore/page/DOMWindow.idl
index cea4710..6222983 100644
--- a/WebCore/page/DOMWindow.idl
+++ b/WebCore/page/DOMWindow.idl
@@ -144,7 +144,7 @@ module window {
// DOM Level 2 Style Interface
CSSStyleDeclaration getComputedStyle(in Element element,
- in DOMString pseudoElement);
+ in [ConvertUndefinedOrNullToNullString] DOMString pseudoElement);
// WebKit extensions
#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
@@ -363,9 +363,6 @@ module window {
attribute CSSPageRuleConstructor CSSPageRule;
attribute CSSStyleRuleConstructor CSSStyleRule;
- attribute CSSVariablesRuleConstructor CSSVariablesRule;
- attribute CSSVariablesDeclarationConstructor CSSVariablesDeclaration;
-
attribute CSSStyleDeclarationConstructor CSSStyleDeclaration;
attribute MediaListConstructor MediaList;
attribute CounterConstructor Counter;
diff --git a/WebCore/page/DragController.cpp b/WebCore/page/DragController.cpp
index 2e7d241..eb90f85 100644
--- a/WebCore/page/DragController.cpp
+++ b/WebCore/page/DragController.cpp
@@ -295,6 +295,9 @@ bool DragController::tryDocumentDrag(DragData* dragData, DragDestinationAction a
if (!m_documentUnderMouse)
return false;
+ if (m_dragInitiator && !m_documentUnderMouse->securityOrigin()->canReceiveDragData(m_dragInitiator->securityOrigin()))
+ return false;
+
m_isHandlingDrag = false;
if (actionMask & DragDestinationActionDHTML) {
m_isHandlingDrag = tryDHTMLDrag(dragData, operation);
diff --git a/WebCore/page/EventHandler.cpp b/WebCore/page/EventHandler.cpp
index e12d9eb..22c2ecc 100644
--- a/WebCore/page/EventHandler.cpp
+++ b/WebCore/page/EventHandler.cpp
@@ -607,12 +607,12 @@ void EventHandler::updateSelectionForMouseDrag(Node* targetNode, const IntPoint&
if (!targetNode)
return;
+ if (!canMouseDragExtendSelect(targetNode))
+ return;
+
RenderObject* targetRenderer = targetNode->renderer();
if (!targetRenderer)
return;
-
- if (!canMouseDragExtendSelect(targetNode))
- return;
VisiblePosition targetPosition(targetRenderer->positionForPoint(localPoint));
@@ -1787,8 +1787,6 @@ void EventHandler::updateMouseEventTargetNode(Node* targetNode, const PlatformMo
// If the target node is a text node, dispatch on the parent node - rdar://4196646
if (result && result->isTextNode())
result = result->parentNode();
- if (result)
- result = result->shadowAncestorNode();
}
m_nodeUnderMouse = result;
#if ENABLE(SVG)
@@ -2373,7 +2371,7 @@ void EventHandler::handleKeyboardSelectionMovement(KeyboardEvent* event)
if (!event)
return;
- String key = event->keyIdentifier();
+ const String& key = event->keyIdentifier();
bool isShifted = event->getModifierState("Shift");
bool isOptioned = event->getModifierState("Alt");
bool isCommanded = event->getModifierState("Meta");
diff --git a/WebCore/page/EventSource.cpp b/WebCore/page/EventSource.cpp
index 5e3141d..a7c715a 100644
--- a/WebCore/page/EventSource.cpp
+++ b/WebCore/page/EventSource.cpp
@@ -116,9 +116,6 @@ void EventSource::connect()
m_loader = ThreadableLoader::create(scriptExecutionContext(), this, request, options);
m_requestInFlight = true;
-
- if (!scriptExecutionContext()->isWorkerContext())
- cache()->loader()->nonCacheRequestInFlight(m_url);
}
void EventSource::endRequest()
@@ -128,9 +125,6 @@ void EventSource::endRequest()
if (!m_failSilently)
dispatchEvent(Event::create(eventNames().errorEvent, false, false));
- if (!scriptExecutionContext()->isWorkerContext())
- cache()->loader()->nonCacheRequestComplete(m_url);
-
if (m_state != CLOSED)
scheduleReconnect();
else
diff --git a/WebCore/page/FocusController.cpp b/WebCore/page/FocusController.cpp
index 8ee5dff..2866019 100644
--- a/WebCore/page/FocusController.cpp
+++ b/WebCore/page/FocusController.cpp
@@ -464,25 +464,25 @@ void FocusController::findFocusableNodeInDirection(Node* outer, Node* focusedNod
candidate.enclosingScrollableBox = candidateParent.node;
} else if (!isInRootDocument(outer)) {
- if (Document* document = static_cast<Document*>(outer->parent()))
+ if (Document* document = static_cast<Document*>(outer->parentNode()))
candidate.enclosingScrollableBox = static_cast<Node*>(document->ownerElement());
- } else if (isScrollableContainerNode(outer->parent()))
- candidate.enclosingScrollableBox = outer->parent();
+ } else if (isScrollableContainerNode(outer->parentNode()))
+ candidate.enclosingScrollableBox = outer->parentNode();
// Get distance and alignment from current candidate.
distanceDataForNode(direction, focusedNode, candidate);
// Bail out if distance is maximum.
if (candidate.distance == maxDistance()) {
- node = node->traverseNextNode(outer->parent());
+ node = node->traverseNextNode(outer->parentNode());
continue;
}
updateFocusCandidateIfCloser(focusedNode, candidate, closest);
}
- node = node->traverseNextNode(outer->parent());
+ node = node->traverseNextNode(outer->parentNode());
}
}
diff --git a/WebCore/page/Frame.cpp b/WebCore/page/Frame.cpp
index c38a32c..a97fcb5 100644
--- a/WebCore/page/Frame.cpp
+++ b/WebCore/page/Frame.cpp
@@ -736,16 +736,9 @@ void Frame::transferChildFrameToNewDocument()
didTransfer = true;
}
- // Update the frame tree.
- Frame* oldParent = tree()->parent();
- if (oldParent != newParent) {
- if (oldParent)
- oldParent->tree()->removeChild(this);
- if (newParent) {
- newParent->tree()->appendChild(this);
- m_ownerElement->setName();
- }
- didTransfer = true;
+ if (newParent) {
+ // Update the frame tree.
+ didTransfer = newParent->tree()->transferChild(this);
}
// Avoid unnecessary calls to client and frame subtree if the frame ended
@@ -973,17 +966,14 @@ void Frame::setPageAndTextZoomFactors(float pageZoomFactor, float textZoomFactor
}
}
-void Frame::scalePage(float scale)
+void Frame::scalePage(float scale, const IntPoint& origin)
{
- if (m_pageScaleFactor == scale)
- return;
-
- m_pageScaleFactor = scale;
-
Document* document = this->document();
if (!document)
return;
+ m_pageScaleFactor = scale;
+
if (document->renderer())
document->renderer()->setNeedsLayout(true);
@@ -992,6 +982,7 @@ void Frame::scalePage(float scale)
if (FrameView* view = this->view()) {
if (document->renderer() && document->renderer()->needsLayout() && view->didFirstLayout())
view->layout();
+ view->setScrollPosition(origin);
}
}
diff --git a/WebCore/page/Frame.h b/WebCore/page/Frame.h
index 832a3c2..7fb9df5 100644
--- a/WebCore/page/Frame.h
+++ b/WebCore/page/Frame.h
@@ -144,7 +144,7 @@ namespace WebCore {
float textZoomFactor() const { return m_textZoomFactor; }
void setPageAndTextZoomFactors(float pageZoomFactor, float textZoomFactor);
- void scalePage(float scale);
+ void scalePage(float scale, const IntPoint& origin);
float pageScaleFactor() const { return m_pageScaleFactor; }
#if ENABLE(ORIENTATION_EVENTS)
diff --git a/WebCore/page/FrameTree.cpp b/WebCore/page/FrameTree.cpp
index 0e15379..f3f32ec 100644
--- a/WebCore/page/FrameTree.cpp
+++ b/WebCore/page/FrameTree.cpp
@@ -63,11 +63,35 @@ Frame* FrameTree::parent(bool checkForDisconnectedFrame) const
return m_parent;
}
+bool FrameTree::transferChild(PassRefPtr<Frame> child)
+{
+ Frame* oldParent = child->tree()->parent();
+ if (oldParent == m_thisFrame)
+ return false; // |child| is already a child of m_thisFrame.
+
+ if (oldParent)
+ oldParent->tree()->removeChild(child.get());
+
+ ASSERT(child->page() == m_thisFrame->page());
+ child->tree()->m_parent = m_thisFrame;
+
+ // We need to ensure that the child still has a unique frame name with respect to its new parent.
+ child->tree()->setName(child->tree()->m_name);
+
+ actuallyAppendChild(child); // Note, on return |child| is null.
+ return true;
+}
+
void FrameTree::appendChild(PassRefPtr<Frame> child)
{
ASSERT(child->page() == m_thisFrame->page());
child->tree()->m_parent = m_thisFrame;
+ actuallyAppendChild(child); // Note, on return |child| is null.
+}
+void FrameTree::actuallyAppendChild(PassRefPtr<Frame> child)
+{
+ ASSERT(child->tree()->m_parent == m_thisFrame);
Frame* oldLast = m_lastChild;
m_lastChild = child.get();
diff --git a/WebCore/page/FrameTree.h b/WebCore/page/FrameTree.h
index 58b7c1f..94b8d16 100644
--- a/WebCore/page/FrameTree.h
+++ b/WebCore/page/FrameTree.h
@@ -57,6 +57,7 @@ namespace WebCore {
Frame* traversePreviousWithWrap(bool) const;
void appendChild(PassRefPtr<Frame>);
+ bool transferChild(PassRefPtr<Frame>);
void detachFromParent() { m_parent = 0; }
void removeChild(Frame*);
@@ -70,6 +71,7 @@ namespace WebCore {
private:
Frame* deepLastChild() const;
+ void actuallyAppendChild(PassRefPtr<Frame>);
Frame* m_thisFrame;
diff --git a/WebCore/page/FrameView.cpp b/WebCore/page/FrameView.cpp
index bf6bd55..5374487 100644
--- a/WebCore/page/FrameView.cpp
+++ b/WebCore/page/FrameView.cpp
@@ -1880,6 +1880,9 @@ IntRect FrameView::windowClipRect(bool clipToContents) const
{
ASSERT(m_frame->view() == this);
+ if (paintsEntireContents())
+ return IntRect(IntPoint(0, 0), contentsSize());
+
// Set our clip rect to be our contents.
IntRect clipRect = contentsToWindow(visibleContentRect(!clipToContents));
if (!m_frame || !m_frame->document() || !m_frame->document()->ownerElement())
diff --git a/WebCore/page/Geolocation.cpp b/WebCore/page/Geolocation.cpp
index de01b66..65c8902 100644
--- a/WebCore/page/Geolocation.cpp
+++ b/WebCore/page/Geolocation.cpp
@@ -64,7 +64,7 @@ static PassRefPtr<Geoposition> createGeoposition(GeolocationPosition* position)
RefPtr<Coordinates> coordinates = Coordinates::create(position->latitude(), position->longitude(), position->canProvideAltitude(), position->altitude(),
position->accuracy(), position->canProvideAltitudeAccuracy(), position->altitudeAccuracy(),
position->canProvideHeading(), position->heading(), position->canProvideSpeed(), position->speed());
- return Geoposition::create(coordinates.release(), position->timestamp());
+ return Geoposition::create(coordinates.release(), convertSecondsToDOMTimeStamp(position->timestamp()));
}
static PassRefPtr<PositionError> createPositionError(GeolocationError* error)
@@ -211,7 +211,7 @@ bool Geolocation::Watchers::isEmpty() const
return m_idToNotifierMap.isEmpty();
}
-void Geolocation::Watchers::getNotifiersVector(Vector<RefPtr<GeoNotifier> >& copy) const
+void Geolocation::Watchers::getNotifiersVector(GeoNotifierVector& copy) const
{
copyValuesToVector(m_idToNotifierMap, copy);
}
@@ -393,7 +393,7 @@ bool Geolocation::haveSuitableCachedPosition(PositionOptions* options)
return true;
if (!options->maximumAge())
return false;
- DOMTimeStamp currentTimeMillis = currentTime() * 1000.0;
+ DOMTimeStamp currentTimeMillis = convertSecondsToDOMTimeStamp(currentTime());
return m_positionCache->cachedPosition()->timestamp() > currentTimeMillis - options->maximumAge();
}
@@ -456,10 +456,10 @@ void Geolocation::setIsAllowed(bool allowed)
makeCachedPositionCallbacks();
}
-void Geolocation::sendError(Vector<RefPtr<GeoNotifier> >& notifiers, PositionError* error)
+void Geolocation::sendError(GeoNotifierVector& notifiers, PositionError* error)
{
- Vector<RefPtr<GeoNotifier> >::const_iterator end = notifiers.end();
- for (Vector<RefPtr<GeoNotifier> >::const_iterator it = notifiers.begin(); it != end; ++it) {
+ GeoNotifierVector::const_iterator end = notifiers.end();
+ for (GeoNotifierVector::const_iterator it = notifiers.begin(); it != end; ++it) {
RefPtr<GeoNotifier> notifier = *it;
if (notifier->m_errorCallback)
@@ -467,10 +467,10 @@ void Geolocation::sendError(Vector<RefPtr<GeoNotifier> >& notifiers, PositionErr
}
}
-void Geolocation::sendPosition(Vector<RefPtr<GeoNotifier> >& notifiers, Geoposition* position)
+void Geolocation::sendPosition(GeoNotifierVector& notifiers, Geoposition* position)
{
- Vector<RefPtr<GeoNotifier> >::const_iterator end = notifiers.end();
- for (Vector<RefPtr<GeoNotifier> >::const_iterator it = notifiers.begin(); it != end; ++it) {
+ GeoNotifierVector::const_iterator end = notifiers.end();
+ for (GeoNotifierVector::const_iterator it = notifiers.begin(); it != end; ++it) {
RefPtr<GeoNotifier> notifier = *it;
ASSERT(notifier->m_successCallback);
@@ -478,10 +478,10 @@ void Geolocation::sendPosition(Vector<RefPtr<GeoNotifier> >& notifiers, Geoposit
}
}
-void Geolocation::stopTimer(Vector<RefPtr<GeoNotifier> >& notifiers)
+void Geolocation::stopTimer(GeoNotifierVector& notifiers)
{
- Vector<RefPtr<GeoNotifier> >::const_iterator end = notifiers.end();
- for (Vector<RefPtr<GeoNotifier> >::const_iterator it = notifiers.begin(); it != end; ++it) {
+ GeoNotifierVector::const_iterator end = notifiers.end();
+ for (GeoNotifierVector::const_iterator it = notifiers.begin(); it != end; ++it) {
RefPtr<GeoNotifier> notifier = *it;
notifier->m_timer.stop();
}
@@ -489,7 +489,7 @@ void Geolocation::stopTimer(Vector<RefPtr<GeoNotifier> >& notifiers)
void Geolocation::stopTimersForOneShots()
{
- Vector<RefPtr<GeoNotifier> > copy;
+ GeoNotifierVector copy;
copyToVector(m_oneShots, copy);
stopTimer(copy);
@@ -497,7 +497,7 @@ void Geolocation::stopTimersForOneShots()
void Geolocation::stopTimersForWatchers()
{
- Vector<RefPtr<GeoNotifier> > copy;
+ GeoNotifierVector copy;
m_watchers.getNotifiersVector(copy);
stopTimer(copy);
@@ -509,16 +509,16 @@ void Geolocation::stopTimers()
stopTimersForWatchers();
}
-void Geolocation::cancelRequests(Vector<RefPtr<GeoNotifier> >& notifiers)
+void Geolocation::cancelRequests(GeoNotifierVector& notifiers)
{
- Vector<RefPtr<GeoNotifier> >::const_iterator end = notifiers.end();
- for (Vector<RefPtr<GeoNotifier> >::const_iterator it = notifiers.begin(); it != end; ++it)
+ GeoNotifierVector::const_iterator end = notifiers.end();
+ for (GeoNotifierVector::const_iterator it = notifiers.begin(); it != end; ++it)
(*it)->setFatalError(PositionError::create(PositionError::POSITION_UNAVAILABLE, framelessDocumentErrorMessage));
}
void Geolocation::cancelAllRequests()
{
- Vector<RefPtr<GeoNotifier> > copy;
+ GeoNotifierVector copy;
copyToVector(m_oneShots, copy);
cancelRequests(copy);
m_watchers.getNotifiersVector(copy);
@@ -529,10 +529,10 @@ void Geolocation::handleError(PositionError* error)
{
ASSERT(error);
- Vector<RefPtr<GeoNotifier> > oneShotsCopy;
+ GeoNotifierVector oneShotsCopy;
copyToVector(m_oneShots, oneShotsCopy);
- Vector<RefPtr<GeoNotifier> > watchersCopy;
+ GeoNotifierVector watchersCopy;
m_watchers.getNotifiersVector(watchersCopy);
// Clear the lists before we make the callbacks, to avoid clearing notifiers
@@ -591,10 +591,10 @@ void Geolocation::makeSuccessCallbacks()
ASSERT(lastPosition());
ASSERT(isAllowed());
- Vector<RefPtr<GeoNotifier> > oneShotsCopy;
+ GeoNotifierVector oneShotsCopy;
copyToVector(m_oneShots, oneShotsCopy);
- Vector<RefPtr<GeoNotifier> > watchersCopy;
+ GeoNotifierVector watchersCopy;
m_watchers.getNotifiersVector(watchersCopy);
// Clear the lists before we make the callbacks, to avoid clearing notifiers
diff --git a/WebCore/page/Geolocation.h b/WebCore/page/Geolocation.h
index 2b60922..a3a79f9 100644
--- a/WebCore/page/Geolocation.h
+++ b/WebCore/page/Geolocation.h
@@ -109,6 +109,9 @@ private:
GeoNotifier(Geolocation*, PassRefPtr<PositionCallback>, PassRefPtr<PositionErrorCallback>, PassRefPtr<PositionOptions>);
};
+ typedef Vector<RefPtr<GeoNotifier> > GeoNotifierVector;
+ typedef HashSet<RefPtr<GeoNotifier> > GeoNotifierSet;
+
class Watchers {
public:
void set(int id, PassRefPtr<GeoNotifier>);
@@ -117,7 +120,7 @@ private:
bool contains(GeoNotifier*) const;
void clear();
bool isEmpty() const;
- void getNotifiersVector(Vector<RefPtr<GeoNotifier> >&) const;
+ void getNotifiersVector(GeoNotifierVector&) const;
private:
typedef HashMap<int, RefPtr<GeoNotifier> > IdToNotifierMap;
typedef HashMap<RefPtr<GeoNotifier>, int> NotifierToIdMap;
@@ -127,15 +130,15 @@ private:
bool hasListeners() const { return !m_oneShots.isEmpty() || !m_watchers.isEmpty(); }
- void sendError(Vector<RefPtr<GeoNotifier> >&, PositionError*);
- void sendPosition(Vector<RefPtr<GeoNotifier> >&, Geoposition*);
+ void sendError(GeoNotifierVector&, PositionError*);
+ void sendPosition(GeoNotifierVector&, Geoposition*);
- static void stopTimer(Vector<RefPtr<GeoNotifier> >&);
+ static void stopTimer(GeoNotifierVector&);
void stopTimersForOneShots();
void stopTimersForWatchers();
void stopTimers();
- void cancelRequests(Vector<RefPtr<GeoNotifier> >&);
+ void cancelRequests(GeoNotifierVector&);
void cancelAllRequests();
void positionChangedInternal();
@@ -165,8 +168,6 @@ private:
bool haveSuitableCachedPosition(PositionOptions*);
void makeCachedPositionCallbacks();
- typedef HashSet<RefPtr<GeoNotifier> > GeoNotifierSet;
-
GeoNotifierSet m_oneShots;
Watchers m_watchers;
Frame* m_frame;
diff --git a/WebCore/page/GeolocationControllerClient.h b/WebCore/page/GeolocationClient.h
index 4648cf8..c646f91 100644
--- a/WebCore/page/GeolocationControllerClient.h
+++ b/WebCore/page/GeolocationClient.h
@@ -23,14 +23,14 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef GeolocationControllerClient_h
-#define GeolocationControllerClient_h
+#ifndef GeolocationClient_h
+#define GeolocationClient_h
namespace WebCore {
class GeolocationPosition;
-class GeolocationControllerClient {
+class GeolocationClient {
public:
virtual void geolocationDestroyed() = 0;
@@ -44,9 +44,9 @@ public:
virtual GeolocationPosition* lastPosition() = 0;
protected:
- virtual ~GeolocationControllerClient() { }
+ virtual ~GeolocationClient() { }
};
} // namespace WebCore
-#endif // GeolocationControllerClient_h
+#endif // GeolocationClient_h
diff --git a/WebCore/page/GeolocationController.cpp b/WebCore/page/GeolocationController.cpp
index 08932a9..db4cc23 100644
--- a/WebCore/page/GeolocationController.cpp
+++ b/WebCore/page/GeolocationController.cpp
@@ -29,11 +29,11 @@
#if ENABLE(CLIENT_BASED_GEOLOCATION)
-#include "GeolocationControllerClient.h"
+#include "GeolocationClient.h"
namespace WebCore {
-GeolocationController::GeolocationController(Page* page, GeolocationControllerClient* client)
+GeolocationController::GeolocationController(Page* page, GeolocationClient* client)
: m_page(page)
, m_client(client)
{
diff --git a/WebCore/page/GeolocationController.h b/WebCore/page/GeolocationController.h
index 57f6e32..2d8106d 100644
--- a/WebCore/page/GeolocationController.h
+++ b/WebCore/page/GeolocationController.h
@@ -35,14 +35,14 @@
namespace WebCore {
-class GeolocationControllerClient;
+class GeolocationClient;
class GeolocationError;
class GeolocationPosition;
class Page;
class GeolocationController : public Noncopyable {
public:
- GeolocationController(Page*, GeolocationControllerClient*);
+ GeolocationController(Page*, GeolocationClient*);
~GeolocationController();
void addObserver(Geolocation*, bool enableHighAccuracy);
@@ -55,7 +55,7 @@ public:
private:
Page* m_page;
- GeolocationControllerClient* m_client;
+ GeolocationClient* m_client;
RefPtr<GeolocationPosition> m_lastPosition;
typedef HashSet<RefPtr<Geolocation> > ObserversSet;
diff --git a/WebCore/page/Page.cpp b/WebCore/page/Page.cpp
index 65c3d90..5453e1e 100644
--- a/WebCore/page/Page.cpp
+++ b/WebCore/page/Page.cpp
@@ -158,7 +158,7 @@ Page::Page(const PageClients& pageClients)
, m_inspectorController(adoptPtr(new InspectorController(this, pageClients.inspectorClient)))
#endif
#if ENABLE(CLIENT_BASED_GEOLOCATION)
- , m_geolocationController(adoptPtr(new GeolocationController(this, pageClients.geolocationControllerClient)))
+ , m_geolocationController(adoptPtr(new GeolocationController(this, pageClients.geolocationClient)))
#endif
#if ENABLE(DEVICE_ORIENTATION)
, m_deviceMotionController(RuntimeEnabledFeatures::deviceMotionEnabled() ? new DeviceMotionController(pageClients.deviceMotionClient) : 0)
@@ -937,7 +937,7 @@ Page::PageClients::PageClients()
, dragClient(0)
, inspectorClient(0)
, pluginHalterClient(0)
- , geolocationControllerClient(0)
+ , geolocationClient(0)
, deviceMotionClient(0)
, deviceOrientationClient(0)
, speechInputClient(0)
diff --git a/WebCore/page/Page.h b/WebCore/page/Page.h
index 89ad7b8..e074814 100644
--- a/WebCore/page/Page.h
+++ b/WebCore/page/Page.h
@@ -54,8 +54,8 @@ namespace WebCore {
class EditorClient;
class FocusController;
class Frame;
+ class GeolocationClient;
class GeolocationController;
- class GeolocationControllerClient;
class HaltablePlugin;
class HistoryItem;
class InspectorClient;
@@ -104,7 +104,7 @@ namespace WebCore {
DragClient* dragClient;
InspectorClient* inspectorClient;
PluginHalterClient* pluginHalterClient;
- GeolocationControllerClient* geolocationControllerClient;
+ GeolocationClient* geolocationClient;
DeviceMotionClient* deviceMotionClient;
DeviceOrientationClient* deviceOrientationClient;
RefPtr<BackForwardList> backForwardClient;
diff --git a/WebCore/page/Performance.cpp b/WebCore/page/Performance.cpp
index c4234a7..4e130ea 100644
--- a/WebCore/page/Performance.cpp
+++ b/WebCore/page/Performance.cpp
@@ -32,8 +32,8 @@
#include "Performance.h"
#include "MemoryInfo.h"
-#include "Navigation.h"
-#include "Timing.h"
+#include "PerformanceNavigation.h"
+#include "PerformanceTiming.h"
#if ENABLE(WEB_TIMING)
@@ -72,18 +72,18 @@ MemoryInfo* Performance::memory() const
return m_memory.get();
}
-Navigation* Performance::navigation() const
+PerformanceNavigation* Performance::navigation() const
{
if (!m_navigation)
- m_navigation = Navigation::create(m_frame);
+ m_navigation = PerformanceNavigation::create(m_frame);
return m_navigation.get();
}
-Timing* Performance::timing() const
+PerformanceTiming* Performance::timing() const
{
if (!m_timing)
- m_timing = Timing::create(m_frame);
+ m_timing = PerformanceTiming::create(m_frame);
return m_timing.get();
}
diff --git a/WebCore/page/Performance.h b/WebCore/page/Performance.h
index 9736fe7..be9e124 100644
--- a/WebCore/page/Performance.h
+++ b/WebCore/page/Performance.h
@@ -34,8 +34,8 @@
#if ENABLE(WEB_TIMING)
#include "MemoryInfo.h"
-#include "Navigation.h"
-#include "Timing.h"
+#include "PerformanceNavigation.h"
+#include "PerformanceTiming.h"
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>
@@ -50,15 +50,15 @@ public:
void disconnectFrame();
MemoryInfo* memory() const;
- Navigation* navigation() const;
- Timing* timing() const;
+ PerformanceNavigation* navigation() const;
+ PerformanceTiming* timing() const;
private:
Performance(Frame*);
mutable RefPtr<MemoryInfo> m_memory;
- mutable RefPtr<Navigation> m_navigation;
- mutable RefPtr<Timing> m_timing;
+ mutable RefPtr<PerformanceNavigation> m_navigation;
+ mutable RefPtr<PerformanceTiming> m_timing;
Frame* m_frame;
};
diff --git a/WebCore/page/Performance.idl b/WebCore/page/Performance.idl
index ffe8b6f..c72f4bc 100644
--- a/WebCore/page/Performance.idl
+++ b/WebCore/page/Performance.idl
@@ -32,8 +32,8 @@ module window {
// See: http://dev.w3.org/2006/webapi/WebTiming/
interface [Conditional=WEB_TIMING, OmitConstructor] Performance {
- readonly attribute Navigation navigation;
- readonly attribute Timing timing;
+ readonly attribute PerformanceNavigation navigation;
+ readonly attribute PerformanceTiming timing;
readonly attribute MemoryInfo memory;
};
diff --git a/WebCore/page/Navigation.cpp b/WebCore/page/PerformanceNavigation.cpp
index ad93b47..d570561 100644
--- a/WebCore/page/Navigation.cpp
+++ b/WebCore/page/PerformanceNavigation.cpp
@@ -29,7 +29,7 @@
*/
#include "config.h"
-#include "Navigation.h"
+#include "PerformanceNavigation.h"
#if ENABLE(WEB_TIMING)
@@ -39,22 +39,22 @@
namespace WebCore {
-Navigation::Navigation(Frame* frame)
+PerformanceNavigation::PerformanceNavigation(Frame* frame)
: m_frame(frame)
{
}
-Frame* Navigation::frame() const
+Frame* PerformanceNavigation::frame() const
{
return m_frame;
}
-void Navigation::disconnectFrame()
+void PerformanceNavigation::disconnectFrame()
{
m_frame = 0;
}
-unsigned short Navigation::type() const
+unsigned short PerformanceNavigation::type() const
{
if (!m_frame)
return NAVIGATE;
@@ -74,7 +74,7 @@ unsigned short Navigation::type() const
}
}
-unsigned short Navigation::redirectCount() const
+unsigned short PerformanceNavigation::redirectCount() const
{
if (!m_frame)
return 0;
diff --git a/WebCore/page/Navigation.h b/WebCore/page/PerformanceNavigation.h
index ba68ff3..2ba9b9c 100644
--- a/WebCore/page/Navigation.h
+++ b/WebCore/page/PerformanceNavigation.h
@@ -28,8 +28,8 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef Navigation_h
-#define Navigation_h
+#ifndef PerformanceNavigation_h
+#define PerformanceNavigation_h
#if ENABLE(WEB_TIMING)
@@ -40,14 +40,14 @@ namespace WebCore {
class Frame;
-class Navigation : public RefCounted<Navigation> {
+class PerformanceNavigation : public RefCounted<PerformanceNavigation> {
public:
- static PassRefPtr<Navigation> create(Frame* frame) { return adoptRef(new Navigation(frame)); }
+ static PassRefPtr<PerformanceNavigation> create(Frame* frame) { return adoptRef(new PerformanceNavigation(frame)); }
Frame* frame() const;
void disconnectFrame();
- enum NavigationType {
+ enum PerformanceNavigationType {
NAVIGATE,
RELOAD,
BACK_FORWARD
@@ -57,7 +57,7 @@ public:
unsigned short redirectCount() const;
private:
- Navigation(Frame*);
+ PerformanceNavigation(Frame*);
Frame* m_frame;
};
@@ -65,4 +65,4 @@ private:
}
#endif // !ENABLE(WEB_TIMING)
-#endif // !defined(Navigation_h)
+#endif // !defined(PerformanceNavigation_h)
diff --git a/WebCore/page/Navigation.idl b/WebCore/page/PerformanceNavigation.idl
index b0227f3..5c06050 100644
--- a/WebCore/page/Navigation.idl
+++ b/WebCore/page/PerformanceNavigation.idl
@@ -31,7 +31,7 @@
module window {
// See: http://dev.w3.org/2006/webapi/WebTiming/
- interface [Conditional=WEB_TIMING, OmitConstructor] Navigation {
+ interface [Conditional=WEB_TIMING, OmitConstructor] PerformanceNavigation {
const unsigned short NAVIGATE = 0;
const unsigned short RELOAD = 1;
const unsigned short BACK_FORWARD = 2;
diff --git a/WebCore/page/Timing.cpp b/WebCore/page/PerformanceTiming.cpp
index 3d98dc2..4fc16da 100644
--- a/WebCore/page/Timing.cpp
+++ b/WebCore/page/PerformanceTiming.cpp
@@ -29,7 +29,7 @@
*/
#include "config.h"
-#include "Timing.h"
+#include "PerformanceTiming.h"
#if ENABLE(WEB_TIMING)
@@ -69,22 +69,22 @@ static double getPossiblySkewedTimeInKnownRange(double skewedTime, double lowerB
return skewedTime;
}
-Timing::Timing(Frame* frame)
+PerformanceTiming::PerformanceTiming(Frame* frame)
: m_frame(frame)
{
}
-Frame* Timing::frame() const
+Frame* PerformanceTiming::frame() const
{
return m_frame;
}
-void Timing::disconnectFrame()
+void PerformanceTiming::disconnectFrame()
{
m_frame = 0;
}
-unsigned long long Timing::navigationStart() const
+unsigned long long PerformanceTiming::navigationStart() const
{
DocumentLoadTiming* timing = documentLoadTiming();
if (!timing)
@@ -93,7 +93,7 @@ unsigned long long Timing::navigationStart() const
return toIntegerMilliseconds(timing->navigationStart);
}
-unsigned long long Timing::unloadEventEnd() const
+unsigned long long PerformanceTiming::unloadEventEnd() const
{
DocumentLoadTiming* timing = documentLoadTiming();
if (!timing)
@@ -102,7 +102,7 @@ unsigned long long Timing::unloadEventEnd() const
return toIntegerMilliseconds(timing->unloadEventEnd);
}
-unsigned long long Timing::redirectStart() const
+unsigned long long PerformanceTiming::redirectStart() const
{
DocumentLoadTiming* timing = documentLoadTiming();
if (!timing)
@@ -111,7 +111,7 @@ unsigned long long Timing::redirectStart() const
return toIntegerMilliseconds(timing->redirectStart);
}
-unsigned long long Timing::redirectEnd() const
+unsigned long long PerformanceTiming::redirectEnd() const
{
DocumentLoadTiming* timing = documentLoadTiming();
if (!timing)
@@ -120,7 +120,7 @@ unsigned long long Timing::redirectEnd() const
return toIntegerMilliseconds(timing->redirectEnd);
}
-unsigned long long Timing::fetchStart() const
+unsigned long long PerformanceTiming::fetchStart() const
{
DocumentLoadTiming* timing = documentLoadTiming();
if (!timing)
@@ -129,7 +129,7 @@ unsigned long long Timing::fetchStart() const
return toIntegerMilliseconds(timing->fetchStart);
}
-unsigned long long Timing::domainLookupStart() const
+unsigned long long PerformanceTiming::domainLookupStart() const
{
ResourceLoadTiming* timing = resourceLoadTiming();
if (!timing)
@@ -144,7 +144,7 @@ unsigned long long Timing::domainLookupStart() const
return resourceLoadTimeRelativeToAbsolute(dnsStart);
}
-unsigned long long Timing::domainLookupEnd() const
+unsigned long long PerformanceTiming::domainLookupEnd() const
{
ResourceLoadTiming* timing = resourceLoadTiming();
if (!timing)
@@ -159,7 +159,7 @@ unsigned long long Timing::domainLookupEnd() const
return resourceLoadTimeRelativeToAbsolute(dnsEnd);
}
-unsigned long long Timing::connectStart() const
+unsigned long long PerformanceTiming::connectStart() const
{
DocumentLoader* loader = documentLoader();
if (!loader)
@@ -183,7 +183,7 @@ unsigned long long Timing::connectStart() const
return resourceLoadTimeRelativeToAbsolute(connectStart);
}
-unsigned long long Timing::connectEnd() const
+unsigned long long PerformanceTiming::connectEnd() const
{
DocumentLoader* loader = documentLoader();
if (!loader)
@@ -207,7 +207,7 @@ unsigned long long Timing::connectEnd() const
return resourceLoadTimeRelativeToAbsolute(connectEnd);
}
-unsigned long long Timing::requestStart() const
+unsigned long long PerformanceTiming::requestStart() const
{
ResourceLoadTiming* timing = resourceLoadTiming();
if (!timing)
@@ -217,12 +217,7 @@ unsigned long long Timing::requestStart() const
return resourceLoadTimeRelativeToAbsolute(timing->sendStart);
}
-unsigned long long Timing::requestEnd() const
-{
- return responseStart();
-}
-
-unsigned long long Timing::responseStart() const
+unsigned long long PerformanceTiming::responseStart() const
{
ResourceLoadTiming* timing = resourceLoadTiming();
if (!timing)
@@ -238,7 +233,7 @@ unsigned long long Timing::responseStart() const
return resourceLoadTimeRelativeToAbsolute(timing->receiveHeadersEnd);
}
-unsigned long long Timing::responseEnd() const
+unsigned long long PerformanceTiming::responseEnd() const
{
DocumentLoadTiming* timing = documentLoadTiming();
if (!timing)
@@ -247,7 +242,7 @@ unsigned long long Timing::responseEnd() const
return toIntegerMilliseconds(timing->responseEnd);
}
-unsigned long long Timing::domLoading() const
+unsigned long long PerformanceTiming::domLoading() const
{
const DocumentTiming* timing = documentTiming();
if (!timing)
@@ -256,7 +251,7 @@ unsigned long long Timing::domLoading() const
return toIntegerMilliseconds(timing->domLoading);
}
-unsigned long long Timing::domInteractive() const
+unsigned long long PerformanceTiming::domInteractive() const
{
const DocumentTiming* timing = documentTiming();
if (!timing)
@@ -265,16 +260,25 @@ unsigned long long Timing::domInteractive() const
return toIntegerMilliseconds(timing->domInteractive);
}
-unsigned long long Timing::domContentLoaded() const
+unsigned long long PerformanceTiming::domContentLoadedStart() const
+{
+ const DocumentTiming* timing = documentTiming();
+ if (!timing)
+ return 0;
+
+ return toIntegerMilliseconds(timing->domContentLoadedStart);
+}
+
+unsigned long long PerformanceTiming::domContentLoadedEnd() const
{
const DocumentTiming* timing = documentTiming();
if (!timing)
return 0;
- return toIntegerMilliseconds(timing->domContentLoaded);
+ return toIntegerMilliseconds(timing->domContentLoadedEnd);
}
-unsigned long long Timing::domComplete() const
+unsigned long long PerformanceTiming::domComplete() const
{
const DocumentTiming* timing = documentTiming();
if (!timing)
@@ -283,7 +287,7 @@ unsigned long long Timing::domComplete() const
return toIntegerMilliseconds(timing->domComplete);
}
-unsigned long long Timing::loadEventStart() const
+unsigned long long PerformanceTiming::loadEventStart() const
{
DocumentLoadTiming* timing = documentLoadTiming();
if (!timing)
@@ -292,7 +296,7 @@ unsigned long long Timing::loadEventStart() const
return toIntegerMilliseconds(timing->loadEventStart);
}
-unsigned long long Timing::loadEventEnd() const
+unsigned long long PerformanceTiming::loadEventEnd() const
{
DocumentLoadTiming* timing = documentLoadTiming();
if (!timing)
@@ -301,7 +305,7 @@ unsigned long long Timing::loadEventEnd() const
return toIntegerMilliseconds(timing->loadEventEnd);
}
-DocumentLoader* Timing::documentLoader() const
+DocumentLoader* PerformanceTiming::documentLoader() const
{
if (!m_frame)
return 0;
@@ -309,7 +313,7 @@ DocumentLoader* Timing::documentLoader() const
return m_frame->loader()->documentLoader();
}
-const DocumentTiming* Timing::documentTiming() const
+const DocumentTiming* PerformanceTiming::documentTiming() const
{
if (!m_frame)
return 0;
@@ -321,7 +325,7 @@ const DocumentTiming* Timing::documentTiming() const
return document->timing();
}
-DocumentLoadTiming* Timing::documentLoadTiming() const
+DocumentLoadTiming* PerformanceTiming::documentLoadTiming() const
{
DocumentLoader* loader = documentLoader();
if (!loader)
@@ -330,7 +334,7 @@ DocumentLoadTiming* Timing::documentLoadTiming() const
return loader->timing();
}
-ResourceLoadTiming* Timing::resourceLoadTiming() const
+ResourceLoadTiming* PerformanceTiming::resourceLoadTiming() const
{
DocumentLoader* loader = documentLoader();
if (!loader)
@@ -339,7 +343,7 @@ ResourceLoadTiming* Timing::resourceLoadTiming() const
return loader->response().resourceLoadTiming();
}
-unsigned long long Timing::resourceLoadTimeRelativeToAbsolute(int relativeSeconds) const
+unsigned long long PerformanceTiming::resourceLoadTimeRelativeToAbsolute(int relativeSeconds) const
{
ASSERT(relativeSeconds >= 0);
ResourceLoadTiming* resourceTiming = resourceLoadTiming();
diff --git a/WebCore/page/Timing.h b/WebCore/page/PerformanceTiming.h
index 3e3485f..5124e2b 100644
--- a/WebCore/page/Timing.h
+++ b/WebCore/page/PerformanceTiming.h
@@ -28,8 +28,8 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef Timing_h
-#define Timing_h
+#ifndef PerformanceTiming_h
+#define PerformanceTiming_h
#if ENABLE(WEB_TIMING)
@@ -44,9 +44,9 @@ struct DocumentTiming;
class Frame;
class ResourceLoadTiming;
-class Timing : public RefCounted<Timing> {
+class PerformanceTiming : public RefCounted<PerformanceTiming> {
public:
- static PassRefPtr<Timing> create(Frame* frame) { return adoptRef(new Timing(frame)); }
+ static PassRefPtr<PerformanceTiming> create(Frame* frame) { return adoptRef(new PerformanceTiming(frame)); }
Frame* frame() const;
void disconnectFrame();
@@ -61,18 +61,18 @@ public:
unsigned long long connectStart() const;
unsigned long long connectEnd() const;
unsigned long long requestStart() const;
- unsigned long long requestEnd() const;
unsigned long long responseStart() const;
unsigned long long responseEnd() const;
unsigned long long domLoading() const;
unsigned long long domInteractive() const;
- unsigned long long domContentLoaded() const;
+ unsigned long long domContentLoadedStart() const;
+ unsigned long long domContentLoadedEnd() const;
unsigned long long domComplete() const;
unsigned long long loadEventStart() const;
unsigned long long loadEventEnd() const;
private:
- Timing(Frame*);
+ PerformanceTiming(Frame*);
const DocumentTiming* documentTiming() const;
DocumentLoader* documentLoader() const;
@@ -86,4 +86,4 @@ private:
}
#endif // !ENABLE(WEB_TIMING)
-#endif // !defined(Timing_h)
+#endif // !defined(PerformanceTiming_h)
diff --git a/WebCore/page/Timing.idl b/WebCore/page/PerformanceTiming.idl
index 00d3e24..49442b0 100644
--- a/WebCore/page/Timing.idl
+++ b/WebCore/page/PerformanceTiming.idl
@@ -31,7 +31,7 @@
module window {
// See: http://dev.w3.org/2006/webapi/WebTiming/
- interface [Conditional=WEB_TIMING, OmitConstructor] Timing {
+ interface [Conditional=WEB_TIMING, OmitConstructor] PerformanceTiming {
readonly attribute unsigned long long navigationStart;
readonly attribute unsigned long long unloadEventEnd;
readonly attribute unsigned long long redirectStart;
@@ -42,12 +42,12 @@ module window {
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 domLoading;
readonly attribute unsigned long long domInteractive;
- readonly attribute unsigned long long domContentLoaded;
+ readonly attribute unsigned long long domContentLoadedStart;
+ readonly attribute unsigned long long domContentLoadedEnd;
readonly attribute unsigned long long domComplete;
readonly attribute unsigned long long loadEventStart;
readonly attribute unsigned long long loadEventEnd;
diff --git a/WebCore/page/SecurityOrigin.cpp b/WebCore/page/SecurityOrigin.cpp
index f0e999f..9ad23c6 100644
--- a/WebCore/page/SecurityOrigin.cpp
+++ b/WebCore/page/SecurityOrigin.cpp
@@ -273,6 +273,18 @@ bool SecurityOrigin::taintsCanvas(const KURL& url) const
return true;
}
+bool SecurityOrigin::canReceiveDragData(const SecurityOrigin* dragInitiator) const
+{
+ // FIXME: Currently we treat data URLs as having a unique origin, contrary to the
+ // current (9/19/2009) draft of the HTML5 specification. We still want to allow
+ // drop across data URLs, so we special case data URLs below. If we change to
+ // match HTML5 w.r.t. data URL security, then we can remove this check.
+ if (m_protocol == "data")
+ return true;
+
+ return canAccess(dragInitiator);
+}
+
bool SecurityOrigin::isAccessWhiteListed(const SecurityOrigin* targetOrigin) const
{
if (OriginAccessWhiteList* list = originAccessMap().get(toString())) {
diff --git a/WebCore/page/SecurityOrigin.h b/WebCore/page/SecurityOrigin.h
index 2a63966..db6c44e 100644
--- a/WebCore/page/SecurityOrigin.h
+++ b/WebCore/page/SecurityOrigin.h
@@ -84,6 +84,11 @@ public:
// drawing an image onto an HTML canvas element with the drawImage API.
bool taintsCanvas(const KURL&) const;
+ // Returns true if this SecurityOrigin can receive drag content from the
+ // initiator. For example, call this function before allowing content to be
+ // dropped onto a target.
+ bool canReceiveDragData(const SecurityOrigin* dragInitiator) const;
+
// Returns true if |document| can display content from the given URL (e.g.,
// in an iframe or as an image). For example, web sites generally cannot
// display content from the user's files system.
diff --git a/WebCore/platform/ContextMenu.h b/WebCore/platform/ContextMenu.h
index 2a2a017..a162fe4 100644
--- a/WebCore/platform/ContextMenu.h
+++ b/WebCore/platform/ContextMenu.h
@@ -92,6 +92,7 @@ namespace WebCore {
};
Vector<ContextMenuItem> contextMenuItemVector(PlatformMenuDescription);
+PlatformMenuDescription platformMenuDescription(Vector<ContextMenuItem>&);
}
diff --git a/WebCore/platform/ContextMenuItem.h b/WebCore/platform/ContextMenuItem.h
index ee9d2a3..063788b 100644
--- a/WebCore/platform/ContextMenuItem.h
+++ b/WebCore/platform/ContextMenuItem.h
@@ -259,6 +259,9 @@ namespace WebCore {
ContextMenuItem(PlatformMenuItemDescription);
ContextMenuItem(ContextMenu* subMenu = 0);
ContextMenuItem(ContextMenuItemType type, ContextMenuAction action, const String& title, ContextMenu* subMenu = 0);
+
+ ContextMenuItem(ContextMenuItemType, ContextMenuAction, const String&, bool enabled, bool checked);
+ ContextMenuItem(ContextMenuAction, const String&, bool enabled, bool checked, Vector<ContextMenuItem>& submenuItems);
#if PLATFORM(GTK)
ContextMenuItem(GtkMenuItem*);
#endif
@@ -277,6 +280,7 @@ namespace WebCore {
PlatformMenuDescription platformSubMenu() const;
void setSubMenu(ContextMenu*);
+ void setSubMenu(Vector<ContextMenuItem>&);
void setChecked(bool = true);
bool checked() const;
diff --git a/WebCore/platform/CrossThreadCopier.h b/WebCore/platform/CrossThreadCopier.h
index 6f7bb25..5eb40ee 100644
--- a/WebCore/platform/CrossThreadCopier.h
+++ b/WebCore/platform/CrossThreadCopier.h
@@ -71,7 +71,8 @@ namespace WebCore {
// Custom copy methods.
template<typename T> struct CrossThreadCopierBase<false, true, T> {
- typedef typename WTF::RemoveTemplate<T, RefPtr>::Type RefCountedType;
+ typedef typename WTF::RemoveTemplate<T, RefPtr>::Type TypeWithoutRefPtr;
+ typedef typename WTF::RemoveTemplate<TypeWithoutRefPtr, PassRefPtr>::Type RefCountedType;
typedef PassRefPtr<RefCountedType> Type;
static Type copy(const T& refPtr)
{
@@ -113,7 +114,8 @@ namespace WebCore {
};
template<typename T> struct CrossThreadCopier : public CrossThreadCopierBase<WTF::IsConvertibleToInteger<T>::value,
- WTF::IsSubclassOfTemplate<typename WTF::RemoveTemplate<T, RefPtr>::Type, ThreadSafeShared>::value,
+ WTF::IsSubclassOfTemplate<typename WTF::RemoveTemplate<T, RefPtr>::Type, ThreadSafeShared>::value
+ || WTF::IsSubclassOfTemplate<typename WTF::RemoveTemplate<T, PassRefPtr>::Type, ThreadSafeShared>::value,
T> {
};
diff --git a/WebCore/platform/LocalizedStrings.cpp b/WebCore/platform/LocalizedStrings.cpp
index 012d90e..021205a 100644
--- a/WebCore/platform/LocalizedStrings.cpp
+++ b/WebCore/platform/LocalizedStrings.cpp
@@ -590,27 +590,42 @@ String validationMessageTypeMismatchText()
return platformStrategies()->localizationStrategy()->validationMessageTypeMismatchText();
}
+String validationMessageTypeMismatchForEmailText()
+{
+ return platformStrategies()->localizationStrategy()->validationMessageTypeMismatchText();
+}
+
+String validationMessageTypeMismatchForMultipleEmailText()
+{
+ return platformStrategies()->localizationStrategy()->validationMessageTypeMismatchText();
+}
+
+String validationMessageTypeMismatchForURLText()
+{
+ return platformStrategies()->localizationStrategy()->validationMessageTypeMismatchText();
+}
+
String validationMessagePatternMismatchText()
{
return platformStrategies()->localizationStrategy()->validationMessagePatternMismatchText();
}
-String validationMessageTooLongText()
+String validationMessageTooLongText(int, int)
{
return platformStrategies()->localizationStrategy()->validationMessageTooLongText();
}
-String validationMessageRangeUnderflowText()
+String validationMessageRangeUnderflowText(const String&)
{
return platformStrategies()->localizationStrategy()->validationMessageRangeUnderflowText();
}
-String validationMessageRangeOverflowText()
+String validationMessageRangeOverflowText(const String&)
{
return platformStrategies()->localizationStrategy()->validationMessageRangeOverflowText();
}
-String validationMessageStepMismatchText()
+String validationMessageStepMismatchText(const String&, const String&)
{
return platformStrategies()->localizationStrategy()->validationMessageStepMismatchText();
}
diff --git a/WebCore/platform/LocalizedStrings.h b/WebCore/platform/LocalizedStrings.h
index a72eb8a..d332e45 100644
--- a/WebCore/platform/LocalizedStrings.h
+++ b/WebCore/platform/LocalizedStrings.h
@@ -167,11 +167,14 @@ namespace WebCore {
String validationMessageValueMissingText();
String validationMessageTypeMismatchText();
+ String validationMessageTypeMismatchForEmailText();
+ String validationMessageTypeMismatchForMultipleEmailText();
+ String validationMessageTypeMismatchForURLText();
String validationMessagePatternMismatchText();
- String validationMessageTooLongText();
- String validationMessageRangeUnderflowText();
- String validationMessageRangeOverflowText();
- String validationMessageStepMismatchText();
+ String validationMessageTooLongText(int valueLength, int maxLength);
+ String validationMessageRangeUnderflowText(const String& minimum);
+ String validationMessageRangeOverflowText(const String& maximum);
+ String validationMessageStepMismatchText(const String& base, const String& step);
}
diff --git a/WebCore/platform/MIMETypeRegistry.cpp b/WebCore/platform/MIMETypeRegistry.cpp
index 1e986a7..9977fe7 100644
--- a/WebCore/platform/MIMETypeRegistry.cpp
+++ b/WebCore/platform/MIMETypeRegistry.cpp
@@ -371,17 +371,34 @@ static MediaMIMETypeMap& mediaMIMETypeMap()
String MIMETypeRegistry::getMediaMIMETypeForExtension(const String& ext)
{
- if (mediaMIMETypeMap().contains(ext))
- return (*mediaMIMETypeMap().get(ext))[0];
+ // Look in the system-specific registry first.
+ String type = getMIMETypeForExtension(ext);
+ if (!type.isEmpty())
+ return type;
+
+ Vector<String>* typeList = mediaMIMETypeMap().get(ext);
+ if (typeList)
+ return (*typeList)[0];
return String();
}
Vector<String> MIMETypeRegistry::getMediaMIMETypesForExtension(const String& ext)
{
- if (mediaMIMETypeMap().contains(ext))
- return *mediaMIMETypeMap().get(ext);
-
+ Vector<String>* typeList = mediaMIMETypeMap().get(ext);
+ if (typeList)
+ return *typeList;
+
+ // Only need to look in the system-specific registry if mediaMIMETypeMap() doesn't contain
+ // the extension at all, because it always contains the system-specific type if the
+ // extension is in the static mapping table.
+ String type = getMIMETypeForExtension(ext);
+ if (!type.isEmpty()) {
+ Vector<String> typeList;
+ typeList.append(type);
+ return typeList;
+ }
+
return Vector<String>();
}
diff --git a/WebCore/platform/PopupMenuClient.h b/WebCore/platform/PopupMenuClient.h
index 2b41380..45912a1 100644
--- a/WebCore/platform/PopupMenuClient.h
+++ b/WebCore/platform/PopupMenuClient.h
@@ -62,10 +62,10 @@ public:
virtual bool shouldPopOver() const = 0;
virtual bool valueShouldChangeOnHotTrack() const = 0;
virtual void setTextFromItem(unsigned listIndex) = 0;
-
+
virtual FontSelector* fontSelector() const = 0;
virtual HostWindow* hostWindow() const = 0;
-
+
virtual PassRefPtr<Scrollbar> createScrollbar(ScrollbarClient*, ScrollbarOrientation, ScrollbarControlSize) = 0;
};
diff --git a/WebCore/platform/PopupMenuStyle.h b/WebCore/platform/PopupMenuStyle.h
index 5325ff3..b9a7abc 100644
--- a/WebCore/platform/PopupMenuStyle.h
+++ b/WebCore/platform/PopupMenuStyle.h
@@ -35,11 +35,12 @@ namespace WebCore {
class PopupMenuStyle {
public:
- PopupMenuStyle(const Color& foreground, const Color& background, const Font& font, bool visible, Length textIndent, TextDirection textDirection)
+ PopupMenuStyle(const Color& foreground, const Color& background, const Font& font, bool visible, bool isDisplayNone, Length textIndent, TextDirection textDirection)
: m_foregroundColor(foreground)
, m_backgroundColor(background)
, m_font(font)
, m_visible(visible)
+ , m_isDisplayNone(isDisplayNone)
, m_textIndent(textIndent)
, m_textDirection(textDirection)
{
@@ -49,6 +50,7 @@ public:
const Color& backgroundColor() const { return m_backgroundColor; }
const Font& font() const { return m_font; }
bool isVisible() const { return m_visible; }
+ bool isDisplayNone() const { return m_isDisplayNone; }
Length textIndent() const { return m_textIndent; }
TextDirection textDirection() const { return m_textDirection; }
@@ -57,6 +59,7 @@ private:
Color m_backgroundColor;
Font m_font;
bool m_visible;
+ bool m_isDisplayNone;
Length m_textIndent;
TextDirection m_textDirection;
};
diff --git a/WebCore/platform/ScrollView.cpp b/WebCore/platform/ScrollView.cpp
index 40d598e..4a9d479 100644
--- a/WebCore/platform/ScrollView.cpp
+++ b/WebCore/platform/ScrollView.cpp
@@ -206,6 +206,10 @@ IntRect ScrollView::visibleContentRect(bool includeScrollbars) const
{
if (platformWidget())
return platformVisibleContentRect(includeScrollbars);
+
+ if (paintsEntireContents())
+ return IntRect(IntPoint(0, 0), contentsSize());
+
return IntRect(IntPoint(m_scrollOffset.width(), m_scrollOffset.height()),
IntSize(max(0, width() - (verticalScrollbar() && !includeScrollbars ? verticalScrollbar()->width() : 0)),
max(0, height() - (horizontalScrollbar() && !includeScrollbars ? horizontalScrollbar()->height() : 0))));
@@ -359,16 +363,18 @@ void ScrollView::setScrollPosition(const IntPoint& scrollPoint)
return;
}
- IntPoint newScrollPosition = scrollPoint.shrunkTo(maximumScrollPosition());
- newScrollPosition.clampNegativeToZero();
-
#if ENABLE(TILED_BACKING_STORE)
if (delegatesScrolling()) {
hostWindow()->delegatedScrollRequested(IntSize(scrollPoint.x(), scrollPoint.y()));
+ if (!m_actualVisibleContentRect.isEmpty())
+ m_actualVisibleContentRect.setLocation(scrollPoint);
return;
}
#endif
+ IntPoint newScrollPosition = scrollPoint.shrunkTo(maximumScrollPosition());
+ newScrollPosition.clampNegativeToZero();
+
if (newScrollPosition == scrollPosition())
return;
@@ -402,7 +408,7 @@ static const unsigned cMaxUpdateScrollbarsPass = 2;
void ScrollView::updateScrollbars(const IntSize& desiredOffset)
{
- if (m_inUpdateScrollbars || prohibitsScrolling() || platformWidget())
+ if (m_inUpdateScrollbars || prohibitsScrolling() || delegatesScrolling() || platformWidget())
return;
// If we came in here with the view already needing a layout, then go ahead and do that
@@ -872,10 +878,12 @@ void ScrollView::paint(GraphicsContext* context, const IntRect& rect)
context->translate(x(), y());
documentDirtyRect.move(-x(), -y());
- context->translate(-scrollX(), -scrollY());
- documentDirtyRect.move(scrollX(), scrollY());
+ if (!paintsEntireContents()) {
+ context->translate(-scrollX(), -scrollY());
+ documentDirtyRect.move(scrollX(), scrollY());
- context->clip(visibleContentRect());
+ context->clip(visibleContentRect());
+ }
paintContents(context, documentDirtyRect);
diff --git a/WebCore/platform/ScrollView.h b/WebCore/platform/ScrollView.h
index 7fb5d8e..d6b08b2 100644
--- a/WebCore/platform/ScrollView.h
+++ b/WebCore/platform/ScrollView.h
@@ -127,7 +127,11 @@ public:
// The visible content rect has a location that is the scrolled offset of the document. The width and height are the viewport width
// and height. By default the scrollbars themselves are excluded from this rectangle, but an optional boolean argument allows them to be
// included.
+ // In the situation the client is responsible for the scrolling (ie. with a tiled backing store) it is possible to use
+ // the actualVisibleContentRect instead, though this must be updated manually, e.g after panning ends.
IntRect visibleContentRect(bool includeScrollbars = false) const;
+ IntRect actualVisibleContentRect() const { return m_actualVisibleContentRect.isEmpty() ? visibleContentRect() : m_actualVisibleContentRect; }
+ void setActualVisibleContentRect(const IntRect& actualVisibleContentRect) { m_actualVisibleContentRect = actualVisibleContentRect; }
int visibleWidth() const { return visibleContentRect().width(); }
int visibleHeight() const { return visibleContentRect().height(); }
@@ -294,6 +298,7 @@ private:
// whether it is safe to blit on scroll.
bool m_canBlitOnScroll;
+ IntRect m_actualVisibleContentRect;
IntSize m_scrollOffset; // FIXME: Would rather store this as a position, but we will wait to make this change until more code is shared.
IntSize m_fixedLayoutSize;
IntSize m_contentsSize;
diff --git a/WebCore/platform/android/FileSystemAndroid.cpp b/WebCore/platform/android/FileSystemAndroid.cpp
index 66bb976..9ed43f0 100644
--- a/WebCore/platform/android/FileSystemAndroid.cpp
+++ b/WebCore/platform/android/FileSystemAndroid.cpp
@@ -95,17 +95,15 @@ Vector<String> listDirectory(const String& path, const String& filter)
DIR* dir = opendir(cpath.data());
if (dir) {
struct dirent* dp;
- while (dp = readdir(dir)) {
+ while ((dp = readdir(dir))) {
const char* name = dp->d_name;
if (!strcmp(name, ".") || !strcmp(name, ".."))
continue;
if (fnmatch(cfilter.data(), name, 0))
continue;
char filePath[1024];
- if ((int) (sizeof(filePath) - 1) < snprintf(filePath,
- sizeof(filePath), "%s/%s", cpath.data(), name)) {
+ if (static_cast<int>(sizeof(filePath) - 1) < snprintf(filePath, sizeof(filePath), "%s/%s", cpath.data(), name))
continue; // buffer overflow
- }
entries.append(filePath);
}
closedir(dir);
diff --git a/WebCore/platform/android/GeolocationServiceAndroid.cpp b/WebCore/platform/android/GeolocationServiceAndroid.cpp
index 64f68f1..0f07722 100644
--- a/WebCore/platform/android/GeolocationServiceAndroid.cpp
+++ b/WebCore/platform/android/GeolocationServiceAndroid.cpp
@@ -196,9 +196,9 @@ bool GeolocationServiceAndroid::isPositionMoreAccurate(Geoposition* position1, G
bool GeolocationServiceAndroid::isPositionMoreTimely(Geoposition* position1, Geoposition* position2)
{
ASSERT(position1 && position2);
- DOMTimeStamp currentTimeMillis = WTF::currentTime() * 1000.0;
- DOMTimeStamp maximumAgeMillis = 10 * 60 * 1000; // 10 minutes
- return currentTimeMillis - position1->timestamp() > maximumAgeMillis;
+ DOMTimeStamp currentTime = convertSecondsToDOMTimeStamp(WTF::currentTime());
+ DOMTimeStamp maximumAge = convertSecondsToDOMTimeStamp(10 * 60); // 10 minutes
+ return currentTime - position1->timestamp() > maximumAge;
}
} // namespace WebCore
diff --git a/WebCore/platform/android/LocalizedStringsAndroid.cpp b/WebCore/platform/android/LocalizedStringsAndroid.cpp
index 635f741..9cb6242 100644
--- a/WebCore/platform/android/LocalizedStringsAndroid.cpp
+++ b/WebCore/platform/android/LocalizedStringsAndroid.cpp
@@ -410,31 +410,49 @@ String validationMessageTypeMismatchText()
return String();
}
+String validationMessageTypeMismatchForEmailText()
+{
+ notImplemented();
+ return validationMessageTypeMismatchText();
+}
+
+String validationMessageTypeMismatchForMultipleEmailText()
+{
+ notImplemented();
+ return validationMessageTypeMismatchText();
+}
+
+String validationMessageTypeMismatchForURLText()
+{
+ notImplemented();
+ return validationMessageTypeMismatchText();
+}
+
String validationMessagePatternMismatchText()
{
notImplemented();
return String();
}
-String validationMessageTooLongText()
+String validationMessageTooLongText(int, int)
{
notImplemented();
return String();
}
-String validationMessageRangeUnderflowText()
+String validationMessageRangeUnderflowText(const String&)
{
notImplemented();
return String();
}
-String validationMessageRangeOverflowText()
+String validationMessageRangeOverflowText(const String&)
{
notImplemented();
return String();
}
-String validationMessageStepMismatchText()
+String validationMessageStepMismatchText(const String&, const String&)
{
notImplemented();
return String();
diff --git a/WebCore/platform/android/PlatformBridge.h b/WebCore/platform/android/PlatformBridge.h
index 0af0429..2019d1a 100644
--- a/WebCore/platform/android/PlatformBridge.h
+++ b/WebCore/platform/android/PlatformBridge.h
@@ -141,6 +141,11 @@ public:
static void updateLayers(FrameView* view);
// Language
static String computeDefaultLanguage();
+ // Memory details for V8 GC
+ static int lowMemoryUsageMB();
+ static int highMemoryUsageMB();
+ static int memoryUsageMB();
+ static int actualMemoryUsageMB();
};
}
diff --git a/WebCore/platform/audio/AudioBus.h b/WebCore/platform/audio/AudioBus.h
index 72357e8..4318b81 100644
--- a/WebCore/platform/audio/AudioBus.h
+++ b/WebCore/platform/audio/AudioBus.h
@@ -117,6 +117,8 @@ public:
// Makes maximum absolute value == 1.0 (if possible).
void normalize();
+ static PassOwnPtr<AudioBus> loadPlatformResource(const char* name, double sampleRate);
+
protected:
AudioBus() { };
diff --git a/WebCore/platform/audio/AudioChannel.h b/WebCore/platform/audio/AudioChannel.h
index 511048c..6816830 100644
--- a/WebCore/platform/audio/AudioChannel.h
+++ b/WebCore/platform/audio/AudioChannel.h
@@ -29,7 +29,7 @@
#ifndef AudioChannel_h
#define AudioChannel_h
-#include "AudioFloatArray.h"
+#include "AudioArray.h"
#include <wtf/Noncopyable.h>
#include <wtf/PassOwnPtr.h>
diff --git a/WebCore/platform/audio/HRTFElevation.cpp b/WebCore/platform/audio/HRTFElevation.cpp
index ac1eb4d..ab722cd 100644
--- a/WebCore/platform/audio/HRTFElevation.cpp
+++ b/WebCore/platform/audio/HRTFElevation.cpp
@@ -101,7 +101,7 @@ bool HRTFElevation::calculateKernelsForAzimuthElevation(int azimuth, int elevati
int positiveElevation = elevation < 0 ? elevation + 360 : elevation;
String resourceName = String::format("IRC_%s_C_R0195_T%03d_P%03d", subjectName.utf8().data(), azimuth, positiveElevation);
- OwnPtr<AudioBus> impulseResponse(createBusFromAudioFileResource(resourceName, sampleRate));
+ OwnPtr<AudioBus> impulseResponse(AudioBus::loadPlatformResource(resourceName.utf8().data(), sampleRate));
ASSERT(impulseResponse.get());
if (!impulseResponse.get())
@@ -224,7 +224,7 @@ PassOwnPtr<HRTFElevation> HRTFElevation::createByInterpolatingSlices(HRTFElevati
// Interpolate elevation angle.
double angle = (1.0 - x) * hrtfElevation1->elevationAngle() + x * hrtfElevation2->elevationAngle();
- OwnPtr<HRTFElevation> hrtfElevation = adoptPtr(new HRTFElevation(kernelListL.release(), kernelListR.release(), angle, sampleRate));
+ OwnPtr<HRTFElevation> hrtfElevation = adoptPtr(new HRTFElevation(kernelListL.release(), kernelListR.release(), static_cast<int>(angle), sampleRate));
return hrtfElevation.release();
}
diff --git a/WebCore/platform/audio/Panner.cpp b/WebCore/platform/audio/Panner.cpp
index a300786..5e8efca 100644
--- a/WebCore/platform/audio/Panner.cpp
+++ b/WebCore/platform/audio/Panner.cpp
@@ -34,7 +34,6 @@
#include "EqualPowerPanner.h"
#include "HRTFPanner.h"
-#include "PassThroughPanner.h"
#include <wtf/OwnPtr.h>
namespace WebCore {
@@ -52,10 +51,6 @@ PassOwnPtr<Panner> Panner::create(PanningModel model, double sampleRate)
panner = adoptPtr(new HRTFPanner(sampleRate));
break;
- case PanningModelPassthrough:
- panner = adoptPtr(new PassThroughPanner());
- break;
-
// FIXME: sound field panning is not yet implemented...
case PanningModelSoundField:
default:
diff --git a/WebCore/platform/audio/Panner.h b/WebCore/platform/audio/Panner.h
index c8e219b..b57ceda 100644
--- a/WebCore/platform/audio/Panner.h
+++ b/WebCore/platform/audio/Panner.h
@@ -40,10 +40,9 @@ class AudioBus;
class Panner {
public:
enum {
- PanningModelPassthrough = 0,
- PanningModelEqualPower = 1,
- PanningModelHRTF = 2,
- PanningModelSoundField = 3
+ PanningModelEqualPower = 0,
+ PanningModelHRTF = 1,
+ PanningModelSoundField = 2
};
typedef unsigned PanningModel;
diff --git a/WebCore/platform/audio/VectorMath.cpp b/WebCore/platform/audio/VectorMath.cpp
index faf5431..64e192b 100644
--- a/WebCore/platform/audio/VectorMath.cpp
+++ b/WebCore/platform/audio/VectorMath.cpp
@@ -38,15 +38,25 @@ namespace VectorMath {
#if OS(DARWIN)
// On the Mac we use the highly optimized versions in Accelerate.framework
+// In 32-bit mode (__ppc__ or __i386__) <Accelerate/Accelerate.h> includes <vecLib/vDSP_translate.h> which defines macros of the same name as
+// our namespaced function names, so we must handle this case differently. Other architectures (64bit, ARM, etc.) do not include this header file.
void vsmul(const float* sourceP, int sourceStride, const float* scale, float* destP, int destStride, size_t framesToProcess)
{
+#if defined(__ppc__) || defined(__i386__)
+ ::vsmul(sourceP, sourceStride, scale, destP, destStride, framesToProcess);
+#else
vDSP_vsmul(sourceP, sourceStride, scale, destP, destStride, framesToProcess);
+#endif
}
void vadd(const float* source1P, int sourceStride1, const float* source2P, int sourceStride2, float* destP, int destStride, size_t framesToProcess)
{
+#if defined(__ppc__) || defined(__i386__)
+ ::vadd(source1P, sourceStride1, source2P, sourceStride2, destP, destStride, framesToProcess);
+#else
vDSP_vadd(source1P, sourceStride1, source2P, sourceStride2, destP, destStride, framesToProcess);
+#endif
}
#else
diff --git a/WebCore/platform/audio/mac/AudioBusMac.mm b/WebCore/platform/audio/mac/AudioBusMac.mm
new file mode 100644
index 0000000..3f3185a
--- /dev/null
+++ b/WebCore/platform/audio/mac/AudioBusMac.mm
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ */
+
+#import "config.h"
+
+#if ENABLE(WEB_AUDIO)
+
+#import "AudioBus.h"
+
+#import "AudioFileReader.h"
+#import <wtf/OwnPtr.h>
+#import <wtf/PassOwnPtr.h>
+#import <Foundation/Foundation.h>
+
+@interface WebCoreAudioBundleClass : NSObject
+@end
+
+@implementation WebCoreAudioBundleClass
+@end
+
+namespace WebCore {
+
+PassOwnPtr<AudioBus> AudioBus::loadPlatformResource(const char* name, double sampleRate)
+{
+ // This method can be called from other than the main thread, so we need an auto-release pool.
+ NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
+
+ NSBundle *bundle = [NSBundle bundleForClass:[WebCoreAudioBundleClass class]];
+ NSString *audioFilePath = [bundle pathForResource:[NSString stringWithUTF8String:name] ofType:@"aif" inDirectory:@"audio"];
+ NSData *audioData = [NSData dataWithContentsOfFile:audioFilePath];
+
+ if (audioData) {
+ OwnPtr<AudioBus> bus(createBusFromInMemoryAudioFile([audioData bytes], [audioData length], false, sampleRate));
+ [pool release];
+ return bus.release();
+ }
+
+ ASSERT_NOT_REACHED();
+ [pool release];
+ return 0;
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(WEB_AUDIO)
diff --git a/WebCore/platform/audio/mac/AudioFileReaderMac.cpp b/WebCore/platform/audio/mac/AudioFileReaderMac.cpp
index 9dad611..6d17152 100644
--- a/WebCore/platform/audio/mac/AudioFileReaderMac.cpp
+++ b/WebCore/platform/audio/mac/AudioFileReaderMac.cpp
@@ -35,6 +35,7 @@
#include "AudioBus.h"
#include "AudioFileReader.h"
#include <CoreFoundation/CoreFoundation.h>
+#include <CoreServices/CoreServices.h>
namespace WebCore {
diff --git a/WebCore/platform/brew/LocalizedStringsBrew.cpp b/WebCore/platform/brew/LocalizedStringsBrew.cpp
index 7c6c564..b044623 100644
--- a/WebCore/platform/brew/LocalizedStringsBrew.cpp
+++ b/WebCore/platform/brew/LocalizedStringsBrew.cpp
@@ -408,31 +408,49 @@ String validationMessageTypeMismatchText()
return String();
}
+String validationMessageTypeMismatchForEmailText()
+{
+ notImplemented();
+ return validationMessageTypeMismatchText();
+}
+
+String validationMessageTypeMismatchForMultipleEmailText()
+{
+ notImplemented();
+ return validationMessageTypeMismatchText();
+}
+
+String validationMessageTypeMismatchForURLText()
+{
+ notImplemented();
+ return validationMessageTypeMismatchText();
+}
+
String validationMessagePatternMismatchText()
{
notImplemented();
return String();
}
-String validationMessageTooLongText()
+String validationMessageTooLongText(int, int)
{
notImplemented();
return String();
}
-String validationMessageRangeUnderflowText()
+String validationMessageRangeUnderflowText(const String&)
{
notImplemented();
return String();
}
-String validationMessageRangeOverflowText()
+String validationMessageRangeOverflowText(const String&)
{
notImplemented();
return String();
}
-String validationMessageStepMismatchText()
+String validationMessageStepMismatchText(const String&, const String&)
{
notImplemented();
return String();
diff --git a/WebCore/platform/chromium/ChromiumBridge.h b/WebCore/platform/chromium/ChromiumBridge.h
index 55a4ce0..fff7f69 100644
--- a/WebCore/platform/chromium/ChromiumBridge.h
+++ b/WebCore/platform/chromium/ChromiumBridge.h
@@ -171,6 +171,7 @@ namespace WebCore {
// IndexedDB ----------------------------------------------------------
static PassRefPtr<IDBFactoryBackendInterface> idbFactory();
+ static void idbShutdown();
// Extracts keyPath from values and returns the corresponding keys.
static void createIDBKeysFromSerializedValuesAndKeyPath(const Vector<RefPtr<SerializedScriptValue> >& values, const String& keyPath, Vector<RefPtr<IDBKey> >& keys);
diff --git a/WebCore/platform/chromium/PopupMenuChromium.cpp b/WebCore/platform/chromium/PopupMenuChromium.cpp
index 3ff4ff0..04eeb93 100644
--- a/WebCore/platform/chromium/PopupMenuChromium.cpp
+++ b/WebCore/platform/chromium/PopupMenuChromium.cpp
@@ -1,11 +1,11 @@
/*
* Copyright (c) 2008, 2009, Google Inc. All rights reserved.
* Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
- *
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
- *
+ *
* * 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
@@ -15,7 +15,7 @@
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@@ -49,6 +49,7 @@
#include "PlatformMouseEvent.h"
#include "PlatformScreen.h"
#include "PlatformWheelEvent.h"
+#include "PopupMenuClient.h"
#include "RenderTheme.h"
#include "ScrollbarTheme.h"
#include "StringTruncator.h"
@@ -113,7 +114,7 @@ public:
// Updates our internal list to match the client.
void updateFromElement();
- // Frees any allocated resources used in a particular popup session.
+ // Frees any allocated resources used in a particular popup session.
void clear();
// Sets the index of the option that is displayed in the <select> widget in the page
@@ -194,10 +195,10 @@ private:
void scrollToRevealRow(int index);
void scrollToRevealSelection() { scrollToRevealRow(m_selectedIndex); }
- // Invalidates the row at the given index.
+ // Invalidates the row at the given index.
void invalidateRow(int index);
- // Get the bounds of a row.
+ // Get the bounds of a row.
IntRect getRowBounds(int index);
// Converts a point to an index of the row the point is over
@@ -224,11 +225,11 @@ private:
PopupContainerSettings m_settings;
// This is the index of the item marked as "selected" - i.e. displayed in the widget on the
- // page.
+ // page.
int m_originalIndex;
- // This is the index of the item that the user is hovered over or has selected using the
- // keyboard in the list. They have not confirmed this selection by clicking or pressing
+ // This is the index of the item that the user is hovered over or has selected using the
+ // keyboard in the list. They have not confirmed this selection by clicking or pressing
// enter yet however.
int m_selectedIndex;
@@ -240,7 +241,7 @@ private:
// This is the number of rows visible in the popup. The maximum number visible at a time is
// defined as being kMaxVisibleRows. For a scrolled popup, this can be thought of as the
- // page size in data units.
+ // page size in data units.
int m_visibleRows;
// Our suggested width, not including scrollbar.
@@ -538,7 +539,7 @@ ChromeClientChromium* PopupContainer::chromeClientChromium()
void PopupContainer::show(const IntRect& r, FrameView* v, int index)
{
// The rect is the size of the select box. It's usually larger than we need.
- // subtract border size so that usually the container will be displayed
+ // subtract border size so that usually the container will be displayed
// exactly the same width as the select box.
listBox()->setBaseWidth(max(r.width() - kBorderSize * 2, 0));
@@ -897,7 +898,7 @@ void PopupListBox::paintRow(GraphicsContext* gc, const IntRect& rect, int rowInd
gc->fillRect(rowRect, Color::white, ColorSpaceDeviceRGB);
gc->fillRect(rowRect, backColor, ColorSpaceDeviceRGB);
-
+
if (m_popupClient->itemIsSeparator(rowIndex)) {
IntRect separatorRect(
rowRect.x() + separatorPadding,
@@ -906,7 +907,7 @@ void PopupListBox::paintRow(GraphicsContext* gc, const IntRect& rect, int rowInd
gc->fillRect(separatorRect, textColor, ColorSpaceDeviceRGB);
return;
}
-
+
if (!style.isVisible())
return;
@@ -991,7 +992,7 @@ void PopupListBox::paintRow(GraphicsContext* gc, const IntRect& rect, int rowInd
Font PopupListBox::getRowFont(int rowIndex)
{
- Font itemFont = m_popupClient->menuStyle().font();
+ Font itemFont = m_popupClient->itemStyle(rowIndex).font();
if (m_popupClient->itemIsLabel(rowIndex)) {
// Bold-ify labels (ie, an <optgroup> heading).
FontDescription d = itemFont.fontDescription();
@@ -1069,13 +1070,16 @@ void PopupListBox::selectIndex(int index)
if (index < 0 || index >= numItems())
return;
- if (index != m_selectedIndex && isSelectableItem(index)) {
+ bool isSelectable = isSelectableItem(index);
+ if (index != m_selectedIndex && isSelectable) {
invalidateRow(m_selectedIndex);
m_selectedIndex = index;
invalidateRow(m_selectedIndex);
scrollToRevealSelection();
m_popupClient->selectionChanged(m_selectedIndex);
+ } else if (!isSelectable) {
+ clearSelection();
}
}
@@ -1089,6 +1093,9 @@ int PopupListBox::getRowHeight(int index)
if (index < 0)
return 0;
+ if (m_popupClient->itemStyle(index).isDisplayNone())
+ return 0;
+
String icon = m_popupClient->itemIcon(index);
RefPtr<Image> image(Image::loadPlatformResource(icon.utf8().data()));
@@ -1122,7 +1129,7 @@ void PopupListBox::scrollToRevealRow(int index)
return;
IntRect rowRect = getRowBounds(index);
-
+
if (rowRect.y() < scrollY()) {
// Row is above current scroll position, scroll up.
ScrollView::setScrollPosition(IntPoint(0, rowRect.y()));
@@ -1254,13 +1261,14 @@ void PopupListBox::layout()
int paddingWidth = 0;
int y = 0;
for (int i = 0; i < numItems(); ++i) {
- Font itemFont = getRowFont(i);
-
// Place the item vertically.
m_items[i]->yOffset = y;
- y += itemFont.height();
+ if (m_popupClient->itemStyle(i).isDisplayNone())
+ continue;
+ y += getRowHeight(i);
// Ensure the popup is wide enough to fit this item.
+ Font itemFont = getRowFont(i);
String text = m_popupClient->itemText(i);
String label = m_popupClient->itemLabel(i);
String icon = m_popupClient->itemIcon(i);
@@ -1300,6 +1308,7 @@ void PopupListBox::layout()
for (int i = 0; i < m_visibleRows; ++i) {
int rowHeight = getRowHeight(i);
+
#if !OS(DARWIN)
// Only clip the window height for non-Mac platforms.
if (windowHeight + rowHeight > m_maxHeight) {
@@ -1355,10 +1364,10 @@ bool PopupListBox::isPointInBounds(const IntPoint& point)
///////////////////////////////////////////////////////////////////////////////
// PopupMenuChromium implementation
-//
-// Note: you cannot add methods to this class, since it is defined above the
+//
+// Note: you cannot add methods to this class, since it is defined above the
// portability layer. To access methods and properties on the
-// popup widgets, use |popupWindow| above.
+// popup widgets, use |popupWindow| above.
PopupMenuChromium::PopupMenuChromium(PopupMenuClient* client)
: m_popupClient(client)
diff --git a/WebCore/platform/chromium/PopupMenuChromium.h b/WebCore/platform/chromium/PopupMenuChromium.h
index 0d0e23c..ca47ccf 100644
--- a/WebCore/platform/chromium/PopupMenuChromium.h
+++ b/WebCore/platform/chromium/PopupMenuChromium.h
@@ -1,10 +1,10 @@
/*
* Copyright (c) 2008, 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
@@ -14,7 +14,7 @@
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@@ -32,18 +32,20 @@
#define PopupMenuChromium_h
#include "config.h"
-#include "PopupMenuClient.h"
#include "FramelessScrollView.h"
#include "IntRect.h"
+#include "PlatformString.h"
#include "PopupMenu.h"
#include "PopupMenuPrivate.h"
+#include "PopupMenuStyle.h"
namespace WebCore {
class ChromeClientChromium;
class FrameView;
class PopupListBox;
+class PopupMenuClient;
// A container for the data for each menu item (e.g. represented by <option>
// or <optgroup> in a <select> widget) and is used by PopupListBox.
diff --git a/WebCore/platform/chromium/SearchPopupMenuChromium.cpp b/WebCore/platform/chromium/SearchPopupMenuChromium.cpp
index dc06b5a..ca5bebe 100644
--- a/WebCore/platform/chromium/SearchPopupMenuChromium.cpp
+++ b/WebCore/platform/chromium/SearchPopupMenuChromium.cpp
@@ -1,11 +1,11 @@
/*
* Copyright (c) 2008, 2009, Google Inc. All rights reserved.
* Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
- *
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
- *
+ *
* * 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
@@ -15,7 +15,7 @@
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
- *
+ *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
diff --git a/WebCore/platform/efl/LocalizedStringsEfl.cpp b/WebCore/platform/efl/LocalizedStringsEfl.cpp
index a81434f..2935983 100644
--- a/WebCore/platform/efl/LocalizedStringsEfl.cpp
+++ b/WebCore/platform/efl/LocalizedStringsEfl.cpp
@@ -435,22 +435,22 @@ String validationMessagePatternMismatchText()
return String::fromUTF8("pattern mismatch");
}
-String validationMessageRangeOverflowText()
+String validationMessageRangeOverflowText(const String&)
{
return String::fromUTF8("range overflow");
}
-String validationMessageRangeUnderflowText()
+String validationMessageRangeUnderflowText(const String&)
{
return String::fromUTF8("range underflow");
}
-String validationMessageStepMismatchText()
+String validationMessageStepMismatchText(const String&, const String&)
{
return String::fromUTF8("step mismatch");
}
-String validationMessageTooLongText()
+String validationMessageTooLongText(int, int)
{
return String::fromUTF8("too long");
}
@@ -460,6 +460,21 @@ String validationMessageTypeMismatchText()
return String::fromUTF8("type mismatch");
}
+String validationMessageTypeMismatchForEmailText()
+{
+ return String::fromUTF8("type mismatch");
+}
+
+String validationMessageTypeMismatchForMultipleEmailText()
+{
+ return String::fromUTF8("type mismatch");
+}
+
+String validationMessageTypeMismatchForURLText()
+{
+ return String::fromUTF8("type mismatch");
+}
+
String validationMessageValueMissingText()
{
return String::fromUTF8("value missing");
diff --git a/WebCore/platform/graphics/ContextShadow.h b/WebCore/platform/graphics/ContextShadow.h
index 0160f8a..2b779f7 100644
--- a/WebCore/platform/graphics/ContextShadow.h
+++ b/WebCore/platform/graphics/ContextShadow.h
@@ -38,17 +38,24 @@
#if PLATFORM(CAIRO)
typedef struct _cairo cairo_t;
typedef struct _cairo_surface cairo_surface_t;
-typedef cairo_surface_t* PlatformImage;
-typedef cairo_t* PlatformContext;
#elif PLATFORM(QT)
#include <QImage>
class QPainter;
-typedef QImage PlatformImage;
-typedef QPainter* PlatformContext;
#endif
namespace WebCore {
+#if PLATFORM(CAIRO)
+typedef cairo_surface_t* PlatformImage;
+typedef cairo_t* PlatformContext;
+#elif PLATFORM(QT)
+typedef QImage PlatformImage;
+typedef QPainter* PlatformContext;
+#else
+typedef void* PlatformImage;
+typedef void* PlatformContext;
+#endif
+
// This is to track and keep the shadow state. We use this rather than
// using GraphicsContextState to allow possible optimizations (right now
// only to determine the shadow type, but in future it might covers things
diff --git a/WebCore/platform/graphics/Extensions3D.h b/WebCore/platform/graphics/Extensions3D.h
index 0aed8e7..74210a5 100644
--- a/WebCore/platform/graphics/Extensions3D.h
+++ b/WebCore/platform/graphics/Extensions3D.h
@@ -47,13 +47,15 @@ public:
// GL_EXT_texture_format_BGRA8888
// GL_EXT_read_format_bgra
// GL_ARB_robustness
+ // GL_ARB_texture_non_power_of_two / GL_OES_texture_npot
// GL_EXT_packed_depth_stencil / GL_OES_packed_depth_stencil
+ // GL_ANGLE_framebuffer_blit / GL_ANGLE_framebuffer_multisample
// Takes full name of extension; for example,
// "GL_EXT_texture_format_BGRA8888".
virtual bool supports(const String&) = 0;
- enum {
+ enum ExtensionsEnumType {
// GL_EXT_texture_format_BGRA8888 enums
BGRA_EXT = 0x80E1,
@@ -63,11 +65,28 @@ public:
UNKNOWN_CONTEXT_RESET_ARB = 0x8255,
// GL_EXT/OES_packed_depth_stencil enums
- DEPTH24_STENCIL8 = 0x88F0
+ DEPTH24_STENCIL8 = 0x88F0,
+
+ // GL_ANGLE_framebuffer_blit names
+ READ_FRAMEBUFFER = 0x8CA8,
+ DRAW_FRAMEBUFFER = 0x8CA9,
+ DRAW_FRAMEBUFFER_BINDING = 0x8CA6,
+ READ_FRAMEBUFFER_BINDING = 0x8CAA,
+
+ // GL_ANGLE_framebuffer_multisample names
+ RENDERBUFFER_SAMPLES = 0x8CAB,
+ FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56,
+ MAX_SAMPLES = 0x8D57
};
// GL_ARB_robustness
virtual int getGraphicsResetStatusARB() = 0;
+
+ // GL_ANGLE_framebuffer_blit
+ virtual void blitFramebuffer(long srcX0, long srcY0, long srcX1, long srcY1, long dstX0, long dstY0, long dstX1, long dstY1, unsigned long mask, unsigned long filter) = 0;
+
+ // GL_ANGLE_framebuffer_multisample
+ virtual void renderbufferStorageMultisample(unsigned long target, unsigned long samples, unsigned long internalformat, unsigned long width, unsigned long height) = 0;
};
} // namespace WebCore
diff --git a/WebCore/platform/graphics/Font.cpp b/WebCore/platform/graphics/Font.cpp
index a0cf5a4..6bbf3d7 100644
--- a/WebCore/platform/graphics/Font.cpp
+++ b/WebCore/platform/graphics/Font.cpp
@@ -336,4 +336,73 @@ Font::CodePath Font::codePath(const TextRun& run) const
return result;
}
+bool Font::isCJKIdeograph(UChar32 c)
+{
+ // The basic CJK Unified Ideographs block.
+ if (c >= 0x4E00 && c <= 0x9FFF)
+ return true;
+
+ // CJK Unified Ideographs Extension A.
+ if (c >= 0x3400 && c <= 0x4DBF)
+ return true;
+
+ // CJK Radicals Supplement.
+ if (c >= 0x2E80 && c <= 0x2EFF)
+ return true;
+
+ // Kangxi Radicals.
+ if (c >= 0x2F00 && c <= 0x2FDF)
+ return true;
+
+ // Ideographic Description Characters.
+ if (c >= 0x2FF0 && c <= 0x2FFF)
+ return true;
+
+ // CJK Symbols and Punctuation.
+ if (c >= 0x3000 && c <= 0x303F)
+ return true;
+
+ // CJK Strokes.
+ if (c >= 0x31C0 && c <= 0x31EF)
+ return true;
+
+ // Enclosed CJK Letters and Months.
+ if (c >= 0x3200 && c <= 0x32FF)
+ return true;
+
+ // CJK Compatibility.
+ if (c >= 0x3300 && c <= 0x33FF)
+ return true;
+
+ // CJK Compatibility Ideographs.
+ if (c >= 0xF900 && c <= 0xFAFF)
+ return true;
+
+ // CJK Compatibility Forms.
+ if (c >= 0xFE30 && c <= 0xFE4F)
+ return true;
+
+ // Emoji.
+ if (c >= 0x1F200 && c <= 0x1F6F)
+ return true;
+
+ // CJK Unified Ideographs Extension B.
+ if (c >= 0x20000 && c <= 0x2A6DF)
+ return true;
+
+ // CJK Unified Ideographs Extension C.
+ if (c >= 0x2A700 && c <= 0x2B73F)
+ return true;
+
+ // CJK Unified Ideographs Extension D.
+ if (c >= 0x2B740 && c <= 0x2B81F)
+ return true;
+
+ // CJK Compatibility Ideographs Supplement.
+ if (c >= 0x2F800 && c <= 0x2FA1F)
+ return true;
+
+ return false;
+}
+
}
diff --git a/WebCore/platform/graphics/Font.h b/WebCore/platform/graphics/Font.h
index 1a321bd..cb83ad2 100644
--- a/WebCore/platform/graphics/Font.h
+++ b/WebCore/platform/graphics/Font.h
@@ -127,8 +127,8 @@ public:
bool isPlatformFont() const { return m_isPlatformFont; }
// Metrics that we query the FontFallbackList for.
- int ascent() const { return primaryFont()->ascent(); }
- int descent() const { return primaryFont()->descent(); }
+ int ascent(FontBaseline baselineType = AlphabeticBaseline) const { return primaryFont()->ascent(baselineType); }
+ int descent(FontBaseline baselineType = AlphabeticBaseline) const { return primaryFont()->descent(baselineType); }
int height() const { return ascent() + descent(); }
int lineSpacing() const { return primaryFont()->lineSpacing(); }
int lineGap() const { return primaryFont()->lineGap(); }
@@ -143,6 +143,8 @@ public:
// Used for complex text, and does not utilize the glyph map cache.
const FontData* fontDataForCharacters(const UChar*, int length) const;
+ static bool isCJKIdeograph(UChar32);
+
#if PLATFORM(QT)
QFont font() const;
#endif
diff --git a/WebCore/css/CSSVariablesRule.idl b/WebCore/platform/graphics/FontBaseline.h
index b7559f6..f7d256d 100644
--- a/WebCore/css/CSSVariablesRule.idl
+++ b/WebCore/platform/graphics/FontBaseline.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 Apple 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
@@ -10,10 +10,10 @@
* 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
+ * 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 INC. OR
+ * 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
@@ -23,11 +23,13 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-module css {
+#ifndef FontBaseline_h
+#define FontBaseline_h
- interface CSSVariablesRule : CSSRule {
- readonly attribute MediaList media;
- readonly attribute CSSVariablesDeclaration variables;
- };
+namespace WebCore {
-}
+enum FontBaseline { AlphabeticBaseline, IdeographicBaseline };
+
+} // namespace WebCore
+
+#endif // FontBaseline_h
diff --git a/WebCore/platform/graphics/FontFastPath.cpp b/WebCore/platform/graphics/FontFastPath.cpp
index 82f970f..f0dd33e 100644
--- a/WebCore/platform/graphics/FontFastPath.cpp
+++ b/WebCore/platform/graphics/FontFastPath.cpp
@@ -74,8 +74,23 @@ GlyphData Font::glyphDataForCharacter(UChar32 c, bool mirror, bool forceSmallCap
page = node->page();
if (page) {
GlyphData data = page->glyphDataForCharacter(c);
- if (data.fontData)
+ if (data.fontData) {
+ if (data.fontData->platformData().orientation() == Vertical && data.fontData->orientation() == Horizontal && Font::isCJKIdeograph(c)) {
+ const SimpleFontData* ideographFontData = data.fontData->brokenIdeographFontData();
+ GlyphPageTreeNode* ideographNode = GlyphPageTreeNode::getRootChild(ideographFontData, pageNumber);
+ const GlyphPage* ideographPage = ideographNode->page();
+ if (ideographPage) {
+ GlyphData data = ideographPage->glyphDataForCharacter(c);
+ if (data.fontData)
+ return data;
+ }
+
+ // Shouldn't be possible to even reach this point.
+ ASSERT_NOT_REACHED();
+ }
return data;
+ }
+
if (node->isSystemFallback())
break;
}
diff --git a/WebCore/platform/graphics/GraphicsContext.h b/WebCore/platform/graphics/GraphicsContext.h
index a91f3d3..e8ba0e4 100644
--- a/WebCore/platform/graphics/GraphicsContext.h
+++ b/WebCore/platform/graphics/GraphicsContext.h
@@ -430,6 +430,7 @@ namespace WebCore {
bool inTransparencyLayer() const;
PlatformPath* currentPath();
void pushTransparencyLayerInternal(const QRect &rect, qreal opacity, QPixmap& alphaMask);
+ void takeOwnershipOfPlatformContext();
static QPainter::CompositionMode toQtCompositionMode(CompositeOperator op);
#endif
diff --git a/WebCore/platform/graphics/GraphicsContext3D.cpp b/WebCore/platform/graphics/GraphicsContext3D.cpp
index 2a65128..d0ee639 100644
--- a/WebCore/platform/graphics/GraphicsContext3D.cpp
+++ b/WebCore/platform/graphics/GraphicsContext3D.cpp
@@ -97,11 +97,12 @@ bool GraphicsContext3D::extractImageData(Image* image,
unsigned int type,
bool flipY,
bool premultiplyAlpha,
+ bool ignoreGammaAndColorProfile,
Vector<uint8_t>& data)
{
if (!image)
return false;
- if (!getImageData(image, format, type, premultiplyAlpha, data))
+ if (!getImageData(image, format, type, premultiplyAlpha, ignoreGammaAndColorProfile, data))
return false;
if (flipY) {
unsigned long componentsPerPixel, bytesPerComponent;
diff --git a/WebCore/platform/graphics/GraphicsContext3D.h b/WebCore/platform/graphics/GraphicsContext3D.h
index e34a2f8..c2d5c24 100644
--- a/WebCore/platform/graphics/GraphicsContext3D.h
+++ b/WebCore/platform/graphics/GraphicsContext3D.h
@@ -404,6 +404,8 @@ public:
UNPACK_FLIP_Y_WEBGL = 0x9240,
UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241,
CONTEXT_LOST_WEBGL = 0x9242,
+ UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243,
+ BROWSER_DEFAULT_WEBGL = 0x9244
};
// Context creation attributes.
@@ -471,8 +473,6 @@ public:
int sizeInBytes(int type);
bool isGLES2Compliant() const;
- bool isGLES2NPOTStrict() const;
- bool isErrorGeneratedOnOutOfBoundsAccesses() const;
//----------------------------------------------------------------------
// Helpers for texture uploading and pixel readback.
@@ -488,13 +488,14 @@ public:
// Extracts the contents of the given Image into the passed Vector,
// packing the pixel data according to the given format and type,
- // and obeying the flipY and premultiplyAlpha flags. Returns true
- // upon success.
+ // and obeying the flipY, premultiplyAlpha, and ignoreGammaAndColorProfile
+ // flags. Returns true upon success.
bool extractImageData(Image* image,
unsigned int format,
unsigned int type,
bool flipY,
bool premultiplyAlpha,
+ bool ignoreGammaAndColorProfile,
Vector<uint8_t>& data);
// Extracts the contents of the given ImageData into the passed Vector,
@@ -803,12 +804,16 @@ public:
// extraction process. This premultiplication occurs before
// any packing of pixel data.
//
+ // If ignoreGammaAndColorProfile is true, gamma correction and ICC
+ // profile won't be applied.
+ //
// No vertical flip of the image data is performed by this
// method.
bool getImageData(Image* image,
unsigned int format,
unsigned int type,
bool premultiplyAlpha,
+ bool ignoreGammaAndColorProfile,
Vector<uint8_t>& outputVector);
// Possible alpha operations that may need to occur during
diff --git a/WebCore/platform/graphics/ImageSource.cpp b/WebCore/platform/graphics/ImageSource.cpp
index c6d97fe..d1a944a 100644
--- a/WebCore/platform/graphics/ImageSource.cpp
+++ b/WebCore/platform/graphics/ImageSource.cpp
@@ -41,9 +41,10 @@ namespace WebCore {
unsigned ImageSource::s_maxPixelsPerDecodedImage = 1024 * 1024;
#endif
-ImageSource::ImageSource(bool premultiplyAlpha)
+ImageSource::ImageSource(bool premultiplyAlpha, bool ignoreGammaAndColorProfile)
: m_decoder(0)
, m_premultiplyAlpha(premultiplyAlpha)
+ , m_ignoreGammaAndColorProfile(ignoreGammaAndColorProfile)
{
}
@@ -78,7 +79,7 @@ void ImageSource::setData(SharedBuffer* data, bool allDataReceived)
// If insufficient bytes are available to determine the image type, no decoder plugin will be
// made.
if (!m_decoder) {
- m_decoder = static_cast<NativeImageSourcePtr>(ImageDecoder::create(*data, m_premultiplyAlpha));
+ m_decoder = static_cast<NativeImageSourcePtr>(ImageDecoder::create(*data, m_premultiplyAlpha, m_ignoreGammaAndColorProfile));
#if ENABLE(IMAGE_DECODER_DOWN_SAMPLING)
if (m_decoder && s_maxPixelsPerDecodedImage)
m_decoder->setMaxNumPixels(s_maxPixelsPerDecodedImage);
diff --git a/WebCore/platform/graphics/ImageSource.h b/WebCore/platform/graphics/ImageSource.h
index 4d50253..3d96698 100644
--- a/WebCore/platform/graphics/ImageSource.h
+++ b/WebCore/platform/graphics/ImageSource.h
@@ -138,7 +138,7 @@ const int cAnimationNone = -2;
class ImageSource : public Noncopyable {
public:
- ImageSource(bool premultiplyAlpha = true);
+ ImageSource(bool premultiplyAlpha = true, bool ignoreGammaAndColorProfile = false);
~ImageSource();
// Tells the ImageSource that the Image no longer cares about decoded frame
@@ -207,6 +207,7 @@ protected:
#endif
NativeImageSourcePtr m_decoder;
bool m_premultiplyAlpha;
+ bool m_ignoreGammaAndColorProfile;
#if ENABLE(IMAGE_DECODER_DOWN_SAMPLING)
static unsigned s_maxPixelsPerDecodedImage;
#endif
diff --git a/WebCore/platform/graphics/IntPoint.h b/WebCore/platform/graphics/IntPoint.h
index d4ea2f2..cd5e4d4 100644
--- a/WebCore/platform/graphics/IntPoint.h
+++ b/WebCore/platform/graphics/IntPoint.h
@@ -109,6 +109,11 @@ public:
*this = expandedTo(zero());
}
+ IntPoint transposedPoint() const
+ {
+ return IntPoint(m_y, m_x);
+ }
+
#if PLATFORM(CG)
explicit IntPoint(const CGPoint&); // don't do this implicitly since it's lossy
operator CGPoint() const;
diff --git a/WebCore/platform/graphics/IntRect.h b/WebCore/platform/graphics/IntRect.h
index c8d7c71..e43e290 100644
--- a/WebCore/platform/graphics/IntRect.h
+++ b/WebCore/platform/graphics/IntRect.h
@@ -143,6 +143,8 @@ public:
void inflate(int d) { inflateX(d); inflateY(d); }
void scale(float s);
+ IntRect transposedRect() const { return IntRect(m_location.transposedPoint(), m_size.transposedSize()); }
+
#if PLATFORM(WX)
IntRect(const wxRect&);
operator wxRect() const;
diff --git a/WebCore/platform/graphics/IntSize.h b/WebCore/platform/graphics/IntSize.h
index 9ecf389..9db2224 100644
--- a/WebCore/platform/graphics/IntSize.h
+++ b/WebCore/platform/graphics/IntSize.h
@@ -104,6 +104,11 @@ public:
*this = expandedTo(IntSize());
}
+ IntSize transposedSize() const
+ {
+ return IntSize(m_height, m_width);
+ }
+
#if PLATFORM(CG)
explicit IntSize(const CGSize&); // don't do this implicitly since it's lossy
operator CGSize() const;
diff --git a/WebCore/platform/graphics/MediaPlayer.cpp b/WebCore/platform/graphics/MediaPlayer.cpp
index 9fb2d4a..83e84d9 100644
--- a/WebCore/platform/graphics/MediaPlayer.cpp
+++ b/WebCore/platform/graphics/MediaPlayer.cpp
@@ -47,21 +47,29 @@
#if PLATFORM(MAC)
#include "MediaPlayerPrivateQTKit.h"
+#define PlatformMediaEngineClassName MediaPlayerPrivateQTKit
#elif OS(WINCE) && !PLATFORM(QT)
#include "MediaPlayerPrivateWinCE.h"
+#define PlatformMediaEngineClassName MediaPlayerPrivate
#elif PLATFORM(WIN)
#include "MediaPlayerPrivateQuickTimeVisualContext.h"
-#include "MediaPlayerPrivateQuicktimeWin.h"
+#define PlatformMediaEngineClassName MediaPlayerPrivateQuickTimeVisualContext
#elif PLATFORM(QT)
-#if USE(QT_MULTIMEDIA)
+#if USE(QT_MULTIMEDIA) && !USE(GSTREAMER)
#include "MediaPlayerPrivateQt.h"
-#else
+#define PlatformMediaEngineClassName MediaPlayerPrivateQt
+#elif !USE(GSTREAMER)
#include "MediaPlayerPrivatePhonon.h"
+#define PlatformMediaEngineClassName MediaPlayerPrivatePhonon
#endif
#elif PLATFORM(CHROMIUM)
#include "MediaPlayerPrivateChromium.h"
+<<<<<<< HEAD
#elif PLATFORM(ANDROID)
#include "MediaPlayerPrivateAndroid.h"
+=======
+#define PlatformMediaEngineClassName MediaPlayerPrivate
+>>>>>>> webkit.org at r72274
#endif
namespace WebCore {
@@ -167,26 +175,14 @@ static Vector<MediaPlayerFactory*>& installedMediaEngines()
if (!enginesQueried) {
enginesQueried = true;
+
#if USE(GSTREAMER)
MediaPlayerPrivateGStreamer::registerMediaEngine(addMediaEngine);
#endif
-#if PLATFORM(WIN)
- MediaPlayerPrivateQuickTimeVisualContext::registerMediaEngine(addMediaEngine);
-#elif PLATFORM(QT)
-#if USE(QT_MULTIMEDIA)
- MediaPlayerPrivateQt::registerMediaEngine(addMediaEngine);
-#else
- MediaPlayerPrivatePhonon::registerMediaEngine(addMediaEngine);
+#if !PLATFORM(GTK) && !PLATFORM(EFL) && !(PLATFORM(QT) && USE(GSTREAMER))
+ PlatformMediaEngineClassName::registerMediaEngine(addMediaEngine);
#endif
-#elif !PLATFORM(GTK) && !PLATFORM(EFL)
- // FIXME: currently all the MediaEngines are named
- // MediaPlayerPrivate. This code will need an update when bug
- // 36663 is adressed.
- MediaPlayerPrivate::registerMediaEngine(addMediaEngine);
-#endif
-
- // register additional engines here
}
return installedEngines;
@@ -653,6 +649,11 @@ float MediaPlayer::mediaTimeForTimeValue(float timeValue) const
return m_private->mediaTimeForTimeValue(timeValue);
}
+double MediaPlayer::maximumDurationToCacheMediaTime() const
+{
+ return m_private->maximumDurationToCacheMediaTime();
+}
+
// Client callbacks.
void MediaPlayer::networkStateChanged()
{
diff --git a/WebCore/platform/graphics/MediaPlayer.h b/WebCore/platform/graphics/MediaPlayer.h
index a199352..a9499a5 100644
--- a/WebCore/platform/graphics/MediaPlayer.h
+++ b/WebCore/platform/graphics/MediaPlayer.h
@@ -281,6 +281,8 @@ public:
float mediaTimeForTimeValue(float) const;
+ double maximumDurationToCacheMediaTime() const;
+
private:
MediaPlayer(MediaPlayerClient*);
diff --git a/WebCore/platform/graphics/MediaPlayerPrivate.h b/WebCore/platform/graphics/MediaPlayerPrivate.h
index 6a74714..d956286 100644
--- a/WebCore/platform/graphics/MediaPlayerPrivate.h
+++ b/WebCore/platform/graphics/MediaPlayerPrivate.h
@@ -129,6 +129,11 @@ public:
// engine uses rational numbers to represent media time.
virtual float mediaTimeForTimeValue(float timeValue) const { return timeValue; }
+ // Overide this if it is safe for HTMLMediaElement to cache movie time and report
+ // 'currentTime' as [cached time + elapsed wall time]. Returns the maximum wall time
+ // it is OK to calculate movie time before refreshing the cached time.
+ virtual double maximumDurationToCacheMediaTime() const { return 0; }
+
};
}
diff --git a/WebCore/platform/graphics/SimpleFontData.cpp b/WebCore/platform/graphics/SimpleFontData.cpp
index 7980643..391873a 100644
--- a/WebCore/platform/graphics/SimpleFontData.cpp
+++ b/WebCore/platform/graphics/SimpleFontData.cpp
@@ -51,11 +51,14 @@ SimpleFontData::SimpleFontData(const FontPlatformData& platformData, bool isCust
: m_maxCharWidth(-1)
, m_avgCharWidth(-1)
, m_unitsPerEm(defaultUnitsPerEm)
+ , m_orientation(platformData.orientation())
, m_platformData(platformData)
, m_treatAsFixedPitch(false)
, m_isCustomFont(isCustomFont)
, m_isLoading(isLoading)
+ , m_isBrokenIdeographFont(false)
, m_smallCapsFontData(0)
+ , m_brokenIdeographFontData(0)
{
platformInit();
platformGlyphInit();
@@ -64,12 +67,15 @@ SimpleFontData::SimpleFontData(const FontPlatformData& platformData, bool isCust
#if ENABLE(SVG_FONTS)
SimpleFontData::SimpleFontData(PassOwnPtr<SVGFontData> svgFontData, int size, bool syntheticBold, bool syntheticItalic)
- : m_platformData(FontPlatformData(size, syntheticBold, syntheticItalic))
+ : m_orientation(Horizontal)
+ , m_platformData(FontPlatformData(size, syntheticBold, syntheticItalic))
, m_treatAsFixedPitch(false)
, m_svgFontData(svgFontData)
, m_isCustomFont(true)
, m_isLoading(false)
+ , m_isBrokenIdeographFont(false)
, m_smallCapsFontData(0)
+ , m_brokenIdeographFontData(0)
{
SVGFontFaceElement* svgFontFaceElement = m_svgFontData->svgFontFaceElement();
m_unitsPerEm = svgFontFaceElement->unitsPerEm();
@@ -178,11 +184,18 @@ SimpleFontData::~SimpleFontData()
#endif
platformDestroy();
- if (!isCustomFont()) {
- if (m_smallCapsFontData)
- fontCache()->releaseFontData(m_smallCapsFontData);
+ if (!isCustomFont())
GlyphPageTreeNode::pruneTreeFontData(this);
+ else {
+ if (m_smallCapsFontData)
+ GlyphPageTreeNode::pruneTreeCustomFontData(m_smallCapsFontData);
+
+ if (m_brokenIdeographFontData)
+ GlyphPageTreeNode::pruneTreeCustomFontData(m_brokenIdeographFontData);
}
+
+ delete m_smallCapsFontData;
+ delete m_brokenIdeographFontData;
}
const SimpleFontData* SimpleFontData::fontDataForCharacter(UChar32) const
@@ -195,6 +208,16 @@ bool SimpleFontData::isSegmented() const
return false;
}
+SimpleFontData* SimpleFontData::brokenIdeographFontData() const
+{
+ if (!m_brokenIdeographFontData) {
+ m_brokenIdeographFontData = new SimpleFontData(m_platformData, isCustomFont(), false);
+ m_brokenIdeographFontData->m_orientation = Vertical;
+ m_brokenIdeographFontData->m_isBrokenIdeographFont = true;
+ }
+ return m_brokenIdeographFontData;
+}
+
#ifndef NDEBUG
String SimpleFontData::description() const
{
diff --git a/WebCore/platform/graphics/SimpleFontData.h b/WebCore/platform/graphics/SimpleFontData.h
index 7bd58ad..432a164 100644
--- a/WebCore/platform/graphics/SimpleFontData.h
+++ b/WebCore/platform/graphics/SimpleFontData.h
@@ -24,6 +24,7 @@
#ifndef SimpleFontData_h
#define SimpleFontData_h
+#include "FontBaseline.h"
#include "FontData.h"
#include "FontPlatformData.h"
#include "FloatRect.h"
@@ -77,9 +78,14 @@ public:
const FontPlatformData& platformData() const { return m_platformData; }
SimpleFontData* smallCapsFontData(const FontDescription& fontDescription) const;
- // vertical metrics
- int ascent() const { return m_ascent; }
- int descent() const { return m_descent; }
+ SimpleFontData* brokenIdeographFontData() const;
+
+ // FIXME: Use the actual metrics for fonts with vertical tables instead of just hard-coding. If the font is horizontally oriented or
+ // a broken ideographic font, then just hard-code to split ascent/descent down the middle. Otherwise we should actually use the metrics
+ // from the font itself.
+ int ascent(FontBaseline baselineType = AlphabeticBaseline) const { return baselineType == AlphabeticBaseline ? m_ascent : height() - height() / 2; }
+ int descent(FontBaseline baselineType = AlphabeticBaseline) const { return baselineType == AlphabeticBaseline ? m_descent : height() / 2; }
+ int height() const { return m_ascent + m_descent; }
int lineSpacing() const { return m_lineSpacing; }
int lineGap() const { return m_lineGap; }
float maxCharWidth() const { return m_maxCharWidth; }
@@ -118,6 +124,8 @@ public:
virtual bool isLoading() const { return m_isLoading; }
virtual bool isSegmented() const;
+ bool isBrokenIdeographFont() const { return m_isBrokenIdeographFont; }
+
const GlyphData& missingGlyphData() const { return m_missingGlyphData; }
#ifndef NDEBUG
@@ -162,6 +170,8 @@ public:
wxFont* getWxFont() const { return m_platformData.font(); }
#endif
+ FontOrientation orientation() const { return m_orientation; }
+
private:
void platformInit();
void platformGlyphInit();
@@ -188,6 +198,9 @@ private:
float m_avgCharWidth;
float m_xHeight;
unsigned m_unitsPerEm;
+
+ FontOrientation m_orientation; // This is our supported orientation according to the tables in the font. FontPlatformData will just always have the desired orientation.
+ // This value represents what we actually support.
FontPlatformData m_platformData;
@@ -202,6 +215,7 @@ private:
bool m_isCustomFont; // Whether or not we are custom font loaded via @font-face
bool m_isLoading; // Whether or not this custom font is still in the act of loading.
+ bool m_isBrokenIdeographFont;
Glyph m_spaceGlyph;
float m_spaceWidth;
@@ -213,6 +227,8 @@ private:
mutable SimpleFontData* m_smallCapsFontData;
+ mutable SimpleFontData* m_brokenIdeographFontData;
+
#if PLATFORM(CG) || PLATFORM(CAIRO) || PLATFORM(WX)
float m_syntheticBoldOffset;
#endif
diff --git a/WebCore/platform/graphics/cairo/RefPtrCairo.cpp b/WebCore/platform/graphics/cairo/RefPtrCairo.cpp
index a6c983e..c8b242c 100644
--- a/WebCore/platform/graphics/cairo/RefPtrCairo.cpp
+++ b/WebCore/platform/graphics/cairo/RefPtrCairo.cpp
@@ -76,6 +76,18 @@ template<> void derefIfNotNull(cairo_scaled_font_t* ptr)
cairo_scaled_font_destroy(ptr);
}
+template<> void refIfNotNull(cairo_pattern_t* ptr)
+{
+ if (LIKELY(ptr != 0))
+ cairo_pattern_reference(ptr);
+}
+
+template<> void derefIfNotNull(cairo_pattern_t* ptr)
+{
+ if (LIKELY(ptr != 0))
+ cairo_pattern_destroy(ptr);
+}
+
#if defined(USE_FREETYPE)
template<> void refIfNotNull(FcPattern* ptr)
{
diff --git a/WebCore/platform/graphics/cairo/RefPtrCairo.h b/WebCore/platform/graphics/cairo/RefPtrCairo.h
index 0429ec5..204d1e3 100644
--- a/WebCore/platform/graphics/cairo/RefPtrCairo.h
+++ b/WebCore/platform/graphics/cairo/RefPtrCairo.h
@@ -26,6 +26,7 @@ typedef struct _cairo cairo_t;
typedef struct _cairo_surface cairo_surface_t;
typedef struct _cairo_font_face cairo_font_face_t;
typedef struct _cairo_scaled_font cairo_scaled_font_t;
+typedef struct _cairo_pattern cairo_pattern_t;
#if defined(USE_FREETYPE)
typedef struct _FcPattern FcPattern;
@@ -45,6 +46,9 @@ template<> void derefIfNotNull(cairo_font_face_t* ptr);
template<> void refIfNotNull(cairo_scaled_font_t* ptr);
template<> void derefIfNotNull(cairo_scaled_font_t* ptr);
+template<> void refIfNotNull(cairo_pattern_t*);
+template<> void derefIfNotNull(cairo_pattern_t*);
+
#if defined(USE_FREETYPE)
template<> void refIfNotNull(FcPattern* ptr);
template<> void derefIfNotNull(FcPattern* ptr);
diff --git a/WebCore/platform/graphics/cg/FontPlatformData.h b/WebCore/platform/graphics/cg/FontPlatformData.h
index b261f87..e21b444 100644
--- a/WebCore/platform/graphics/cg/FontPlatformData.h
+++ b/WebCore/platform/graphics/cg/FontPlatformData.h
@@ -24,6 +24,7 @@
#ifndef FontPlatformData_h
#define FontPlatformData_h
+#include "FontOrientation.h"
#include "RefCountedGDIHandle.h"
#include "StringImpl.h"
#include <wtf/Forward.h>
@@ -66,6 +67,8 @@ public:
bool syntheticOblique() const { return m_syntheticOblique; }
bool useGDI() const { return m_useGDI; }
+ FontOrientation orientation() const { return Horizontal; } // FIXME: Implement.
+
unsigned hash() const
{
return m_font->hash();
@@ -97,6 +100,6 @@ private:
bool m_useGDI;
};
-}
+} // namespace WebCore
#endif
diff --git a/WebCore/platform/graphics/cg/GraphicsContext3DCG.cpp b/WebCore/platform/graphics/cg/GraphicsContext3DCG.cpp
index 0c6acf9..7a58eed 100644
--- a/WebCore/platform/graphics/cg/GraphicsContext3DCG.cpp
+++ b/WebCore/platform/graphics/cg/GraphicsContext3DCG.cpp
@@ -91,6 +91,7 @@ bool GraphicsContext3D::getImageData(Image* image,
unsigned int format,
unsigned int type,
bool premultiplyAlpha,
+ bool ignoreGammaAndColorProfile,
Vector<uint8_t>& outputVector)
{
if (!image)
@@ -98,7 +99,7 @@ bool GraphicsContext3D::getImageData(Image* image,
CGImageRef cgImage;
RetainPtr<CGImageRef> decodedImage;
if (image->data()) {
- ImageSource decoder(false);
+ ImageSource decoder(false, ignoreGammaAndColorProfile);
decoder.setData(image->data(), true);
if (!decoder.frameCount())
return false;
diff --git a/WebCore/platform/graphics/cg/ImageSourceCG.cpp b/WebCore/platform/graphics/cg/ImageSourceCG.cpp
index 5fa4896..f01c442 100644
--- a/WebCore/platform/graphics/cg/ImageSourceCG.cpp
+++ b/WebCore/platform/graphics/cg/ImageSourceCG.cpp
@@ -63,10 +63,11 @@ void sharedBufferRelease(void* info)
}
#endif
-ImageSource::ImageSource(bool premultiplyAlpha)
+ImageSource::ImageSource(bool premultiplyAlpha, bool ignoreGammaAndColorProfile)
: m_decoder(0)
// FIXME: m_premultiplyAlpha is ignored in cg at the moment.
, m_premultiplyAlpha(premultiplyAlpha)
+ , m_ignoreGammaAndColorProfile(ignoreGammaAndColorProfile)
{
}
diff --git a/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp b/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp
index eba5349..375a74b 100644
--- a/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp
+++ b/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp
@@ -68,9 +68,7 @@ ContentLayerChromium::SharedValues::SharedValues(GraphicsContext3D* context)
" v_texCoord = a_texCoord; \n"
"} \n";
- // Note differences between Skia and Core Graphics versions:
- // - Skia uses BGRA
- // - Core Graphics uses RGBA
+ // Color is in BGRA order.
char fragmentShaderString[] =
"precision mediump float; \n"
"varying vec2 v_texCoord; \n"
@@ -79,13 +77,7 @@ ContentLayerChromium::SharedValues::SharedValues(GraphicsContext3D* context)
"void main() \n"
"{ \n"
" vec4 texColor = texture2D(s_texture, v_texCoord); \n"
-#if PLATFORM(SKIA)
" gl_FragColor = vec4(texColor.z, texColor.y, texColor.x, texColor.w) * alpha; \n"
-#elif PLATFORM(CG)
- " gl_FragColor = vec4(texColor.x, texColor.y, texColor.z, texColor.w) * alpha; \n"
-#else
-#error "Need to implement for your platform."
-#endif
"} \n";
m_contentShaderProgram = createShaderProgram(m_context, vertexShaderString, fragmentShaderString);
@@ -130,6 +122,7 @@ ContentLayerChromium::~ContentLayerChromium()
void ContentLayerChromium::cleanupResources()
{
+ LayerChromium::cleanupResources();
if (layerRenderer()) {
if (m_contentsTexture) {
layerRenderer()->deleteLayerTexture(m_contentsTexture);
@@ -141,11 +134,11 @@ void ContentLayerChromium::cleanupResources()
bool ContentLayerChromium::requiresClippedUpdateRect() const
{
// To avoid allocating excessively large textures, switch into "large layer mode" if
- // one of the layer's dimensions is larger than 2000 pixels or the current size
- // of the visible rect. This is a temporary measure until layer tiling is implemented.
+ // one of the layer's dimensions is larger than 2000 pixels or the size of
+ // surface it's rendering into. This is a temporary measure until layer tiling is implemented.
static const int maxLayerSize = 2000;
- return (m_bounds.width() > max(maxLayerSize, layerRenderer()->rootLayerContentRect().width())
- || m_bounds.height() > max(maxLayerSize, layerRenderer()->rootLayerContentRect().height())
+ return (m_bounds.width() > max(maxLayerSize, m_targetRenderSurface->contentRect().width())
+ || m_bounds.height() > max(maxLayerSize, m_targetRenderSurface->contentRect().height())
|| !layerRenderer()->checkTextureSize(m_bounds));
}
@@ -153,25 +146,26 @@ void ContentLayerChromium::calculateClippedUpdateRect(IntRect& dirtyRect, IntRec
{
// For the given layer size and content rect, calculate:
// 1) The minimal texture space rectangle to be uploaded, returned in dirtyRect.
- // 2) The content rect-relative rectangle to draw this texture in, returned in drawRect.
-
- const IntRect clipRect = layerRenderer()->currentScissorRect();
- const TransformationMatrix& transform = drawTransform();
- // The layer's draw transform points to the center of the layer, relative to
- // the content rect. layerPos is the distance from the top left of the
- // layer to the top left of the content rect.
- const IntPoint layerPos(m_bounds.width() / 2 - transform.m41(),
- m_bounds.height() / 2 - transform.m42());
- // Transform the contentRect into the space of the layer.
- IntRect contentRectInLayerSpace(layerPos, clipRect.size());
-
- // Clip the entire layer against the visible region in the content rect
- // and use that as the drawable texture, instead of the entire layer.
- dirtyRect = IntRect(IntPoint(0, 0), m_bounds);
- dirtyRect.intersect(contentRectInLayerSpace);
-
- // The draw position is relative to the content rect.
- drawRect = IntRect(toPoint(dirtyRect.location() - layerPos), dirtyRect.size());
+ // 2) The rectangle to draw this texture in relative to the target render surface, returned in drawRect.
+
+ ASSERT(m_targetRenderSurface);
+ const IntRect clipRect = m_targetRenderSurface->contentRect();
+
+ TransformationMatrix layerOriginTransform = drawTransform();
+ layerOriginTransform.translate3d(-0.5 * m_bounds.width(), -0.5 * m_bounds.height(), 0);
+
+ // For now we apply the large layer treatment only for layers that are either untransformed
+ // or are purely translated. Their matrix is expected to be invertible.
+ ASSERT(layerOriginTransform.isInvertible());
+
+ TransformationMatrix targetToLayerMatrix = layerOriginTransform.inverse();
+ IntRect clipRectInLayerCoords = targetToLayerMatrix.mapRect(clipRect);
+ clipRectInLayerCoords.intersect(IntRect(0, 0, m_bounds.width(), m_bounds.height()));
+
+ dirtyRect = clipRectInLayerCoords;
+
+ // Map back to the target surface coordinate system.
+ drawRect = layerOriginTransform.mapRect(dirtyRect);
}
void ContentLayerChromium::updateContents()
@@ -205,12 +199,21 @@ void ContentLayerChromium::updateContents()
m_skipsDraw = true;
return;
}
- if (m_largeLayerDirtyRect == dirtyRect)
- return;
- m_largeLayerDirtyRect = dirtyRect;
- requiredTextureSize = dirtyRect.size();
- updateRect = IntRect(IntPoint(0, 0), dirtyRect.size());
+ // If the portion of the large layer that's visible hasn't changed
+ // then we don't need to update it, _unless_ its contents have changed
+ // in which case we only update the dirty bits.
+ if (m_largeLayerDirtyRect == dirtyRect) {
+ if (!m_dirtyRect.intersects(dirtyRect))
+ return;
+ dirtyRect.intersect(IntRect(m_dirtyRect));
+ updateRect = dirtyRect;
+ requiredTextureSize = m_largeLayerDirtyRect.size();
+ } else {
+ m_largeLayerDirtyRect = dirtyRect;
+ requiredTextureSize = dirtyRect.size();
+ updateRect = IntRect(IntPoint(0, 0), dirtyRect.size());
+ }
} else {
dirtyRect = IntRect(m_dirtyRect);
IntRect boundsRect(IntPoint(0, 0), m_bounds);
@@ -227,6 +230,9 @@ void ContentLayerChromium::updateContents()
updateRect = dirtyRect;
}
+ if (dirtyRect.isEmpty())
+ return;
+
#if PLATFORM(SKIA)
const SkBitmap* skiaBitmap = 0;
OwnPtr<skia::PlatformCanvas> canvas;
@@ -266,7 +272,7 @@ void ContentLayerChromium::updateContents()
RetainPtr<CGContextRef> contextCG(AdoptCF, CGBitmapContextCreate(tempVector.data(),
dirtyRect.width(), dirtyRect.height(), 8, rowBytes,
colorSpace.get(),
- kCGImageAlphaPremultipliedLast));
+ kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host));
CGContextTranslateCTM(contextCG.get(), 0, dirtyRect.height());
CGContextScaleCTM(contextCG.get(), 1, -1);
diff --git a/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp b/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp
index e44ec9d..0395bc2 100644
--- a/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp
+++ b/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp
@@ -71,6 +71,11 @@ DrawingBuffer::DrawingBuffer(GraphicsContext3D* context, const IntSize& size)
: m_context(context)
, m_size(size)
, m_fbo(0)
+ , m_colorBuffer(0)
+ , m_depthStencilBuffer(0)
+ , m_multisampleFBO(0)
+ , m_multisampleColorBuffer(0)
+ , m_multisampleDepthStencilBuffer(0)
, m_internal(new DrawingBufferInternal)
{
if (!m_context->getExtensions()->supports("GL_CHROMIUM_copy_texture_to_parent_texture")) {
@@ -79,7 +84,7 @@ DrawingBuffer::DrawingBuffer(GraphicsContext3D* context, const IntSize& size)
}
m_fbo = context->createFramebuffer();
context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_fbo);
- m_internal->offscreenColorTexture = generateColorTexture(context, size);
+ m_colorBuffer = generateColorTexture(context, size);
}
DrawingBuffer::~DrawingBuffer()
@@ -93,7 +98,7 @@ DrawingBuffer::~DrawingBuffer()
return;
m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_fbo);
- m_context->deleteTexture(m_internal->offscreenColorTexture);
+ m_context->deleteTexture(m_colorBuffer);
clear();
}
@@ -113,23 +118,13 @@ void DrawingBuffer::publishToPlatformLayer()
// happens before the compositor draws. This means we might draw stale frames sometimes. Ideally this
// would insert a fence into the child command stream that the compositor could wait for.
m_context->makeContextCurrent();
- static_cast<Extensions3DChromium*>(m_context->getExtensions())->copyTextureToParentTextureCHROMIUM(m_internal->offscreenColorTexture, parentTexture);
+ static_cast<Extensions3DChromium*>(m_context->getExtensions())->copyTextureToParentTextureCHROMIUM(m_colorBuffer, parentTexture);
m_context->flush();
}
#endif
-void DrawingBuffer::reset(const IntSize& newSize)
+void DrawingBuffer::didReset()
{
- if (!m_context)
- return;
-
- if (m_size == newSize)
- return;
- m_size = newSize;
-
- m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, m_internal->offscreenColorTexture);
- m_context->texImage2D(GraphicsContext3D::TEXTURE_2D, 0, GraphicsContext3D::RGBA, m_size.width(), m_size.height(), 0, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNED_BYTE, 0);
-
#if USE(ACCELERATED_COMPOSITING)
if (m_internal->platformLayer)
m_internal->platformLayer->setTextureChanged();
@@ -145,9 +140,9 @@ PlatformLayer* DrawingBuffer::platformLayer()
}
#endif
-unsigned DrawingBuffer::getRenderingResultsAsTexture()
+Platform3DObject DrawingBuffer::platformColorBuffer() const
{
- return m_internal->offscreenColorTexture;
+ return m_colorBuffer;
}
}
diff --git a/WebCore/platform/graphics/chromium/Extensions3DChromium.h b/WebCore/platform/graphics/chromium/Extensions3DChromium.h
index 0fd1fff..5fda020 100644
--- a/WebCore/platform/graphics/chromium/Extensions3DChromium.h
+++ b/WebCore/platform/graphics/chromium/Extensions3DChromium.h
@@ -36,9 +36,15 @@ class Extensions3DChromium : public Extensions3D {
public:
virtual ~Extensions3DChromium();
+ // Supported extensions:
+ // GL_CHROMIUM_resource_safe : indicating that textures/renderbuffers are always initialized before read/write.
+ // GL_CHROMIUM_strict_attribs : indicating a GL error is generated for out-of-bounds buffer accesses.
+
// Extensions3D methods.
virtual bool supports(const String&);
virtual int getGraphicsResetStatusARB();
+ virtual void blitFramebuffer(long srcX0, long srcY0, long srcX1, long srcY1, long dstX0, long dstY0, long dstX1, long dstY1, unsigned long mask, unsigned long filter) { }
+ virtual void renderbufferStorageMultisample(unsigned long target, unsigned long samples, unsigned long internalformat, unsigned long width, unsigned long height) { }
enum {
// GL_CHROMIUM_map_sub (enums inherited from GL_ARB_vertex_buffer_object)
diff --git a/WebCore/platform/graphics/chromium/FontLinux.cpp b/WebCore/platform/graphics/chromium/FontLinux.cpp
index e73747f..9fc7558 100644
--- a/WebCore/platform/graphics/chromium/FontLinux.cpp
+++ b/WebCore/platform/graphics/chromium/FontLinux.cpp
@@ -164,7 +164,8 @@ public:
TextRunWalker(const TextRun&, unsigned, const Font*);
~TextRunWalker();
- bool isWordBreak(unsigned, bool);
+ bool isWordBreak(unsigned);
+ int determineWordBreakSpacing(unsigned);
// setPadding sets a number of pixels to be distributed across the TextRun.
// WebKit uses this to justify text.
void setPadding(int);
@@ -182,10 +183,8 @@ public:
// setLetterSpacingAdjustment sets an additional number of pixels that is
// added to the advance after each output cluster. This matches the behaviour
// of WidthIterator::advance.
- //
- // (NOTE: currently does nothing because I don't know how to get the
- // cluster information from Harfbuzz.)
void setLetterSpacingAdjustment(int letterSpacingAdjustment) { m_letterSpacing = letterSpacingAdjustment; }
+ int letterSpacing() const { return m_letterSpacing; }
// Set the x offset for the next script run. This affects the values in
// |xPositions|
@@ -256,7 +255,7 @@ private:
// Since we only add a whole number of padding pixels at
// each word break we accumulate error. This is the
// number of pixels that we are behind so far.
- unsigned m_letterSpacing; // pixels to be added after each glyph.
+ int m_letterSpacing; // pixels to be added after each glyph.
};
@@ -301,11 +300,32 @@ TextRunWalker::~TextRunWalker()
delete[] m_item.log_clusters;
}
-bool TextRunWalker::isWordBreak(unsigned index, bool isRTL)
+bool TextRunWalker::isWordBreak(unsigned index)
{
- if (!isRTL)
- return index && isCodepointSpace(m_item.string[index]) && !isCodepointSpace(m_item.string[index - 1]);
- return index != m_item.stringLength - 1 && isCodepointSpace(m_item.string[index]) && !isCodepointSpace(m_item.string[index + 1]);
+ return index && isCodepointSpace(m_item.string[index]) && !isCodepointSpace(m_item.string[index - 1]);
+}
+
+int TextRunWalker::determineWordBreakSpacing(unsigned logClustersIndex)
+{
+ int wordBreakSpacing = 0;
+ // The first half of the conjunction works around the case where
+ // output glyphs aren't associated with any codepoints by the
+ // clusters log.
+ if (logClustersIndex < m_item.item.length
+ && isWordBreak(m_item.item.pos + logClustersIndex)) {
+ wordBreakSpacing = m_wordSpacingAdjustment;
+
+ if (m_padding > 0) {
+ int toPad = roundf(m_padPerWordBreak + m_padError);
+ m_padError += m_padPerWordBreak - toPad;
+
+ if (m_padding < toPad)
+ toPad = m_padding;
+ m_padding -= toPad;
+ wordBreakSpacing += toPad;
+ }
+ }
+ return wordBreakSpacing;
}
// setPadding sets a number of pixels to be distributed across the TextRun.
@@ -323,7 +343,7 @@ void TextRunWalker::setPadding(int padding)
bool isRTL = m_iterateBackwards;
for (unsigned i = 0; i < m_item.stringLength; i++) {
- if (isWordBreak(i, isRTL))
+ if (isWordBreak(i))
numWordBreaks++;
}
@@ -490,54 +510,51 @@ void TextRunWalker::setGlyphXPositions(bool isRTL)
// RTL) codepoint of the current glyph. Each time we advance a glyph,
// we skip over all the codepoints that contributed to the current
// glyph.
- unsigned logClustersIndex = isRTL ? m_item.num_glyphs - 1 : 0;
+ int logClustersIndex = 0;
+
+ if (isRTL) {
+ logClustersIndex = m_item.num_glyphs - 1;
- for (unsigned iter = 0; iter < m_item.num_glyphs; ++iter) {
// Glyphs are stored in logical order, but for layout purposes we
// always go left to right.
- int i = isRTL ? m_item.num_glyphs - iter - 1 : iter;
-
- m_glyphs16[i] = m_item.glyphs[i];
- double offsetX = truncateFixedPointToInteger(m_item.offsets[i].x);
- m_xPositions[i] = m_offsetX + position + offsetX;
-
- double advance = truncateFixedPointToInteger(m_item.advances[i]);
- // The first half of the conjuction works around the case where
- // output glyphs aren't associated with any codepoints by the
- // clusters log.
- if (logClustersIndex < m_item.item.length
- && isWordBreak(m_item.item.pos + logClustersIndex, isRTL)) {
- advance += m_wordSpacingAdjustment;
-
- if (m_padding > 0) {
- unsigned toPad = roundf(m_padPerWordBreak + m_padError);
- m_padError += m_padPerWordBreak - toPad;
-
- if (m_padding < toPad)
- toPad = m_padding;
- m_padding -= toPad;
- advance += toPad;
- }
- }
+ for (int i = m_item.num_glyphs - 1; i >= 0; --i) {
+ // Whitespace must be laid out in logical order, so when inserting
+ // spaces in RTL (but iterating in LTR order) we must insert spaces
+ // _before_ the next glyph.
+ if (i + 1 >= m_item.num_glyphs || m_item.attributes[i + 1].clusterStart)
+ position += m_letterSpacing;
+
+ position += determineWordBreakSpacing(logClustersIndex);
- // We would like to add m_letterSpacing after each cluster, but I
- // don't know where the cluster information is. This is typically
- // fine for Roman languages, but breaks more complex languages
- // terribly.
- // advance += m_letterSpacing;
+ m_glyphs16[i] = m_item.glyphs[i];
+ double offsetX = truncateFixedPointToInteger(m_item.offsets[i].x);
+ m_xPositions[i] = m_offsetX + position + offsetX;
- if (isRTL) {
while (logClustersIndex > 0 && logClusters()[logClustersIndex] == i)
logClustersIndex--;
- } else {
+
+ position += truncateFixedPointToInteger(m_item.advances[i]);
+ }
+ } else {
+ for (int i = 0; i < m_item.num_glyphs; ++i) {
+ m_glyphs16[i] = m_item.glyphs[i];
+ double offsetX = truncateFixedPointToInteger(m_item.offsets[i].x);
+ m_xPositions[i] = m_offsetX + position + offsetX;
+
+ double advance = truncateFixedPointToInteger(m_item.advances[i]);
+
+ advance += determineWordBreakSpacing(logClustersIndex);
+
+ if (m_item.attributes[i].clusterStart)
+ advance += m_letterSpacing;
+
while (logClustersIndex < m_item.item.length && logClusters()[logClustersIndex] == i)
logClustersIndex++;
- }
- position += advance;
+ position += advance;
+ }
}
-
- m_pixelWidth = position;
+ m_pixelWidth = std::max(position, 0.0);
m_offsetX += m_pixelWidth;
}
@@ -675,16 +692,19 @@ float Font::floatWidthForComplexText(const TextRun& run, HashSet<const SimpleFon
static int glyphIndexForXPositionInScriptRun(const TextRunWalker& walker, int x)
{
const HB_Fixed* advances = walker.advances();
+ int letterSpacing = walker.letterSpacing();
int glyphIndex;
if (walker.rtl()) {
for (glyphIndex = walker.length() - 1; glyphIndex >= 0; --glyphIndex) {
- if (x < truncateFixedPointToInteger(advances[glyphIndex]))
+ // When iterating LTR over RTL text, we must include the whitespace
+ // _before_ the glyph, so no + 1 here.
+ if (x < (walker.length() - glyphIndex) * letterSpacing + truncateFixedPointToInteger(advances[glyphIndex]))
break;
x -= truncateFixedPointToInteger(advances[glyphIndex]);
}
} else {
for (glyphIndex = 0; static_cast<unsigned>(glyphIndex) < walker.length(); ++glyphIndex) {
- if (x < truncateFixedPointToInteger(advances[glyphIndex]))
+ if (x < (glyphIndex * letterSpacing + truncateFixedPointToInteger(advances[glyphIndex])))
break;
x -= truncateFixedPointToInteger(advances[glyphIndex]);
}
diff --git a/WebCore/platform/graphics/chromium/FontPlatformDataChromiumWin.h b/WebCore/platform/graphics/chromium/FontPlatformDataChromiumWin.h
index c59cb56..b6ebb2e 100644
--- a/WebCore/platform/graphics/chromium/FontPlatformDataChromiumWin.h
+++ b/WebCore/platform/graphics/chromium/FontPlatformDataChromiumWin.h
@@ -34,6 +34,7 @@
#include "config.h"
+#include "FontOrientation.h"
#include <wtf/Forward.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
@@ -69,6 +70,8 @@ public:
HFONT hfont() const { return m_font ? m_font->hfont() : 0; }
float size() const { return m_size; }
+ FontOrientation orientation() const { return Horizontal; } // FIXME: Implement.
+
unsigned hash() const
{
return m_font ? m_font->hash() : NULL;
diff --git a/WebCore/platform/graphics/chromium/FontPlatformDataLinux.h b/WebCore/platform/graphics/chromium/FontPlatformDataLinux.h
index 363e55f..694a945 100644
--- a/WebCore/platform/graphics/chromium/FontPlatformDataLinux.h
+++ b/WebCore/platform/graphics/chromium/FontPlatformDataLinux.h
@@ -31,6 +31,7 @@
#ifndef FontPlatformDataLinux_h
#define FontPlatformDataLinux_h
+#include "FontOrientation.h"
#include "FontRenderStyle.h"
#include <wtf/Forward.h>
#include <wtf/RefPtr.h>
@@ -105,6 +106,8 @@ public:
unsigned hash() const;
float size() const { return m_textSize; }
+ FontOrientation orientation() const { return Horizontal; } // FIXME: Implement.
+
bool operator==(const FontPlatformData&) const;
FontPlatformData& operator=(const FontPlatformData&);
bool isHashTableDeletedValue() const { return m_typeface == hashTableDeletedFontValue(); }
diff --git a/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp b/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp
index afcc98c..adcbb82 100644
--- a/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp
+++ b/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp
@@ -135,7 +135,7 @@ void ImageLayerChromium::updateContents()
RetainPtr<CGContextRef> tempContext(AdoptCF, CGBitmapContextCreate(tempVector.data(),
width, height, 8, tempRowBytes,
colorSpace,
- kCGImageAlphaPremultipliedLast));
+ kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host));
CGContextSetBlendMode(tempContext.get(), kCGBlendModeCopy);
CGContextDrawImage(tempContext.get(),
CGRectMake(0, 0, static_cast<CGFloat>(width), static_cast<CGFloat>(height)),
diff --git a/WebCore/platform/graphics/chromium/LayerChromium.cpp b/WebCore/platform/graphics/chromium/LayerChromium.cpp
index 23e54e5..1f4feaf 100644
--- a/WebCore/platform/graphics/chromium/LayerChromium.cpp
+++ b/WebCore/platform/graphics/chromium/LayerChromium.cpp
@@ -143,6 +143,7 @@ PassRefPtr<LayerChromium> LayerChromium::create(GraphicsLayerChromium* owner)
LayerChromium::LayerChromium(GraphicsLayerChromium* owner)
: m_owner(owner)
, m_contentsDirty(false)
+ , m_targetRenderSurface(0)
, m_superlayer(0)
, m_anchorPoint(0.5, 0.5)
, m_backgroundColor(0, 0, 0, 0)
@@ -158,7 +159,9 @@ LayerChromium::LayerChromium(GraphicsLayerChromium* owner)
, m_opaque(true)
, m_geometryFlipped(false)
, m_needsDisplayOnBoundsChange(false)
+ , m_drawDepth(0)
, m_layerRenderer(0)
+ , m_renderSurface(0)
{
}
@@ -172,6 +175,12 @@ LayerChromium::~LayerChromium()
removeAllSublayers();
}
+void LayerChromium::cleanupResources()
+{
+ if (m_renderSurface)
+ m_renderSurface->cleanupResources();
+}
+
void LayerChromium::setLayerRenderer(LayerRendererChromium* renderer)
{
// If we're changing layer renderers then we need to free up any resources
@@ -184,6 +193,12 @@ void LayerChromium::setLayerRenderer(LayerRendererChromium* renderer)
m_layerRenderer = renderer;
}
+RenderSurfaceChromium* LayerChromium::createRenderSurface()
+{
+ m_renderSurface = new RenderSurfaceChromium(this);
+ return m_renderSurface.get();
+}
+
unsigned LayerChromium::createShaderProgram(GraphicsContext3D* context, const char* vertexShaderSource, const char* fragmentShaderSource)
{
unsigned vertexShader = loadShader(context, GraphicsContext3D::VERTEX_SHADER, vertexShaderSource);
@@ -463,24 +478,27 @@ const IntRect LayerChromium::getDrawRect() const
return mappedRect;
}
-// Draws the layer with a single colored shader. This method is used to do
-// quick draws into the stencil buffer.
-void LayerChromium::drawAsMask()
+// Returns true if any of the layer's descendants has drawable content.
+bool LayerChromium::descendantsDrawContent()
{
- ASSERT(layerRenderer());
- const SharedValues* sv = layerRenderer()->layerSharedValues();
- ASSERT(sv && sv->initialized());
- layerRenderer()->useShader(sv->borderShaderProgram());
-
- // We reuse the border shader here as all we need a single colored shader pass.
- // The color specified here is only for debug puproses as typically when we call this
- // method, writes to the color channels are disabled.
- GraphicsContext3D* context = layerRendererContext();
- GLC(context, context->uniform4f(sv->borderShaderColorLocation(), 0, 1 , 0, 0.7));
+ const Vector<RefPtr<LayerChromium> >& sublayers = getSublayers();
+ for (size_t i = 0; i < sublayers.size(); ++i)
+ if (sublayers[i]->descendantsDrawContentRecursive())
+ return true;
+ return false;
+}
- drawTexturedQuad(context, layerRenderer()->projectionMatrix(), drawTransform(),
- bounds().width(), bounds().height(), drawOpacity(),
- sv->borderShaderMatrixLocation(), -1);
+// Returns true if either this layer or one of its descendants has drawable content.
+bool LayerChromium::descendantsDrawContentRecursive()
+{
+ if (drawsContent())
+ return true;
+
+ const Vector<RefPtr<LayerChromium> >& sublayers = getSublayers();
+ for (size_t i = 0; i < sublayers.size(); ++i)
+ if (sublayers[i]->descendantsDrawContentRecursive())
+ return true;
+ return false;
}
// static
diff --git a/WebCore/platform/graphics/chromium/LayerChromium.h b/WebCore/platform/graphics/chromium/LayerChromium.h
index 3956e28..86f3580 100644
--- a/WebCore/platform/graphics/chromium/LayerChromium.h
+++ b/WebCore/platform/graphics/chromium/LayerChromium.h
@@ -38,6 +38,7 @@
#include "GraphicsContext.h"
#include "GraphicsLayerChromium.h"
#include "PlatformString.h"
+#include "RenderSurfaceChromium.h"
#include "TransformationMatrix.h"
#include <wtf/OwnPtr.h>
#include <wtf/PassRefPtr.h>
@@ -139,10 +140,7 @@ public:
void setGeometryFlipped(bool flipped) { m_geometryFlipped = flipped; setNeedsCommit(); }
bool geometryFlipped() const { return m_geometryFlipped; }
- void setDrawTransform(const TransformationMatrix& transform) { m_drawTransform = transform; }
const TransformationMatrix& drawTransform() const { return m_drawTransform; }
-
- void setDrawOpacity(float opacity) { m_drawOpacity = opacity; }
float drawOpacity() const { return m_drawOpacity; }
bool preserves3D() { return m_owner && m_owner->preserves3D(); }
@@ -165,8 +163,7 @@ public:
void drawDebugBorder();
- // Draws the layer without a texture. This is used for stencil operations.
- void drawAsMask();
+ RenderSurfaceChromium* createRenderSurface();
// Stores values that are shared between instances of this class that are
// associated with the same LayerRendererChromium (and hence the same GL
@@ -198,6 +195,8 @@ public:
static void prepareForDraw(const SharedValues*);
+ LayerRendererChromium* layerRenderer() const { return m_layerRenderer.get(); }
+
protected:
GraphicsLayerChromium* m_owner;
LayerChromium(GraphicsLayerChromium* owner);
@@ -205,11 +204,13 @@ protected:
// This is called to clean up resources being held in the same context as
// layerRendererContext(). Subclasses should override this method if they
// hold context-dependent resources such as textures.
- virtual void cleanupResources() { }
+ virtual void cleanupResources();
- LayerRendererChromium* layerRenderer() const { return m_layerRenderer.get(); }
GraphicsContext3D* layerRendererContext() const;
+ // Returns true if any of the layer's descendants has content to draw.
+ bool descendantsDrawContent();
+
static void drawTexturedQuad(GraphicsContext3D*, const TransformationMatrix& projectionMatrix, const TransformationMatrix& layerMatrix,
float width, float height, float opacity,
int matrixLocation, int alphaLocation);
@@ -222,6 +223,12 @@ protected:
FloatRect m_dirtyRect;
bool m_contentsDirty;
+ // Render surface this layer draws into. This is a surface that can belong
+ // either to this layer (if m_targetRenderSurface == m_renderSurface) or
+ // to an ancestor of this layer. The target render surface determines the
+ // coordinate system the layer's transforms are relative to.
+ RenderSurfaceChromium* m_targetRenderSurface;
+
// All layer shaders share the same attribute locations for the vertex positions
// and texture coordinates. This allows switching shaders without rebinding attribute
// arrays.
@@ -244,6 +251,8 @@ private:
// This should only be called from removeFromSuperlayer.
void removeSublayer(LayerChromium*);
+ bool descendantsDrawContentRecursive();
+
Vector<RefPtr<LayerChromium> > m_sublayers;
LayerChromium* m_superlayer;
@@ -266,6 +275,10 @@ private:
bool m_geometryFlipped;
bool m_needsDisplayOnBoundsChange;
+ // The global depth value of the center of the layer. This value is used
+ // to sort layers from back to front.
+ float m_drawDepth;
+
// Points to the layer renderer that updates and draws this layer.
RefPtr<LayerRendererChromium> m_layerRenderer;
@@ -274,6 +287,18 @@ private:
TransformationMatrix m_sublayerTransform;
TransformationMatrix m_drawTransform;
+ // The scissor rectangle that should be used when this layer is drawn.
+ // Inherited by the parent layer and further restricted if this layer masks
+ // to bounds.
+ IntRect m_scissorRect;
+
+ // Render surface associated with this layer. The layer and its descendants
+ // will render to this surface.
+ OwnPtr<RenderSurfaceChromium> m_renderSurface;
+
+ // Hierarchical bounding rect containing the layer and its descendants.
+ IntRect m_drawableContentRect;
+
String m_name;
};
diff --git a/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp b/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
index e1b525b..91580cc 100644
--- a/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
+++ b/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
@@ -48,29 +48,38 @@
namespace WebCore {
-static TransformationMatrix orthoMatrix(float left, float right, float bottom, float top, float nearZ, float farZ)
+static TransformationMatrix orthoMatrix(float left, float right, float bottom, float top)
{
float deltaX = right - left;
float deltaY = top - bottom;
- float deltaZ = farZ - nearZ;
TransformationMatrix ortho;
- if (!deltaX || !deltaY || !deltaZ)
+ if (!deltaX || !deltaY)
return ortho;
ortho.setM11(2.0f / deltaX);
ortho.setM41(-(right + left) / deltaX);
ortho.setM22(2.0f / deltaY);
ortho.setM42(-(top + bottom) / deltaY);
- ortho.setM33(-2.0f / deltaZ);
- ortho.setM43(-(nearZ + farZ) / deltaZ);
+
+ // Z component of vertices is always set to zero as we don't use the depth buffer
+ // while drawing.
+ ortho.setM33(0);
+
return ortho;
}
-static inline bool compareLayerZ(const LayerChromium* a, const LayerChromium* b)
+// Returns true if the matrix has no rotation, skew or perspective components to it.
+static bool isScaleOrTranslation(const TransformationMatrix& m)
{
- const TransformationMatrix& transformA = a->drawTransform();
- const TransformationMatrix& transformB = b->drawTransform();
+ return !m.m12() && !m.m13() && !m.m14()
+ && !m.m21() && !m.m23() && !m.m24()
+ && !m.m31() && !m.m32() && !m.m43()
+ && m.m44();
+
+}
- return transformA.m43() < transformB.m43();
+bool LayerRendererChromium::compareLayerZ(const LayerChromium* a, const LayerChromium* b)
+{
+ return a->m_drawDepth < b->m_drawDepth;
}
PassRefPtr<LayerRendererChromium> LayerRendererChromium::create(PassRefPtr<GraphicsContext3D> context)
@@ -89,11 +98,14 @@ LayerRendererChromium::LayerRendererChromium(PassRefPtr<GraphicsContext3D> conte
: m_rootLayerTextureId(0)
, m_rootLayerTextureWidth(0)
, m_rootLayerTextureHeight(0)
- , m_scrollShaderProgram(0)
+ , m_textureLayerShaderProgram(0)
, m_rootLayer(0)
, m_scrollPosition(IntPoint(-1, -1))
, m_currentShader(0)
+ , m_currentRenderSurface(0)
+ , m_offscreenFramebufferId(0)
, m_context(context)
+ , m_defaultRenderSurface(0)
{
m_hardwareCompositing = initializeSharedObjects();
}
@@ -138,7 +150,7 @@ void LayerRendererChromium::setRootLayerCanvasSize(const IntSize& size)
m_rootLayerCGContext.adoptCF(CGBitmapContextCreate(m_rootLayerBackingStore.data(),
size.width(), size.height(), 8, rowBytes,
colorSpace.get(),
- kCGImageAlphaPremultipliedLast));
+ kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host));
CGContextTranslateCTM(m_rootLayerCGContext.get(), 0, size.height());
CGContextScaleCTM(m_rootLayerCGContext.get(), 1, -1);
m_rootLayerGraphicsContext = new GraphicsContext(m_rootLayerCGContext.get());
@@ -181,12 +193,15 @@ void LayerRendererChromium::prepareToDrawLayers(const IntRect& visibleRect, cons
int visibleRectWidth = visibleRect.width();
int visibleRectHeight = visibleRect.height();
if (visibleRectWidth != m_rootLayerTextureWidth || visibleRectHeight != m_rootLayerTextureHeight) {
- m_rootLayerTextureWidth = visibleRect.width();
- m_rootLayerTextureHeight = visibleRect.height();
+ m_rootLayerTextureWidth = visibleRectWidth;
+ m_rootLayerTextureHeight = visibleRectHeight;
- m_projectionMatrix = orthoMatrix(0, visibleRectWidth, visibleRectHeight, 0, -1000, 1000);
GLC(m_context, m_context->texImage2D(GraphicsContext3D::TEXTURE_2D, 0, GraphicsContext3D::RGBA, m_rootLayerTextureWidth, m_rootLayerTextureHeight, 0, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNED_BYTE, 0));
+ // Reset the current render surface to force an update of the viewport and
+ // projection matrix next time useRenderSurface is called.
+ m_currentRenderSurface = 0;
+
// The root layer texture was just resized so its contents are not
// useful for scrolling.
skipScroll = true;
@@ -201,8 +216,7 @@ void LayerRendererChromium::prepareToDrawLayers(const IntRect& visibleRect, cons
// FIXME: These calls can be made once, when the compositor context is initialized.
GLC(m_context, m_context->disable(GraphicsContext3D::DEPTH_TEST));
GLC(m_context, m_context->disable(GraphicsContext3D::CULL_FACE));
- GLC(m_context, m_context->depthFunc(GraphicsContext3D::LEQUAL));
- GLC(m_context, m_context->clearStencil(0));
+
// Blending disabled by default. Root layer alpha channel on Windows is incorrect when Skia uses ClearType.
GLC(m_context, m_context->disable(GraphicsContext3D::BLEND));
@@ -230,11 +244,11 @@ void LayerRendererChromium::prepareToDrawLayers(const IntRect& visibleRect, cons
0.5 * visibleRect.height() + scrollDelta.y(), 0);
scrolledLayerMatrix.scale3d(1, -1, 1);
- useShader(m_scrollShaderProgram);
- GLC(m_context, m_context->uniform1i(m_scrollShaderSamplerLocation, 0));
+ useShader(m_textureLayerShaderProgram);
+ GLC(m_context, m_context->uniform1i(m_textureLayerShaderSamplerLocation, 0));
LayerChromium::drawTexturedQuad(m_context.get(), m_projectionMatrix, scrolledLayerMatrix,
visibleRect.width(), visibleRect.height(), 1,
- m_scrollShaderMatrixLocation, -1);
+ m_textureLayerShaderMatrixLocation, m_textureLayerShaderAlphaLocation);
GLC(m_context, m_context->copyTexSubImage2D(GraphicsContext3D::TEXTURE_2D, 0, 0, 0, 0, 0, contentRect.width(), contentRect.height()));
}
@@ -257,7 +271,7 @@ void LayerRendererChromium::updateRootLayerTextureRect(const IntRect& updateRect
#if PLATFORM(SKIA)
// Get the contents of the updated rect.
- const SkBitmap bitmap = m_rootLayerCanvas->getDevice()->accessBitmap(false);
+ const SkBitmap& bitmap = m_rootLayerCanvas->getDevice()->accessBitmap(false);
ASSERT(bitmap.width() == updateRect.width() && bitmap.height() == updateRect.height());
void* pixels = bitmap.getPixels();
#elif PLATFORM(CG)
@@ -275,8 +289,16 @@ void LayerRendererChromium::drawLayers(const IntRect& visibleRect, const IntRect
{
ASSERT(m_hardwareCompositing);
+ m_defaultRenderSurface = m_rootLayer->m_renderSurface.get();
+ if (!m_defaultRenderSurface)
+ m_defaultRenderSurface = m_rootLayer->createRenderSurface();
+ m_defaultRenderSurface->m_contentRect = IntRect(0, 0, m_rootLayerTextureWidth, m_rootLayerTextureHeight);
+
+ useRenderSurface(m_defaultRenderSurface);
+
+ // Clear to blue to make it easier to spot unrendered regions.
m_context->clearColor(0, 0, 1, 1);
- m_context->clear(GraphicsContext3D::COLOR_BUFFER_BIT | GraphicsContext3D::DEPTH_BUFFER_BIT);
+ m_context->clear(GraphicsContext3D::COLOR_BUFFER_BIT);
GLC(m_context, m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, m_rootLayerTextureId));
@@ -295,46 +317,54 @@ void LayerRendererChromium::drawLayers(const IntRect& visibleRect, const IntRect
contentLayerValues->shaderMatrixLocation(), contentLayerValues->shaderAlphaLocation());
GLC(m_context, m_context->colorMask(true, true, true, true));
- // If culling is enabled then we will cull the backface.
- GLC(m_context, m_context->cullFace(GraphicsContext3D::BACK));
- // The orthographic projection is setup such that Y starts at zero and
- // increases going down the page so we need to adjust the winding order of
- // front facing triangles.
- GLC(m_context, m_context->frontFace(GraphicsContext3D::CW));
-
- // The shader used to render layers returns pre-multiplied alpha colors
- // so we need to send the blending mode appropriately.
- GLC(m_context, m_context->enable(GraphicsContext3D::BLEND));
- GLC(m_context, m_context->blendFunc(GraphicsContext3D::ONE, GraphicsContext3D::ONE_MINUS_SRC_ALPHA));
-
// Set the root visible/content rects --- used by subsequent drawLayers calls.
m_rootVisibleRect = visibleRect;
m_rootContentRect = contentRect;
- // Traverse the layer tree and update the layer transforms.
- float opacity = 1;
- const Vector<RefPtr<LayerChromium> >& sublayers = m_rootLayer->getSublayers();
- size_t i;
+ // Scissor out the scrollbars to avoid rendering on top of them.
+ IntRect rootScissorRect(contentRect);
+ // The scissorRect should not include the scroll offset.
+ rootScissorRect.move(-m_scrollPosition.x(), -m_scrollPosition.y());
+ m_rootLayer->m_scissorRect = rootScissorRect;
+
+ Vector<LayerChromium*> renderSurfaceLayerList;
+ renderSurfaceLayerList.append(m_rootLayer.get());
+
TransformationMatrix identityMatrix;
- for (i = 0; i < sublayers.size(); i++)
- updateLayersRecursive(sublayers[i].get(), identityMatrix, opacity);
+ m_defaultRenderSurface->m_layerList.clear();
+ updateLayersRecursive(m_rootLayer.get(), identityMatrix, renderSurfaceLayerList, m_defaultRenderSurface->m_layerList);
- // Enable scissoring to avoid rendering composited layers over the scrollbars.
+ // The shader used to render layers returns pre-multiplied alpha colors
+ // so we need to send the blending mode appropriately.
+ GLC(m_context, m_context->enable(GraphicsContext3D::BLEND));
+ GLC(m_context, m_context->blendFunc(GraphicsContext3D::ONE, GraphicsContext3D::ONE_MINUS_SRC_ALPHA));
GLC(m_context, m_context->enable(GraphicsContext3D::SCISSOR_TEST));
- IntRect scissorRect(contentRect);
- // The scissorRect should not include the scroll offset.
- scissorRect.move(-m_scrollPosition.x(), -m_scrollPosition.y());
- scissorToRect(scissorRect);
-
- // Clear the stencil buffer to 0.
- GLC(m_context, m_context->clear(GraphicsContext3D::STENCIL_BUFFER_BIT));
- // Disable writes to the stencil buffer.
- GLC(m_context, m_context->stencilMask(0));
+ // Update the contents of the render surfaces. We traverse the array from
+ // back to front to guarantee that nested render surfaces get rendered in the
+ // correct order.
+ for (int surfaceIndex = renderSurfaceLayerList.size() - 1; surfaceIndex >= 0 ; --surfaceIndex) {
+ LayerChromium* renderSurfaceLayer = renderSurfaceLayerList[surfaceIndex];
+ ASSERT(renderSurfaceLayer->m_renderSurface);
+
+ // Render surfaces whose drawable area has zero width or height
+ // will have no layers associated with them and should be skipped.
+ if (!renderSurfaceLayer->m_renderSurface->m_layerList.size())
+ continue;
+
+ useRenderSurface(renderSurfaceLayer->m_renderSurface.get());
+ if (renderSurfaceLayer != m_rootLayer) {
+ GLC(m_context, m_context->disable(GraphicsContext3D::SCISSOR_TEST));
+ GLC(m_context, m_context->clearColor(0, 0, 0, 0));
+ GLC(m_context, m_context->clear(GraphicsContext3D::COLOR_BUFFER_BIT));
+ GLC(m_context, m_context->enable(GraphicsContext3D::SCISSOR_TEST));
+ }
- // Traverse the layer tree one more time to draw the layers.
- for (size_t i = 0; i < sublayers.size(); i++)
- drawLayersRecursive(sublayers[i].get());
+ Vector<LayerChromium*>& layerList = renderSurfaceLayer->m_renderSurface->m_layerList;
+ ASSERT(layerList.size());
+ for (unsigned layerIndex = 0; layerIndex < layerList.size(); ++layerIndex)
+ drawLayer(layerList[layerIndex], renderSurfaceLayer->m_renderSurface.get());
+ }
GLC(m_context, m_context->disable(GraphicsContext3D::SCISSOR_TEST));
GLC(m_context, m_context->disable(GraphicsContext3D::BLEND));
@@ -408,10 +438,12 @@ bool LayerRendererChromium::isLayerVisible(LayerChromium* layer, const Transform
return mappedRect.intersects(FloatRect(-1, -1, 2, 2));
}
-// Recursively walks the layer tree starting at the given node and updates the
-// transform and opacity values.
-void LayerRendererChromium::updateLayersRecursive(LayerChromium* layer, const TransformationMatrix& parentMatrix, float opacity)
+// Recursively walks the layer tree starting at the given node and computes all the
+// necessary transformations, scissor rectangles, render surfaces, etc.
+void LayerRendererChromium::updateLayersRecursive(LayerChromium* layer, const TransformationMatrix& parentMatrix, Vector<LayerChromium*>& renderSurfaceLayerList, Vector<LayerChromium*>& layerList)
{
+ layer->setLayerRenderer(this);
+
// Compute the new matrix transformation that will be applied to this layer and
// all its sublayers. It's important to remember that the layer's position
// is the position of the layer's anchor point. Also, the coordinate system used
@@ -438,182 +470,254 @@ void LayerRendererChromium::updateLayersRecursive(LayerChromium* layer, const Tr
float centerOffsetX = (0.5 - anchorPoint.x()) * bounds.width();
float centerOffsetY = (0.5 - anchorPoint.y()) * bounds.height();
- // M = M[p]
- TransformationMatrix localMatrix = parentMatrix;
- // M = M[p] * Tr[l]
- localMatrix.translate3d(position.x(), position.y(), layer->anchorPointZ());
- // M = M[p] * Tr[l] * M[l]
- localMatrix.multLeft(layer->transform());
- // M = M[p] * Tr[l] * M[l] * Tr[c]
- localMatrix.translate3d(centerOffsetX, centerOffsetY, -layer->anchorPointZ());
+ TransformationMatrix layerLocalTransform;
+ // LT = Tr[l]
+ layerLocalTransform.translate3d(position.x(), position.y(), layer->anchorPointZ());
+ // LT = Tr[l] * M[l]
+ layerLocalTransform.multLeft(layer->transform());
+ // LT = Tr[l] * M[l] * Tr[c]
+ layerLocalTransform.translate3d(centerOffsetX, centerOffsetY, -layer->anchorPointZ());
+
+ TransformationMatrix combinedTransform = parentMatrix;
+ combinedTransform = combinedTransform.multLeft(layerLocalTransform);
+
+ FloatRect layerRect(-0.5 * layer->bounds().width(), -0.5 * layer->bounds().height(), layer->bounds().width(), layer->bounds().height());
+ IntRect transformedLayerRect;
+
+ // The layer and its descendants render on a new RenderSurface if any of
+ // these conditions hold:
+ // 1. The layer clips its descendants and its transform is not a simple translation.
+ // 2. If the layer has opacity != 1 and does not have a preserves-3d transform style.
+ // If a layer preserves-3d then we don't create a RenderSurface for it to avoid flattening
+ // out its children. The opacity value of the children layers is multiplied by the opacity
+ // of their parent.
+ bool useSurfaceForClipping = layer->masksToBounds() && !isScaleOrTranslation(combinedTransform);
+ bool useSurfaceForOpacity = layer->opacity() != 1 && !layer->preserves3D();
+ if ((useSurfaceForClipping || useSurfaceForOpacity) && layer->descendantsDrawContent()) {
+ RenderSurfaceChromium* renderSurface = layer->m_renderSurface.get();
+ if (!renderSurface)
+ renderSurface = layer->createRenderSurface();
+
+ // The origin of the new surface is the upper left corner of the layer.
+ layer->m_drawTransform = TransformationMatrix();
+ layer->m_drawTransform.translate3d(0.5 * bounds.width(), 0.5 * bounds.height(), 0);
+
+ transformedLayerRect = IntRect(0, 0, bounds.width(), bounds.height());
+
+ // Layer's opacity will be applied when drawing the render surface.
+ renderSurface->m_drawOpacity = layer->opacity();
+ if (layer->superlayer()->preserves3D())
+ renderSurface->m_drawOpacity *= layer->superlayer()->m_drawOpacity;
+ layer->m_drawOpacity = 1;
+
+ TransformationMatrix layerOriginTransform = combinedTransform;
+ layerOriginTransform.translate3d(-0.5 * bounds.width(), -0.5 * bounds.height(), 0);
+ renderSurface->m_originTransform = layerOriginTransform;
+ if (layerOriginTransform.isInvertible() && layer->superlayer()) {
+ TransformationMatrix parentToLayer = layerOriginTransform.inverse();
+
+ layer->m_scissorRect = parentToLayer.mapRect(layer->superlayer()->m_scissorRect);
+ } else
+ layer->m_scissorRect = IntRect();
+
+ // The render surface scissor rect is the scissor rect that needs to
+ // be applied before drawing the render surface onto its containing
+ // surface and is therefore expressed in the superlayer's coordinate system.
+ renderSurface->m_scissorRect = layer->superlayer()->m_scissorRect;
+
+ renderSurface->m_layerList.clear();
+
+ renderSurfaceLayerList.append(layer);
+ } else {
+ // DT = M[p] * LT
+ layer->m_drawTransform = combinedTransform;
+ transformedLayerRect = enclosingIntRect(layer->m_drawTransform.mapRect(layerRect));
+
+ layer->m_drawOpacity = layer->opacity();
+
+ if (layer->superlayer()) {
+ if (layer->superlayer()->preserves3D())
+ layer->m_drawOpacity *= layer->superlayer()->m_drawOpacity;
+
+ // Layers inherit the scissor rect from their superlayer.
+ layer->m_scissorRect = layer->superlayer()->m_scissorRect;
- // Calculate the layer's opacity.
- opacity *= layer->opacity();
+ layer->m_targetRenderSurface = layer->superlayer()->m_targetRenderSurface;
+ }
+
+ if (layer != m_rootLayer)
+ layer->m_renderSurface = 0;
+
+ if (layer->masksToBounds())
+ layer->m_scissorRect.intersect(transformedLayerRect);
+ }
+
+ if (layer->m_renderSurface)
+ layer->m_targetRenderSurface = layer->m_renderSurface.get();
+ else {
+ ASSERT(layer->superlayer());
+ layer->m_targetRenderSurface = layer->superlayer()->m_targetRenderSurface;
+ }
- layer->setDrawTransform(localMatrix);
- layer->setDrawOpacity(opacity);
+ // m_drawableContentRect is always stored in the coordinate system of the
+ // RenderSurface the layer draws into.
+ if (layer->drawsContent())
+ layer->m_drawableContentRect = transformedLayerRect;
+ else
+ layer->m_drawableContentRect = IntRect();
+
+ TransformationMatrix sublayerMatrix = layer->m_drawTransform;
// Flatten to 2D if the layer doesn't preserve 3D.
if (!layer->preserves3D()) {
- localMatrix.setM13(0);
- localMatrix.setM23(0);
- localMatrix.setM31(0);
- localMatrix.setM32(0);
- localMatrix.setM33(1);
- localMatrix.setM34(0);
- localMatrix.setM43(0);
+ sublayerMatrix.setM13(0);
+ sublayerMatrix.setM23(0);
+ sublayerMatrix.setM31(0);
+ sublayerMatrix.setM32(0);
+ sublayerMatrix.setM33(1);
+ sublayerMatrix.setM34(0);
+ sublayerMatrix.setM43(0);
}
// Apply the sublayer transform at the center of the layer.
- localMatrix.multLeft(layer->sublayerTransform());
+ sublayerMatrix.multLeft(layer->sublayerTransform());
- // The origin of the sublayers is actually the bottom left corner of the layer
- // (or top left when looking it it from the browser's pespective) instead of the center.
- // The matrix passed down to the sublayers is therefore:
+ // The origin of the sublayers is the top left corner of the layer, not the
+ // center. The matrix passed down to the sublayers is therefore:
// M[s] = M * Tr[-center]
- localMatrix.translate3d(-bounds.width() * 0.5, -bounds.height() * 0.5, 0);
+ sublayerMatrix.translate3d(-bounds.width() * 0.5, -bounds.height() * 0.5, 0);
+
+ Vector<LayerChromium*>& descendants = (layer->m_renderSurface ? layer->m_renderSurface->m_layerList : layerList);
+ descendants.append(layer);
+ unsigned thisLayerIndex = descendants.size() - 1;
const Vector<RefPtr<LayerChromium> >& sublayers = layer->getSublayers();
- for (size_t i = 0; i < sublayers.size(); i++)
- updateLayersRecursive(sublayers[i].get(), localMatrix, opacity);
+ for (size_t i = 0; i < sublayers.size(); ++i) {
+ LayerChromium* sublayer = sublayers[i].get();
+ updateLayersRecursive(sublayer, sublayerMatrix, renderSurfaceLayerList, descendants);
+
+ if (sublayer->m_renderSurface) {
+ RenderSurfaceChromium* sublayerRenderSurface = sublayer->m_renderSurface.get();
+ const IntRect& contentRect = sublayerRenderSurface->m_contentRect;
+ FloatRect sublayerRect(-0.5 * contentRect.width(), -0.5 * contentRect.height(),
+ contentRect.width(), contentRect.height());
+ layer->m_drawableContentRect.unite(enclosingIntRect(sublayerRenderSurface->m_drawTransform.mapRect(sublayerRect)));
+ descendants.append(sublayer);
+ } else
+ layer->m_drawableContentRect.unite(sublayer->m_drawableContentRect);
+ }
- layer->setLayerRenderer(this);
-}
+ if (layer->masksToBounds())
+ layer->m_drawableContentRect.intersect(transformedLayerRect);
-// Does a quick draw of the given layer into the stencil buffer. If decrement
-// is true then it decrements the current stencil values otherwise it increments them.
-void LayerRendererChromium::drawLayerIntoStencilBuffer(LayerChromium* layer, bool decrement)
-{
- // Enable writes to the stencil buffer and increment the stencil values
- // by one for every pixel under the current layer.
- GLC(m_context, m_context->stencilMask(0xff));
- GLC(m_context, m_context->stencilFunc(GraphicsContext3D::ALWAYS, 1, 0xff));
- unsigned stencilOp = (decrement ? GraphicsContext3D::DECR : GraphicsContext3D::INCR);
- GLC(m_context, m_context->stencilOp(stencilOp, stencilOp, stencilOp));
+ if (layer->m_renderSurface && layer != m_rootLayer) {
+ RenderSurfaceChromium* renderSurface = layer->m_renderSurface.get();
+ renderSurface->m_contentRect = layer->m_drawableContentRect;
+ FloatPoint surfaceCenter = renderSurface->contentRectCenter();
- GLC(m_context, m_context->colorMask(false, false, false, false));
+ // Restrict the RenderSurface size to the portion that's visible.
+ FloatSize centerOffsetDueToClipping;
+ renderSurface->m_contentRect.intersect(layer->m_scissorRect);
+ FloatPoint clippedSurfaceCenter = renderSurface->contentRectCenter();
+ centerOffsetDueToClipping = clippedSurfaceCenter - surfaceCenter;
- layer->drawAsMask();
+ // The RenderSurface backing texture cannot exceed the maximum supported
+ // texture size.
+ renderSurface->m_contentRect.setWidth(std::min(renderSurface->m_contentRect.width(), m_maxTextureSize));
+ renderSurface->m_contentRect.setHeight(std::min(renderSurface->m_contentRect.height(), m_maxTextureSize));
- // Disable writes to the stencil buffer.
- GLC(m_context, m_context->stencilMask(0));
- GLC(m_context, m_context->colorMask(true, true, true, true));
+ if (renderSurface->m_contentRect.isEmpty())
+ renderSurface->m_layerList.clear();
+
+ // Since the layer starts a new render surface we need to adjust its
+ // scissor rect to be expressed in the new surface's coordinate system.
+ layer->m_scissorRect = layer->m_drawableContentRect;
+
+ // Adjust the origin of the transform to be the center of the render surface.
+ renderSurface->m_drawTransform = renderSurface->m_originTransform;
+ renderSurface->m_drawTransform.translate3d(surfaceCenter.x() + centerOffsetDueToClipping.width(), surfaceCenter.y() + centerOffsetDueToClipping.height(), 0);
+ }
+
+ // Compute the depth value of the center of the layer which will be used when
+ // sorting the layers for the preserves-3d property.
+ TransformationMatrix& layerDrawMatrix = layer->m_renderSurface ? layer->m_renderSurface->m_drawTransform : layer->m_drawTransform;
+ if (layer->superlayer()) {
+ if (!layer->superlayer()->preserves3D())
+ layer->m_drawDepth = layer->superlayer()->m_drawDepth;
+ else
+ layer->m_drawDepth = layerDrawMatrix.m43();
+ } else
+ layer->m_drawDepth = 0;
+
+ // If preserves-3d then sort all the descendants by the Z coordinate of their
+ // center. If the preserves-3d property is also set on the superlayer then
+ // skip the sorting as the superlayer will sort all the descendants anyway.
+ if (layer->preserves3D() && (!layer->superlayer() || !layer->superlayer()->preserves3D()))
+ std::stable_sort(&descendants.at(thisLayerIndex), descendants.end(), compareLayerZ);
}
-// Recursively walk the layer tree and draw the layers.
-void LayerRendererChromium::drawLayersRecursive(LayerChromium* layer)
+bool LayerRendererChromium::useRenderSurface(RenderSurfaceChromium* renderSurface)
{
- static bool depthTestEnabledForSubtree = false;
- static int currentStencilValue = 0;
+ if (m_currentRenderSurface == renderSurface)
+ return true;
- // Check if the layer falls within the visible bounds of the page.
- IntRect layerRect = layer->getDrawRect();
- bool isLayerVisible = m_currentScissorRect.intersects(layerRect);
+ m_currentRenderSurface = renderSurface;
- // Enable depth testing for this layer and all its descendants if preserves3D is set.
- bool mustClearDepth = false;
- if (layer->preserves3D()) {
- if (!depthTestEnabledForSubtree) {
- GLC(m_context, m_context->enable(GraphicsContext3D::DEPTH_TEST));
- depthTestEnabledForSubtree = true;
-
- // Need to clear the depth buffer when we're done rendering this subtree.
- mustClearDepth = true;
- }
+ if (renderSurface == m_defaultRenderSurface) {
+ GLC(m_context, m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, 0));
+ setDrawViewportRect(renderSurface->m_contentRect, true);
+ return true;
}
- if (isLayerVisible)
- drawLayer(layer);
-
- // FIXME: We should check here if the layer has descendants that draw content
- // before we setup for clipping.
- IntRect previousScissorRect = m_currentScissorRect;
- bool mustResetScissorRect = false;
- bool didStencilDraw = false;
- if (layer->masksToBounds()) {
- // If the layer isn't rotated then we can use scissoring otherwise we need
- // to clip using the stencil buffer.
- if (layer->drawTransform().isIdentityOrTranslation()) {
- IntRect currentScissorRect = previousScissorRect;
- currentScissorRect.intersect(layerRect);
- if (currentScissorRect != previousScissorRect) {
- scissorToRect(currentScissorRect);
- mustResetScissorRect = true;
- }
- } else if (currentStencilValue < ((1 << m_numStencilBits) - 1)) {
- // Clipping using the stencil buffer works as follows: When we encounter
- // a clipping layer we increment the stencil buffer values for all the pixels
- // the layer touches. As a result 1's will be stored in the stencil buffer for pixels under
- // the first clipping layer found in a traversal, 2's for pixels in the intersection
- // of two nested clipping layers, etc. When the sublayers of a clipping layer are drawn
- // we turn on stencil testing to render only pixels that have the correct stencil
- // value (one that matches the value of currentStencilValue). As the recursion unravels,
- // we decrement the stencil buffer values for each clipping layer. When the entire layer tree
- // is rendered, the stencil values should be all back to zero. An 8 bit stencil buffer
- // will allow us up to 255 nested clipping layers which is hopefully enough.
- if (!currentStencilValue)
- GLC(m_context, m_context->enable(GraphicsContext3D::STENCIL_TEST));
-
- drawLayerIntoStencilBuffer(layer, false);
-
- currentStencilValue++;
- didStencilDraw = true;
- }
- }
- // Sublayers will render only if the value in the stencil buffer is equal to
- // currentStencilValue.
- if (didStencilDraw) {
- // The sublayers will render only if the stencil test passes.
- GLC(m_context, m_context->stencilFunc(GraphicsContext3D::EQUAL, currentStencilValue, 0xff));
- }
+ GLC(m_context, m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_offscreenFramebufferId));
- // If we're using depth testing then we need to sort the children in Z to
- // get the transparency to work properly.
- if (depthTestEnabledForSubtree) {
- const Vector<RefPtr<LayerChromium> >& sublayers = layer->getSublayers();
- Vector<LayerChromium*> sublayerList;
- size_t i;
- for (i = 0; i < sublayers.size(); i++)
- sublayerList.append(sublayers[i].get());
-
- // Sort by the z coordinate of the layer center so that layers further away
- // are drawn first.
- std::stable_sort(sublayerList.begin(), sublayerList.end(), compareLayerZ);
-
- for (i = 0; i < sublayerList.size(); i++)
- drawLayersRecursive(sublayerList[i]);
- } else {
- const Vector<RefPtr<LayerChromium> >& sublayers = layer->getSublayers();
- for (size_t i = 0; i < sublayers.size(); i++)
- drawLayersRecursive(sublayers[i].get());
- }
+ renderSurface->prepareContentsTexture();
- if (didStencilDraw) {
- // Draw into the stencil buffer subtracting 1 for every pixel hit
- // effectively removing this mask
- drawLayerIntoStencilBuffer(layer, true);
- currentStencilValue--;
- if (!currentStencilValue) {
- // Disable stencil testing.
- GLC(m_context, m_context->disable(GraphicsContext3D::STENCIL_TEST));
- GLC(m_context, m_context->stencilFunc(GraphicsContext3D::ALWAYS, 0, 0xff));
- }
- }
+ GLC(m_context, m_context->framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::COLOR_ATTACHMENT0,
+ GraphicsContext3D::TEXTURE_2D, renderSurface->m_contentsTextureId, 0));
- if (mustResetScissorRect) {
- scissorToRect(previousScissorRect);
+#if !defined ( NDEBUG )
+ if (m_context->checkFramebufferStatus(GraphicsContext3D::FRAMEBUFFER) != GraphicsContext3D::FRAMEBUFFER_COMPLETE) {
+ ASSERT_NOT_REACHED();
+ return false;
}
+#endif
- if (mustClearDepth) {
- GLC(m_context, m_context->disable(GraphicsContext3D::DEPTH_TEST));
- GLC(m_context, m_context->clear(GraphicsContext3D::DEPTH_BUFFER_BIT));
- depthTestEnabledForSubtree = false;
- }
+ setDrawViewportRect(renderSurface->m_contentRect, false);
+ return true;
}
-void LayerRendererChromium::drawLayer(LayerChromium* layer)
+void LayerRendererChromium::drawLayer(LayerChromium* layer, RenderSurfaceChromium* targetSurface)
{
- IntSize bounds = layer->bounds();
+ if (layer->m_renderSurface && layer->m_renderSurface != targetSurface) {
+ GLC(m_context, m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, layer->m_renderSurface->m_contentsTextureId));
+ useShader(m_textureLayerShaderProgram);
+
+ setScissorToRect(layer->m_renderSurface->m_scissorRect);
+
+ IntRect contentRect = layer->m_renderSurface->m_contentRect;
+ LayerChromium::drawTexturedQuad(m_context.get(), m_projectionMatrix, layer->m_renderSurface->m_drawTransform,
+ contentRect.width(), contentRect.height(), layer->m_renderSurface->m_drawOpacity,
+ m_textureLayerShaderMatrixLocation, m_textureLayerShaderAlphaLocation);
+ return;
+ }
+
+ if (layer->m_bounds.isEmpty())
+ return;
+
+ setScissorToRect(layer->m_scissorRect);
+
+ // Check if the layer falls within the visible bounds of the page.
+ IntRect layerRect = layer->getDrawRect();
+ bool isLayerVisible = layer->m_scissorRect.intersects(layerRect);
+ if (!isLayerVisible)
+ return;
+
+ // FIXME: Need to take into account the transform of the containing
+ // RenderSurface here, otherwise single-sided layers that draw on
+ // transformed surfaces won't always be culled properly.
+ if (!layer->doubleSided() && layer->m_drawTransform.m33() < 0)
+ return;
if (layer->drawsContent()) {
// Update the contents of the layer if necessary.
@@ -623,11 +727,6 @@ void LayerRendererChromium::drawLayer(LayerChromium* layer)
m_context->makeContextCurrent();
}
- if (layer->doubleSided())
- m_context->disable(GraphicsContext3D::CULL_FACE);
- else
- m_context->enable(GraphicsContext3D::CULL_FACE);
-
layer->draw();
}
@@ -637,12 +736,19 @@ void LayerRendererChromium::drawLayer(LayerChromium* layer)
// Sets the scissor region to the given rectangle. The coordinate system for the
// scissorRect has its origin at the top left corner of the current visible rect.
-void LayerRendererChromium::scissorToRect(const IntRect& scissorRect)
+void LayerRendererChromium::setScissorToRect(const IntRect& scissorRect)
{
- // Compute the lower left corner of the scissor rect.
- int bottom = std::max(m_rootVisibleRect.height() - scissorRect.bottom(), 0);
- GLC(m_context, m_context->scissor(scissorRect.x(), bottom, scissorRect.width(), scissorRect.height()));
- m_currentScissorRect = scissorRect;
+ // The scissor coordinates must be supplied in viewport space so we need to offset
+ // by the relative position of the top left corner of the current render surface.
+ int scissorX = scissorRect.x() - m_currentRenderSurface->m_contentRect.x();
+ // When rendering to the default render surface we're rendering upside down so the top
+ // of the GL scissor is the bottom of our layer.
+ int scissorY;
+ if (m_currentRenderSurface == m_defaultRenderSurface)
+ scissorY = m_currentRenderSurface->m_contentRect.height() - (scissorRect.bottom() - m_currentRenderSurface->m_contentRect.y());
+ else
+ scissorY = scissorRect.y() - m_currentRenderSurface->m_contentRect.y();
+ GLC(m_context, m_context->scissor(scissorX, scissorY, scissorRect.width(), scissorRect.height()));
}
bool LayerRendererChromium::makeContextCurrent()
@@ -659,6 +765,20 @@ bool LayerRendererChromium::checkTextureSize(const IntSize& textureSize)
return true;
}
+// Sets the coordinate range of content that ends being drawn onto the target render surface.
+// The target render surface is assumed to have an origin at 0, 0 and the width and height of
+// of the drawRect.
+void LayerRendererChromium::setDrawViewportRect(const IntRect& drawRect, bool flipY)
+{
+ if (flipY)
+ m_projectionMatrix = orthoMatrix(drawRect.x(), drawRect.right(), drawRect.bottom(), drawRect.y());
+ else
+ m_projectionMatrix = orthoMatrix(drawRect.x(), drawRect.right(), drawRect.y(), drawRect.bottom());
+ GLC(m_context, m_context->viewport(0, 0, drawRect.width(), drawRect.height()));
+}
+
+
+
void LayerRendererChromium::resizeOnscreenContent(const IntSize& size)
{
if (m_context)
@@ -669,10 +789,10 @@ bool LayerRendererChromium::initializeSharedObjects()
{
makeContextCurrent();
- // Vertex and fragment shaders for rendering the scrolled root layer quad.
- // They differ from a regular content layer shader in that they don't swizzle
- // the colors or take an alpha value.
- char scrollVertexShaderString[] =
+ // The following program composites layers whose contents are the results of a previous
+ // render operation and therefore doesn't perform any color swizzling. It is used
+ // in scrolling and for compositing offscreen textures.
+ char textureLayerVertexShaderString[] =
"attribute vec4 a_position; \n"
"attribute vec2 a_texCoord; \n"
"uniform mat4 matrix; \n"
@@ -682,27 +802,29 @@ bool LayerRendererChromium::initializeSharedObjects()
" gl_Position = matrix * a_position; \n"
" v_texCoord = a_texCoord; \n"
"} \n";
- char scrollFragmentShaderString[] =
+ char textureLayerFragmentShaderString[] =
"precision mediump float; \n"
"varying vec2 v_texCoord; \n"
"uniform sampler2D s_texture; \n"
+ "uniform float alpha; \n"
"void main() \n"
"{ \n"
" vec4 texColor = texture2D(s_texture, v_texCoord); \n"
- " gl_FragColor = vec4(texColor.x, texColor.y, texColor.z, texColor.w); \n"
+ " gl_FragColor = vec4(texColor.x, texColor.y, texColor.z, texColor.w) * alpha; \n"
"} \n";
- m_scrollShaderProgram = LayerChromium::createShaderProgram(m_context.get(), scrollVertexShaderString, scrollFragmentShaderString);
- if (!m_scrollShaderProgram) {
+ m_textureLayerShaderProgram = LayerChromium::createShaderProgram(m_context.get(), textureLayerVertexShaderString, textureLayerFragmentShaderString);
+ if (!m_textureLayerShaderProgram) {
LOG_ERROR("LayerRendererChromium: Failed to create scroll shader program");
cleanupSharedObjects();
return false;
}
- GLC(m_context, m_scrollShaderSamplerLocation = m_context->getUniformLocation(m_scrollShaderProgram, "s_texture"));
- GLC(m_context, m_scrollShaderMatrixLocation = m_context->getUniformLocation(m_scrollShaderProgram, "matrix"));
- if (m_scrollShaderSamplerLocation == -1 || m_scrollShaderMatrixLocation == -1) {
- LOG_ERROR("Failed to initialize scroll shader.");
+ GLC(m_context, m_textureLayerShaderSamplerLocation = m_context->getUniformLocation(m_textureLayerShaderProgram, "s_texture"));
+ GLC(m_context, m_textureLayerShaderMatrixLocation = m_context->getUniformLocation(m_textureLayerShaderProgram, "matrix"));
+ GLC(m_context, m_textureLayerShaderAlphaLocation = m_context->getUniformLocation(m_textureLayerShaderProgram, "alpha"));
+ if (m_textureLayerShaderSamplerLocation == -1 || m_textureLayerShaderMatrixLocation == -1 || m_textureLayerShaderAlphaLocation == -1) {
+ LOG_ERROR("Failed to initialize texture layer shader.");
cleanupSharedObjects();
return false;
}
@@ -723,8 +845,8 @@ bool LayerRendererChromium::initializeSharedObjects()
// Get the max texture size supported by the system.
GLC(m_context, m_context->getIntegerv(GraphicsContext3D::MAX_TEXTURE_SIZE, &m_maxTextureSize));
- // Get the number of bits available in the stencil buffer.
- GLC(m_context, m_context->getIntegerv(GraphicsContext3D::STENCIL_BITS, &m_numStencilBits));
+ // Create an FBO for doing offscreen rendering.
+ GLC(m_context, m_offscreenFramebufferId = m_context->createFramebuffer());
m_layerSharedValues = adoptPtr(new LayerChromium::SharedValues(m_context.get()));
m_contentLayerSharedValues = adoptPtr(new ContentLayerChromium::SharedValues(m_context.get()));
@@ -751,15 +873,18 @@ void LayerRendererChromium::cleanupSharedObjects()
m_videoLayerSharedValues.clear();
m_pluginLayerSharedValues.clear();
- if (m_scrollShaderProgram) {
- GLC(m_context, m_context->deleteProgram(m_scrollShaderProgram));
- m_scrollShaderProgram = 0;
+ if (m_textureLayerShaderProgram) {
+ GLC(m_context, m_context->deleteProgram(m_textureLayerShaderProgram));
+ m_textureLayerShaderProgram = 0;
}
if (m_rootLayerTextureId) {
deleteLayerTexture(m_rootLayerTextureId);
m_rootLayerTextureId = 0;
}
+
+ if (m_offscreenFramebufferId)
+ GLC(m_context, m_context->deleteFramebuffer(m_offscreenFramebufferId));
}
} // namespace WebCore
diff --git a/WebCore/platform/graphics/chromium/LayerRendererChromium.h b/WebCore/platform/graphics/chromium/LayerRendererChromium.h
index 52fbe36..531d652 100644
--- a/WebCore/platform/graphics/chromium/LayerRendererChromium.h
+++ b/WebCore/platform/graphics/chromium/LayerRendererChromium.h
@@ -39,6 +39,7 @@
#include "IntRect.h"
#include "LayerChromium.h"
#include "PluginLayerChromium.h"
+#include "RenderSurfaceChromium.h"
#include "SkBitmap.h"
#include "VideoLayerChromium.h"
#include <wtf/HashMap.h>
@@ -94,8 +95,6 @@ public:
unsigned createLayerTexture();
void deleteLayerTexture(unsigned);
- IntRect currentScissorRect() const { return m_currentScissorRect; }
-
static void debugGLCall(GraphicsContext3D*, const char* command, const char* file, int line);
const TransformationMatrix& projectionMatrix() const { return m_projectionMatrix; }
@@ -118,21 +117,22 @@ public:
private:
explicit LayerRendererChromium(PassRefPtr<GraphicsContext3D> graphicsContext3D);
+ void updateLayersRecursive(LayerChromium* layer, const TransformationMatrix& parentMatrix, Vector<LayerChromium*>& renderSurfaceLayerList, Vector<LayerChromium*>& layerList);
- void updateLayersRecursive(LayerChromium* layer, const TransformationMatrix& parentMatrix, float opacity);
-
- void drawLayersRecursive(LayerChromium*);
-
- void drawLayer(LayerChromium*);
+ void drawLayer(LayerChromium*, RenderSurfaceChromium*);
bool isLayerVisible(LayerChromium*, const TransformationMatrix&, const IntRect& visibleRect);
- void drawLayerIntoStencilBuffer(LayerChromium*, bool decrement);
+ void setScissorToRect(const IntRect&);
+
+ void setDrawViewportRect(const IntRect&, bool flipY);
- void scissorToRect(const IntRect&);
+ bool useRenderSurface(RenderSurfaceChromium*);
bool makeContextCurrent();
+ static bool compareLayerZ(const LayerChromium*, const LayerChromium*);
+
bool initializeSharedObjects();
void cleanupSharedObjects();
@@ -140,10 +140,12 @@ private:
int m_rootLayerTextureWidth;
int m_rootLayerTextureHeight;
- // Scroll shader uniform locations.
- unsigned m_scrollShaderProgram;
- int m_scrollShaderSamplerLocation;
- int m_scrollShaderMatrixLocation;
+ // Shader uniform locations used by layers whose contents are the results of a
+ // previous rendering operation.
+ unsigned m_textureLayerShaderProgram;
+ int m_textureLayerShaderSamplerLocation;
+ int m_textureLayerShaderMatrixLocation;
+ int m_textureLayerShaderAlphaLocation;
TransformationMatrix m_projectionMatrix;
@@ -152,7 +154,10 @@ private:
IntPoint m_scrollPosition;
bool m_hardwareCompositing;
- unsigned int m_currentShader;
+ unsigned m_currentShader;
+ RenderSurfaceChromium* m_currentRenderSurface;
+
+ unsigned m_offscreenFramebufferId;
#if PLATFORM(SKIA)
OwnPtr<skia::PlatformCanvas> m_rootLayerCanvas;
@@ -168,12 +173,10 @@ private:
IntRect m_rootVisibleRect;
IntRect m_rootContentRect;
- IntRect m_currentScissorRect;
+ // Maximum texture dimensions supported.
int m_maxTextureSize;
- int m_numStencilBits;
-
// Store values that are shared between instances of each layer type
// associated with this instance of the compositor. Since there can be
// multiple instances of the compositor running in the same renderer process
@@ -185,6 +188,8 @@ private:
OwnPtr<PluginLayerChromium::SharedValues> m_pluginLayerSharedValues;
RefPtr<GraphicsContext3D> m_context;
+
+ RenderSurfaceChromium* m_defaultRenderSurface;
};
// Setting DEBUG_GL_CALLS to 1 will call glGetError() after almost every GL
diff --git a/WebCore/platform/graphics/chromium/RenderSurfaceChromium.cpp b/WebCore/platform/graphics/chromium/RenderSurfaceChromium.cpp
new file mode 100644
index 0000000..816fd3d
--- /dev/null
+++ b/WebCore/platform/graphics/chromium/RenderSurfaceChromium.cpp
@@ -0,0 +1,88 @@
+/*
+ * 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.
+ */
+
+#include "config.h"
+
+#if USE(ACCELERATED_COMPOSITING)
+
+#include "RenderSurfaceChromium.h"
+
+#include "GraphicsContext3D.h"
+#include "LayerRendererChromium.h"
+
+namespace WebCore {
+
+RenderSurfaceChromium::RenderSurfaceChromium(LayerChromium* owningLayer)
+ : m_owningLayer(owningLayer)
+ , m_contentsTextureId(0)
+{
+}
+
+RenderSurfaceChromium::~RenderSurfaceChromium()
+{
+ cleanupResources();
+}
+
+void RenderSurfaceChromium::cleanupResources()
+{
+ if (!m_contentsTextureId)
+ return;
+
+ ASSERT(layerRenderer());
+
+ layerRenderer()->deleteLayerTexture(m_contentsTextureId);
+ m_contentsTextureId = 0;
+ m_allocatedTextureSize = IntSize();
+}
+
+LayerRendererChromium* RenderSurfaceChromium::layerRenderer()
+{
+ ASSERT(m_owningLayer);
+ return m_owningLayer->layerRenderer();
+}
+
+void RenderSurfaceChromium::prepareContentsTexture()
+{
+ ASSERT(m_owningLayer);
+
+ if (!m_contentsTextureId) {
+ m_contentsTextureId = layerRenderer()->createLayerTexture();
+ ASSERT(m_contentsTextureId);
+ m_allocatedTextureSize = IntSize();
+ }
+
+ IntSize requiredSize(m_contentRect.width(), m_contentRect.height());
+ if (m_allocatedTextureSize != requiredSize) {
+ GraphicsContext3D* context = m_owningLayer->layerRenderer()->context();
+ GLC(context, context->bindTexture(GraphicsContext3D::TEXTURE_2D, m_contentsTextureId));
+ GLC(context, context->texImage2D(GraphicsContext3D::TEXTURE_2D, 0, GraphicsContext3D::RGBA,
+ requiredSize.width(), requiredSize.height(), 0, GraphicsContext3D::RGBA,
+ GraphicsContext3D::UNSIGNED_BYTE, 0));
+ m_allocatedTextureSize = requiredSize;
+ }
+}
+
+}
+#endif // USE(ACCELERATED_COMPOSITING)
diff --git a/WebCore/platform/graphics/chromium/RenderSurfaceChromium.h b/WebCore/platform/graphics/chromium/RenderSurfaceChromium.h
new file mode 100644
index 0000000..1f33527
--- /dev/null
+++ b/WebCore/platform/graphics/chromium/RenderSurfaceChromium.h
@@ -0,0 +1,71 @@
+/*
+ * 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 RenderSurfaceChromium_h
+#define RenderSurfaceChromium_h
+
+#if USE(ACCELERATED_COMPOSITING)
+
+#include "FloatRect.h"
+#include "IntRect.h"
+#include "TransformationMatrix.h"
+#include <wtf/Noncopyable.h>
+
+namespace WebCore {
+
+class LayerRendererChromium;
+class LayerChromium;
+
+class RenderSurfaceChromium : public Noncopyable {
+ friend class LayerRendererChromium;
+public:
+ explicit RenderSurfaceChromium(LayerChromium*);
+ ~RenderSurfaceChromium();
+
+ void prepareContentsTexture();
+ void cleanupResources();
+
+ FloatPoint contentRectCenter() const { return FloatRect(m_contentRect).center(); }
+ IntRect contentRect() const { return m_contentRect; }
+
+private:
+ LayerRendererChromium* layerRenderer();
+
+ LayerChromium* m_owningLayer;
+ IntRect m_contentRect;
+ unsigned m_contentsTextureId;
+ float m_drawOpacity;
+ IntSize m_allocatedTextureSize;
+ TransformationMatrix m_drawTransform;
+ TransformationMatrix m_originTransform;
+ IntRect m_scissorRect;
+ Vector<LayerChromium*> m_layerList;
+};
+
+}
+#endif // USE(ACCELERATED_COMPOSITING)
+
+#endif
diff --git a/WebCore/platform/graphics/chromium/SimpleFontDataChromiumWin.cpp b/WebCore/platform/graphics/chromium/SimpleFontDataChromiumWin.cpp
index f3d8b86..deebd31 100644
--- a/WebCore/platform/graphics/chromium/SimpleFontDataChromiumWin.cpp
+++ b/WebCore/platform/graphics/chromium/SimpleFontDataChromiumWin.cpp
@@ -98,9 +98,6 @@ void SimpleFontData::platformCharWidthInit()
void SimpleFontData::platformDestroy()
{
- // We don't hash this on Win32, so it's effectively owned by us.
- delete m_smallCapsFontData;
- m_smallCapsFontData = 0;
}
SimpleFontData* SimpleFontData::smallCapsFontData(const FontDescription& fontDescription) const
@@ -114,7 +111,7 @@ SimpleFontData* SimpleFontData::smallCapsFontData(const FontDescription& fontDes
winFont.lfHeight = -lroundf(smallCapsSize);
HFONT hfont = CreateFontIndirect(&winFont);
m_smallCapsFontData =
- new SimpleFontData(FontPlatformData(hfont, smallCapsSize));
+ new SimpleFontData(FontPlatformData(hfont, smallCapsSize), isCustomFont(), false);
}
return m_smallCapsFontData;
}
diff --git a/WebCore/platform/graphics/chromium/SimpleFontDataLinux.cpp b/WebCore/platform/graphics/chromium/SimpleFontDataLinux.cpp
index d03c615..e7ff9ee 100644
--- a/WebCore/platform/graphics/chromium/SimpleFontDataLinux.cpp
+++ b/WebCore/platform/graphics/chromium/SimpleFontDataLinux.cpp
@@ -127,15 +127,13 @@ void SimpleFontData::platformCharWidthInit()
void SimpleFontData::platformDestroy()
{
- delete m_smallCapsFontData;
- m_smallCapsFontData = 0;
}
SimpleFontData* SimpleFontData::smallCapsFontData(const FontDescription& fontDescription) const
{
if (!m_smallCapsFontData) {
const float smallCapsSize = lroundf(fontDescription.computedSize() * smallCapsFraction);
- m_smallCapsFontData = new SimpleFontData(FontPlatformData(m_platformData, smallCapsSize));
+ m_smallCapsFontData = new SimpleFontData(FontPlatformData(m_platformData, smallCapsSize), isCustomFont(), false);
}
return m_smallCapsFontData;
diff --git a/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp b/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp
index fa6c2c8..feb7ebc 100644
--- a/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp
+++ b/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp
@@ -188,6 +188,7 @@ VideoLayerChromium::~VideoLayerChromium()
void VideoLayerChromium::cleanupResources()
{
+ LayerChromium::cleanupResources();
releaseCurrentFrame();
if (!layerRenderer())
return;
diff --git a/WebCore/platform/graphics/cocoa/FontPlatformData.h b/WebCore/platform/graphics/cocoa/FontPlatformData.h
index 17ae4b5..7ab84f5 100644
--- a/WebCore/platform/graphics/cocoa/FontPlatformData.h
+++ b/WebCore/platform/graphics/cocoa/FontPlatformData.h
@@ -73,7 +73,7 @@ class FontPlatformData {
{
}
- FontPlatformData(NSFont *nsFont, bool syntheticBold = false, bool syntheticOblique = false, FontOrientation = Horizontal);
+ FontPlatformData(NSFont *nsFont, float size, bool syntheticBold = false, bool syntheticOblique = false, FontOrientation = Horizontal);
FontPlatformData(CGFontRef cgFont, ATSUFontID fontID, float size, bool syntheticBold, bool syntheticOblique, FontOrientation orientation)
: m_syntheticBold(syntheticBold)
diff --git a/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm b/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm
index dbfec5f..52a88ed 100644
--- a/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm
+++ b/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm
@@ -44,9 +44,10 @@ void FontPlatformData::loadFont(NSFont* nsFont, float, NSFont*& outNSFont, CGFon
}
#endif // PLATFORM(MAC)
-FontPlatformData::FontPlatformData(NSFont *nsFont, bool syntheticBold, bool syntheticOblique, FontOrientation orientation)
+FontPlatformData::FontPlatformData(NSFont *nsFont, float size, bool syntheticBold, bool syntheticOblique, FontOrientation orientation)
: m_syntheticBold(syntheticBold)
, m_syntheticOblique(syntheticOblique)
+ , m_size(size)
, m_font(nsFont)
#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
// FIXME: Chromium: The following code isn't correct for the Chromium port since the sandbox might
@@ -58,28 +59,8 @@ FontPlatformData::FontPlatformData(NSFont *nsFont, bool syntheticBold, bool synt
{
ASSERT_ARG(nsFont, nsFont);
- m_size = [nsFont pointSize];
-
CGFontRef cgFont = 0;
- loadFont(nsFont, m_size, m_font, cgFont, m_atsuFontID);
-
- if (orientation == Vertical) {
- // Ignore vertical orientation when the font doesn't support vertical metrics.
- // The check doesn't look neat but this is what AppKit does for vertical writing...
- RetainPtr<CFArrayRef> tableTags(AdoptCF, CTFontCopyAvailableTables(ctFont(), kCTFontTableOptionExcludeSynthetic));
- CFIndex numTables = CFArrayGetCount(tableTags.get());
- bool found = false;
- for (CFIndex index = 0; index < numTables; ++index) {
- CTFontTableTag tag = (CTFontTableTag)(uintptr_t)CFArrayGetValueAtIndex(tableTags.get(), index);
- if (tag == kCTFontTableVhea || tag == kCTFontTableVORG) {
- found = true;
- break;
- }
- }
-
- if (found == false)
- orientation = Horizontal;
- }
+ loadFont(nsFont, size, m_font, cgFont, m_atsuFontID);
m_orientation = orientation;
@@ -185,7 +166,7 @@ bool FontPlatformData::roundsGlyphAdvances() const
bool FontPlatformData::allowsLigatures() const
{
- return m_orientation == Horizontal && ![[m_font coveredCharacterSet] characterIsMember:'a'];
+ return ![[m_font coveredCharacterSet] characterIsMember:'a'];
}
CTFontRef FontPlatformData::ctFont() const
diff --git a/WebCore/platform/graphics/cairo/FontCacheFreeType.cpp b/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp
index 61ee625..61ee625 100644
--- a/WebCore/platform/graphics/cairo/FontCacheFreeType.cpp
+++ b/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp
diff --git a/WebCore/platform/graphics/cairo/FontCustomPlatformData.cpp b/WebCore/platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp
index 800907a..800907a 100644
--- a/WebCore/platform/graphics/cairo/FontCustomPlatformData.cpp
+++ b/WebCore/platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp
diff --git a/WebCore/platform/graphics/cairo/FontPlatformDataFreeType.h b/WebCore/platform/graphics/freetype/FontPlatformData.h
index 016489e..0793746 100644
--- a/WebCore/platform/graphics/cairo/FontPlatformDataFreeType.h
+++ b/WebCore/platform/graphics/freetype/FontPlatformData.h
@@ -27,6 +27,7 @@
#define FontPlatformDataFreeType_h
#include "FontDescription.h"
+#include "FontOrientation.h"
#include "GlyphBuffer.h"
#include "HashFunctions.h"
#include "RefPtrCairo.h"
@@ -68,6 +69,8 @@ public:
bool syntheticBold() const { return m_syntheticBold; }
bool syntheticOblique() const { return m_syntheticOblique; }
+ FontOrientation orientation() const { return Horizontal; } // FIXME: Implement.
+
cairo_scaled_font_t* scaledFont() const { return m_scaledFont; }
unsigned hash() const
diff --git a/WebCore/platform/graphics/cairo/FontPlatformDataFreeType.cpp b/WebCore/platform/graphics/freetype/FontPlatformDataFreeType.cpp
index 394082d..394082d 100644
--- a/WebCore/platform/graphics/cairo/FontPlatformDataFreeType.cpp
+++ b/WebCore/platform/graphics/freetype/FontPlatformDataFreeType.cpp
diff --git a/WebCore/platform/graphics/cairo/GlyphPageTreeNodeCairo.cpp b/WebCore/platform/graphics/freetype/GlyphPageTreeNodeFreeType.cpp
index e2f09f4..e2f09f4 100644
--- a/WebCore/platform/graphics/cairo/GlyphPageTreeNodeCairo.cpp
+++ b/WebCore/platform/graphics/freetype/GlyphPageTreeNodeFreeType.cpp
diff --git a/WebCore/platform/graphics/cairo/SimpleFontDataCairo.cpp b/WebCore/platform/graphics/freetype/SimpleFontDataFreeType.cpp
index d350294..cb096c3 100644
--- a/WebCore/platform/graphics/cairo/SimpleFontDataCairo.cpp
+++ b/WebCore/platform/graphics/freetype/SimpleFontDataFreeType.cpp
@@ -77,8 +77,6 @@ void SimpleFontData::platformCharWidthInit()
void SimpleFontData::platformDestroy()
{
- delete m_smallCapsFontData;
- m_smallCapsFontData = 0;
}
SimpleFontData* SimpleFontData::smallCapsFontData(const FontDescription& fontDescription) const
@@ -87,7 +85,8 @@ SimpleFontData* SimpleFontData::smallCapsFontData(const FontDescription& fontDes
if (!m_smallCapsFontData)
m_smallCapsFontData = new SimpleFontData(
FontPlatformData(cairo_scaled_font_get_font_face(m_platformData.scaledFont()),
- 0.70f * fontDescription.computedSize(), m_platformData.syntheticBold(), m_platformData.syntheticOblique()));
+ 0.70f * fontDescription.computedSize(), m_platformData.syntheticBold(), m_platformData.syntheticOblique()),
+ isCustomFont(), false);
return m_smallCapsFontData;
}
diff --git a/WebCore/platform/graphics/gpu/DrawingBuffer.cpp b/WebCore/platform/graphics/gpu/DrawingBuffer.cpp
index 2dc0517..d812e28 100644
--- a/WebCore/platform/graphics/gpu/DrawingBuffer.cpp
+++ b/WebCore/platform/graphics/gpu/DrawingBuffer.cpp
@@ -34,11 +34,14 @@
#include "DrawingBuffer.h"
+#include "Extensions3D.h"
+
namespace WebCore {
PassRefPtr<DrawingBuffer> DrawingBuffer::create(GraphicsContext3D* context, const IntSize& size)
{
RefPtr<DrawingBuffer> drawingBuffer = adoptRef(new DrawingBuffer(context, size));
+ drawingBuffer->m_multisampleExtensionSupported = context->getExtensions()->supports("GL_ANGLE_framebuffer_blit") && context->getExtensions()->supports("GL_ANGLE_framebuffer_multisample");
return (drawingBuffer->m_context) ? drawingBuffer.release() : 0;
}
@@ -46,21 +49,193 @@ void DrawingBuffer::clear()
{
if (!m_context)
return;
-
+
m_context->makeContextCurrent();
+ m_context->deleteTexture(m_colorBuffer);
+ m_colorBuffer = 0;
+
+ if (m_multisampleColorBuffer) {
+ m_context->deleteRenderbuffer(m_multisampleColorBuffer);
+ m_multisampleColorBuffer = 0;
+ }
+
+ if (m_multisampleDepthStencilBuffer) {
+ m_context->deleteRenderbuffer(m_multisampleDepthStencilBuffer);
+ m_multisampleDepthStencilBuffer = 0;
+ }
+
+ if (m_depthStencilBuffer) {
+ m_context->deleteRenderbuffer(m_depthStencilBuffer);
+ m_depthStencilBuffer = 0;
+ }
+
+ if (m_multisampleFBO) {
+ m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_multisampleFBO);
+ m_context->deleteFramebuffer(m_multisampleFBO);
+ m_multisampleFBO = 0;
+ }
+
m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_fbo);
m_context->deleteFramebuffer(m_fbo);
m_fbo = 0;
-
+
m_context.clear();
}
-void DrawingBuffer::bind()
+void DrawingBuffer::reset(const IntSize& newSize)
{
+ if (m_size == newSize)
+ return;
+ m_size = newSize;
+
if (!m_context)
return;
+ m_context->makeContextCurrent();
+
+ const GraphicsContext3D::Attributes& attributes = m_context->getContextAttributes();
+ unsigned long internalColorFormat, colorFormat, internalDepthStencilFormat = 0;
+ if (attributes.alpha) {
+ internalColorFormat = GraphicsContext3D::RGBA;
+ colorFormat = GraphicsContext3D::RGBA;
+ } else {
+ internalColorFormat = GraphicsContext3D::RGB;
+ colorFormat = GraphicsContext3D::RGB;
+ }
+ if (attributes.stencil || attributes.depth) {
+ // We don't allow the logic where stencil is required and depth is not.
+ // See GraphicsContext3D constructor.
+ if (attributes.stencil && attributes.depth)
+ internalDepthStencilFormat = GraphicsContext3D::DEPTH_STENCIL;
+ else
+ internalDepthStencilFormat = GraphicsContext3D::DEPTH_COMPONENT;
+ }
+
+ // resize multisample FBO
+ if (multisample()) {
+ int maxSampleCount;
+
+ m_context->getIntegerv(Extensions3D::MAX_SAMPLES, &maxSampleCount);
+ int sampleCount = std::min(8, maxSampleCount);
+ if (sampleCount > maxSampleCount)
+ sampleCount = maxSampleCount;
+
+ m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_multisampleFBO);
+
+ m_context->bindRenderbuffer(GraphicsContext3D::RENDERBUFFER, m_multisampleColorBuffer);
+ m_context->getExtensions()->renderbufferStorageMultisample(GraphicsContext3D::RENDERBUFFER, sampleCount, internalColorFormat, m_size.width(), m_size.height());
+ m_context->framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::COLOR_ATTACHMENT0, GraphicsContext3D::RENDERBUFFER, m_multisampleColorBuffer);
+ if (attributes.stencil || attributes.depth) {
+ m_context->bindRenderbuffer(GraphicsContext3D::RENDERBUFFER, m_multisampleDepthStencilBuffer);
+ m_context->getExtensions()->renderbufferStorageMultisample(GraphicsContext3D::RENDERBUFFER, sampleCount, internalDepthStencilFormat, m_size.width(), m_size.height());
+ if (attributes.stencil)
+ m_context->framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::STENCIL_ATTACHMENT, GraphicsContext3D::RENDERBUFFER, m_multisampleDepthStencilBuffer);
+ if (attributes.depth)
+ m_context->framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::DEPTH_ATTACHMENT, GraphicsContext3D::RENDERBUFFER, m_multisampleDepthStencilBuffer);
+ }
+ m_context->bindRenderbuffer(GraphicsContext3D::RENDERBUFFER, 0);
+ if (m_context->checkFramebufferStatus(GraphicsContext3D::FRAMEBUFFER) != GraphicsContext3D::FRAMEBUFFER_COMPLETE) {
+ // Cleanup
+ clear();
+ return;
+ }
+ }
+
+ // resize regular FBO
m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_fbo);
+
+ m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, m_colorBuffer);
+ m_context->texImage2D(GraphicsContext3D::TEXTURE_2D, 0, internalColorFormat, m_size.width(), m_size.height(), 0, colorFormat, GraphicsContext3D::UNSIGNED_BYTE, 0);
+ m_context->framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::COLOR_ATTACHMENT0, GraphicsContext3D::TEXTURE, m_colorBuffer, 0);
+ m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, 0);
+ if (!multisample() && (attributes.stencil || attributes.depth)) {
+ m_context->bindRenderbuffer(GraphicsContext3D::RENDERBUFFER, m_depthStencilBuffer);
+ m_context->renderbufferStorage(GraphicsContext3D::RENDERBUFFER, internalDepthStencilFormat, m_size.width(), m_size.height());
+ if (attributes.stencil)
+ m_context->framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::STENCIL_ATTACHMENT, GraphicsContext3D::RENDERBUFFER, m_depthStencilBuffer);
+ if (attributes.depth)
+ m_context->framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::DEPTH_ATTACHMENT, GraphicsContext3D::RENDERBUFFER, m_depthStencilBuffer);
+ m_context->bindRenderbuffer(GraphicsContext3D::RENDERBUFFER, 0);
+ }
+ if (m_context->checkFramebufferStatus(GraphicsContext3D::FRAMEBUFFER) != GraphicsContext3D::FRAMEBUFFER_COMPLETE) {
+ // Cleanup
+ clear();
+ return;
+ }
+
+ if (multisample())
+ m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_multisampleFBO);
+
+ // Initialize renderbuffers to 0.
+ unsigned char colorMask[] = {true, true, true, true}, depthMask = true, stencilMask = true;
+ unsigned char isScissorEnabled = false;
+ unsigned char isDitherEnabled = false;
+ unsigned long clearMask = GraphicsContext3D::COLOR_BUFFER_BIT;
+ m_context->getBooleanv(GraphicsContext3D::COLOR_WRITEMASK, colorMask);
+ m_context->colorMask(true, true, true, true);
+ if (attributes.depth) {
+ m_context->getBooleanv(GraphicsContext3D::DEPTH_WRITEMASK, &depthMask);
+ m_context->depthMask(true);
+ clearMask |= GraphicsContext3D::DEPTH_BUFFER_BIT;
+ }
+ if (attributes.stencil) {
+ m_context->getBooleanv(GraphicsContext3D::STENCIL_WRITEMASK, &stencilMask);
+ m_context->stencilMask(true);
+ clearMask |= GraphicsContext3D::STENCIL_BUFFER_BIT;
+ }
+ isScissorEnabled = m_context->isEnabled(GraphicsContext3D::SCISSOR_TEST);
+ m_context->disable(GraphicsContext3D::SCISSOR_TEST);
+ isDitherEnabled = m_context->isEnabled(GraphicsContext3D::DITHER);
+ m_context->disable(GraphicsContext3D::DITHER);
+
+ m_context->clear(clearMask);
+
+ m_context->colorMask(colorMask[0], colorMask[1], colorMask[2], colorMask[3]);
+ if (attributes.depth)
+ m_context->depthMask(depthMask);
+ if (attributes.stencil)
+ m_context->stencilMask(stencilMask);
+ if (isScissorEnabled)
+ m_context->enable(GraphicsContext3D::SCISSOR_TEST);
+ else
+ m_context->disable(GraphicsContext3D::SCISSOR_TEST);
+ if (isDitherEnabled)
+ m_context->enable(GraphicsContext3D::DITHER);
+ else
+ m_context->disable(GraphicsContext3D::DITHER);
+
+ m_context->flush();
+
+ didReset();
+}
+
+void DrawingBuffer::commit(long x, long y, long width, long height)
+{
+ if (!m_context)
+ return;
+
+ if (width < 0)
+ width = m_size.width();
+ if (height < 0)
+ height = m_size.height();
+
+ m_context->makeContextCurrent();
+
+ if (m_multisampleFBO) {
+ m_context->bindFramebuffer(Extensions3D::READ_FRAMEBUFFER, m_multisampleFBO);
+ m_context->bindFramebuffer(Extensions3D::DRAW_FRAMEBUFFER, m_fbo);
+ m_context->getExtensions()->blitFramebuffer(x, y, width, height, x, y, width, height, GraphicsContext3D::COLOR_BUFFER_BIT, GraphicsContext3D::LINEAR);
+ }
+
+ m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_fbo);
+}
+
+void DrawingBuffer::bind()
+{
+ if (!m_context)
+ return;
+
+ m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_multisampleFBO ? m_multisampleFBO : m_fbo);
m_context->viewport(0, 0, m_size.width(), m_size.height());
}
diff --git a/WebCore/platform/graphics/gpu/DrawingBuffer.h b/WebCore/platform/graphics/gpu/DrawingBuffer.h
index 75c7f99..9f79889 100644
--- a/WebCore/platform/graphics/gpu/DrawingBuffer.h
+++ b/WebCore/platform/graphics/gpu/DrawingBuffer.h
@@ -64,13 +64,18 @@ public:
// to prevent invalid accesses to the resources.
void clear();
+ // Copies the multisample color buffer to the normal color buffer and leaves m_fbo bound
+ void commit(long x = 0, long y = 0, long width = -1, long height = -1);
+
+ bool multisample() const { return m_context && m_context->getContextAttributes().antialias && m_multisampleExtensionSupported; }
+
+ Platform3DObject platformColorBuffer() const;
+
#if USE(ACCELERATED_COMPOSITING)
PlatformLayer* platformLayer();
void publishToPlatformLayer();
#endif
- unsigned getRenderingResultsAsTexture();
-
#if PLATFORM(CHROMIUM)
class WillPublishCallback : public Noncopyable {
public:
@@ -88,11 +93,22 @@ private:
static PassRefPtr<DrawingBuffer> create(GraphicsContext3D*, const IntSize&);
DrawingBuffer(GraphicsContext3D*, const IntSize&);
+
+ // Platform specific function called after reset() so each platform can do extra work if needed
+ void didReset();
RefPtr<GraphicsContext3D> m_context;
IntSize m_size;
+ bool m_multisampleExtensionSupported;
Platform3DObject m_fbo;
+ Platform3DObject m_colorBuffer;
+ Platform3DObject m_depthStencilBuffer;
+ // For multisampling
+ Platform3DObject m_multisampleFBO;
+ Platform3DObject m_multisampleColorBuffer;
+ Platform3DObject m_multisampleDepthStencilBuffer;
+
#if PLATFORM(CHROMIUM)
OwnPtr<WillPublishCallback> m_callback;
OwnPtr<DrawingBufferInternal> m_internal;
diff --git a/WebCore/platform/graphics/gpu/mac/DrawingBufferMac.mm b/WebCore/platform/graphics/gpu/mac/DrawingBufferMac.mm
index 7a8c501..89dcb9c 100644
--- a/WebCore/platform/graphics/gpu/mac/DrawingBufferMac.mm
+++ b/WebCore/platform/graphics/gpu/mac/DrawingBufferMac.mm
@@ -29,6 +29,7 @@
#include "DrawingBuffer.h"
+#include "Extensions3D.h"
#include "WebGLLayer.h"
#import "BlockExceptions.h"
@@ -39,6 +40,11 @@ DrawingBuffer::DrawingBuffer(GraphicsContext3D* context, const IntSize& size)
: m_context(context)
, m_size(size)
, m_fbo(context->createFramebuffer())
+ , m_colorBuffer(0)
+ , m_depthStencilBuffer(0)
+ , m_multisampleFBO(0)
+ , m_multisampleColorBuffer(0)
+ , m_multisampleDepthStencilBuffer(0)
{
ASSERT(m_fbo);
if (!m_fbo) {
@@ -53,6 +59,40 @@ DrawingBuffer::DrawingBuffer(GraphicsContext3D* context, const IntSize& size)
[m_platformLayer.get() setName:@"DrawingBuffer Layer"];
#endif
END_BLOCK_OBJC_EXCEPTIONS
+
+ // create a texture to render into
+ m_colorBuffer = context->createTexture();
+ context->bindTexture(GraphicsContext3D::TEXTURE_2D, m_colorBuffer);
+ context->texParameterf(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MAG_FILTER, GraphicsContext3D::LINEAR);
+ context->texParameterf(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MIN_FILTER, GraphicsContext3D::LINEAR);
+ context->texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_S, GraphicsContext3D::CLAMP_TO_EDGE);
+ context->texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_T, GraphicsContext3D::CLAMP_TO_EDGE);
+ context->bindTexture(GraphicsContext3D::TEXTURE_2D, 0);
+
+ // Create the FBO
+ m_fbo = context->createFramebuffer();
+ ASSERT(m_fbo);
+ if (!m_fbo) {
+ clear();
+ return;
+ }
+
+ const GraphicsContext3D::Attributes& attributes = context->getContextAttributes();
+
+ // Create the stencil and depth buffer if needed
+ if (!multisample() && (attributes.stencil || attributes.depth))
+ m_depthStencilBuffer = context->createRenderbuffer();
+
+ // create a multisample FBO
+ if (multisample()) {
+ m_multisampleFBO = context->createFramebuffer();
+ context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_multisampleFBO);
+ m_multisampleColorBuffer = context->createRenderbuffer();
+ if (attributes.stencil || attributes.depth)
+ m_multisampleDepthStencilBuffer = context->createRenderbuffer();
+ }
+
+ reset(size);
}
DrawingBuffer::~DrawingBuffer()
@@ -60,24 +100,19 @@ DrawingBuffer::~DrawingBuffer()
clear();
}
-void DrawingBuffer::reset(const IntSize& newSize)
+void DrawingBuffer::didReset()
{
- if (!m_context)
- return;
-
- if (m_size == newSize)
- return;
- m_size = newSize;
-
- m_context->texImage2D(GraphicsContext3D::TEXTURE_2D, 0, GraphicsContext3D::RGBA, m_size.width(), m_size.height(), 0, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNED_BYTE, 0);
}
-#if USE(ACCELERATED_COMPOSITING)
PlatformLayer* DrawingBuffer::platformLayer()
{
return m_platformLayer.get();
}
-#endif
+
+Platform3DObject DrawingBuffer::platformColorBuffer() const
+{
+ return m_colorBuffer;
+}
}
diff --git a/WebCore/platform/graphics/gstreamer/ImageGStreamer.h b/WebCore/platform/graphics/gstreamer/ImageGStreamer.h
index cf2b9d6..6e53cfc 100644
--- a/WebCore/platform/graphics/gstreamer/ImageGStreamer.h
+++ b/WebCore/platform/graphics/gstreamer/ImageGStreamer.h
@@ -52,6 +52,10 @@ class ImageGStreamer : public RefCounted<ImageGStreamer> {
ImageGStreamer(GstBuffer*&, IntSize, cairo_format_t&);
#endif
+#if PLATFORM(QT)
+ ImageGStreamer(GstBuffer*&, IntSize, QImage::Format);
+#endif
+
#if PLATFORM(MAC)
ImageGStreamer(GstBuffer*&, IntSize);
#endif
diff --git a/WebCore/platform/graphics/gstreamer/ImageGStreamerQt.cpp b/WebCore/platform/graphics/gstreamer/ImageGStreamerQt.cpp
new file mode 100644
index 0000000..cf46f02
--- /dev/null
+++ b/WebCore/platform/graphics/gstreamer/ImageGStreamerQt.cpp
@@ -0,0 +1,67 @@
+/*
+ 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.
+*/
+
+#include "config.h"
+#include "ImageGStreamer.h"
+
+#if USE(GSTREAMER)
+#include "GOwnPtr.h"
+
+using namespace std;
+using namespace WebCore;
+
+PassRefPtr<ImageGStreamer> ImageGStreamer::createImage(GstBuffer* buffer)
+{
+ int width = 0, height = 0;
+ GstCaps* caps = gst_buffer_get_caps(buffer);
+ GstVideoFormat format;
+ if (!gst_video_format_parse_caps(caps, &format, &width, &height)) {
+ gst_caps_unref(caps);
+ return 0;
+ }
+
+ gst_caps_unref(caps);
+
+ QImage::Format imageFormat;
+ if (format == GST_VIDEO_FORMAT_RGB)
+ imageFormat = QImage::Format_RGB888;
+ else
+ imageFormat = QImage::Format_RGB32;
+
+ return adoptRef(new ImageGStreamer(buffer, IntSize(width, height), imageFormat));
+}
+
+ImageGStreamer::ImageGStreamer(GstBuffer*& buffer, IntSize size, QImage::Format imageFormat)
+ : m_image(0)
+{
+ QPixmap* surface = new QPixmap;
+ QImage image(GST_BUFFER_DATA(buffer), size.width(), size.height(), imageFormat);
+ surface->convertFromImage(image);
+ m_image = BitmapImage::create(surface);
+}
+
+ImageGStreamer::~ImageGStreamer()
+{
+ if (m_image)
+ m_image.clear();
+
+ m_image = 0;
+}
+#endif // USE(GSTREAMER)
+
diff --git a/WebCore/platform/graphics/gstreamer/PlatformVideoWindowPrivate.h b/WebCore/platform/graphics/gstreamer/PlatformVideoWindowPrivate.h
new file mode 100644
index 0000000..0ae4587
--- /dev/null
+++ b/WebCore/platform/graphics/gstreamer/PlatformVideoWindowPrivate.h
@@ -0,0 +1,44 @@
+/*
+ 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.
+*/
+
+#ifndef PlatformVideoWindowPrivate_h
+#define PlatformVideoWindowPrivate_h
+
+#include <QWidget>
+
+class QKeyEvent;
+
+namespace WebCore {
+
+class FullScreenVideoWindow: public QWidget {
+Q_OBJECT
+public:
+ FullScreenVideoWindow();
+signals:
+ void closed();
+protected:
+ void keyPressEvent(QKeyEvent* ev);
+ bool event(QEvent* ev);
+};
+
+
+} // namespace WebCore
+
+
+#endif // PlatformVideoWindowPrivate_h
diff --git a/WebCore/platform/graphics/gstreamer/PlatformVideoWindowQt.cpp b/WebCore/platform/graphics/gstreamer/PlatformVideoWindowQt.cpp
new file mode 100644
index 0000000..872d055
--- /dev/null
+++ b/WebCore/platform/graphics/gstreamer/PlatformVideoWindowQt.cpp
@@ -0,0 +1,82 @@
+/*
+ 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.
+*/
+
+#include "config.h"
+#include "PlatformVideoWindow.h"
+
+#include "PlatformVideoWindowPrivate.h"
+
+#include <QApplication>
+#include <QDesktopWidget>
+#include <QKeyEvent>
+#include <QPalette>
+using namespace WebCore;
+
+FullScreenVideoWindow::FullScreenVideoWindow()
+ : QWidget(0, Qt::Window)
+{
+ setAttribute(Qt::WA_NativeWindow);
+ // Setting these values ensures smooth resizing since it
+ // will prevent the system from clearing the background.
+ setAttribute(Qt::WA_NoSystemBackground, true);
+ setAttribute(Qt::WA_PaintOnScreen, true);
+}
+
+void FullScreenVideoWindow::keyPressEvent(QKeyEvent* ev)
+{
+ if (ev->key() == Qt::Key_Escape) {
+ close();
+ emit closed();
+ }
+}
+
+bool FullScreenVideoWindow::event(QEvent* ev)
+{
+ switch (ev->type()) {
+ case QEvent::MouseButtonDblClick:
+ close();
+ ev->accept();
+ return true;
+ default:
+ return QWidget::event(ev);
+ }
+}
+
+
+PlatformVideoWindow::PlatformVideoWindow()
+{
+ m_window = new FullScreenVideoWindow();
+ m_window->setWindowFlags(m_window->windowFlags() | Qt::FramelessWindowHint);
+ QPalette p;
+ p.setColor(QPalette::Base, Qt::black);
+ p.setColor(QPalette::Window, Qt::black);
+ m_window->setPalette(p);
+ m_window->showFullScreen();
+ m_videoWindowId = m_window->winId();
+}
+
+PlatformVideoWindow::~PlatformVideoWindow()
+{
+ delete m_window;
+ m_videoWindowId = 0;
+}
+
+void PlatformVideoWindow::prepareForOverlay(GstMessage*)
+{
+}
diff --git a/WebCore/platform/graphics/gtk/FontGtk.cpp b/WebCore/platform/graphics/gtk/FontGtk.cpp
index 328ec4a..54e18c9 100644
--- a/WebCore/platform/graphics/gtk/FontGtk.cpp
+++ b/WebCore/platform/graphics/gtk/FontGtk.cpp
@@ -33,19 +33,51 @@
#include "config.h"
#include "Font.h"
+#include "CairoUtilities.h"
+#include "ContextShadow.h"
#include "GraphicsContext.h"
#include "SimpleFontData.h"
-
#include <cairo.h>
#include <gdk/gdk.h>
#include <pango/pango.h>
#include <pango/pangocairo.h>
+
#if defined(USE_FREETYPE)
#include <pango/pangofc-fontmap.h>
#endif
namespace WebCore {
+#ifdef GTK_API_VERSION_2
+typedef GdkRegion* PangoRegionType;
+
+void destroyPangoRegion(PangoRegionType region)
+{
+ gdk_region_destroy(region);
+}
+
+IntRect getPangoRegionExtents(PangoRegionType region)
+{
+ GdkRectangle rectangle;
+ gdk_region_get_clipbox(region, &rectangle);
+ return IntRect(rectangle.x, rectangle.y, rectangle.width, rectangle.height);
+}
+#else
+typedef cairo_region_t* PangoRegionType;
+
+void destroyPangoRegion(PangoRegionType region)
+{
+ cairo_region_destroy(region);
+}
+
+IntRect getPangoRegionExtents(PangoRegionType region)
+{
+ cairo_rectangle_int_t rectangle;
+ cairo_region_get_extents(region, &rectangle);
+ return IntRect(rectangle.x, rectangle.y, rectangle.width, rectangle.height);
+}
+#endif
+
#define IS_HIGH_SURROGATE(u) ((UChar)(u) >= (UChar)0xd800 && (UChar)(u) <= (UChar)0xdbff)
#define IS_LOW_SURROGATE(u) ((UChar)(u) >= (UChar)0xdc00 && (UChar)(u) <= (UChar)0xdfff)
@@ -181,6 +213,52 @@ bool Font::canReturnFallbackFontsForComplexText()
return false;
}
+static void drawGlyphsShadow(GraphicsContext* graphicsContext, cairo_t* context, const FloatPoint& point, PangoLayoutLine* layoutLine, PangoRegionType renderRegion)
+{
+ ContextShadow* shadow = graphicsContext->contextShadow();
+ ASSERT(shadow);
+
+ if (!(graphicsContext->textDrawingMode() & cTextFill) || shadow->m_type == ContextShadow::NoShadow)
+ return;
+
+ FloatPoint totalOffset(point + shadow->m_offset);
+
+ // Optimize non-blurry shadows, by just drawing text without the ContextShadow.
+ if (shadow->m_type == ContextShadow::SolidShadow) {
+ cairo_save(context);
+ cairo_translate(context, totalOffset.x(), totalOffset.y());
+
+ setSourceRGBAFromColor(context, shadow->m_color);
+ gdk_cairo_region(context, renderRegion);
+ cairo_clip(context);
+ pango_cairo_show_layout_line(context, layoutLine);
+
+ cairo_restore(context);
+ return;
+ }
+
+ FloatRect extents(getPangoRegionExtents(renderRegion));
+ extents.setLocation(FloatPoint(point.x(), point.y() - extents.height()));
+ cairo_t* shadowContext = shadow->beginShadowLayer(context, extents);
+ if (shadowContext) {
+ cairo_translate(shadowContext, point.x(), point.y());
+ pango_cairo_show_layout_line(shadowContext, layoutLine);
+
+ // We need the clipping region to be active when we blit the blurred shadow back,
+ // because we don't want any bits and pieces of characters out of range to be
+ // drawn. Since ContextShadow expects a consistent transform, we have to undo the
+ // translation before calling endShadowLayer as well.
+ cairo_save(context);
+ cairo_translate(context, totalOffset.x(), totalOffset.y());
+ gdk_cairo_region(context, renderRegion);
+ cairo_clip(context);
+ cairo_translate(context, -totalOffset.x(), -totalOffset.y());
+
+ shadow->endShadowLayer(context);
+ cairo_restore(context);
+ }
+}
+
void Font::drawComplexText(GraphicsContext* context, const TextRun& run, const FloatPoint& point, int from, int to) const
{
#if defined(USE_FREETYPE)
@@ -191,9 +269,6 @@ void Font::drawComplexText(GraphicsContext* context, const TextRun& run, const F
#endif
cairo_t* cr = context->platformContext();
- cairo_save(cr);
- cairo_translate(cr, point.x(), point.y());
-
PangoLayout* layout = pango_cairo_create_layout(cr);
setPangoAttributes(this, run, layout);
@@ -203,59 +278,25 @@ void Font::drawComplexText(GraphicsContext* context, const TextRun& run, const F
// Our layouts are single line
PangoLayoutLine* layoutLine = pango_layout_get_line_readonly(layout, 0);
-#ifdef GTK_API_VERSION_2
- GdkRegion* partialRegion = 0;
-#else
- cairo_region_t* partialRegion = 0;
-#endif
-
- if (to - from != run.length()) {
- // Clip the region of the run to be rendered
- char* start = g_utf8_offset_to_pointer(utf8, from);
- char* end = g_utf8_offset_to_pointer(start, to - from);
- int ranges[] = {start - utf8, end - utf8};
- partialRegion = gdk_pango_layout_line_get_clip_region(layoutLine, 0, 0, ranges, 1);
- }
-
- Color fillColor = context->fillColor();
- float red, green, blue, alpha;
-
- // Text shadow, inspired by FontMac
- FloatSize shadowOffset;
- float shadowBlur = 0;
- Color shadowColor;
- bool hasShadow = context->textDrawingMode() == cTextFill &&
- context->getShadow(shadowOffset, shadowBlur, shadowColor);
-
- // TODO: Blur support
- if (hasShadow) {
- // Disable graphics context shadows (not yet implemented) and paint them manually
- context->clearShadow();
- Color shadowFillColor(shadowColor.red(), shadowColor.green(), shadowColor.blue(), shadowColor.alpha() * fillColor.alpha() / 255);
- cairo_save(cr);
-
- shadowFillColor.getRGBA(red, green, blue, alpha);
- cairo_set_source_rgba(cr, red, green, blue, alpha);
-
- cairo_translate(cr, shadowOffset.width(), shadowOffset.height());
-
- if (partialRegion) {
- gdk_cairo_region(cr, partialRegion);
- cairo_clip(cr);
- }
+ // Get the region where this text will be laid out. We will use it to clip
+ // the Cairo context, for when we are only painting part of the text run and
+ // to calculate the size of the shadow buffer.
+ PangoRegionType partialRegion = 0;
+ char* start = g_utf8_offset_to_pointer(utf8, from);
+ char* end = g_utf8_offset_to_pointer(start, to - from);
+ int ranges[] = {start - utf8, end - utf8};
+ partialRegion = gdk_pango_layout_line_get_clip_region(layoutLine, 0, 0, ranges, 1);
- pango_cairo_show_layout_line(cr, layoutLine);
+ drawGlyphsShadow(context, cr, point, layoutLine, partialRegion);
- cairo_restore(cr);
- }
+ cairo_save(cr);
+ cairo_translate(cr, point.x(), point.y());
- fillColor.getRGBA(red, green, blue, alpha);
+ float red, green, blue, alpha;
+ context->fillColor().getRGBA(red, green, blue, alpha);
cairo_set_source_rgba(cr, red, green, blue, alpha);
-
- if (partialRegion) {
- gdk_cairo_region(cr, partialRegion);
- cairo_clip(cr);
- }
+ gdk_cairo_region(cr, partialRegion);
+ cairo_clip(cr);
pango_cairo_show_layout_line(cr, layoutLine);
@@ -268,20 +309,10 @@ void Font::drawComplexText(GraphicsContext* context, const TextRun& run, const F
cairo_stroke(cr);
}
- // Re-enable the platform shadow we disabled earlier
- if (hasShadow)
- context->setShadow(shadowOffset, shadowBlur, shadowColor, ColorSpaceDeviceRGB);
-
// Pango sometimes leaves behind paths we don't want
cairo_new_path(cr);
- if (partialRegion)
-#ifdef GTK_API_VERSION_2
- gdk_region_destroy(partialRegion);
-#else
- cairo_region_destroy(partialRegion);
-#endif
-
+ destroyPangoRegion(partialRegion);
g_free(utf8);
g_object_unref(layout);
diff --git a/WebCore/platform/graphics/gtk/GdkCairoUtilities.cpp b/WebCore/platform/graphics/gtk/GdkCairoUtilities.cpp
index d768ce2..d8018a3 100644
--- a/WebCore/platform/graphics/gtk/GdkCairoUtilities.cpp
+++ b/WebCore/platform/graphics/gtk/GdkCairoUtilities.cpp
@@ -25,70 +25,15 @@
#include "config.h"
#include "GdkCairoUtilities.h"
+#include "GtkVersioning.h"
#include <cairo.h>
#include <gtk/gtk.h>
-static inline unsigned char* getCairoSurfacePixel(unsigned char* data, unsigned x, unsigned y, unsigned rowStride)
-{
- return data + (y * rowStride) + x * 4;
-}
-
-static inline guchar* getGdkPixbufPixel(guchar* data, unsigned x, unsigned y, unsigned rowStride)
-{
- return data + (y * rowStride) + x * 4;
-}
-
GdkPixbuf* cairoImageSurfaceToGdkPixbuf(cairo_surface_t* surface)
{
- int width = cairo_image_surface_get_width(surface);
- int height = cairo_image_surface_get_height(surface);
- unsigned char* surfaceData = cairo_image_surface_get_data(surface);
- int surfaceRowStride = cairo_image_surface_get_stride(surface);
-
- GdkPixbuf* dest = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, width, height);
- if (!dest)
- return 0;
-
- guchar* pixbufData = gdk_pixbuf_get_pixels(dest);
- int pixbufRowStride = gdk_pixbuf_get_rowstride(dest);
-
- /* From: http://cairographics.org/manual/cairo-image-surface.html#cairo-format-t
- * "CAIRO_FORMAT_ARGB32: each pixel is a 32-bit quantity, with alpha in
- * the upper 8 bits, then red, then green, then blue. The 32-bit
- * quantities are stored native-endian. Pre-multiplied alpha is used.
- * (That is, 50% transparent red is 0x80800000, not 0x80ff0000.)"
- *
- * See http://developer.gimp.org/api/2.0/gdk-pixbuf/gdk-pixbuf-gdk-pixbuf.html#GdkPixbuf
- * for information on the structure of GdkPixbufs stored with GDK_COLORSPACE_RGB.
- *
- * RGB color channels in CAIRO_FORMAT_ARGB32 are stored based on the
- * endianness of the machine and are also multiplied by the alpha channel.
- * To properly transfer the data from the Cairo surface we must divide each
- * of the RGB channels by the alpha channel and then reorder all channels
- * if this machine is little-endian.
- */
- for (int y = 0; y < height; y++) {
- for (int x = 0; x < width; x++) {
- unsigned char* source = getCairoSurfacePixel(surfaceData, x, y, surfaceRowStride);
- guchar* dest = getGdkPixbufPixel(pixbufData, x, y, pixbufRowStride);
-
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
- guchar alpha = source[3];
- dest[0] = alpha ? ((source[2] * 255) / alpha) : 0;
- dest[1] = alpha ? ((source[1] * 255) / alpha) : 0;
- dest[2] = alpha ? ((source[0] * 255) / alpha) : 0;
- dest[3] = alpha;
-#else
- guchar alpha = source[0];
- dest[0] = alpha ? ((source[1] * 255) / alpha) : 0;
- dest[1] = alpha ? ((source[2] * 255) / alpha) : 0;
- dest[2] = alpha ? ((source[3] * 255) / alpha) : 0;
- dest[3] = alpha;
-#endif
- }
- }
-
- return dest;
+ return gdk_pixbuf_get_from_surface(surface, 0, 0,
+ cairo_image_surface_get_width(surface),
+ cairo_image_surface_get_height(surface));
}
diff --git a/WebCore/platform/graphics/haiku/SimpleFontDataHaiku.cpp b/WebCore/platform/graphics/haiku/SimpleFontDataHaiku.cpp
index 96027cc..a960972 100644
--- a/WebCore/platform/graphics/haiku/SimpleFontDataHaiku.cpp
+++ b/WebCore/platform/graphics/haiku/SimpleFontDataHaiku.cpp
@@ -64,8 +64,6 @@ void SimpleFontData::platformCharWidthInit()
void SimpleFontData::platformDestroy()
{
- delete m_smallCapsFontData;
- m_smallCapsFontData = 0;
}
SimpleFontData* SimpleFontData::smallCapsFontData(const FontDescription& fontDescription) const
@@ -74,7 +72,7 @@ SimpleFontData* SimpleFontData::smallCapsFontData(const FontDescription& fontDes
FontDescription desc = FontDescription(fontDescription);
desc.setSpecifiedSize(0.70f * fontDescription.computedSize());
FontPlatformData fontPlatformData(desc, desc.family().family());
- m_smallCapsFontData = new SimpleFontData(fontPlatformData);
+ m_smallCapsFontData = new SimpleFontData(fontPlatformData, isCustomFont(), false);
}
return m_smallCapsFontData;
}
diff --git a/WebCore/platform/graphics/mac/ComplexTextController.cpp b/WebCore/platform/graphics/mac/ComplexTextController.cpp
index a2733f8..e6a7bef 100644
--- a/WebCore/platform/graphics/mac/ComplexTextController.cpp
+++ b/WebCore/platform/graphics/mac/ComplexTextController.cpp
@@ -487,7 +487,7 @@ void ComplexTextController::adjustGlyphsAndAdvances()
advance.width += m_font.letterSpacing();
// Handle justification and word-spacing.
- if (glyph == fontData->spaceGlyph()) {
+ if (treatAsSpace) {
// Account for padding. WebCore uses space padding to justify text.
// We distribute the specified padding over the available spaces in the run.
if (m_padding) {
@@ -503,7 +503,7 @@ void ComplexTextController::adjustGlyphsAndAdvances()
}
// Account for word-spacing.
- if (treatAsSpace && characterIndex > 0 && !Font::treatAsSpace(*m_run.data(characterIndex - 1)) && m_font.wordSpacing())
+ if (characterIndex > 0 && !Font::treatAsSpace(*m_run.data(characterIndex - 1)) && m_font.wordSpacing())
advance.width += m_font.wordSpacing();
}
}
diff --git a/WebCore/platform/graphics/mac/ComplexTextControllerATSUI.cpp b/WebCore/platform/graphics/mac/ComplexTextControllerATSUI.cpp
index 1656854..7ff316c 100644
--- a/WebCore/platform/graphics/mac/ComplexTextControllerATSUI.cpp
+++ b/WebCore/platform/graphics/mac/ComplexTextControllerATSUI.cpp
@@ -262,7 +262,7 @@ static void disableLigatures(const SimpleFontData* fontData, ATSUStyle atsuStyle
// Don't be too aggressive: if the font doesn't contain 'a', then assume that any ligatures it contains are
// in characters that always go through ATSUI, and therefore allow them. Geeza Pro is an example.
// See bugzilla 5166.
- if ((typesettingFeatures & Ligatures) || fontData->platformData().allowsLigatures())
+ if ((typesettingFeatures & Ligatures) || (fontData->orientation() == Horizontal && fontData->platformData().allowsLigatures()))
return;
ATSUFontFeatureType featureTypes[] = { kLigaturesType };
diff --git a/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp b/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp
index 744e6d4..cbb7610 100644
--- a/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp
+++ b/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp
@@ -24,6 +24,7 @@
#include "config.h"
#include "ComplexTextController.h"
+#include "WebCoreSystemInterface.h"
#if USE(CORE_TEXT)
@@ -101,6 +102,23 @@ void ComplexTextController::ComplexTextRun::createTextRunFromFontDataCoreText(bo
m_advances = m_advancesVector.data();
}
+struct ProviderInfo {
+ const UChar* cp;
+ unsigned length;
+ CFDictionaryRef attributes;
+};
+
+static const UniChar* provideStringAndAttributes(CFIndex stringIndex, CFIndex* charCount, CFDictionaryRef* attributes, void* refCon)
+{
+ ProviderInfo* info = static_cast<struct ProviderInfo*>(refCon);
+ if (stringIndex < 0 || static_cast<unsigned>(stringIndex) >= info->length)
+ return 0;
+
+ *charCount = info->length - stringIndex;
+ *attributes = info->attributes;
+ return info->cp + stringIndex;
+}
+
void ComplexTextController::collectComplexTextRunsForCharactersCoreText(const UChar* cp, unsigned length, unsigned stringLocation, const SimpleFontData* fontData)
{
if (!fontData) {
@@ -112,10 +130,6 @@ void ComplexTextController::collectComplexTextRunsForCharactersCoreText(const UC
if (m_fallbackFonts && fontData != m_font.primaryFont())
m_fallbackFonts->add(fontData);
- RetainPtr<CFStringRef> string(AdoptCF, CFStringCreateWithCharactersNoCopy(NULL, cp, length, kCFAllocatorNull));
-
- RetainPtr<CFAttributedStringRef> attributedString(AdoptCF, CFAttributedStringCreate(NULL, string.get(), fontData->getCFStringAttributes(m_font.typesettingFeatures())));
-
RetainPtr<CTLineRef> line;
if (!m_mayUseNaturalWritingDirection || m_run.directionalOverride()) {
@@ -126,11 +140,22 @@ void ComplexTextController::collectComplexTextRunsForCharactersCoreText(const UC
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);
+
+#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
+ ProviderInfo info = { cp, length, fontData->getCFStringAttributes(m_font.typesettingFeatures()) };
+ RetainPtr<CTTypesetterRef> typesetter(AdoptCF, wkCreateCTTypesetterWithUniCharProviderAndOptions(&provideStringAndAttributes, 0, &info, m_run.ltr() ? ltrTypesetterOptions : rtlTypesetterOptions));
+#else
+ RetainPtr<CFStringRef> string(AdoptCF, CFStringCreateWithCharactersNoCopy(kCFAllocatorDefault, cp, length, kCFAllocatorNull));
+ RetainPtr<CFAttributedStringRef> attributedString(AdoptCF, CFAttributedStringCreate(kCFAllocatorDefault, string.get(), fontData->getCFStringAttributes(m_font.typesettingFeatures())));
RetainPtr<CTTypesetterRef> typesetter(AdoptCF, CTTypesetterCreateWithAttributedStringAndOptions(attributedString.get(), m_run.ltr() ? ltrTypesetterOptions : rtlTypesetterOptions));
+#endif
line.adoptCF(CTTypesetterCreateLine(typesetter.get(), CFRangeMake(0, 0)));
- } else
- line.adoptCF(CTLineCreateWithAttributedString(attributedString.get()));
+ } else {
+ ProviderInfo info = { cp, length, fontData->getCFStringAttributes(m_font.typesettingFeatures()) };
+
+ line.adoptCF(wkCreateCTLineWithUniCharProvider(&provideStringAndAttributes, 0, &info));
+ }
CFArrayRef runArray = CTLineGetGlyphRuns(line.get());
diff --git a/WebCore/platform/graphics/mac/FontCacheMac.mm b/WebCore/platform/graphics/mac/FontCacheMac.mm
index 313db1c..068bd8e 100644
--- a/WebCore/platform/graphics/mac/FontCacheMac.mm
+++ b/WebCore/platform/graphics/mac/FontCacheMac.mm
@@ -140,7 +140,7 @@ const SimpleFontData* FontCache::getFontDataForCharacters(const Font& font, cons
NSFontTraitMask substituteFontTraits = [fontManager traitsOfFont:substituteFont];
NSInteger substituteFontWeight = [fontManager weightOfFont:substituteFont];
- FontPlatformData alternateFont(substituteFont,
+ FontPlatformData alternateFont(substituteFont, platformData.size(),
!font.isPlatformFont() && isAppKitFontWeightBold(weight) && !isAppKitFontWeightBold(substituteFontWeight),
!font.isPlatformFont() && (traits & NSFontItalicTrait) && !(substituteFontTraits & NSFontItalicTrait),
platformData.m_orientation);
@@ -211,7 +211,7 @@ FontPlatformData* FontCache::createFontPlatformData(const FontDescription& fontD
bool syntheticBold = isAppKitFontWeightBold(weight) && !isAppKitFontWeightBold(actualWeight);
bool syntheticOblique = (traits & NSFontItalicTrait) && !(actualTraits & NSFontItalicTrait);
- return new FontPlatformData(platformFont, syntheticBold, syntheticOblique, fontDescription.orientation());
+ return new FontPlatformData(platformFont, size, syntheticBold, syntheticOblique, fontDescription.orientation());
}
} // namespace WebCore
diff --git a/WebCore/platform/graphics/mac/FontMac.mm b/WebCore/platform/graphics/mac/FontMac.mm
index d760f5a..8dc741b 100644
--- a/WebCore/platform/graphics/mac/FontMac.mm
+++ b/WebCore/platform/graphics/mac/FontMac.mm
@@ -52,7 +52,7 @@ static void showGlyphsWithAdvances(const SimpleFontData* font, CGContextRef cont
const FontPlatformData& platformData = font->platformData();
if (!platformData.isColorBitmapFont()) {
CGAffineTransform savedMatrix;
- bool isVertical = platformData.orientation() == Vertical;
+ bool isVertical = font->orientation() == Vertical;
if (isVertical) {
CGAffineTransform rotateLeftTransform = CGAffineTransformMake(0, -1, 1, 0, 0, 0);
diff --git a/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp b/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp
index 48ad1c0..9524cd2 100644
--- a/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp
+++ b/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp
@@ -40,7 +40,7 @@ bool GlyphPage::fill(unsigned offset, unsigned length, UChar* buffer, unsigned b
bool haveGlyphs = false;
#ifndef BUILDING_ON_TIGER
- if (fontData->platformData().orientation() == Horizontal) {
+ if (fontData->orientation() == Horizontal || fontData->isBrokenIdeographFont()) {
Vector<CGGlyph, 512> glyphs(bufferLength);
wkGetGlyphsForCharacters(fontData->platformData().cgFont(), buffer, glyphs.data(), bufferLength);
for (unsigned i = 0; i < length; ++i) {
diff --git a/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm b/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm
index ab6993f..321d0ef 100644
--- a/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm
+++ b/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm
@@ -251,17 +251,6 @@ bool GraphicsContext3D::isGLES2Compliant() const
return false;
}
-bool GraphicsContext3D::isGLES2NPOTStrict() const
-{
- return false;
-}
-
-bool GraphicsContext3D::isErrorGeneratedOnOutOfBoundsAccesses() const
-{
- return false;
-}
-
-
}
#endif // ENABLE(3D_CANVAS)
diff --git a/WebCore/platform/graphics/mac/GraphicsLayerCA.h b/WebCore/platform/graphics/mac/GraphicsLayerMac.h
index 17a67ac..5d4dfe2 100644
--- a/WebCore/platform/graphics/mac/GraphicsLayerCA.h
+++ b/WebCore/platform/graphics/mac/GraphicsLayerMac.h
@@ -23,8 +23,8 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef GraphicsLayerCA_h
-#define GraphicsLayerCA_h
+#ifndef GraphicsLayerMac_h
+#define GraphicsLayerMac_h
#if USE(ACCELERATED_COMPOSITING)
@@ -43,11 +43,11 @@
namespace WebCore {
-class GraphicsLayerCA : public GraphicsLayer {
+class GraphicsLayerMac : public GraphicsLayer {
public:
- GraphicsLayerCA(GraphicsLayerClient*);
- virtual ~GraphicsLayerCA();
+ GraphicsLayerMac(GraphicsLayerClient*);
+ virtual ~GraphicsLayerMac();
virtual void setName(const String&);
@@ -385,4 +385,4 @@ private:
#endif // USE(ACCELERATED_COMPOSITING)
-#endif // GraphicsLayerCA_h
+#endif // GraphicsLayerMac_h
diff --git a/WebCore/platform/graphics/mac/GraphicsLayerCA.mm b/WebCore/platform/graphics/mac/GraphicsLayerMac.mm
index c4128ef..f9b16a0 100644
--- a/WebCore/platform/graphics/mac/GraphicsLayerCA.mm
+++ b/WebCore/platform/graphics/mac/GraphicsLayerMac.mm
@@ -27,7 +27,7 @@
#if USE(ACCELERATED_COMPOSITING)
-#import "GraphicsLayerCA.h"
+#import "GraphicsLayerMac.h"
#import "Animation.h"
#import "BlockExceptions.h"
@@ -90,12 +90,12 @@ static double mediaTimeToCurrentTime(CFTimeInterval t)
@end
@interface WebAnimationDelegate : NSObject {
- WebCore::GraphicsLayerCA* m_graphicsLayer;
+ WebCore::GraphicsLayerMac* m_graphicsLayer;
}
- (void)animationDidStart:(CAAnimation *)anim;
-- (WebCore::GraphicsLayerCA*)graphicsLayer;
-- (void)setLayer:(WebCore::GraphicsLayerCA*)graphicsLayer;
+- (WebCore::GraphicsLayerMac*)graphicsLayer;
+- (void)setLayer:(WebCore::GraphicsLayerMac*)graphicsLayer;
@end
@@ -107,12 +107,12 @@ static double mediaTimeToCurrentTime(CFTimeInterval t)
m_graphicsLayer->animationDidStart(animation);
}
-- (WebCore::GraphicsLayerCA*)graphicsLayer
+- (WebCore::GraphicsLayerMac*)graphicsLayer
{
return m_graphicsLayer;
}
-- (void)setLayer:(WebCore::GraphicsLayerCA*)graphicsLayer
+- (void)setLayer:(WebCore::GraphicsLayerMac*)graphicsLayer
{
m_graphicsLayer = graphicsLayer;
}
@@ -342,10 +342,10 @@ static bool animationHasStepsTimingFunction(const KeyframeValueList& valueList,
PassOwnPtr<GraphicsLayer> GraphicsLayer::create(GraphicsLayerClient* client)
{
- return new GraphicsLayerCA(client);
+ return new GraphicsLayerMac(client);
}
-GraphicsLayerCA::GraphicsLayerCA(GraphicsLayerClient* client)
+GraphicsLayerMac::GraphicsLayerMac(GraphicsLayerClient* client)
: GraphicsLayer(client)
, m_contentsLayerPurpose(NoContentsLayer)
, m_contentsLayerHasBackgroundColor(false)
@@ -367,11 +367,11 @@ GraphicsLayerCA::GraphicsLayerCA(GraphicsLayerClient* client)
END_BLOCK_OBJC_EXCEPTIONS
}
-GraphicsLayerCA::~GraphicsLayerCA()
+GraphicsLayerMac::~GraphicsLayerMac()
{
// We release our references to the CALayers here, but do not actively unparent them,
// since that will cause a commit and break our batched commit model. The layers will
- // get released when the rootmost modified GraphicsLayerCA rebuilds its child layers.
+ // get released when the rootmost modified GraphicsLayerMac rebuilds its child layers.
BEGIN_BLOCK_OBJC_EXCEPTIONS
@@ -395,19 +395,19 @@ GraphicsLayerCA::~GraphicsLayerCA()
END_BLOCK_OBJC_EXCEPTIONS
}
-void GraphicsLayerCA::setName(const String& name)
+void GraphicsLayerMac::setName(const String& name)
{
String longName = String::format("CALayer(%p) GraphicsLayer(%p) ", m_layer.get(), this) + name;
GraphicsLayer::setName(longName);
noteLayerPropertyChanged(NameChanged);
}
-NativeLayer GraphicsLayerCA::nativeLayer() const
+NativeLayer GraphicsLayerMac::nativeLayer() const
{
return m_layer.get();
}
-bool GraphicsLayerCA::setChildren(const Vector<GraphicsLayer*>& children)
+bool GraphicsLayerMac::setChildren(const Vector<GraphicsLayer*>& children)
{
bool childrenChanged = GraphicsLayer::setChildren(children);
if (childrenChanged)
@@ -416,31 +416,31 @@ bool GraphicsLayerCA::setChildren(const Vector<GraphicsLayer*>& children)
return childrenChanged;
}
-void GraphicsLayerCA::addChild(GraphicsLayer* childLayer)
+void GraphicsLayerMac::addChild(GraphicsLayer* childLayer)
{
GraphicsLayer::addChild(childLayer);
noteSublayersChanged();
}
-void GraphicsLayerCA::addChildAtIndex(GraphicsLayer* childLayer, int index)
+void GraphicsLayerMac::addChildAtIndex(GraphicsLayer* childLayer, int index)
{
GraphicsLayer::addChildAtIndex(childLayer, index);
noteSublayersChanged();
}
-void GraphicsLayerCA::addChildBelow(GraphicsLayer* childLayer, GraphicsLayer* sibling)
+void GraphicsLayerMac::addChildBelow(GraphicsLayer* childLayer, GraphicsLayer* sibling)
{
GraphicsLayer::addChildBelow(childLayer, sibling);
noteSublayersChanged();
}
-void GraphicsLayerCA::addChildAbove(GraphicsLayer* childLayer, GraphicsLayer* sibling)
+void GraphicsLayerMac::addChildAbove(GraphicsLayer* childLayer, GraphicsLayer* sibling)
{
GraphicsLayer::addChildAbove(childLayer, sibling);
noteSublayersChanged();
}
-bool GraphicsLayerCA::replaceChild(GraphicsLayer* oldChild, GraphicsLayer* newChild)
+bool GraphicsLayerMac::replaceChild(GraphicsLayer* oldChild, GraphicsLayer* newChild)
{
if (GraphicsLayer::replaceChild(oldChild, newChild)) {
noteSublayersChanged();
@@ -449,14 +449,14 @@ bool GraphicsLayerCA::replaceChild(GraphicsLayer* oldChild, GraphicsLayer* newCh
return false;
}
-void GraphicsLayerCA::removeFromParent()
+void GraphicsLayerMac::removeFromParent()
{
if (m_parent)
- static_cast<GraphicsLayerCA*>(m_parent)->noteSublayersChanged();
+ static_cast<GraphicsLayerMac*>(m_parent)->noteSublayersChanged();
GraphicsLayer::removeFromParent();
}
-void GraphicsLayerCA::setMaskLayer(GraphicsLayer* layer)
+void GraphicsLayerMac::setMaskLayer(GraphicsLayer* layer)
{
if (layer == m_maskLayer)
return;
@@ -467,10 +467,10 @@ void GraphicsLayerCA::setMaskLayer(GraphicsLayer* layer)
propagateLayerChangeToReplicas();
if (m_replicatedLayer)
- static_cast<GraphicsLayerCA*>(m_replicatedLayer)->propagateLayerChangeToReplicas();
+ static_cast<GraphicsLayerMac*>(m_replicatedLayer)->propagateLayerChangeToReplicas();
}
-void GraphicsLayerCA::setReplicatedLayer(GraphicsLayer* layer)
+void GraphicsLayerMac::setReplicatedLayer(GraphicsLayer* layer)
{
if (layer == m_replicatedLayer)
return;
@@ -479,7 +479,7 @@ void GraphicsLayerCA::setReplicatedLayer(GraphicsLayer* layer)
noteLayerPropertyChanged(ReplicatedLayerChanged);
}
-void GraphicsLayerCA::setReplicatedByLayer(GraphicsLayer* layer)
+void GraphicsLayerMac::setReplicatedByLayer(GraphicsLayer* layer)
{
if (layer == m_replicaLayer)
return;
@@ -489,7 +489,7 @@ void GraphicsLayerCA::setReplicatedByLayer(GraphicsLayer* layer)
noteLayerPropertyChanged(ReplicatedLayerChanged);
}
-void GraphicsLayerCA::setPosition(const FloatPoint& point)
+void GraphicsLayerMac::setPosition(const FloatPoint& point)
{
if (point == m_position)
return;
@@ -498,7 +498,7 @@ void GraphicsLayerCA::setPosition(const FloatPoint& point)
noteLayerPropertyChanged(PositionChanged);
}
-void GraphicsLayerCA::setAnchorPoint(const FloatPoint3D& point)
+void GraphicsLayerMac::setAnchorPoint(const FloatPoint3D& point)
{
if (point == m_anchorPoint)
return;
@@ -507,7 +507,7 @@ void GraphicsLayerCA::setAnchorPoint(const FloatPoint3D& point)
noteLayerPropertyChanged(AnchorPointChanged);
}
-void GraphicsLayerCA::setSize(const FloatSize& size)
+void GraphicsLayerMac::setSize(const FloatSize& size)
{
if (size == m_size)
return;
@@ -516,7 +516,7 @@ void GraphicsLayerCA::setSize(const FloatSize& size)
noteLayerPropertyChanged(SizeChanged);
}
-void GraphicsLayerCA::setTransform(const TransformationMatrix& t)
+void GraphicsLayerMac::setTransform(const TransformationMatrix& t)
{
if (t == m_transform)
return;
@@ -525,7 +525,7 @@ void GraphicsLayerCA::setTransform(const TransformationMatrix& t)
noteLayerPropertyChanged(TransformChanged);
}
-void GraphicsLayerCA::setChildrenTransform(const TransformationMatrix& t)
+void GraphicsLayerMac::setChildrenTransform(const TransformationMatrix& t)
{
if (t == m_childrenTransform)
return;
@@ -534,7 +534,7 @@ void GraphicsLayerCA::setChildrenTransform(const TransformationMatrix& t)
noteLayerPropertyChanged(ChildrenTransformChanged);
}
-void GraphicsLayerCA::moveOrCopyLayerAnimation(MoveOrCopy operation, const String& animationIdentifier, CALayer *fromLayer, CALayer *toLayer)
+void GraphicsLayerMac::moveOrCopyLayerAnimation(MoveOrCopy operation, const String& animationIdentifier, CALayer *fromLayer, CALayer *toLayer)
{
NSString *animationID = animationIdentifier;
CAAnimation *anim = [fromLayer animationForKey:animationID];
@@ -555,7 +555,7 @@ void GraphicsLayerCA::moveOrCopyLayerAnimation(MoveOrCopy operation, const Strin
}
}
-void GraphicsLayerCA::moveOrCopyAnimationsForProperty(MoveOrCopy operation, AnimatedPropertyID property, CALayer *fromLayer, CALayer *toLayer)
+void GraphicsLayerMac::moveOrCopyAnimationsForProperty(MoveOrCopy operation, AnimatedPropertyID property, CALayer *fromLayer, CALayer *toLayer)
{
// Look for running animations affecting this property.
AnimationsMap::const_iterator end = m_runningAnimations.end();
@@ -570,7 +570,7 @@ void GraphicsLayerCA::moveOrCopyAnimationsForProperty(MoveOrCopy operation, Anim
}
}
-void GraphicsLayerCA::setPreserves3D(bool preserves3D)
+void GraphicsLayerMac::setPreserves3D(bool preserves3D)
{
if (preserves3D == m_preserves3D)
return;
@@ -579,7 +579,7 @@ void GraphicsLayerCA::setPreserves3D(bool preserves3D)
noteLayerPropertyChanged(Preserves3DChanged);
}
-void GraphicsLayerCA::setMasksToBounds(bool masksToBounds)
+void GraphicsLayerMac::setMasksToBounds(bool masksToBounds)
{
if (masksToBounds == m_masksToBounds)
return;
@@ -588,7 +588,7 @@ void GraphicsLayerCA::setMasksToBounds(bool masksToBounds)
noteLayerPropertyChanged(MasksToBoundsChanged);
}
-void GraphicsLayerCA::setDrawsContent(bool drawsContent)
+void GraphicsLayerMac::setDrawsContent(bool drawsContent)
{
if (drawsContent == m_drawsContent)
return;
@@ -597,7 +597,7 @@ void GraphicsLayerCA::setDrawsContent(bool drawsContent)
noteLayerPropertyChanged(DrawsContentChanged);
}
-void GraphicsLayerCA::setBackgroundColor(const Color& color)
+void GraphicsLayerMac::setBackgroundColor(const Color& color)
{
if (m_backgroundColorSet && m_backgroundColor == color)
return;
@@ -608,7 +608,7 @@ void GraphicsLayerCA::setBackgroundColor(const Color& color)
noteLayerPropertyChanged(BackgroundColorChanged);
}
-void GraphicsLayerCA::clearBackgroundColor()
+void GraphicsLayerMac::clearBackgroundColor()
{
if (!m_backgroundColorSet)
return;
@@ -618,7 +618,7 @@ void GraphicsLayerCA::clearBackgroundColor()
noteLayerPropertyChanged(BackgroundColorChanged);
}
-void GraphicsLayerCA::setContentsOpaque(bool opaque)
+void GraphicsLayerMac::setContentsOpaque(bool opaque)
{
if (m_contentsOpaque == opaque)
return;
@@ -627,7 +627,7 @@ void GraphicsLayerCA::setContentsOpaque(bool opaque)
noteLayerPropertyChanged(ContentsOpaqueChanged);
}
-void GraphicsLayerCA::setBackfaceVisibility(bool visible)
+void GraphicsLayerMac::setBackfaceVisibility(bool visible)
{
if (m_backfaceVisibility == visible)
return;
@@ -636,7 +636,7 @@ void GraphicsLayerCA::setBackfaceVisibility(bool visible)
noteLayerPropertyChanged(BackfaceVisibilityChanged);
}
-void GraphicsLayerCA::setOpacity(float opacity)
+void GraphicsLayerMac::setOpacity(float opacity)
{
float clampedOpacity = max(0.0f, min(opacity, 1.0f));
@@ -647,7 +647,7 @@ void GraphicsLayerCA::setOpacity(float opacity)
noteLayerPropertyChanged(OpacityChanged);
}
-void GraphicsLayerCA::setNeedsDisplay()
+void GraphicsLayerMac::setNeedsDisplay()
{
FloatRect hugeRect(-numeric_limits<float>::max() / 2, -numeric_limits<float>::max() / 2,
numeric_limits<float>::max(), numeric_limits<float>::max());
@@ -655,7 +655,7 @@ void GraphicsLayerCA::setNeedsDisplay()
setNeedsDisplayInRect(hugeRect);
}
-void GraphicsLayerCA::setNeedsDisplayInRect(const FloatRect& rect)
+void GraphicsLayerMac::setNeedsDisplayInRect(const FloatRect& rect)
{
if (!drawsContent())
return;
@@ -675,12 +675,12 @@ void GraphicsLayerCA::setNeedsDisplayInRect(const FloatRect& rect)
noteLayerPropertyChanged(DirtyRectsChanged);
}
-void GraphicsLayerCA::setContentsNeedsDisplay()
+void GraphicsLayerMac::setContentsNeedsDisplay()
{
noteLayerPropertyChanged(ContentsNeedsDisplay);
}
-void GraphicsLayerCA::setContentsRect(const IntRect& rect)
+void GraphicsLayerMac::setContentsRect(const IntRect& rect)
{
if (rect == m_contentsRect)
return;
@@ -689,7 +689,7 @@ void GraphicsLayerCA::setContentsRect(const IntRect& rect)
noteLayerPropertyChanged(ContentsRectChanged);
}
-bool GraphicsLayerCA::addAnimation(const KeyframeValueList& valueList, const IntSize& boxSize, const Animation* anim, const String& animationName, double timeOffset)
+bool GraphicsLayerMac::addAnimation(const KeyframeValueList& valueList, const IntSize& boxSize, const Animation* anim, const String& animationName, double timeOffset)
{
ASSERT(!animationName.isEmpty());
@@ -720,7 +720,7 @@ bool GraphicsLayerCA::addAnimation(const KeyframeValueList& valueList, const Int
return createdAnimations;
}
-void GraphicsLayerCA::pauseAnimation(const String& animationName, double timeOffset)
+void GraphicsLayerMac::pauseAnimation(const String& animationName, double timeOffset)
{
if (!animationIsRunning(animationName))
return;
@@ -737,7 +737,7 @@ void GraphicsLayerCA::pauseAnimation(const String& animationName, double timeOff
noteLayerPropertyChanged(AnimationChanged);
}
-void GraphicsLayerCA::removeAnimation(const String& animationName)
+void GraphicsLayerMac::removeAnimation(const String& animationName)
{
if (!animationIsRunning(animationName))
return;
@@ -746,7 +746,7 @@ void GraphicsLayerCA::removeAnimation(const String& animationName)
noteLayerPropertyChanged(AnimationChanged);
}
-void GraphicsLayerCA::animationDidStart(CAAnimation* caAnimation)
+void GraphicsLayerMac::animationDidStart(CAAnimation* caAnimation)
{
bool hadNonZeroBeginTime = [[caAnimation valueForKey:WebKitAnimationBeginTimeSetKey] boolValue];
@@ -762,7 +762,7 @@ void GraphicsLayerCA::animationDidStart(CAAnimation* caAnimation)
m_client->notifyAnimationStarted(this, startTime);
}
-void GraphicsLayerCA::setContentsToImage(Image* image)
+void GraphicsLayerMac::setContentsToImage(Image* image)
{
if (image) {
CGImageRef newImage = image->nativeImageForCurrentFrame();
@@ -799,7 +799,7 @@ void GraphicsLayerCA::setContentsToImage(Image* image)
noteLayerPropertyChanged(ContentsImageChanged);
}
-void GraphicsLayerCA::setContentsToMedia(PlatformLayer* mediaLayer)
+void GraphicsLayerMac::setContentsToMedia(PlatformLayer* mediaLayer)
{
if (mediaLayer == m_contentsLayer)
return;
@@ -811,7 +811,7 @@ void GraphicsLayerCA::setContentsToMedia(PlatformLayer* mediaLayer)
noteLayerPropertyChanged(ContentsMediaLayerChanged);
}
-void GraphicsLayerCA::didDisplay(PlatformLayer* layer)
+void GraphicsLayerMac::didDisplay(PlatformLayer* layer)
{
CALayer* sourceLayer;
LayerMap* layerCloneMap;
@@ -840,41 +840,41 @@ void GraphicsLayerCA::didDisplay(PlatformLayer* layer)
}
}
-void GraphicsLayerCA::syncCompositingState()
+void GraphicsLayerMac::syncCompositingState()
{
recursiveCommitChanges();
}
-void GraphicsLayerCA::syncCompositingStateForThisLayerOnly()
+void GraphicsLayerMac::syncCompositingStateForThisLayerOnly()
{
commitLayerChangesBeforeSublayers();
commitLayerChangesAfterSublayers();
}
-void GraphicsLayerCA::recursiveCommitChanges()
+void GraphicsLayerMac::recursiveCommitChanges()
{
commitLayerChangesBeforeSublayers();
if (m_maskLayer)
- static_cast<GraphicsLayerCA*>(m_maskLayer)->commitLayerChangesBeforeSublayers();
+ static_cast<GraphicsLayerMac*>(m_maskLayer)->commitLayerChangesBeforeSublayers();
const Vector<GraphicsLayer*>& childLayers = children();
size_t numChildren = childLayers.size();
for (size_t i = 0; i < numChildren; ++i) {
- GraphicsLayerCA* curChild = static_cast<GraphicsLayerCA*>(childLayers[i]);
+ GraphicsLayerMac* curChild = static_cast<GraphicsLayerMac*>(childLayers[i]);
curChild->recursiveCommitChanges();
}
if (m_replicaLayer)
- static_cast<GraphicsLayerCA*>(m_replicaLayer)->recursiveCommitChanges();
+ static_cast<GraphicsLayerMac*>(m_replicaLayer)->recursiveCommitChanges();
if (m_maskLayer)
- static_cast<GraphicsLayerCA*>(m_maskLayer)->commitLayerChangesAfterSublayers();
+ static_cast<GraphicsLayerMac*>(m_maskLayer)->commitLayerChangesAfterSublayers();
commitLayerChangesAfterSublayers();
}
-void GraphicsLayerCA::commitLayerChangesBeforeSublayers()
+void GraphicsLayerMac::commitLayerChangesBeforeSublayers()
{
if (!m_uncommittedChanges)
return;
@@ -951,7 +951,7 @@ void GraphicsLayerCA::commitLayerChangesBeforeSublayers()
END_BLOCK_OBJC_EXCEPTIONS
}
-void GraphicsLayerCA::commitLayerChangesAfterSublayers()
+void GraphicsLayerMac::commitLayerChangesAfterSublayers()
{
if (!m_uncommittedChanges)
return;
@@ -965,7 +965,7 @@ void GraphicsLayerCA::commitLayerChangesAfterSublayers()
END_BLOCK_OBJC_EXCEPTIONS
}
-void GraphicsLayerCA::updateLayerNames()
+void GraphicsLayerMac::updateLayerNames()
{
switch (structuralLayerPurpose()) {
case StructuralLayerForPreserves3D:
@@ -980,7 +980,7 @@ void GraphicsLayerCA::updateLayerNames()
[m_layer.get() setName:name()];
}
-void GraphicsLayerCA::updateSublayerList()
+void GraphicsLayerMac::updateSublayerList()
{
NSMutableArray* newSublayers = nil;
@@ -992,7 +992,7 @@ void GraphicsLayerCA::updateSublayerList()
if (m_structuralLayer) {
// Add the replica layer first.
if (m_replicaLayer)
- [newSublayers addObject:static_cast<GraphicsLayerCA*>(m_replicaLayer)->primaryLayer()];
+ [newSublayers addObject:static_cast<GraphicsLayerMac*>(m_replicaLayer)->primaryLayer()];
// Add the primary layer. Even if we have negative z-order children, the primary layer always comes behind.
[newSublayers addObject:m_layer.get()];
} else if (m_contentsLayer) {
@@ -1004,7 +1004,7 @@ void GraphicsLayerCA::updateSublayerList()
size_t numChildren = childLayers.size();
for (size_t i = 0; i < numChildren; ++i) {
- GraphicsLayerCA* curChild = static_cast<GraphicsLayerCA*>(childLayers[i]);
+ GraphicsLayerMac* curChild = static_cast<GraphicsLayerMac*>(childLayers[i]);
CALayer *childLayer = curChild->layerForSuperlayer();
[newSublayers addObject:childLayer];
}
@@ -1027,7 +1027,7 @@ void GraphicsLayerCA::updateSublayerList()
[newSublayers release];
}
-void GraphicsLayerCA::updateLayerPosition()
+void GraphicsLayerMac::updateLayerPosition()
{
FloatSize usedSize = m_usingTiledLayer ? constrainedSize() : m_size;
@@ -1052,7 +1052,7 @@ void GraphicsLayerCA::updateLayerPosition()
}
}
-void GraphicsLayerCA::updateLayerSize()
+void GraphicsLayerMac::updateLayerSize()
{
CGRect rect = CGRectMake(0, 0, m_size.width(), m_size.height());
if (m_structuralLayer) {
@@ -1101,7 +1101,7 @@ void GraphicsLayerCA::updateLayerSize()
updateLayerPosition();
}
-void GraphicsLayerCA::updateAnchorPoint()
+void GraphicsLayerMac::updateAnchorPoint()
{
[primaryLayer() setAnchorPoint:FloatPoint(m_anchorPoint.x(), m_anchorPoint.y())];
#if HAVE_MODERN_QUARTZCORE
@@ -1122,7 +1122,7 @@ void GraphicsLayerCA::updateAnchorPoint()
updateLayerPosition();
}
-void GraphicsLayerCA::updateTransform()
+void GraphicsLayerMac::updateTransform()
{
CATransform3D transform;
copyTransform(transform, m_transform);
@@ -1142,7 +1142,7 @@ void GraphicsLayerCA::updateTransform()
}
}
-void GraphicsLayerCA::updateChildrenTransform()
+void GraphicsLayerMac::updateChildrenTransform()
{
CATransform3D transform;
copyTransform(transform, m_childrenTransform);
@@ -1157,7 +1157,7 @@ void GraphicsLayerCA::updateChildrenTransform()
}
}
-void GraphicsLayerCA::updateMasksToBounds()
+void GraphicsLayerMac::updateMasksToBounds()
{
[m_layer.get() setMasksToBounds:m_masksToBounds];
@@ -1172,7 +1172,7 @@ void GraphicsLayerCA::updateMasksToBounds()
updateDebugIndicators();
}
-void GraphicsLayerCA::updateContentsOpaque()
+void GraphicsLayerMac::updateContentsOpaque()
{
[m_layer.get() setOpaque:m_contentsOpaque];
@@ -1185,7 +1185,7 @@ void GraphicsLayerCA::updateContentsOpaque()
}
}
-void GraphicsLayerCA::updateBackfaceVisibility()
+void GraphicsLayerMac::updateBackfaceVisibility()
{
if (m_structuralLayer && structuralLayerPurpose() == StructuralLayerForReplicaFlattening) {
[m_structuralLayer.get() setDoubleSided:m_backfaceVisibility];
@@ -1210,12 +1210,12 @@ void GraphicsLayerCA::updateBackfaceVisibility()
}
}
-void GraphicsLayerCA::updateStructuralLayer()
+void GraphicsLayerMac::updateStructuralLayer()
{
ensureStructuralLayer(structuralLayerPurpose());
}
-void GraphicsLayerCA::ensureStructuralLayer(StructuralLayerPurpose purpose)
+void GraphicsLayerMac::ensureStructuralLayer(StructuralLayerPurpose purpose)
{
if (purpose == NoStructuralLayer) {
if (m_structuralLayer) {
@@ -1300,7 +1300,7 @@ void GraphicsLayerCA::ensureStructuralLayer(StructuralLayerPurpose purpose)
updateOpacityOnLayer();
}
-GraphicsLayerCA::StructuralLayerPurpose GraphicsLayerCA::structuralLayerPurpose() const
+GraphicsLayerMac::StructuralLayerPurpose GraphicsLayerMac::structuralLayerPurpose() const
{
if (preserves3D())
return StructuralLayerForPreserves3D;
@@ -1311,7 +1311,7 @@ GraphicsLayerCA::StructuralLayerPurpose GraphicsLayerCA::structuralLayerPurpose(
return NoStructuralLayer;
}
-void GraphicsLayerCA::updateLayerDrawsContent()
+void GraphicsLayerMac::updateLayerDrawsContent()
{
bool needTiledLayer = requiresTiledLayer(m_size);
if (needTiledLayer != m_usingTiledLayer)
@@ -1325,7 +1325,7 @@ void GraphicsLayerCA::updateLayerDrawsContent()
updateDebugIndicators();
}
-void GraphicsLayerCA::updateLayerBackgroundColor()
+void GraphicsLayerMac::updateLayerBackgroundColor()
{
if (!m_contentsLayer)
return;
@@ -1337,7 +1337,7 @@ void GraphicsLayerCA::updateLayerBackgroundColor()
clearLayerBackgroundColor(m_contentsLayer.get());
}
-void GraphicsLayerCA::updateContentsImage()
+void GraphicsLayerMac::updateContentsImage()
{
if (m_pendingContentsImage) {
if (!m_contentsLayer.get()) {
@@ -1372,7 +1372,7 @@ void GraphicsLayerCA::updateContentsImage()
}
}
-void GraphicsLayerCA::updateContentsMediaLayer()
+void GraphicsLayerMac::updateContentsMediaLayer()
{
// Video layer was set as m_contentsLayer, and will get parented in updateSublayerList().
if (m_contentsLayer) {
@@ -1381,7 +1381,7 @@ void GraphicsLayerCA::updateContentsMediaLayer()
}
}
-void GraphicsLayerCA::updateContentsCanvasLayer()
+void GraphicsLayerMac::updateContentsCanvasLayer()
{
// CanvasLayer was set as m_contentsLayer, and will get parented in updateSublayerList().
if (m_contentsLayer) {
@@ -1391,7 +1391,7 @@ void GraphicsLayerCA::updateContentsCanvasLayer()
}
}
-void GraphicsLayerCA::updateContentsRect()
+void GraphicsLayerMac::updateContentsRect()
{
if (!m_contentsLayer)
return;
@@ -1416,12 +1416,12 @@ void GraphicsLayerCA::updateContentsRect()
}
}
-void GraphicsLayerCA::updateMaskLayer()
+void GraphicsLayerMac::updateMaskLayer()
{
CALayer *maskCALayer = m_maskLayer ? m_maskLayer->platformLayer() : 0;
[m_layer.get() setMask:maskCALayer];
- LayerMap* maskLayerCloneMap = m_maskLayer ? static_cast<GraphicsLayerCA*>(m_maskLayer)->primaryLayerClones() : 0;
+ LayerMap* maskLayerCloneMap = m_maskLayer ? static_cast<GraphicsLayerMac*>(m_maskLayer)->primaryLayerClones() : 0;
if (LayerMap* layerCloneMap = m_layerClones.get()) {
LayerMap::const_iterator end = layerCloneMap->end();
@@ -1434,7 +1434,7 @@ void GraphicsLayerCA::updateMaskLayer()
}
}
-void GraphicsLayerCA::updateReplicatedLayers()
+void GraphicsLayerMac::updateReplicatedLayers()
{
// Clone the descendants of the replicated layer, and parent under us.
ReplicaState replicaState(ReplicaState::ReplicaBranch);
@@ -1450,7 +1450,7 @@ void GraphicsLayerCA::updateReplicatedLayers()
}
// For now, this assumes that layers only ever have one replica, so replicaIndices contains only 0 and 1.
-GraphicsLayerCA::CloneID GraphicsLayerCA::ReplicaState::cloneID() const
+GraphicsLayerMac::CloneID GraphicsLayerMac::ReplicaState::cloneID() const
{
size_t depth = m_replicaBranches.size();
@@ -1470,13 +1470,13 @@ GraphicsLayerCA::CloneID GraphicsLayerCA::ReplicaState::cloneID() const
return String::adopt(result);
}
-CALayer *GraphicsLayerCA::replicatedLayerRoot(ReplicaState& replicaState)
+CALayer *GraphicsLayerMac::replicatedLayerRoot(ReplicaState& replicaState)
{
// Limit replica nesting, to avoid 2^N explosion of replica layers.
if (!m_replicatedLayer || replicaState.replicaDepth() == ReplicaState::maxReplicaDepth)
return nil;
- GraphicsLayerCA* replicatedLayer = static_cast<GraphicsLayerCA*>(m_replicatedLayer);
+ GraphicsLayerMac* replicatedLayer = static_cast<GraphicsLayerMac*>(m_replicatedLayer);
CALayer *clonedLayerRoot = replicatedLayer->fetchCloneLayers(this, replicaState, RootCloneLevel);
FloatPoint cloneRootPosition = replicatedLayer->positionForCloneRootLayer();
@@ -1488,7 +1488,7 @@ CALayer *GraphicsLayerCA::replicatedLayerRoot(ReplicaState& replicaState)
return clonedLayerRoot;
}
-void GraphicsLayerCA::updateLayerAnimations()
+void GraphicsLayerMac::updateLayerAnimations()
{
if (m_animationsToProcess.size()) {
AnimationsToProcessMap::const_iterator end = m_animationsToProcess.end();
@@ -1540,7 +1540,7 @@ void GraphicsLayerCA::updateLayerAnimations()
}
}
-void GraphicsLayerCA::setCAAnimationOnLayer(CAPropertyAnimation* caAnim, AnimatedPropertyID property, const String& animationName, int index, double timeOffset)
+void GraphicsLayerMac::setCAAnimationOnLayer(CAPropertyAnimation* caAnim, AnimatedPropertyID property, const String& animationName, int index, double timeOffset)
{
PlatformLayer* layer = animatedLayer(property);
@@ -1582,7 +1582,7 @@ static void bug7311367Workaround(CALayer* transformLayer, const TransformationMa
[transformLayer setTransform:caTransform];
}
-bool GraphicsLayerCA::removeCAAnimationFromLayer(AnimatedPropertyID property, const String& animationName, int index)
+bool GraphicsLayerMac::removeCAAnimationFromLayer(AnimatedPropertyID property, const String& animationName, int index)
{
PlatformLayer* layer = animatedLayer(property);
@@ -1627,7 +1627,7 @@ static void copyAnimationProperties(CAPropertyAnimation* from, CAPropertyAnimati
[to setValue:object forKey:WebKitAnimationBeginTimeSetKey];
}
-void GraphicsLayerCA::pauseCAAnimationOnLayer(AnimatedPropertyID property, const String& animationName, int index, double timeOffset)
+void GraphicsLayerMac::pauseCAAnimationOnLayer(AnimatedPropertyID property, const String& animationName, int index, double timeOffset)
{
PlatformLayer* layer = animatedLayer(property);
@@ -1675,7 +1675,7 @@ void GraphicsLayerCA::pauseCAAnimationOnLayer(AnimatedPropertyID property, const
}
}
-void GraphicsLayerCA::setContentsToCanvas(PlatformLayer* canvasLayer)
+void GraphicsLayerMac::setContentsToCanvas(PlatformLayer* canvasLayer)
{
if (canvasLayer == m_contentsLayer)
return;
@@ -1690,7 +1690,7 @@ void GraphicsLayerCA::setContentsToCanvas(PlatformLayer* canvasLayer)
noteLayerPropertyChanged(ContentsCanvasLayerChanged);
}
-void GraphicsLayerCA::repaintLayerDirtyRects()
+void GraphicsLayerMac::repaintLayerDirtyRects()
{
if (!m_dirtyRects.size())
return;
@@ -1701,13 +1701,13 @@ void GraphicsLayerCA::repaintLayerDirtyRects()
m_dirtyRects.clear();
}
-void GraphicsLayerCA::updateContentsNeedsDisplay()
+void GraphicsLayerMac::updateContentsNeedsDisplay()
{
if (m_contentsLayer)
[m_contentsLayer.get() setNeedsDisplay];
}
-bool GraphicsLayerCA::createAnimationFromKeyframes(const KeyframeValueList& valueList, const Animation* animation, const String& animationName, double timeOffset)
+bool GraphicsLayerMac::createAnimationFromKeyframes(const KeyframeValueList& valueList, const Animation* animation, const String& animationName, double timeOffset)
{
ASSERT(valueList.property() != AnimatedPropertyWebkitTransform);
@@ -1740,7 +1740,7 @@ bool GraphicsLayerCA::createAnimationFromKeyframes(const KeyframeValueList& valu
return true;
}
-bool GraphicsLayerCA::createTransformAnimationsFromKeyframes(const KeyframeValueList& valueList, const Animation* animation, const String& animationName, double timeOffset, const IntSize& boxSize)
+bool GraphicsLayerMac::createTransformAnimationsFromKeyframes(const KeyframeValueList& valueList, const Animation* animation, const String& animationName, double timeOffset, const IntSize& boxSize)
{
ASSERT(valueList.property() == AnimatedPropertyWebkitTransform);
@@ -1799,21 +1799,21 @@ bool GraphicsLayerCA::createTransformAnimationsFromKeyframes(const KeyframeValue
return validMatrices;
}
-CABasicAnimation* GraphicsLayerCA::createBasicAnimation(const Animation* anim, AnimatedPropertyID property, bool additive)
+CABasicAnimation* GraphicsLayerMac::createBasicAnimation(const Animation* anim, AnimatedPropertyID property, bool additive)
{
CABasicAnimation* basicAnim = [CABasicAnimation animationWithKeyPath:propertyIdToString(property)];
setupAnimation(basicAnim, anim, additive);
return basicAnim;
}
-CAKeyframeAnimation* GraphicsLayerCA::createKeyframeAnimation(const Animation* anim, AnimatedPropertyID property, bool additive)
+CAKeyframeAnimation* GraphicsLayerMac::createKeyframeAnimation(const Animation* anim, AnimatedPropertyID property, bool additive)
{
CAKeyframeAnimation* keyframeAnim = [CAKeyframeAnimation animationWithKeyPath:propertyIdToString(property)];
setupAnimation(keyframeAnim, anim, additive);
return keyframeAnim;
}
-void GraphicsLayerCA::setupAnimation(CAPropertyAnimation* propertyAnim, const Animation* anim, bool additive)
+void GraphicsLayerMac::setupAnimation(CAPropertyAnimation* propertyAnim, const Animation* anim, bool additive)
{
double duration = anim->duration();
if (duration <= 0)
@@ -1851,7 +1851,7 @@ void GraphicsLayerCA::setupAnimation(CAPropertyAnimation* propertyAnim, const An
[propertyAnim setDelegate:m_animationDelegate.get()];
}
-CAMediaTimingFunction* GraphicsLayerCA::timingFunctionForAnimationValue(const AnimationValue* animValue, const Animation* anim)
+CAMediaTimingFunction* GraphicsLayerMac::timingFunctionForAnimationValue(const AnimationValue* animValue, const Animation* anim)
{
const TimingFunction* tf = 0;
if (animValue->timingFunction())
@@ -1862,7 +1862,7 @@ CAMediaTimingFunction* GraphicsLayerCA::timingFunctionForAnimationValue(const An
return getCAMediaTimingFunction(tf ? tf : CubicBezierTimingFunction::create().get());
}
-bool GraphicsLayerCA::setAnimationEndpoints(const KeyframeValueList& valueList, const Animation* anim, CABasicAnimation* basicAnim)
+bool GraphicsLayerMac::setAnimationEndpoints(const KeyframeValueList& valueList, const Animation* anim, CABasicAnimation* basicAnim)
{
id fromValue = nil;
id toValue = nil;
@@ -1891,7 +1891,7 @@ bool GraphicsLayerCA::setAnimationEndpoints(const KeyframeValueList& valueList,
return true;
}
-bool GraphicsLayerCA::setAnimationKeyframes(const KeyframeValueList& valueList, const Animation* anim, CAKeyframeAnimation* keyframeAnim)
+bool GraphicsLayerMac::setAnimationKeyframes(const KeyframeValueList& valueList, const Animation* anim, CAKeyframeAnimation* keyframeAnim)
{
RetainPtr<NSMutableArray> keyTimes(AdoptNS, [[NSMutableArray alloc] init]);
RetainPtr<NSMutableArray> values(AdoptNS, [[NSMutableArray alloc] init]);
@@ -1926,7 +1926,7 @@ bool GraphicsLayerCA::setAnimationKeyframes(const KeyframeValueList& valueList,
return true;
}
-bool GraphicsLayerCA::setTransformAnimationEndpoints(const KeyframeValueList& valueList, const Animation* anim, CABasicAnimation* basicAnim, int functionIndex, TransformOperation::OperationType transformOp, bool isMatrixAnimation, const IntSize& boxSize)
+bool GraphicsLayerMac::setTransformAnimationEndpoints(const KeyframeValueList& valueList, const Animation* anim, CABasicAnimation* basicAnim, int functionIndex, TransformOperation::OperationType transformOp, bool isMatrixAnimation, const IntSize& boxSize)
{
id fromValue;
id toValue;
@@ -1971,7 +1971,7 @@ bool GraphicsLayerCA::setTransformAnimationEndpoints(const KeyframeValueList& va
return true;
}
-bool GraphicsLayerCA::setTransformAnimationKeyframes(const KeyframeValueList& valueList, const Animation* animation, CAKeyframeAnimation* keyframeAnim, int functionIndex, TransformOperation::OperationType transformOpType, bool isMatrixAnimation, const IntSize& boxSize)
+bool GraphicsLayerMac::setTransformAnimationKeyframes(const KeyframeValueList& valueList, const Animation* animation, CAKeyframeAnimation* keyframeAnim, int functionIndex, TransformOperation::OperationType transformOpType, bool isMatrixAnimation, const IntSize& boxSize)
{
RetainPtr<NSMutableArray> keyTimes(AdoptNS, [[NSMutableArray alloc] init]);
RetainPtr<NSMutableArray> values(AdoptNS, [[NSMutableArray alloc] init]);
@@ -2015,7 +2015,7 @@ bool GraphicsLayerCA::setTransformAnimationKeyframes(const KeyframeValueList& va
return true;
}
-void GraphicsLayerCA::suspendAnimations(double time)
+void GraphicsLayerMac::suspendAnimations(double time)
{
double t = currentTimeToMediaTime(time ? time : currentTime());
[primaryLayer() setSpeed:0];
@@ -2032,7 +2032,7 @@ void GraphicsLayerCA::suspendAnimations(double time)
}
}
-void GraphicsLayerCA::resumeAnimations()
+void GraphicsLayerMac::resumeAnimations()
{
[primaryLayer() setSpeed:1];
[primaryLayer() setTimeOffset:0];
@@ -2048,32 +2048,32 @@ void GraphicsLayerCA::resumeAnimations()
}
}
-CALayer* GraphicsLayerCA::hostLayerForSublayers() const
+CALayer* GraphicsLayerMac::hostLayerForSublayers() const
{
return m_structuralLayer.get() ? m_structuralLayer.get() : m_layer.get();
}
-CALayer* GraphicsLayerCA::layerForSuperlayer() const
+CALayer* GraphicsLayerMac::layerForSuperlayer() const
{
return m_structuralLayer ? m_structuralLayer.get() : m_layer.get();
}
-CALayer* GraphicsLayerCA::animatedLayer(AnimatedPropertyID property) const
+CALayer* GraphicsLayerMac::animatedLayer(AnimatedPropertyID property) const
{
return (property == AnimatedPropertyBackgroundColor) ? m_contentsLayer.get() : primaryLayer();
}
-GraphicsLayerCA::LayerMap* GraphicsLayerCA::animatedLayerClones(AnimatedPropertyID property) const
+GraphicsLayerMac::LayerMap* GraphicsLayerMac::animatedLayerClones(AnimatedPropertyID property) const
{
return (property == AnimatedPropertyBackgroundColor) ? m_contentsLayerClones.get() : primaryLayerClones();
}
-PlatformLayer* GraphicsLayerCA::platformLayer() const
+PlatformLayer* GraphicsLayerMac::platformLayer() const
{
return primaryLayer();
}
-void GraphicsLayerCA::setDebugBackgroundColor(const Color& color)
+void GraphicsLayerMac::setDebugBackgroundColor(const Color& color)
{
BEGIN_BLOCK_OBJC_EXCEPTIONS
@@ -2085,7 +2085,7 @@ void GraphicsLayerCA::setDebugBackgroundColor(const Color& color)
END_BLOCK_OBJC_EXCEPTIONS
}
-void GraphicsLayerCA::setDebugBorder(const Color& color, float borderWidth)
+void GraphicsLayerMac::setDebugBorder(const Color& color, float borderWidth)
{
BEGIN_BLOCK_OBJC_EXCEPTIONS
@@ -2100,7 +2100,7 @@ void GraphicsLayerCA::setDebugBorder(const Color& color, float borderWidth)
END_BLOCK_OBJC_EXCEPTIONS
}
-FloatSize GraphicsLayerCA::constrainedSize() const
+FloatSize GraphicsLayerMac::constrainedSize() const
{
float tileColumns = ceilf(m_size.width() / cTiledLayerTileSize);
float tileRows = ceilf(m_size.height() / cTiledLayerTileSize);
@@ -2123,7 +2123,7 @@ FloatSize GraphicsLayerCA::constrainedSize() const
return constrainedSize;
}
-bool GraphicsLayerCA::requiresTiledLayer(const FloatSize& size) const
+bool GraphicsLayerMac::requiresTiledLayer(const FloatSize& size) const
{
if (!m_drawsContent)
return false;
@@ -2132,7 +2132,7 @@ bool GraphicsLayerCA::requiresTiledLayer(const FloatSize& size) const
return size.width() > cMaxPixelDimension || size.height() > cMaxPixelDimension;
}
-void GraphicsLayerCA::swapFromOrToTiledLayer(bool useTiledLayer)
+void GraphicsLayerMac::swapFromOrToTiledLayer(bool useTiledLayer)
{
if (useTiledLayer == m_usingTiledLayer)
return;
@@ -2198,7 +2198,7 @@ void GraphicsLayerCA::swapFromOrToTiledLayer(bool useTiledLayer)
updateDebugIndicators();
}
-GraphicsLayer::CompositingCoordinatesOrientation GraphicsLayerCA::defaultContentsOrientation() const
+GraphicsLayer::CompositingCoordinatesOrientation GraphicsLayerMac::defaultContentsOrientation() const
{
#if !HAVE_MODERN_QUARTZCORE
// Older QuartzCore does not support -geometryFlipped, so we manually flip the root
@@ -2210,7 +2210,7 @@ GraphicsLayer::CompositingCoordinatesOrientation GraphicsLayerCA::defaultContent
#endif
}
-void GraphicsLayerCA::updateContentsTransform()
+void GraphicsLayerMac::updateContentsTransform()
{
#if !HAVE_MODERN_QUARTZCORE
if (contentsOrientation() == CompositingCoordinatesBottomUp) {
@@ -2221,7 +2221,7 @@ void GraphicsLayerCA::updateContentsTransform()
#endif
}
-void GraphicsLayerCA::setupContentsLayer(CALayer* contentsLayer)
+void GraphicsLayerMac::setupContentsLayer(CALayer* contentsLayer)
{
// Turn off implicit animations on the inner layer.
[contentsLayer setStyle:[NSDictionary dictionaryWithObject:nullActionsDictionary() forKey:@"actions"]];
@@ -2244,7 +2244,7 @@ void GraphicsLayerCA::setupContentsLayer(CALayer* contentsLayer)
}
}
-CALayer *GraphicsLayerCA::findOrMakeClone(CloneID cloneID, CALayer *sourceLayer, LayerMap* clones, CloneLevel cloneLevel)
+CALayer *GraphicsLayerMac::findOrMakeClone(CloneID cloneID, CALayer *sourceLayer, LayerMap* clones, CloneLevel cloneLevel)
{
if (!sourceLayer)
return 0;
@@ -2269,7 +2269,7 @@ CALayer *GraphicsLayerCA::findOrMakeClone(CloneID cloneID, CALayer *sourceLayer,
return resultLayer;
}
-void GraphicsLayerCA::ensureCloneLayers(CloneID cloneID, CALayer *& primaryLayer, CALayer *& structuralLayer, CALayer *& contentsLayer, CloneLevel cloneLevel)
+void GraphicsLayerMac::ensureCloneLayers(CloneID cloneID, CALayer *& primaryLayer, CALayer *& structuralLayer, CALayer *& contentsLayer, CloneLevel cloneLevel)
{
structuralLayer = nil;
contentsLayer = nil;
@@ -2288,14 +2288,14 @@ void GraphicsLayerCA::ensureCloneLayers(CloneID cloneID, CALayer *& primaryLayer
contentsLayer = findOrMakeClone(cloneID, m_contentsLayer.get(), m_contentsLayerClones.get(), cloneLevel);
}
-void GraphicsLayerCA::removeCloneLayers()
+void GraphicsLayerMac::removeCloneLayers()
{
m_layerClones = 0;
m_structuralLayerClones = 0;
m_contentsLayerClones = 0;
}
-FloatPoint GraphicsLayerCA::positionForCloneRootLayer() const
+FloatPoint GraphicsLayerMac::positionForCloneRootLayer() const
{
// This can get called during a sync when we've just removed the m_replicaLayer.
if (!m_replicaLayer)
@@ -2306,19 +2306,19 @@ FloatPoint GraphicsLayerCA::positionForCloneRootLayer() const
replicaPosition.y() + m_anchorPoint.y() * m_size.height());
}
-void GraphicsLayerCA::propagateLayerChangeToReplicas()
+void GraphicsLayerMac::propagateLayerChangeToReplicas()
{
for (GraphicsLayer* currLayer = this; currLayer; currLayer = currLayer->parent()) {
- GraphicsLayerCA* currLayerCA = static_cast<GraphicsLayerCA*>(currLayer);
+ GraphicsLayerMac* currLayerCA = static_cast<GraphicsLayerMac*>(currLayer);
if (!currLayerCA->hasCloneLayers())
break;
if (currLayerCA->replicaLayer())
- static_cast<GraphicsLayerCA*>(currLayerCA->replicaLayer())->noteLayerPropertyChanged(ReplicatedLayerChanged);
+ static_cast<GraphicsLayerMac*>(currLayerCA->replicaLayer())->noteLayerPropertyChanged(ReplicatedLayerChanged);
}
}
-CALayer *GraphicsLayerCA::fetchCloneLayers(GraphicsLayer* replicaRoot, ReplicaState& replicaState, CloneLevel cloneLevel)
+CALayer *GraphicsLayerMac::fetchCloneLayers(GraphicsLayer* replicaRoot, ReplicaState& replicaState, CloneLevel cloneLevel)
{
CALayer *primaryLayer;
CALayer *structuralLayer;
@@ -2326,7 +2326,7 @@ CALayer *GraphicsLayerCA::fetchCloneLayers(GraphicsLayer* replicaRoot, ReplicaSt
ensureCloneLayers(replicaState.cloneID(), primaryLayer, structuralLayer, contentsLayer, cloneLevel);
if (m_maskLayer) {
- CALayer *maskClone = static_cast<GraphicsLayerCA*>(m_maskLayer)->fetchCloneLayers(replicaRoot, replicaState, IntermediateCloneLevel);
+ CALayer *maskClone = static_cast<GraphicsLayerMac*>(m_maskLayer)->fetchCloneLayers(replicaRoot, replicaState, IntermediateCloneLevel);
[primaryLayer setMask:maskClone];
}
@@ -2352,7 +2352,7 @@ CALayer *GraphicsLayerCA::fetchCloneLayers(GraphicsLayer* replicaRoot, ReplicaSt
if (m_replicaLayer && m_replicaLayer != replicaRoot) {
// We have nested replicas. Ask the replica layer for a clone of its contents.
replicaState.setBranchType(ReplicaState::ReplicaBranch);
- replicaLayer = static_cast<GraphicsLayerCA*>(m_replicaLayer)->fetchCloneLayers(replicaRoot, replicaState, RootCloneLevel);
+ replicaLayer = static_cast<GraphicsLayerMac*>(m_replicaLayer)->fetchCloneLayers(replicaRoot, replicaState, RootCloneLevel);
replicaState.setBranchType(ReplicaState::ChildBranch);
}
@@ -2377,7 +2377,7 @@ CALayer *GraphicsLayerCA::fetchCloneLayers(GraphicsLayer* replicaRoot, ReplicaSt
size_t numChildren = childLayers.size();
for (size_t i = 0; i < numChildren; ++i) {
- GraphicsLayerCA* curChild = static_cast<GraphicsLayerCA*>(childLayers[i]);
+ GraphicsLayerMac* curChild = static_cast<GraphicsLayerMac*>(childLayers[i]);
CALayer *childLayer = curChild->fetchCloneLayers(replicaRoot, replicaState, IntermediateCloneLevel);
if (childLayer)
@@ -2410,7 +2410,7 @@ CALayer *GraphicsLayerCA::fetchCloneLayers(GraphicsLayer* replicaRoot, ReplicaSt
return result;
}
-CALayer *GraphicsLayerCA::cloneLayer(CALayer *layer, CloneLevel cloneLevel)
+CALayer *GraphicsLayerMac::cloneLayer(CALayer *layer, CloneLevel cloneLevel)
{
static Class transformLayerClass = NSClassFromString(@"CATransformLayer");
CALayer *newLayer = nil;
@@ -2449,7 +2449,7 @@ CALayer *GraphicsLayerCA::cloneLayer(CALayer *layer, CloneLevel cloneLevel)
return newLayer;
}
-void GraphicsLayerCA::setOpacityInternal(float accumulatedOpacity)
+void GraphicsLayerMac::setOpacityInternal(float accumulatedOpacity)
{
LayerMap* layerCloneMap = 0;
@@ -2472,7 +2472,7 @@ void GraphicsLayerCA::setOpacityInternal(float accumulatedOpacity)
}
}
-void GraphicsLayerCA::updateOpacityOnLayer()
+void GraphicsLayerMac::updateOpacityOnLayer()
{
#if !HAVE_MODERN_QUARTZCORE
// Distribute opacity either to our own layer or to our children. We pass in the
@@ -2495,13 +2495,13 @@ void GraphicsLayerCA::updateOpacityOnLayer()
#endif
}
-void GraphicsLayerCA::noteSublayersChanged()
+void GraphicsLayerMac::noteSublayersChanged()
{
noteLayerPropertyChanged(ChildrenChanged);
propagateLayerChangeToReplicas();
}
-void GraphicsLayerCA::noteLayerPropertyChanged(LayerChangeFlags flags)
+void GraphicsLayerMac::noteLayerPropertyChanged(LayerChangeFlags flags)
{
if (!m_uncommittedChanges && m_client)
m_client->notifySyncRequired(this);
diff --git a/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.h b/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.h
index 876bc16..95ab456 100644
--- a/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.h
+++ b/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.h
@@ -55,7 +55,7 @@ class WebCoreMovieObserver;
namespace WebCore {
-class MediaPlayerPrivate : public MediaPlayerPrivateInterface {
+class MediaPlayerPrivateQTKit : public MediaPlayerPrivateInterface {
public:
static void registerMediaEngine(MediaEngineRegistrar);
@@ -67,8 +67,8 @@ public:
void didEnd();
private:
- MediaPlayerPrivate(MediaPlayer*);
- ~MediaPlayerPrivate();
+ MediaPlayerPrivateQTKit(MediaPlayer*);
+ ~MediaPlayerPrivateQTKit();
// engine support
static MediaPlayerPrivateInterface* create(MediaPlayer* player);
@@ -163,7 +163,7 @@ private:
void updateStates();
void doSeek();
void cancelSeek();
- void seekTimerFired(Timer<MediaPlayerPrivate>*);
+ void seekTimerFired(Timer<MediaPlayerPrivateQTKit>*);
float maxTimeLoaded() const;
void disableUnsupportedTracks();
@@ -175,6 +175,8 @@ private:
virtual float mediaTimeForTimeValue(float) const;
+ virtual double maximumDurationToCacheMediaTime() const { return 5; }
+
MediaPlayer* m_player;
RetainPtr<QTMovie> m_qtMovie;
RetainPtr<QTMovieView> m_qtMovieView;
@@ -182,7 +184,7 @@ private:
RetainPtr<WebCoreMovieObserver> m_objcObserver;
String m_movieURL;
float m_seekTo;
- Timer<MediaPlayerPrivate> m_seekTimer;
+ Timer<MediaPlayerPrivateQTKit> m_seekTimer;
MediaPlayer::NetworkState m_networkState;
MediaPlayer::ReadyState m_readyState;
IntRect m_rect;
diff --git a/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm b/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm
index 06c7924..a2325da 100644
--- a/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm
+++ b/WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm
@@ -164,11 +164,11 @@ using namespace std;
@interface WebCoreMovieObserver : NSObject
{
- MediaPlayerPrivate* m_callback;
+ MediaPlayerPrivateQTKit* m_callback;
NSView* m_view;
BOOL m_delayCallbacks;
}
--(id)initWithCallback:(MediaPlayerPrivate*)callback;
+-(id)initWithCallback:(MediaPlayerPrivateQTKit*)callback;
-(void)disconnect;
-(void)setView:(NSView*)view;
-(void)repaint;
@@ -192,22 +192,22 @@ static const long minimumQuickTimeVersion = 0x07300000; // 7.3
#endif
-MediaPlayerPrivateInterface* MediaPlayerPrivate::create(MediaPlayer* player)
+MediaPlayerPrivateInterface* MediaPlayerPrivateQTKit::create(MediaPlayer* player)
{
- return new MediaPlayerPrivate(player);
+ return new MediaPlayerPrivateQTKit(player);
}
-void MediaPlayerPrivate::registerMediaEngine(MediaEngineRegistrar registrar)
+void MediaPlayerPrivateQTKit::registerMediaEngine(MediaEngineRegistrar registrar)
{
if (isAvailable())
registrar(create, getSupportedTypes, supportsType);
}
-MediaPlayerPrivate::MediaPlayerPrivate(MediaPlayer* player)
+MediaPlayerPrivateQTKit::MediaPlayerPrivateQTKit(MediaPlayer* player)
: m_player(player)
, m_objcObserver(AdoptNS, [[WebCoreMovieObserver alloc] initWithCallback:this])
, m_seekTo(-1)
- , m_seekTimer(this, &MediaPlayerPrivate::seekTimerFired)
+ , m_seekTimer(this, &MediaPlayerPrivateQTKit::seekTimerFired)
, m_networkState(MediaPlayer::Empty)
, m_readyState(MediaPlayer::HaveNothing)
, m_rect()
@@ -232,7 +232,7 @@ MediaPlayerPrivate::MediaPlayerPrivate(MediaPlayer* player)
{
}
-MediaPlayerPrivate::~MediaPlayerPrivate()
+MediaPlayerPrivateQTKit::~MediaPlayerPrivateQTKit()
{
tearDownVideoRendering();
@@ -240,24 +240,52 @@ MediaPlayerPrivate::~MediaPlayerPrivate()
[m_objcObserver.get() disconnect];
}
-void MediaPlayerPrivate::createQTMovie(const String& url)
+void MediaPlayerPrivateQTKit::createQTMovie(const String& url)
{
NSURL *cocoaURL = KURL(ParsedURLString, url);
- NSDictionary *movieAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
+ NSMutableDictionary *movieAttributes = [NSMutableDictionary dictionaryWithObjectsAndKeys:
cocoaURL, QTMovieURLAttribute,
[NSNumber numberWithBool:m_player->preservesPitch()], QTMovieRateChangesPreservePitchAttribute,
[NSNumber numberWithBool:YES], QTMoviePreventExternalURLLinksAttribute,
[NSNumber numberWithBool:YES], QTSecurityPolicyNoCrossSiteAttribute,
[NSNumber numberWithBool:NO], QTMovieAskUnresolvedDataRefsAttribute,
[NSNumber numberWithBool:NO], QTMovieLoopsAttribute,
-#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
- [NSNumber numberWithBool:YES], @"QTMovieOpenForPlaybackAttribute",
-#endif
#ifndef BUILDING_ON_TIGER
QTMovieApertureModeClean, QTMovieApertureModeAttribute,
#endif
nil];
+#if defined(BUILDING_ON_SNOW_LEOPARD)
+ CFDictionaryRef proxySettings = CFNetworkCopySystemProxySettings();
+ CFArrayRef proxiesForURL = CFNetworkCopyProxiesForURL((CFURLRef)cocoaURL, proxySettings);
+ BOOL willUseProxy = YES;
+
+ if (!proxiesForURL || !CFArrayGetCount(proxiesForURL))
+ willUseProxy = NO;
+
+ if (CFArrayGetCount(proxiesForURL) == 1) {
+ CFDictionaryRef proxy = (CFDictionaryRef)CFArrayGetValueAtIndex(proxiesForURL, 0);
+ ASSERT(CFGetTypeID(proxy) == CFDictionaryGetTypeID());
+
+ CFStringRef proxyType = (CFStringRef)CFDictionaryGetValue(proxy, kCFProxyTypeKey);
+ ASSERT(CFGetTypeID(proxyType) == CFStringGetTypeID());
+
+ if (CFStringCompare(proxyType, kCFProxyTypeNone, 0) == kCFCompareEqualTo)
+ willUseProxy = NO;
+ }
+
+ if (!willUseProxy) {
+ // Only pass the QTMovieOpenForPlaybackAttribute flag if there are no proxy servers, due
+ // to rdar://problem/7531776.
+ [movieAttributes setObject:[NSNumber numberWithBool:YES] forKey:@"QTMovieOpenForPlaybackAttribute"];
+ }
+
+ if (proxiesForURL)
+ CFRelease(proxiesForURL);
+ if (proxySettings)
+ CFRelease(proxySettings);
+#endif
+
createQTMovie(cocoaURL, movieAttributes);
}
@@ -292,7 +320,7 @@ static void disableComponentsOnce()
wkQTMovieDisableComponent(componentsToDisable[i]);
}
-void MediaPlayerPrivate::createQTMovie(NSURL *url, NSDictionary *movieAttributes)
+void MediaPlayerPrivateQTKit::createQTMovie(NSURL *url, NSDictionary *movieAttributes)
{
disableComponentsOnce();
@@ -375,7 +403,7 @@ static Class QTVideoRendererClass()
return QTVideoRendererWebKitOnlyClass;
}
-void MediaPlayerPrivate::createQTMovieView()
+void MediaPlayerPrivateQTKit::createQTMovieView()
{
detachQTMovieView();
@@ -420,7 +448,7 @@ void MediaPlayerPrivate::createQTMovieView()
[m_objcObserver.get() setDelayCallbacks:NO];
}
-void MediaPlayerPrivate::detachQTMovieView()
+void MediaPlayerPrivateQTKit::detachQTMovieView()
{
if (m_qtMovieView) {
[m_objcObserver.get() setView:nil];
@@ -435,7 +463,7 @@ void MediaPlayerPrivate::detachQTMovieView()
}
}
-void MediaPlayerPrivate::createQTVideoRenderer(QTVideoRendererMode rendererMode)
+void MediaPlayerPrivateQTKit::createQTVideoRenderer(QTVideoRendererMode rendererMode)
{
destroyQTVideoRenderer();
@@ -455,7 +483,7 @@ void MediaPlayerPrivate::createQTVideoRenderer(QTVideoRendererMode rendererMode)
}
}
-void MediaPlayerPrivate::destroyQTVideoRenderer()
+void MediaPlayerPrivateQTKit::destroyQTVideoRenderer()
{
if (!m_qtVideoRenderer)
return;
@@ -471,7 +499,7 @@ void MediaPlayerPrivate::destroyQTVideoRenderer()
m_qtVideoRenderer = nil;
}
-void MediaPlayerPrivate::createQTMovieLayer()
+void MediaPlayerPrivateQTKit::createQTMovieLayer()
{
#if USE(ACCELERATED_COMPOSITING)
if (!m_qtMovie)
@@ -493,7 +521,7 @@ void MediaPlayerPrivate::createQTMovieLayer()
#endif
}
-void MediaPlayerPrivate::destroyQTMovieLayer()
+void MediaPlayerPrivateQTKit::destroyQTMovieLayer()
{
#if USE(ACCELERATED_COMPOSITING)
if (!m_qtVideoLayer)
@@ -505,7 +533,7 @@ void MediaPlayerPrivate::destroyQTMovieLayer()
#endif
}
-MediaPlayerPrivate::MediaRenderingMode MediaPlayerPrivate::currentRenderingMode() const
+MediaPlayerPrivateQTKit::MediaRenderingMode MediaPlayerPrivateQTKit::currentRenderingMode() const
{
if (m_qtMovieView)
return MediaRenderingMovieView;
@@ -519,7 +547,7 @@ MediaPlayerPrivate::MediaRenderingMode MediaPlayerPrivate::currentRenderingMode(
return MediaRenderingNone;
}
-MediaPlayerPrivate::MediaRenderingMode MediaPlayerPrivate::preferredRenderingMode() const
+MediaPlayerPrivateQTKit::MediaRenderingMode MediaPlayerPrivateQTKit::preferredRenderingMode() const
{
if (!m_player->frameView() || !m_qtMovie)
return MediaRenderingNone;
@@ -535,7 +563,7 @@ MediaPlayerPrivate::MediaRenderingMode MediaPlayerPrivate::preferredRenderingMod
return MediaRenderingSoftwareRenderer;
}
-void MediaPlayerPrivate::setUpVideoRendering()
+void MediaPlayerPrivateQTKit::setUpVideoRendering()
{
if (!isReadyForVideoSetup())
return;
@@ -566,7 +594,7 @@ void MediaPlayerPrivate::setUpVideoRendering()
m_player->mediaPlayerClient()->mediaPlayerRenderingModeChanged(m_player);
}
-void MediaPlayerPrivate::tearDownVideoRendering()
+void MediaPlayerPrivateQTKit::tearDownVideoRendering()
{
if (m_qtMovieView)
detachQTMovieView();
@@ -576,14 +604,14 @@ void MediaPlayerPrivate::tearDownVideoRendering()
destroyQTMovieLayer();
}
-bool MediaPlayerPrivate::hasSetUpVideoRendering() const
+bool MediaPlayerPrivateQTKit::hasSetUpVideoRendering() const
{
return m_qtMovieView
|| m_qtVideoLayer
|| m_qtVideoRenderer;
}
-QTTime MediaPlayerPrivate::createQTTime(float time) const
+QTTime MediaPlayerPrivateQTKit::createQTTime(float time) const
{
if (!metaDataAvailable())
return QTMakeTime(0, 600);
@@ -591,7 +619,7 @@ QTTime MediaPlayerPrivate::createQTTime(float time) const
return QTMakeTime(time * timeScale, timeScale);
}
-void MediaPlayerPrivate::resumeLoad()
+void MediaPlayerPrivateQTKit::resumeLoad()
{
m_delayingLoad = false;
@@ -599,7 +627,7 @@ void MediaPlayerPrivate::resumeLoad()
loadInternal(m_movieURL);
}
-void MediaPlayerPrivate::load(const String& url)
+void MediaPlayerPrivateQTKit::load(const String& url)
{
m_movieURL = url;
@@ -613,7 +641,7 @@ void MediaPlayerPrivate::load(const String& url)
loadInternal(url);
}
-void MediaPlayerPrivate::loadInternal(const String& url)
+void MediaPlayerPrivateQTKit::loadInternal(const String& url)
{
if (m_networkState != MediaPlayer::Loading) {
m_networkState = MediaPlayer::Loading;
@@ -634,13 +662,13 @@ void MediaPlayerPrivate::loadInternal(const String& url)
[m_objcObserver.get() setDelayCallbacks:NO];
}
-void MediaPlayerPrivate::prepareToPlay()
+void MediaPlayerPrivateQTKit::prepareToPlay()
{
if (!m_qtMovie || m_delayingLoad)
resumeLoad();
}
-PlatformMedia MediaPlayerPrivate::platformMedia() const
+PlatformMedia MediaPlayerPrivateQTKit::platformMedia() const
{
PlatformMedia pm;
pm.type = PlatformMedia::QTMovieType;
@@ -649,13 +677,13 @@ PlatformMedia MediaPlayerPrivate::platformMedia() const
}
#if USE(ACCELERATED_COMPOSITING)
-PlatformLayer* MediaPlayerPrivate::platformLayer() const
+PlatformLayer* MediaPlayerPrivateQTKit::platformLayer() const
{
return m_qtVideoLayer.get();
}
#endif
-void MediaPlayerPrivate::play()
+void MediaPlayerPrivateQTKit::play()
{
if (!metaDataAvailable())
return;
@@ -668,7 +696,7 @@ void MediaPlayerPrivate::play()
[m_objcObserver.get() setDelayCallbacks:NO];
}
-void MediaPlayerPrivate::pause()
+void MediaPlayerPrivateQTKit::pause()
{
if (!metaDataAvailable())
return;
@@ -681,7 +709,7 @@ void MediaPlayerPrivate::pause()
[m_objcObserver.get() setDelayCallbacks:NO];
}
-float MediaPlayerPrivate::duration() const
+float MediaPlayerPrivateQTKit::duration() const
{
if (!metaDataAvailable())
return 0;
@@ -695,7 +723,7 @@ float MediaPlayerPrivate::duration() const
return static_cast<float>(time.timeValue) / time.timeScale;
}
-float MediaPlayerPrivate::currentTime() const
+float MediaPlayerPrivateQTKit::currentTime() const
{
if (!metaDataAvailable())
return 0;
@@ -703,7 +731,7 @@ float MediaPlayerPrivate::currentTime() const
return static_cast<float>(time.timeValue) / time.timeScale;
}
-void MediaPlayerPrivate::seek(float time)
+void MediaPlayerPrivateQTKit::seek(float time)
{
// Nothing to do if we are already in the middle of a seek to the same time.
if (time == m_seekTo)
@@ -724,7 +752,7 @@ void MediaPlayerPrivate::seek(float time)
m_seekTimer.start(0, 0.5f);
}
-void MediaPlayerPrivate::doSeek()
+void MediaPlayerPrivateQTKit::doSeek()
{
QTTime qttime = createQTTime(m_seekTo);
// setCurrentTime generates several event callbacks, update afterwards
@@ -744,13 +772,13 @@ void MediaPlayerPrivate::doSeek()
[m_objcObserver.get() setDelayCallbacks:NO];
}
-void MediaPlayerPrivate::cancelSeek()
+void MediaPlayerPrivateQTKit::cancelSeek()
{
m_seekTo = -1;
m_seekTimer.stop();
}
-void MediaPlayerPrivate::seekTimerFired(Timer<MediaPlayerPrivate>*)
+void MediaPlayerPrivateQTKit::seekTimerFired(Timer<MediaPlayerPrivateQTKit>*)
{
if (!metaDataAvailable()|| !seeking() || currentTime() == m_seekTo) {
cancelSeek();
@@ -771,21 +799,21 @@ void MediaPlayerPrivate::seekTimerFired(Timer<MediaPlayerPrivate>*)
}
}
-bool MediaPlayerPrivate::paused() const
+bool MediaPlayerPrivateQTKit::paused() const
{
if (!metaDataAvailable())
return true;
return [m_qtMovie.get() rate] == 0;
}
-bool MediaPlayerPrivate::seeking() const
+bool MediaPlayerPrivateQTKit::seeking() const
{
if (!metaDataAvailable())
return false;
return m_seekTo >= 0;
}
-IntSize MediaPlayerPrivate::naturalSize() const
+IntSize MediaPlayerPrivateQTKit::naturalSize() const
{
if (!metaDataAvailable())
return IntSize();
@@ -801,21 +829,21 @@ IntSize MediaPlayerPrivate::naturalSize() const
return IntSize(naturalSize.width * m_scaleFactor.width(), naturalSize.height * m_scaleFactor.height());
}
-bool MediaPlayerPrivate::hasVideo() const
+bool MediaPlayerPrivateQTKit::hasVideo() const
{
if (!metaDataAvailable())
return false;
return [[m_qtMovie.get() attributeForKey:QTMovieHasVideoAttribute] boolValue];
}
-bool MediaPlayerPrivate::hasAudio() const
+bool MediaPlayerPrivateQTKit::hasAudio() const
{
if (!m_qtMovie)
return false;
return [[m_qtMovie.get() attributeForKey:QTMovieHasAudioAttribute] boolValue];
}
-bool MediaPlayerPrivate::supportsFullscreen() const
+bool MediaPlayerPrivateQTKit::supportsFullscreen() const
{
#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
return true;
@@ -825,20 +853,20 @@ bool MediaPlayerPrivate::supportsFullscreen() const
#endif
}
-void MediaPlayerPrivate::setVolume(float volume)
+void MediaPlayerPrivateQTKit::setVolume(float volume)
{
if (m_qtMovie)
[m_qtMovie.get() setVolume:volume];
}
-bool MediaPlayerPrivate::hasClosedCaptions() const
+bool MediaPlayerPrivateQTKit::hasClosedCaptions() const
{
if (!metaDataAvailable())
return false;
return wkQTMovieHasClosedCaptions(m_qtMovie.get());
}
-void MediaPlayerPrivate::setClosedCaptionsVisible(bool closedCaptionsVisible)
+void MediaPlayerPrivateQTKit::setClosedCaptionsVisible(bool closedCaptionsVisible)
{
if (metaDataAvailable()) {
wkQTMovieSetShowClosedCaptions(m_qtMovie.get(), closedCaptionsVisible);
@@ -852,13 +880,13 @@ void MediaPlayerPrivate::setClosedCaptionsVisible(bool closedCaptionsVisible)
}
}
-void MediaPlayerPrivate::setRate(float rate)
+void MediaPlayerPrivateQTKit::setRate(float rate)
{
if (m_qtMovie)
[m_qtMovie.get() setRate:rate];
}
-void MediaPlayerPrivate::setPreservesPitch(bool preservesPitch)
+void MediaPlayerPrivateQTKit::setPreservesPitch(bool preservesPitch)
{
if (!m_qtMovie)
return;
@@ -876,7 +904,7 @@ void MediaPlayerPrivate::setPreservesPitch(bool preservesPitch)
createQTMovie([movieAttributes valueForKey:QTMovieURLAttribute], movieAttributes);
}
-PassRefPtr<TimeRanges> MediaPlayerPrivate::buffered() const
+PassRefPtr<TimeRanges> MediaPlayerPrivateQTKit::buffered() const
{
RefPtr<TimeRanges> timeRanges = TimeRanges::create();
float loaded = maxTimeLoaded();
@@ -885,7 +913,7 @@ PassRefPtr<TimeRanges> MediaPlayerPrivate::buffered() const
return timeRanges.release();
}
-float MediaPlayerPrivate::maxTimeSeekable() const
+float MediaPlayerPrivateQTKit::maxTimeSeekable() const
{
if (!metaDataAvailable())
return 0;
@@ -897,14 +925,14 @@ float MediaPlayerPrivate::maxTimeSeekable() const
return wkQTMovieMaxTimeSeekable(m_qtMovie.get());
}
-float MediaPlayerPrivate::maxTimeLoaded() const
+float MediaPlayerPrivateQTKit::maxTimeLoaded() const
{
if (!metaDataAvailable())
return 0;
return wkQTMovieMaxTimeLoaded(m_qtMovie.get());
}
-unsigned MediaPlayerPrivate::bytesLoaded() const
+unsigned MediaPlayerPrivateQTKit::bytesLoaded() const
{
float dur = duration();
if (!dur)
@@ -912,14 +940,14 @@ unsigned MediaPlayerPrivate::bytesLoaded() const
return totalBytes() * maxTimeLoaded() / dur;
}
-unsigned MediaPlayerPrivate::totalBytes() const
+unsigned MediaPlayerPrivateQTKit::totalBytes() const
{
if (!metaDataAvailable())
return 0;
return [[m_qtMovie.get() attributeForKey:QTMovieDataSizeAttribute] intValue];
}
-void MediaPlayerPrivate::cancelLoad()
+void MediaPlayerPrivateQTKit::cancelLoad()
{
// FIXME: Is there a better way to check for this?
if (m_networkState < MediaPlayer::Loading || m_networkState == MediaPlayer::Loaded)
@@ -931,7 +959,7 @@ void MediaPlayerPrivate::cancelLoad()
updateStates();
}
-void MediaPlayerPrivate::cacheMovieScale()
+void MediaPlayerPrivateQTKit::cacheMovieScale()
{
NSSize initialSize = NSZeroSize;
NSSize naturalSize = [[m_qtMovie.get() attributeForKey:QTMovieNaturalSizeAttribute] sizeValue];
@@ -956,12 +984,12 @@ void MediaPlayerPrivate::cacheMovieScale()
m_scaleFactor.setHeight(initialSize.height / naturalSize.height);
}
-bool MediaPlayerPrivate::isReadyForVideoSetup() const
+bool MediaPlayerPrivateQTKit::isReadyForVideoSetup() const
{
return m_readyState >= MediaPlayer::HaveMetadata && m_player->visible();
}
-void MediaPlayerPrivate::prepareForRendering()
+void MediaPlayerPrivateQTKit::prepareForRendering()
{
if (m_isAllowedToRender)
return;
@@ -976,7 +1004,7 @@ void MediaPlayerPrivate::prepareForRendering()
m_player->mediaPlayerClient()->mediaPlayerRenderingModeChanged(m_player);
}
-void MediaPlayerPrivate::updateStates()
+void MediaPlayerPrivateQTKit::updateStates()
{
MediaPlayer::NetworkState oldNetworkState = m_networkState;
MediaPlayer::ReadyState oldReadyState = m_readyState;
@@ -1091,13 +1119,13 @@ void MediaPlayerPrivate::updateStates()
}
}
-void MediaPlayerPrivate::loadStateChanged()
+void MediaPlayerPrivateQTKit::loadStateChanged()
{
if (!m_hasUnsupportedTracks)
updateStates();
}
-void MediaPlayerPrivate::rateChanged()
+void MediaPlayerPrivateQTKit::rateChanged()
{
if (m_hasUnsupportedTracks)
return;
@@ -1106,13 +1134,13 @@ void MediaPlayerPrivate::rateChanged()
m_player->rateChanged();
}
-void MediaPlayerPrivate::sizeChanged()
+void MediaPlayerPrivateQTKit::sizeChanged()
{
if (!m_hasUnsupportedTracks)
m_player->sizeChanged();
}
-void MediaPlayerPrivate::timeChanged()
+void MediaPlayerPrivateQTKit::timeChanged()
{
if (m_hasUnsupportedTracks)
return;
@@ -1128,7 +1156,7 @@ void MediaPlayerPrivate::timeChanged()
m_player->timeChanged();
}
-void MediaPlayerPrivate::didEnd()
+void MediaPlayerPrivateQTKit::didEnd()
{
if (m_hasUnsupportedTracks)
return;
@@ -1150,7 +1178,7 @@ void MediaPlayerPrivate::didEnd()
m_player->timeChanged();
}
-void MediaPlayerPrivate::setSize(const IntSize&)
+void MediaPlayerPrivateQTKit::setSize(const IntSize&)
{
// Don't resize the view now because [view setFrame] also resizes the movie itself, and because
// the renderer calls this function immediately when we report a size change (QTMovieSizeDidChangeNotification)
@@ -1161,7 +1189,7 @@ void MediaPlayerPrivate::setSize(const IntSize&)
// <rdar://problem/6336092> REGRESSION: rtsp movie does not resize correctly
}
-void MediaPlayerPrivate::setVisible(bool b)
+void MediaPlayerPrivateQTKit::setVisible(bool b)
{
if (m_visible != b) {
m_visible = b;
@@ -1172,7 +1200,7 @@ void MediaPlayerPrivate::setVisible(bool b)
}
}
-bool MediaPlayerPrivate::hasAvailableVideoFrame() const
+bool MediaPlayerPrivateQTKit::hasAvailableVideoFrame() const
{
// When using a QTMovieLayer return true as soon as the movie reaches QTMovieLoadStatePlayable
// because although we don't *know* when the first frame has decoded, by the time we get and
@@ -1186,7 +1214,7 @@ bool MediaPlayerPrivate::hasAvailableVideoFrame() const
return m_videoFrameHasDrawn;
}
-void MediaPlayerPrivate::repaint()
+void MediaPlayerPrivateQTKit::repaint()
{
if (m_hasUnsupportedTracks)
return;
@@ -1204,7 +1232,7 @@ void MediaPlayerPrivate::repaint()
m_player->repaint();
}
-void MediaPlayerPrivate::paintCurrentFrameInContext(GraphicsContext* context, const IntRect& r)
+void MediaPlayerPrivateQTKit::paintCurrentFrameInContext(GraphicsContext* context, const IntRect& r)
{
id qtVideoRenderer = m_qtVideoRenderer.get();
if (!qtVideoRenderer && currentRenderingMode() == MediaRenderingMovieLayer) {
@@ -1218,7 +1246,7 @@ void MediaPlayerPrivate::paintCurrentFrameInContext(GraphicsContext* context, co
paint(context, r);
}
-void MediaPlayerPrivate::paint(GraphicsContext* context, const IntRect& r)
+void MediaPlayerPrivateQTKit::paint(GraphicsContext* context, const IntRect& r)
{
if (context->paintingDisabled() || m_hasUnsupportedTracks)
return;
@@ -1355,7 +1383,7 @@ static HashSet<String> mimeModernTypesCache()
return cache;
}
-void MediaPlayerPrivate::getSupportedTypes(HashSet<String>& supportedTypes)
+void MediaPlayerPrivateQTKit::getSupportedTypes(HashSet<String>& supportedTypes)
{
supportedTypes = mimeModernTypesCache();
@@ -1368,7 +1396,7 @@ void MediaPlayerPrivate::getSupportedTypes(HashSet<String>& supportedTypes)
supportedTypes.add(*it);
}
-MediaPlayer::SupportsType MediaPlayerPrivate::supportsType(const String& type, const String& codecs)
+MediaPlayer::SupportsType MediaPlayerPrivateQTKit::supportsType(const String& type, const String& codecs)
{
// Only return "IsSupported" if there is no codecs parameter for now as there is no way to ask QT if it supports an
// extended MIME type yet.
@@ -1380,7 +1408,7 @@ MediaPlayer::SupportsType MediaPlayerPrivate::supportsType(const String& type, c
return MediaPlayer::IsNotSupported;
}
-bool MediaPlayerPrivate::isAvailable()
+bool MediaPlayerPrivateQTKit::isAvailable()
{
#ifdef BUILDING_ON_TIGER
SInt32 version;
@@ -1401,7 +1429,7 @@ bool MediaPlayerPrivate::isAvailable()
#endif
}
-void MediaPlayerPrivate::disableUnsupportedTracks()
+void MediaPlayerPrivateQTKit::disableUnsupportedTracks()
{
if (!m_qtMovie) {
m_enabledTrackCount = 0;
@@ -1491,35 +1519,35 @@ void MediaPlayerPrivate::disableUnsupportedTracks()
}
}
-void MediaPlayerPrivate::sawUnsupportedTracks()
+void MediaPlayerPrivateQTKit::sawUnsupportedTracks()
{
m_hasUnsupportedTracks = true;
m_player->mediaPlayerClient()->mediaPlayerSawUnsupportedTracks(m_player);
}
#if USE(ACCELERATED_COMPOSITING)
-bool MediaPlayerPrivate::supportsAcceleratedRendering() const
+bool MediaPlayerPrivateQTKit::supportsAcceleratedRendering() const
{
// Also don't claim to support accelerated rendering when in the media document, as we will then render
// via QTMovieView which is already accelerated.
return isReadyForVideoSetup() && getQTMovieLayerClass() != Nil && !m_player->inMediaDocument();
}
-void MediaPlayerPrivate::acceleratedRenderingStateChanged()
+void MediaPlayerPrivateQTKit::acceleratedRenderingStateChanged()
{
// Set up or change the rendering path if necessary.
setUpVideoRendering();
}
#endif
-bool MediaPlayerPrivate::hasSingleSecurityOrigin() const
+bool MediaPlayerPrivateQTKit::hasSingleSecurityOrigin() const
{
// We tell quicktime to disallow resources that come from different origins
// so we know all media is single origin.
return true;
}
-MediaPlayer::MovieLoadType MediaPlayerPrivate::movieLoadType() const
+MediaPlayer::MovieLoadType MediaPlayerPrivateQTKit::movieLoadType() const
{
if (!m_qtMovie)
return MediaPlayer::Unknown;
@@ -1533,14 +1561,14 @@ MediaPlayer::MovieLoadType MediaPlayerPrivate::movieLoadType() const
return movieType;
}
-void MediaPlayerPrivate::setPreload(MediaPlayer::Preload preload)
+void MediaPlayerPrivateQTKit::setPreload(MediaPlayer::Preload preload)
{
m_preload = preload;
if (m_delayingLoad && m_preload != MediaPlayer::None)
resumeLoad();
}
-float MediaPlayerPrivate::mediaTimeForTimeValue(float timeValue) const
+float MediaPlayerPrivateQTKit::mediaTimeForTimeValue(float timeValue) const
{
if (!metaDataAvailable())
return timeValue;
@@ -1553,7 +1581,7 @@ float MediaPlayerPrivate::mediaTimeForTimeValue(float timeValue) const
@implementation WebCoreMovieObserver
-- (id)initWithCallback:(MediaPlayerPrivate*)callback
+- (id)initWithCallback:(MediaPlayerPrivateQTKit*)callback
{
m_callback = callback;
return [super init];
diff --git a/WebCore/platform/graphics/mac/SimpleFontDataCoreText.cpp b/WebCore/platform/graphics/mac/SimpleFontDataCoreText.cpp
index 01d75ee..db6de49 100644
--- a/WebCore/platform/graphics/mac/SimpleFontDataCoreText.cpp
+++ b/WebCore/platform/graphics/mac/SimpleFontDataCoreText.cpp
@@ -47,7 +47,7 @@ CFDictionaryRef SimpleFontData::getCFStringAttributes(TypesettingFeatures typese
if (!addResult.second)
return attributesDictionary.get();
- bool allowLigatures = platformData().allowsLigatures() || (typesettingFeatures & Ligatures);
+ bool allowLigatures = (orientation() == Horizontal && platformData().allowsLigatures()) || (typesettingFeatures & Ligatures);
static const int ligaturesNotAllowedValue = 0;
static CFNumberRef ligaturesNotAllowed = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &ligaturesNotAllowedValue);
@@ -60,14 +60,14 @@ CFDictionaryRef SimpleFontData::getCFStringAttributes(TypesettingFeatures typese
static CFNumberRef kerningAdjustment = CFNumberCreate(kCFAllocatorDefault, kCFNumberFloatType, &kerningAdjustmentValue);
static const void* keysWithKerningDisabled[] = { kCTFontAttributeName, kCTKernAttributeName, kCTLigatureAttributeName, kCTVerticalFormsAttributeName };
const void* valuesWithKerningDisabled[] = { platformData().ctFont(), kerningAdjustment, allowLigatures
- ? ligaturesAllowed : ligaturesNotAllowed, platformData().orientation() == Vertical ? kCFBooleanTrue : kCFBooleanFalse };
+ ? ligaturesAllowed : ligaturesNotAllowed, orientation() == Vertical ? kCFBooleanTrue : kCFBooleanFalse };
attributesDictionary.adoptCF(CFDictionaryCreate(0, keysWithKerningDisabled, valuesWithKerningDisabled,
sizeof(keysWithKerningDisabled) / sizeof(*keysWithKerningDisabled),
&kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
} else {
// By omitting the kCTKernAttributeName attribute, we get Core Text's standard kerning.
static const void* keysWithKerningEnabled[] = { kCTFontAttributeName, kCTLigatureAttributeName, kCTVerticalFormsAttributeName };
- const void* valuesWithKerningEnabled[] = { platformData().ctFont(), allowLigatures ? ligaturesAllowed : ligaturesNotAllowed, platformData().orientation() == Vertical ? kCFBooleanTrue : kCFBooleanFalse };
+ const void* valuesWithKerningEnabled[] = { platformData().ctFont(), allowLigatures ? ligaturesAllowed : ligaturesNotAllowed, orientation() == Vertical ? kCFBooleanTrue : kCFBooleanFalse };
attributesDictionary.adoptCF(CFDictionaryCreate(0, keysWithKerningEnabled, valuesWithKerningEnabled,
sizeof(keysWithKerningEnabled) / sizeof(*keysWithKerningEnabled),
&kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
diff --git a/WebCore/platform/graphics/mac/SimpleFontDataMac.mm b/WebCore/platform/graphics/mac/SimpleFontDataMac.mm
index fd57630..e1d3f43 100644
--- a/WebCore/platform/graphics/mac/SimpleFontDataMac.mm
+++ b/WebCore/platform/graphics/mac/SimpleFontDataMac.mm
@@ -260,6 +260,24 @@ void SimpleFontData::platformInit()
m_descent = 3;
}
+ if (m_orientation == Vertical) {
+ // Ignore vertical orientation when the font doesn't support vertical metrics.
+ // The check doesn't look neat but this is what AppKit does for vertical writing...
+ RetainPtr<CFArrayRef> tableTags(AdoptCF, CTFontCopyAvailableTables(m_platformData.ctFont(), kCTFontTableOptionExcludeSynthetic));
+ CFIndex numTables = CFArrayGetCount(tableTags.get());
+ bool found = false;
+ for (CFIndex index = 0; index < numTables; ++index) {
+ CTFontTableTag tag = (CTFontTableTag)(uintptr_t)CFArrayGetValueAtIndex(tableTags.get(), index);
+ if (tag == kCTFontTableVhea || tag == kCTFontTableVORG) {
+ found = true;
+ break;
+ }
+ }
+
+ if (found == false)
+ m_orientation = Horizontal;
+ }
+
// Measure the actual character "x", because AppKit synthesizes X height rather than getting it from the font.
// Unfortunately, NSFont will round this for us so we don't quite get the right value.
GlyphPage* glyphPageZero = GlyphPageTreeNode::getRootChild(this, 0)->page();
@@ -339,6 +357,11 @@ void SimpleFontData::platformCharWidthInit()
void SimpleFontData::platformDestroy()
{
+ if (m_smallCapsFontData && !isCustomFont()) {
+ fontCache()->releaseFontData(m_smallCapsFontData);
+ m_smallCapsFontData = 0;
+ }
+
#ifdef BUILDING_ON_TIGER
if (m_styleGroup)
wkReleaseStyleGroup(m_styleGroup);
@@ -359,8 +382,8 @@ SimpleFontData* SimpleFontData::smallCapsFontData(const FontDescription& fontDes
m_smallCapsFontData = new SimpleFontData(smallCapsFontData, true, false);
} else {
BEGIN_BLOCK_OBJC_EXCEPTIONS;
- float size = [m_platformData.font() pointSize] * smallCapsFontSizeMultiplier;
- FontPlatformData smallCapsFont([[NSFontManager sharedFontManager] convertFont:m_platformData.font() toSize:size]);
+ float size = m_platformData.size() * smallCapsFontSizeMultiplier;
+ FontPlatformData smallCapsFont([[NSFontManager sharedFontManager] convertFont:m_platformData.font() toSize:size], size);
// AppKit resets the type information (screen/printer) when you convert a font to a different size.
// We have to fix up the font that we're handed back.
@@ -423,7 +446,7 @@ FloatRect SimpleFontData::platformBoundsForGlyph(Glyph glyph) const
FloatRect boundingBox;
#ifndef BUILDING_ON_TIGER
boundingBox = CTFontGetBoundingRectsForGlyphs(m_platformData.ctFont(),
- m_platformData.orientation() == Vertical ? kCTFontVerticalOrientation : kCTFontHorizontalOrientation, &glyph, 0, 1);
+ orientation() == Vertical ? kCTFontVerticalOrientation : kCTFontHorizontalOrientation, &glyph, 0, 1);
boundingBox.setY(-boundingBox.bottom());
#else
// FIXME: Custom fonts don't have NSFonts, so this function doesn't compute correct bounds for these on Tiger.
@@ -441,7 +464,7 @@ FloatRect SimpleFontData::platformBoundsForGlyph(Glyph glyph) const
float SimpleFontData::platformWidthForGlyph(Glyph glyph) const
{
CGSize advance;
- if (m_platformData.orientation() == Horizontal) {
+ if (orientation() == Horizontal || m_isBrokenIdeographFont) {
NSFont* font = platformData().font();
float pointSize = platformData().m_size;
CGAffineTransform m = CGAffineTransformMakeScale(pointSize, pointSize);
diff --git a/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp b/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp
index 8c62e9d..a6fa5d9 100644
--- a/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp
+++ b/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp
@@ -69,6 +69,14 @@ bool Extensions3DOpenGL::supports(const String& name)
m_availableExtensions.add(availableExtensions[i]);
m_initializedAvailableExtensions = true;
}
+
+ // GL_ANGLE_framebuffer_blit and GL_ANGLE_framebuffer_multisample are "fake". They are implemented using other
+ // extensions. In particular GL_EXT_framebuffer_blit and GL_EXT_framebuffer_multisample
+ if (name == "GL_ANGLE_framebuffer_blit")
+ return m_availableExtensions.contains("GL_EXT_framebuffer_blit");
+ if (name == "GL_ANGLE_framebuffer_multisample")
+ return m_availableExtensions.contains("GL_EXT_framebuffer_multisample");
+
return m_availableExtensions.contains(name);
}
@@ -77,6 +85,16 @@ int Extensions3DOpenGL::getGraphicsResetStatusARB()
return GraphicsContext3D::NO_ERROR;
}
+void Extensions3DOpenGL::blitFramebuffer(long srcX0, long srcY0, long srcX1, long srcY1, long dstX0, long dstY0, long dstX1, long dstY1, unsigned long mask, unsigned long filter)
+{
+ ::glBlitFramebufferEXT(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
+}
+
+void Extensions3DOpenGL::renderbufferStorageMultisample(unsigned long target, unsigned long samples, unsigned long internalformat, unsigned long width, unsigned long height)
+{
+ ::glRenderbufferStorageMultisampleEXT(target, samples, internalformat, width, height);
+}
+
} // namespace WebCore
#endif // ENABLE(3D_CANVAS)
diff --git a/WebCore/platform/graphics/opengl/Extensions3DOpenGL.h b/WebCore/platform/graphics/opengl/Extensions3DOpenGL.h
index 1b333b2..0fbe022 100644
--- a/WebCore/platform/graphics/opengl/Extensions3DOpenGL.h
+++ b/WebCore/platform/graphics/opengl/Extensions3DOpenGL.h
@@ -41,6 +41,8 @@ public:
// Extensions3D methods.
virtual bool supports(const String&);
virtual int getGraphicsResetStatusARB();
+ virtual void blitFramebuffer(long srcX0, long srcY0, long srcX1, long srcY1, long dstX0, long dstY0, long dstX1, long dstY1, unsigned long mask, unsigned long filter);
+ virtual void renderbufferStorageMultisample(unsigned long target, unsigned long samples, unsigned long internalformat, unsigned long width, unsigned long height);
private:
// This class only needs to be instantiated by GraphicsContext3D implementations.
diff --git a/WebCore/platform/graphics/gtk/FontCachePango.cpp b/WebCore/platform/graphics/pango/FontCachePango.cpp
index fad29e0..fad29e0 100644
--- a/WebCore/platform/graphics/gtk/FontCachePango.cpp
+++ b/WebCore/platform/graphics/pango/FontCachePango.cpp
diff --git a/WebCore/platform/graphics/gtk/FontCustomPlatformDataPango.cpp b/WebCore/platform/graphics/pango/FontCustomPlatformDataPango.cpp
index a158689..a158689 100644
--- a/WebCore/platform/graphics/gtk/FontCustomPlatformDataPango.cpp
+++ b/WebCore/platform/graphics/pango/FontCustomPlatformDataPango.cpp
diff --git a/WebCore/platform/graphics/gtk/FontPlatformDataPango.h b/WebCore/platform/graphics/pango/FontPlatformData.h
index c42af7f..2929a3f 100644
--- a/WebCore/platform/graphics/gtk/FontPlatformDataPango.h
+++ b/WebCore/platform/graphics/pango/FontPlatformData.h
@@ -26,6 +26,7 @@
#define FontPlatformDataPango_h
#include "FontDescription.h"
+#include "FontOrientation.h"
#include "GlyphBuffer.h"
#include <cairo.h>
#include <pango/pangocairo.h>
@@ -66,6 +67,8 @@ public:
bool syntheticBold() const { return m_syntheticBold; }
bool syntheticOblique() const { return m_syntheticOblique; }
+ FontOrientation orientation() const { return Horizontal; } // FIXME: Implement.
+
cairo_scaled_font_t* scaledFont() const { return m_scaledFont; }
unsigned hash() const
diff --git a/WebCore/platform/graphics/gtk/FontPlatformDataPango.cpp b/WebCore/platform/graphics/pango/FontPlatformDataPango.cpp
index 59cd3da..03dc33d 100644
--- a/WebCore/platform/graphics/gtk/FontPlatformDataPango.cpp
+++ b/WebCore/platform/graphics/pango/FontPlatformDataPango.cpp
@@ -39,7 +39,6 @@
#include <cairo-ft.h>
#include <pango/pangofc-fontmap.h>
#endif
-#include <gtk/gtk.h>
namespace WebCore {
diff --git a/WebCore/platform/graphics/gtk/GlyphPageTreeNodePango.cpp b/WebCore/platform/graphics/pango/GlyphPageTreeNodePango.cpp
index 8d0baa6..8d0baa6 100644
--- a/WebCore/platform/graphics/gtk/GlyphPageTreeNodePango.cpp
+++ b/WebCore/platform/graphics/pango/GlyphPageTreeNodePango.cpp
diff --git a/WebCore/platform/graphics/gtk/SimpleFontDataPango.cpp b/WebCore/platform/graphics/pango/SimpleFontDataPango.cpp
index bdfe237..bdfe237 100644
--- a/WebCore/platform/graphics/gtk/SimpleFontDataPango.cpp
+++ b/WebCore/platform/graphics/pango/SimpleFontDataPango.cpp
diff --git a/WebCore/platform/graphics/qt/FontPlatformData.h b/WebCore/platform/graphics/qt/FontPlatformData.h
index 79daa6b..2201f18 100644
--- a/WebCore/platform/graphics/qt/FontPlatformData.h
+++ b/WebCore/platform/graphics/qt/FontPlatformData.h
@@ -26,6 +26,7 @@
#include <wtf/Forward.h>
#include "FontDescription.h"
+#include "FontOrientation.h"
#include <QFont>
#include <QHash>
@@ -153,6 +154,9 @@ public:
return m_data->font.pixelSize();
return 0;
}
+
+ FontOrientation orientation() const { return Horizontal; } // FIXME: Implement.
+
unsigned hash() const;
#ifndef NDEBUG
diff --git a/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp b/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp
index 26db220..2ba358f 100644
--- a/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp
+++ b/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp
@@ -1646,8 +1646,10 @@ bool GraphicsContext3D::getImageData(Image* image,
unsigned int format,
unsigned int type,
bool premultiplyAlpha,
+ bool ignoreGammaAndColorProfile,
Vector<uint8_t>& outputVector)
{
+ UNUSED_PARAM(ignoreGammaAndColorProfile);
if (!image)
return false;
QPixmap* nativePixmap = image->nativeImageForCurrentFrame();
diff --git a/WebCore/platform/graphics/qt/GraphicsContextQt.cpp b/WebCore/platform/graphics/qt/GraphicsContextQt.cpp
index 4f68577..06e1e1c 100644
--- a/WebCore/platform/graphics/qt/GraphicsContextQt.cpp
+++ b/WebCore/platform/graphics/qt/GraphicsContextQt.cpp
@@ -220,8 +220,11 @@ public:
#endif
}
+ void takeOwnershipOfPlatformContext() { platformContextIsOwned = true; }
+
private:
QPainter* painter;
+ bool platformContextIsOwned;
};
@@ -231,6 +234,7 @@ GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate(QPainter* p, cons
, solidColor(initialSolidColor)
, imageInterpolationQuality(InterpolationDefault)
, painter(p)
+ , platformContextIsOwned(false)
{
if (!painter)
return;
@@ -243,6 +247,13 @@ GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate(QPainter* p, cons
GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate()
{
+ if (!platformContextIsOwned)
+ return;
+
+ painter->end();
+ QPaintDevice* device = painter->device();
+ delete painter;
+ delete device;
}
GraphicsContext::GraphicsContext(PlatformGraphicsContext* painter)
@@ -1400,6 +1411,11 @@ InterpolationQuality GraphicsContext::imageInterpolationQuality() const
return m_data->imageInterpolationQuality;
}
+void GraphicsContext::takeOwnershipOfPlatformContext()
+{
+ m_data->takeOwnershipOfPlatformContext();
+}
+
}
// vim: ts=4 sw=4 et
diff --git a/WebCore/platform/graphics/qt/ImageDecoderQt.cpp b/WebCore/platform/graphics/qt/ImageDecoderQt.cpp
index 02bb110..2dd239f 100644
--- a/WebCore/platform/graphics/qt/ImageDecoderQt.cpp
+++ b/WebCore/platform/graphics/qt/ImageDecoderQt.cpp
@@ -37,17 +37,17 @@
namespace WebCore {
-ImageDecoder* ImageDecoder::create(const SharedBuffer& data, bool premultiplyAlpha)
+ImageDecoder* ImageDecoder::create(const SharedBuffer& data, bool premultiplyAlpha, bool ignoreGammaAndColorProfile)
{
// We need at least 4 bytes to figure out what kind of image we're dealing with.
if (data.size() < 4)
return 0;
- return new ImageDecoderQt(premultiplyAlpha);
+ return new ImageDecoderQt(premultiplyAlpha, ignoreGammaAndColorProfile);
}
-ImageDecoderQt::ImageDecoderQt(bool premultiplyAlpha)
- : ImageDecoder(premultiplyAlpha)
+ImageDecoderQt::ImageDecoderQt(bool premultiplyAlpha, bool ignoreGammaAndColorProfile)
+ : ImageDecoder(premultiplyAlpha, ignoreGammaAndColorProfile)
, m_repetitionCount(cAnimationNone)
{
}
diff --git a/WebCore/platform/graphics/qt/ImageDecoderQt.h b/WebCore/platform/graphics/qt/ImageDecoderQt.h
index 5014d53..914c020 100644
--- a/WebCore/platform/graphics/qt/ImageDecoderQt.h
+++ b/WebCore/platform/graphics/qt/ImageDecoderQt.h
@@ -41,7 +41,7 @@ namespace WebCore {
class ImageDecoderQt : public ImageDecoder
{
public:
- ImageDecoderQt(bool premultiplyAlpha);
+ ImageDecoderQt(bool premultiplyAlpha, bool ignoreGammaAndColorProfile);
~ImageDecoderQt();
virtual void setData(SharedBuffer* data, bool allDataReceived);
diff --git a/WebCore/platform/graphics/qt/ImageQt.cpp b/WebCore/platform/graphics/qt/ImageQt.cpp
index c0cfae4..7b46b71 100644
--- a/WebCore/platform/graphics/qt/ImageQt.cpp
+++ b/WebCore/platform/graphics/qt/ImageQt.cpp
@@ -102,20 +102,31 @@ void Image::drawPattern(GraphicsContext* ctxt, const FloatRect& tileRect, const
if (!framePixmap) // If it's too early we won't have an image yet.
return;
+ QRectF dr = QRectF(destRect).normalized();
+ if (!dr.width() || !dr.height()) // Qt interprets 0 width/height as full width/height so just short circuit.
+ return;
+
QPixmap pixmap = *framePixmap;
- QRect tr = QRectF(tileRect).toRect();
+ QRect tr = QRectF(tileRect).toRect().normalized();
if (tr.x() || tr.y() || tr.width() != pixmap.width() || tr.height() != pixmap.height())
pixmap = pixmap.copy(tr);
- QBrush b(pixmap);
- b.setTransform(patternTransform);
ctxt->save();
+
ctxt->setCompositeOperation(op);
QPainter* p = ctxt->platformContext();
if (!pixmap.hasAlpha() && p->compositionMode() == QPainter::CompositionMode_SourceOver)
p->setCompositionMode(QPainter::CompositionMode_Source);
- p->setBrushOrigin(phase);
- p->fillRect(destRect, b);
+
+ /* Translate the coordinates as phase is not in world matrix coordinate space but the tile rect origin is. */
+ QTransform transform(patternTransform);
+ transform *= QTransform().translate(phase.x(), phase.y());
+ transform.translate(tr.x(), tr.y());
+
+ QBrush b(pixmap);
+ b.setTransform(transform);
+ p->fillRect(dr, b);
+
ctxt->restore();
if (imageObserver())
diff --git a/WebCore/platform/graphics/qt/PathQt.cpp b/WebCore/platform/graphics/qt/PathQt.cpp
index b686fef..571b405 100644
--- a/WebCore/platform/graphics/qt/PathQt.cpp
+++ b/WebCore/platform/graphics/qt/PathQt.cpp
@@ -290,12 +290,15 @@ void Path::addArc(const FloatPoint& p, float r, float sar, float ear, bool antic
double width = radius*2;
double height = radius*2;
- if ((!anticlockwise && (ea - sa >= 360)) || (anticlockwise && (sa - ea >= 360)))
+ if ((!anticlockwise && (ea - sa >= 360)) || (anticlockwise && (sa - ea >= 360))) {
// If the anticlockwise argument is false and endAngle-startAngle is equal to or greater than 2*PI, or, if the
// anticlockwise argument is true and startAngle-endAngle is equal to or greater than 2*PI, then the arc is the whole
// circumference of this circle.
span = 360;
- else {
+
+ if (anticlockwise)
+ span = -span;
+ } else {
if (!anticlockwise && (ea < sa))
span += 360;
else if (anticlockwise && (sa < ea))
diff --git a/WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp b/WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp
index d0dafb1..cbe6775 100644
--- a/WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp
+++ b/WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp
@@ -33,6 +33,8 @@
#include "Image.h"
#include "ImageSource.h"
#include "NativeImageSkia.h"
+#include <wtf/OwnPtr.h>
+#include <wtf/PassOwnPtr.h>
#include <algorithm>
@@ -42,6 +44,7 @@ bool GraphicsContext3D::getImageData(Image* image,
unsigned int format,
unsigned int type,
bool premultiplyAlpha,
+ bool ignoreGammaAndColorProfile,
Vector<uint8_t>& outputVector)
{
if (!image)
@@ -50,12 +53,12 @@ bool GraphicsContext3D::getImageData(Image* image,
NativeImageSkia* skiaImage = 0;
AlphaOp neededAlphaOp = AlphaDoNothing;
if (image->data()) {
- ImageSource decoder(false);
+ ImageSource decoder(false, ignoreGammaAndColorProfile);
decoder.setData(image->data(), true);
if (!decoder.frameCount() || !decoder.frameIsCompleteAtIndex(0))
return false;
bool hasAlpha = decoder.frameHasAlphaAtIndex(0);
- pixels = decoder.createFrameAtIndex(0);
+ pixels = adoptPtr(decoder.createFrameAtIndex(0));
if (!pixels.get() || !pixels->isDataComplete() || !pixels->width() || !pixels->height())
return false;
SkBitmap::Config skiaConfig = pixels->config();
diff --git a/WebCore/platform/graphics/skia/ImageBufferSkia.cpp b/WebCore/platform/graphics/skia/ImageBufferSkia.cpp
index 143d667..0db96cf 100644
--- a/WebCore/platform/graphics/skia/ImageBufferSkia.cpp
+++ b/WebCore/platform/graphics/skia/ImageBufferSkia.cpp
@@ -111,7 +111,7 @@ void ImageBuffer::draw(GraphicsContext* context, ColorSpace styleColorSpace, con
if (m_data.m_platformContext.useGPU() && context->platformContext()->useGPU()) {
if (context->platformContext()->canAccelerate()) {
DrawingBuffer* sourceDrawingBuffer = m_data.m_platformContext.gpuCanvas()->drawingBuffer();
- unsigned sourceTexture = sourceDrawingBuffer->getRenderingResultsAsTexture();
+ unsigned sourceTexture = static_cast<unsigned>(sourceDrawingBuffer->platformColorBuffer());
FloatRect destRectFlipped(destRect);
destRectFlipped.setY(destRect.y() + destRect.height());
destRectFlipped.setHeight(-destRect.height());
@@ -238,6 +238,14 @@ PassRefPtr<ImageData> ImageBuffer::getPremultipliedImageData(const IntRect& rect
return getImageData<Premultiplied>(rect, *context()->platformContext()->bitmap(), m_size);
}
+// This function does the equivalent of (a * b + 254) / 255, without an integer divide.
+// Valid for a, b in the range [0..255].
+unsigned mulDiv255Ceil(unsigned a, unsigned b)
+{
+ unsigned value = a * b + 255;
+ return (value + (value >> 8)) >> 8;
+}
+
template <Multiply multiplied>
void putImageData(ImageData*& source, const IntRect& sourceRect, const IntPoint& destPoint,
const SkBitmap& bitmap, const IntSize& size)
@@ -279,10 +287,13 @@ void putImageData(ImageData*& source, const IntRect& sourceRect, const IntPoint&
uint32_t* destRow = bitmap.getAddr32(destX, destY + y);
for (int x = 0; x < numColumns; ++x) {
const unsigned char* srcPixel = &srcRow[x * 4];
- if (multiplied == Unmultiplied)
- destRow[x] = SkPreMultiplyARGB(srcPixel[3], srcPixel[0],
- srcPixel[1], srcPixel[2]);
- else
+ if (multiplied == Unmultiplied) {
+ unsigned char alpha = srcPixel[3];
+ unsigned char r = mulDiv255Ceil(srcPixel[0], alpha);
+ unsigned char g = mulDiv255Ceil(srcPixel[1], alpha);
+ unsigned char b = mulDiv255Ceil(srcPixel[2], alpha);
+ destRow[x] = SkPackARGB32(alpha, r, g, b);
+ } else
destRow[x] = SkPackARGB32(srcPixel[3], srcPixel[0],
srcPixel[1], srcPixel[2]);
}
diff --git a/WebCore/platform/graphics/transforms/TransformOperations.h b/WebCore/platform/graphics/transforms/TransformOperations.h
index 08efd23..c0da377 100644
--- a/WebCore/platform/graphics/transforms/TransformOperations.h
+++ b/WebCore/platform/graphics/transforms/TransformOperations.h
@@ -57,6 +57,11 @@ public:
return false;
}
+ void clear()
+ {
+ m_operations.clear();
+ }
+
Vector<RefPtr<TransformOperation> >& operations() { return m_operations; }
const Vector<RefPtr<TransformOperation> >& operations() const { return m_operations; }
diff --git a/WebCore/platform/graphics/win/SimpleFontDataWin.cpp b/WebCore/platform/graphics/win/SimpleFontDataWin.cpp
index 7010c8a..6d1d777 100644
--- a/WebCore/platform/graphics/win/SimpleFontDataWin.cpp
+++ b/WebCore/platform/graphics/win/SimpleFontDataWin.cpp
@@ -65,6 +65,18 @@ bool SimpleFontData::shouldApplyMacAscentHack()
void SimpleFontData::initGDIFont()
{
+ if (!m_platformData.size()) {
+ m_ascent = 0;
+ m_descent = 0;
+ m_lineGap = 0;
+ m_lineSpacing = 0;
+ m_avgCharWidth = 0;
+ m_maxCharWidth = 0;
+ m_xHeight = 0;
+ m_unitsPerEm = 0;
+ return;
+ }
+
HDC hdc = GetDC(0);
HGDIOBJ oldFont = SelectObject(hdc, m_platformData.hfont());
OUTLINETEXTMETRIC metrics;
@@ -94,10 +106,6 @@ void SimpleFontData::initGDIFont()
void SimpleFontData::platformDestroy()
{
- // We don't hash this on Win32, so it's effectively owned by us.
- delete m_smallCapsFontData;
- m_smallCapsFontData = 0;
-
ScriptFreeCache(&m_scriptCache);
delete m_scriptFontProperties;
}
@@ -115,7 +123,8 @@ SimpleFontData* SimpleFontData::smallCapsFontData(const FontDescription& fontDes
GetObject(m_platformData.hfont(), sizeof(LOGFONT), &winfont);
winfont.lfHeight = -lroundf(smallCapsHeight * (m_platformData.useGDI() ? 1 : 32));
HFONT hfont = CreateFontIndirect(&winfont);
- m_smallCapsFontData = new SimpleFontData(FontPlatformData(hfont, smallCapsHeight, m_platformData.syntheticBold(), m_platformData.syntheticOblique(), m_platformData.useGDI()));
+ m_smallCapsFontData = new SimpleFontData(FontPlatformData(hfont, smallCapsHeight, m_platformData.syntheticBold(), m_platformData.syntheticOblique(), m_platformData.useGDI()),
+ isCustomFont(), false);
}
}
return m_smallCapsFontData;
diff --git a/WebCore/platform/graphics/win/UniscribeController.cpp b/WebCore/platform/graphics/win/UniscribeController.cpp
index bceec2d..d0acac2 100644
--- a/WebCore/platform/graphics/win/UniscribeController.cpp
+++ b/WebCore/platform/graphics/win/UniscribeController.cpp
@@ -275,12 +275,15 @@ bool UniscribeController::shapeAndPlaceItem(const UChar* cp, unsigned i, const S
for (int k = 0; k < len; k++) {
UChar ch = *(str + k);
- if (Font::treatAsSpace(ch)) {
+ bool treatAsSpace = Font::treatAsSpace(ch);
+ bool treatAsZeroWidthSpace = ch == zeroWidthSpace || Font::treatAsZeroWidthSpace(ch);
+ if (treatAsSpace || treatAsZeroWidthSpace) {
// Substitute in the space glyph at the appropriate place in the glyphs
// array.
glyphs[clusters[k]] = fontData->spaceGlyph();
- advances[clusters[k]] = logicalSpaceWidth;
- spaceCharacters[clusters[k]] = m_currentCharacter + k + item.iCharPos;
+ advances[clusters[k]] = treatAsSpace ? logicalSpaceWidth : 0;
+ if (treatAsSpace)
+ spaceCharacters[clusters[k]] = m_currentCharacter + k + item.iCharPos;
}
if (Font::isRoundingHackCharacter(ch))
@@ -335,7 +338,9 @@ bool UniscribeController::shapeAndPlaceItem(const UChar* cp, unsigned i, const S
advance += m_font.letterSpacing();
// Handle justification and word-spacing.
- if (glyph == fontData->spaceGlyph()) {
+ int characterIndex = spaceCharacters[k];
+ // characterIndex is left at the initial value of -1 for glyphs that do not map back to treated-as-space characters.
+ if (characterIndex != -1) {
// Account for padding. WebCore uses space padding to justify text.
// We distribute the specified padding over the available spaces in the run.
if (m_padding) {
@@ -351,7 +356,6 @@ bool UniscribeController::shapeAndPlaceItem(const UChar* cp, unsigned i, const S
}
// Account for word-spacing.
- int characterIndex = spaceCharacters[k];
if (characterIndex > 0 && !Font::treatAsSpace(*m_run.data(characterIndex - 1)) && m_font.wordSpacing())
advance += m_font.wordSpacing();
}
diff --git a/WebCore/platform/graphics/win/FontPlatformDataCairoWin.h b/WebCore/platform/graphics/win/cairo/FontPlatformData.h
index 05f9eab..05f9eab 100644
--- a/WebCore/platform/graphics/win/FontPlatformDataCairoWin.h
+++ b/WebCore/platform/graphics/win/cairo/FontPlatformData.h
diff --git a/WebCore/platform/graphics/wince/FontPlatformData.h b/WebCore/platform/graphics/wince/FontPlatformData.h
index 4a174f0..e73a7b2 100644
--- a/WebCore/platform/graphics/wince/FontPlatformData.h
+++ b/WebCore/platform/graphics/wince/FontPlatformData.h
@@ -26,6 +26,7 @@
#define FontPlatformData_h
#include "FontDescription.h"
+#include "FontOrientation.h"
#include <wtf/Forward.h>
#include <wtf/Noncopyable.h>
#include <wtf/text/StringImpl.h>
@@ -77,6 +78,8 @@ namespace WebCore {
static const String& defaultFontFamily();
static LONG adjustedGDIFontWeight(LONG gdiFontWeight, const String& family);
+ FontOrientation orientation() const { return Horizontal; } // FIXME: Implement.
+
#ifndef NDEBUG
String description() const;
#endif
diff --git a/WebCore/platform/graphics/wx/FontPlatformData.h b/WebCore/platform/graphics/wx/FontPlatformData.h
index b328545..9ae8b54 100644
--- a/WebCore/platform/graphics/wx/FontPlatformData.h
+++ b/WebCore/platform/graphics/wx/FontPlatformData.h
@@ -30,6 +30,7 @@
#define FontPlatformData_h
#include "FontDescription.h"
+#include "FontOrientation.h"
#include "StringImpl.h"
#include <wtf/Forward.h>
#include <wtf/RefPtr.h>
@@ -147,6 +148,8 @@ public:
bool allowsLigatures() const { return false; }
+ FontOrientation orientation() const { return Horizontal; } // FIXME: Implement.
+
#if OS(WINDOWS)
bool useGDI() const;
HFONT hfont() const;
diff --git a/WebCore/platform/graphics/wx/SimpleFontDataWx.cpp b/WebCore/platform/graphics/wx/SimpleFontDataWx.cpp
index e899715..96129f9 100644
--- a/WebCore/platform/graphics/wx/SimpleFontDataWx.cpp
+++ b/WebCore/platform/graphics/wx/SimpleFontDataWx.cpp
@@ -79,9 +79,6 @@ void SimpleFontData::platformCharWidthInit()
void SimpleFontData::platformDestroy()
{
- delete m_smallCapsFontData;
- m_smallCapsFontData = 0;
-
#if OS(WINDOWS)
if (m_scriptFontProperties) {
delete m_scriptFontProperties;
@@ -99,7 +96,7 @@ SimpleFontData* SimpleFontData::smallCapsFontData(const FontDescription& fontDes
FontDescription desc = FontDescription(fontDescription);
desc.setSpecifiedSize(0.70f * fontDescription.computedSize());
FontPlatformData platformData(desc, desc.family().family());
- m_smallCapsFontData = new SimpleFontData(platformData);
+ m_smallCapsFontData = new SimpleFontData(platformData, isCustomFont(), false);
}
return m_smallCapsFontData;
}
diff --git a/WebCore/platform/gtk/GtkVersioning.c b/WebCore/platform/gtk/GtkVersioning.c
index 071c5e5..0776c10 100644
--- a/WebCore/platform/gtk/GtkVersioning.c
+++ b/WebCore/platform/gtk/GtkVersioning.c
@@ -225,7 +225,7 @@ gdk_pixbuf_get_from_surface(cairo_surface_t * surface,
GdkPixbuf * dest;
/* General sanity checks */
- g_return_val_if_fail(!surface, NULL);
+ g_return_val_if_fail(surface, NULL);
g_return_val_if_fail(srcX >= 0 && srcY >= 0, NULL);
g_return_val_if_fail(width > 0 && height > 0, NULL);
diff --git a/WebCore/platform/gtk/LocalizedStringsGtk.cpp b/WebCore/platform/gtk/LocalizedStringsGtk.cpp
index 7851326..68c1598 100644
--- a/WebCore/platform/gtk/LocalizedStringsGtk.cpp
+++ b/WebCore/platform/gtk/LocalizedStringsGtk.cpp
@@ -559,27 +559,45 @@ String validationMessageTypeMismatchText()
return String::fromUTF8(_("type mismatch"));
}
+String validationMessageTypeMismatchForEmailText()
+{
+ notImplemented();
+ return validationMessageTypeMismatchText();
+}
+
+String validationMessageTypeMismatchForMultipleEmailText()
+{
+ notImplemented();
+ return validationMessageTypeMismatchText();
+}
+
+String validationMessageTypeMismatchForURLText()
+{
+ notImplemented();
+ return validationMessageTypeMismatchText();
+}
+
String validationMessagePatternMismatchText()
{
return String::fromUTF8(_("pattern mismatch"));
}
-String validationMessageTooLongText()
+String validationMessageTooLongText(int, int)
{
return String::fromUTF8(_("too long"));
}
-String validationMessageRangeUnderflowText()
+String validationMessageRangeUnderflowText(const String&)
{
return String::fromUTF8(_("range underflow"));
}
-String validationMessageRangeOverflowText()
+String validationMessageRangeOverflowText(const String&)
{
return String::fromUTF8(_("range overflow"));
}
-String validationMessageStepMismatchText()
+String validationMessageStepMismatchText(const String&, const String&)
{
return String::fromUTF8(_("step mismatch"));
}
diff --git a/WebCore/platform/gtk/RenderThemeGtk.cpp b/WebCore/platform/gtk/RenderThemeGtk.cpp
index 8df5cda..fe6c9e9 100644
--- a/WebCore/platform/gtk/RenderThemeGtk.cpp
+++ b/WebCore/platform/gtk/RenderThemeGtk.cpp
@@ -3,6 +3,7 @@
* Copyright (C) 2007 Alp Toker <alp@atoker.com>
* Copyright (C) 2008 Collabora Ltd.
* Copyright (C) 2009 Kenneth Rohde Christiansen
+ * Copyright (C) 2010 Igalia S.L.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -40,6 +41,7 @@
#include "Scrollbar.h"
#include "TimeRanges.h"
#include "UserAgentStyleSheets.h"
+#include "WidgetRenderingContext.h"
#include "gtkdrawing.h"
#include <gdk/gdk.h>
#include <gtk/gtk.h>
@@ -151,15 +153,26 @@ RenderThemeGtk::RenderThemeGtk()
, m_pauseButton(0)
, m_seekBackButton(0)
, m_seekForwardButton(0)
- , m_partsTable(adoptPlatformRef(g_hash_table_new_full(0, 0, 0, g_free)))
+#ifdef GTK_API_VERSION_2
+ , m_themePartsHaveRGBAColormap(true)
+#endif
{
- if (!mozGtkRefCount) {
- moz_gtk_init();
- // Use the theme parts for the default drawable.
- moz_gtk_use_theme_parts(partsForDrawable(0));
+ memset(&m_themeParts, 0, sizeof(GtkThemeParts));
+#ifdef GTK_API_VERSION_2
+ GdkColormap* colormap = gdk_screen_get_rgba_colormap(gdk_screen_get_default());
+ if (!colormap) {
+ m_themePartsHaveRGBAColormap = false;
+ colormap = gdk_screen_get_default_colormap(gdk_screen_get_default());
}
+ m_themeParts.colormap = colormap;
+#endif
+ // Initialize the Mozilla theme drawing code.
+ if (!mozGtkRefCount) {
+ moz_gtk_init();
+ moz_gtk_use_theme_parts(&m_themeParts);
+ }
++mozGtkRefCount;
#if ENABLE(VIDEO)
@@ -182,36 +195,19 @@ RenderThemeGtk::~RenderThemeGtk()
m_seekBackButton.clear();
m_seekForwardButton.clear();
- GList* values = g_hash_table_get_values(m_partsTable.get());
- for (guint i = 0; i < g_list_length(values); i++)
- moz_gtk_destroy_theme_parts_widgets(
- static_cast<GtkThemeParts*>(g_list_nth_data(values, i)));
-
gtk_widget_destroy(m_gtkWindow);
}
-GtkThemeParts* RenderThemeGtk::partsForDrawable(GdkDrawable* drawable) const
+void RenderThemeGtk::getIndicatorMetrics(ControlPart part, int& indicatorSize, int& indicatorSpacing) const
{
-#ifdef GTK_API_VERSION_2
- // A null drawable represents the default screen colormap.
- GdkColormap* colormap = 0;
- if (!drawable)
- colormap = gdk_screen_get_default_colormap(gdk_screen_get_default());
- else
- colormap = gdk_drawable_get_colormap(drawable);
-
- GtkThemeParts* parts = static_cast<GtkThemeParts*>(g_hash_table_lookup(m_partsTable.get(), colormap));
- if (!parts) {
- parts = g_new0(GtkThemeParts, 1);
- parts->colormap = colormap;
- g_hash_table_insert(m_partsTable.get(), colormap, parts);
+ ASSERT(part == CheckboxPart || part == RadioPart);
+ if (part == CheckboxPart) {
+ moz_gtk_checkbox_get_metrics(&indicatorSize, &indicatorSpacing);
+ return;
}
-#else
- // For GTK+ 3.0 we no longer have to worry about maintaining a set of widgets per-colormap.
- static GtkThemeParts* parts = g_slice_new0(GtkThemeParts);
-#endif // GTK_API_VERSION_2
- return parts;
+ // RadioPart
+ moz_gtk_radio_get_metrics(&indicatorSize, &indicatorSpacing);
}
static bool supportsFocus(ControlPart appearance)
@@ -289,69 +285,6 @@ static void adjustMozillaStyle(const RenderThemeGtk* theme, RenderStyle* style,
style->setPaddingBottom(Length(ypadding + bottom, Fixed));
}
-#ifdef GTK_API_VERSION_2
-bool RenderThemeGtk::paintMozillaGtkWidget(GtkThemeWidgetType type, GraphicsContext* context, const IntRect& rect, GtkWidgetState* widgetState, int flags, GtkTextDirection textDirection)
-{
- // Painting is disabled so just claim to have succeeded
- if (context->paintingDisabled())
- return false;
-
- PlatformRefPtr<GdkDrawable> drawable(context->gdkDrawable());
- GdkRectangle paintRect, clipRect;
- if (drawable) {
- AffineTransform ctm = context->getCTM();
- IntPoint pos = ctm.mapPoint(rect.location());
- paintRect = IntRect(pos.x(), pos.y(), rect.width(), rect.height());
-
- // Intersect the cairo rectangle with the target widget region. This will
- // prevent the theme drawing code from drawing into regions that cairo will
- // clip anyway.
- double clipX1, clipX2, clipY1, clipY2;
- cairo_clip_extents(context->platformContext(), &clipX1, &clipY1, &clipX2, &clipY2);
- IntPoint clipPos = ctm.mapPoint(IntPoint(clipX1, clipY1));
-
- clipRect.width = clipX2 - clipX1;
- clipRect.height = clipY2 - clipY1;
- clipRect.x = clipPos.x();
- clipRect.y = clipPos.y();
- gdk_rectangle_intersect(&paintRect, &clipRect, &clipRect);
-
- } else {
- // In some situations, like during print previews, this GraphicsContext is not
- // backed by a GdkDrawable. In those situations, we render onto a pixmap and then
- // copy the rendered data back to the GraphicsContext via Cairo.
- drawable = adoptPlatformRef(gdk_pixmap_new(0, rect.width(), rect.height(), gdk_visual_get_depth(gdk_visual_get_system())));
- paintRect = clipRect = IntRect(0, 0, rect.width(), rect.height());
- }
-
- moz_gtk_use_theme_parts(partsForDrawable(drawable.get()));
- bool success = moz_gtk_widget_paint(type, drawable.get(), &paintRect, &clipRect, widgetState, flags, textDirection) == MOZ_GTK_SUCCESS;
-
- // If the drawing was successful and we rendered onto a pixmap, copy the
- // results back to the original GraphicsContext.
- if (success && !context->gdkDrawable()) {
- cairo_t* cairoContext = context->platformContext();
- cairo_save(cairoContext);
- gdk_cairo_set_source_pixmap(cairoContext, drawable.get(), rect.x(), rect.y());
- cairo_paint(cairoContext);
- cairo_restore(cairoContext);
- }
-
- return !success;
-}
-#else
-bool RenderThemeGtk::paintMozillaGtkWidget(GtkThemeWidgetType type, GraphicsContext* context, const IntRect& rect, GtkWidgetState* widgetState, int flags, GtkTextDirection textDirection)
-{
- // Painting is disabled so just claim to have succeeded
- if (context->paintingDisabled())
- return false;
-
- // false == success, because of awesome.
- GdkRectangle paintRect = rect;
- return moz_gtk_widget_paint(type, context->platformContext(), &paintRect, widgetState, flags, textDirection) != MOZ_GTK_SUCCESS;
-}
-#endif
-
bool RenderThemeGtk::paintRenderObject(GtkThemeWidgetType type, RenderObject* renderObject, GraphicsContext* context, const IntRect& rect, int flags)
{
// Painting is disabled so just claim to have succeeded
@@ -382,8 +315,8 @@ bool RenderThemeGtk::paintRenderObject(GtkThemeWidgetType type, RenderObject* re
else
widgetState.depressed = false;
- GtkTextDirection textDirection = gtkTextDirection(renderObject->style()->direction());
- return paintMozillaGtkWidget(type, context, rect, &widgetState, flags, textDirection);
+ WidgetRenderingContext widgetContext(context, rect);
+ return !widgetContext.paintMozillaWidget(type, &widgetState, flags, gtkTextDirection(renderObject->style()->direction()));
}
static void setToggleSize(const RenderThemeGtk* theme, RenderStyle* style, ControlPart appearance)
@@ -394,19 +327,7 @@ static void setToggleSize(const RenderThemeGtk* theme, RenderStyle* style, Contr
// FIXME: This is probably not correct use of indicatorSize and indicatorSpacing.
gint indicatorSize, indicatorSpacing;
-
- switch (appearance) {
- case CheckboxPart:
- if (moz_gtk_checkbox_get_metrics(&indicatorSize, &indicatorSpacing) != MOZ_GTK_SUCCESS)
- return;
- break;
- case RadioPart:
- if (moz_gtk_radio_get_metrics(&indicatorSize, &indicatorSpacing) != MOZ_GTK_SUCCESS)
- return;
- break;
- default:
- return;
- }
+ theme->getIndicatorMetrics(appearance, indicatorSize, indicatorSpacing);
// Other ports hard-code this to 13, but GTK+ users tend to demand the native look.
// It could be made a configuration option values other than 13 actually break site compatibility.
@@ -614,7 +535,7 @@ bool RenderThemeGtk::paintSliderTrack(RenderObject* object, const PaintInfo& inf
if (part == SliderVerticalPart)
gtkPart = MOZ_GTK_SCALE_VERTICAL;
- return paintRenderObject(gtkPart, object, info.context, toRenderBox(object)->absoluteContentBox());
+ return paintRenderObject(gtkPart, object, info.context, rect);
}
void RenderThemeGtk::adjustSliderTrackStyle(CSSStyleSelector*, RenderStyle* style, Element*) const
diff --git a/WebCore/platform/gtk/RenderThemeGtk.h b/WebCore/platform/gtk/RenderThemeGtk.h
index 6d324b6..ac08cf1 100644
--- a/WebCore/platform/gtk/RenderThemeGtk.h
+++ b/WebCore/platform/gtk/RenderThemeGtk.h
@@ -83,7 +83,7 @@ public:
virtual String extraMediaControlsStyleSheet();
#endif
- bool paintMozillaGtkWidget(GtkThemeWidgetType, GraphicsContext*, const IntRect&, GtkWidgetState*, int flags, GtkTextDirection = GTK_TEXT_DIR_NONE);
+ void getIndicatorMetrics(ControlPart, int& indicatorSize, int& indicatorSpacing) const;
GtkWidget* gtkScrollbar();
@@ -169,7 +169,6 @@ private:
GtkContainer* gtkContainer() const;
bool paintRenderObject(GtkThemeWidgetType, RenderObject*, GraphicsContext*, const IntRect& rect, int flags = 0);
- GtkThemeParts* partsForDrawable(GdkDrawable*) const;
mutable GtkWidget* m_gtkWindow;
mutable GtkContainer* m_gtkContainer;
@@ -193,9 +192,11 @@ private:
RefPtr<Image> m_pauseButton;
RefPtr<Image> m_seekBackButton;
RefPtr<Image> m_seekForwardButton;
- Page* m_page;
- PlatformRefPtr<GHashTable> m_partsTable;
-
+ GtkThemeParts m_themeParts;
+#ifdef GTK_API_VERSION_2
+ bool m_themePartsHaveRGBAColormap;
+#endif
+ friend class WidgetRenderingContext;
};
}
diff --git a/WebCore/platform/gtk/ScrollbarThemeGtk.cpp b/WebCore/platform/gtk/ScrollbarThemeGtk.cpp
index 19b897c..10f7e71 100644
--- a/WebCore/platform/gtk/ScrollbarThemeGtk.cpp
+++ b/WebCore/platform/gtk/ScrollbarThemeGtk.cpp
@@ -30,6 +30,7 @@
#include "RenderThemeGtk.h"
#include "ScrollView.h"
#include "Scrollbar.h"
+#include "WidgetRenderingContext.h"
#include "gtkdrawing.h"
#include <gtk/gtk.h>
@@ -216,7 +217,8 @@ void ScrollbarThemeGtk::paintTrackBackground(GraphicsContext* context, Scrollbar
fullScrollbarRect = IntRect(scrollbar->x(), scrollbar->y(), scrollbar->width(), scrollbar->height());
GtkThemeWidgetType type = scrollbar->orientation() == VerticalScrollbar ? MOZ_GTK_SCROLLBAR_TRACK_VERTICAL : MOZ_GTK_SCROLLBAR_TRACK_HORIZONTAL;
- static_cast<RenderThemeGtk*>(RenderTheme::defaultTheme().get())->paintMozillaGtkWidget(type, context, fullScrollbarRect, &state, 0);
+ WidgetRenderingContext widgetContext(context, fullScrollbarRect);
+ widgetContext.paintMozillaWidget(type, &state, 0);
}
void ScrollbarThemeGtk::paintScrollbarBackground(GraphicsContext* context, Scrollbar* scrollbar)
@@ -224,7 +226,8 @@ void ScrollbarThemeGtk::paintScrollbarBackground(GraphicsContext* context, Scrol
// This is unused by the moz_gtk_scrollecd_window_paint.
GtkWidgetState state;
IntRect fullScrollbarRect = IntRect(scrollbar->x(), scrollbar->y(), scrollbar->width(), scrollbar->height());
- static_cast<RenderThemeGtk*>(RenderTheme::defaultTheme().get())->paintMozillaGtkWidget(MOZ_GTK_SCROLLED_WINDOW, context, fullScrollbarRect, &state, 0);
+ WidgetRenderingContext widgetContext(context, fullScrollbarRect);
+ widgetContext.paintMozillaWidget(MOZ_GTK_SCROLLED_WINDOW, &state, 0);
}
void ScrollbarThemeGtk::paintThumb(GraphicsContext* context, Scrollbar* scrollbar, const IntRect& rect)
@@ -240,7 +243,8 @@ void ScrollbarThemeGtk::paintThumb(GraphicsContext* context, Scrollbar* scrollba
state.curpos = scrollbar->currentPos();
GtkThemeWidgetType type = scrollbar->orientation() == VerticalScrollbar ? MOZ_GTK_SCROLLBAR_THUMB_VERTICAL : MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL;
- static_cast<RenderThemeGtk*>(RenderTheme::defaultTheme().get())->paintMozillaGtkWidget(type, context, rect, &state, 0);
+ WidgetRenderingContext widgetContext(context, rect);
+ widgetContext.paintMozillaWidget(type, &state, 0);
}
IntRect ScrollbarThemeGtk::thumbRect(Scrollbar* scrollbar, const IntRect& unconstrainedTrackRect)
@@ -256,6 +260,9 @@ IntRect ScrollbarThemeGtk::thumbRect(Scrollbar* scrollbar, const IntRect& uncons
bool ScrollbarThemeGtk::paint(Scrollbar* scrollbar, GraphicsContext* graphicsContext, const IntRect& damageRect)
{
+ if (graphicsContext->paintingDisabled())
+ return false;
+
// Create the ScrollbarControlPartMask based on the damageRect
ScrollbarControlPartMask scrollMask = NoPart;
@@ -334,6 +341,7 @@ void ScrollbarThemeGtk::paintButton(GraphicsContext* context, Scrollbar* scrollb
state.focused = TRUE;
state.isDefault = TRUE;
state.canDefault = TRUE;
+ state.depressed = FALSE;
if ((BackButtonStartPart == part && scrollbar->currentPos())
|| (BackButtonEndPart == part && scrollbar->currentPos())
@@ -348,7 +356,8 @@ void ScrollbarThemeGtk::paintButton(GraphicsContext* context, Scrollbar* scrollb
state.inHover = FALSE;
}
- static_cast<RenderThemeGtk*>(RenderTheme::defaultTheme().get())->paintMozillaGtkWidget(MOZ_GTK_SCROLLBAR_BUTTON, context, rect, &state, flags);
+ WidgetRenderingContext widgetContext(context, rect);
+ widgetContext.paintMozillaWidget(MOZ_GTK_SCROLLBAR_BUTTON, &state, flags);
}
void ScrollbarThemeGtk::paintScrollCorner(ScrollView* view, GraphicsContext* context, const IntRect& cornerRect)
diff --git a/WebCore/platform/gtk/WidgetRenderingContext.h b/WebCore/platform/gtk/WidgetRenderingContext.h
new file mode 100644
index 0000000..3bb8065
--- /dev/null
+++ b/WebCore/platform/gtk/WidgetRenderingContext.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2010 Igalia S.L.
+ * All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef WidgetRenderingContext_h
+#define WidgetRenderingContext_h
+
+#include "IntRect.h"
+#include "gtkdrawing.h"
+
+namespace WebCore {
+
+class GraphicsContext;
+class RenderThemeGtk;
+
+class WidgetRenderingContext {
+public:
+ WidgetRenderingContext(GraphicsContext*, const IntRect&);
+ ~WidgetRenderingContext();
+ bool paintMozillaWidget(GtkThemeWidgetType, GtkWidgetState*, int flags, GtkTextDirection = GTK_TEXT_DIR_NONE);
+
+private:
+ GraphicsContext* m_graphicsContext;
+ IntRect m_targetRect;
+ GdkRectangle m_paintRect;
+ IntSize m_extraSpace;
+ bool m_hadError;
+
+#ifdef GTK_API_VERSION_2
+ GdkDrawable* m_target;
+#else
+ cairo_t* m_target;
+#endif
+
+};
+
+}
+
+#endif
diff --git a/WebCore/platform/gtk/WidgetRenderingContextGtk2.cpp b/WebCore/platform/gtk/WidgetRenderingContextGtk2.cpp
new file mode 100644
index 0000000..b8712d2
--- /dev/null
+++ b/WebCore/platform/gtk/WidgetRenderingContextGtk2.cpp
@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) 2010 Sencha, Inc.
+ * Copyright (C) 2010 Igalia S.L.
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE 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.
+ */
+
+#ifdef GTK_API_VERSION_2
+
+#include "config.h"
+#include "WidgetRenderingContext.h"
+
+#include "GraphicsContext.h"
+#include "RefPtrCairo.h"
+#include "RenderThemeGtk.h"
+#include "Timer.h"
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
+
+namespace WebCore {
+
+static GdkPixmap* gScratchBuffer = 0;
+static void purgeScratchBuffer()
+{
+ if (gScratchBuffer)
+ g_object_unref(gScratchBuffer);
+ gScratchBuffer = 0;
+}
+
+// FIXME: Perhaps we can share some of this code with the ContextShadowCairo.
+// Widget rendering needs a scratch image as the buffer for the intermediate
+// render. Instead of creating and destroying the buffer for every operation,
+// we create a buffer which will be automatically purged via a timer.
+class PurgeScratchBufferTimer : public TimerBase {
+private:
+ virtual void fired() { purgeScratchBuffer(); }
+};
+static PurgeScratchBufferTimer purgeScratchBufferTimer;
+static void scheduleScratchBufferPurge()
+{
+ if (purgeScratchBufferTimer.isActive())
+ purgeScratchBufferTimer.stop();
+ purgeScratchBufferTimer.startOneShot(2);
+}
+
+static IntSize getExtraSpaceForWidget(RenderThemeGtk* theme)
+{
+ // Checkboxes and scrollbar thumbs often draw outside their boundaries. Here we figure out
+ // the maximum amount of space we need for any type of widget and use that to increase the
+ // size of the scratch buffer, while preserving the final widget position.
+
+ // The checkbox extra space is calculated by looking at the widget style.
+ int indicatorSize, indicatorSpacing;
+ theme->getIndicatorMetrics(CheckboxPart, indicatorSize, indicatorSpacing);
+ IntSize extraSpace(indicatorSpacing, indicatorSpacing);
+
+ // Scrollbar thumbs need at least an extra pixel along their movement axis.
+ return extraSpace.expandedTo(IntSize(1, 1));
+}
+
+WidgetRenderingContext::WidgetRenderingContext(GraphicsContext* graphicsContext, const IntRect& targetRect)
+ : m_graphicsContext(graphicsContext)
+ , m_targetRect(targetRect)
+ , m_hadError(false)
+{
+ RenderThemeGtk* theme = static_cast<RenderThemeGtk*>(RenderTheme::defaultTheme().get());
+
+ // Fallback: We failed to create an RGBA colormap earlier, so we cannot properly paint
+ // to a temporary surface and preserve transparency. To ensure decent widget rendering, just
+ // paint directly to the target drawable. This will not render CSS rotational transforms properly.
+ if (!theme->m_themePartsHaveRGBAColormap && graphicsContext->gdkDrawable()) {
+ m_paintRect = graphicsContext->getCTM().mapRect(targetRect);
+ m_target = graphicsContext->gdkDrawable();
+ return;
+ }
+
+ // Some widgets render outside their rectangles. We need to account for this.
+ m_extraSpace = getExtraSpaceForWidget(theme);
+
+ // Offset the target rectangle so that the extra space is within the boundaries of the scratch buffer.
+ m_paintRect = IntRect(IntPoint(m_extraSpace.width(), m_extraSpace.height()),
+ m_targetRect.size());
+
+ int width = m_targetRect.width() + (m_extraSpace.width() * 2);
+ int height = m_targetRect.height() + (m_extraSpace.height() * 2);
+ int scratchWidth = 0;
+ int scratchHeight = 0;
+ if (gScratchBuffer)
+ gdk_drawable_get_size(gScratchBuffer, &scratchWidth, &scratchHeight);
+
+ // We do not need to recreate the buffer if the current buffer is large enough.
+ if (!gScratchBuffer || scratchWidth < width || scratchHeight < height) {
+ purgeScratchBuffer();
+ // Round to the nearest 32 pixels so we do not grow the buffer for similar sized requests.
+ width = (1 + (width >> 5)) << 5;
+ height = (1 + (height >> 5)) << 5;
+
+ gScratchBuffer = gdk_pixmap_new(0, width, height, gdk_colormap_get_visual(theme->m_themeParts.colormap)->depth);
+ gdk_drawable_set_colormap(gScratchBuffer, theme->m_themeParts.colormap);
+ }
+ m_target = gScratchBuffer;
+
+ // Clear the scratch buffer.
+ RefPtr<cairo_t> scratchBufferContext = adoptRef(gdk_cairo_create(gScratchBuffer));
+ cairo_set_operator(scratchBufferContext.get(), CAIRO_OPERATOR_CLEAR);
+ cairo_paint(scratchBufferContext.get());
+}
+
+WidgetRenderingContext::~WidgetRenderingContext()
+{
+ // We do not need to blit back to the target in the fallback case. See above.
+ RenderThemeGtk* theme = static_cast<RenderThemeGtk*>(RenderTheme::defaultTheme().get());
+ if (!theme->m_themePartsHaveRGBAColormap && m_graphicsContext->gdkDrawable())
+ return;
+
+ // Don't paint the results back if there was an error.
+ if (m_hadError) {
+ scheduleScratchBufferPurge();
+ return;
+ }
+
+ // FIXME: It's unclear if it is necessary to preserve the current source here.
+ cairo_t* cairoContext = m_graphicsContext->platformContext();
+ RefPtr<cairo_pattern_t> previousSource(cairo_get_source(cairoContext));
+
+ // The blit rectangle is the original target rectangle adjusted for any extra space.
+ IntRect fullTargetRect(m_targetRect);
+ fullTargetRect.inflateX(m_extraSpace.width());
+ fullTargetRect.inflateY(m_extraSpace.height());
+
+ gdk_cairo_set_source_pixmap(cairoContext, gScratchBuffer, fullTargetRect.x(), fullTargetRect.y());
+ cairo_rectangle(cairoContext, fullTargetRect.x(), fullTargetRect.y(), fullTargetRect.width(), fullTargetRect.height());
+ cairo_fill(cairoContext);
+ cairo_set_source(cairoContext, previousSource.get());
+ scheduleScratchBufferPurge();
+}
+
+bool WidgetRenderingContext::paintMozillaWidget(GtkThemeWidgetType type, GtkWidgetState* state, int flags, GtkTextDirection textDirection)
+{
+ // Sometimes moz_gtk_widget_paint modifies the clipping rectangle, so we must use a copy.
+ GdkRectangle clipRect = m_paintRect;
+ m_hadError = moz_gtk_widget_paint(type, m_target, &clipRect, &m_paintRect,
+ state, flags, textDirection) != MOZ_GTK_SUCCESS;
+ return !m_hadError;
+}
+
+}
+
+#endif // GTK_API_VERSION_2
diff --git a/WebCore/platform/gtk/WidgetRenderingContextGtk3.cpp b/WebCore/platform/gtk/WidgetRenderingContextGtk3.cpp
new file mode 100644
index 0000000..e5f1823
--- /dev/null
+++ b/WebCore/platform/gtk/WidgetRenderingContextGtk3.cpp
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2010 Igalia S.L.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+#include "WidgetRenderingContext.h"
+
+#include "GraphicsContext.h"
+#include "IntRect.h"
+
+#ifndef GTK_API_VERSION_2
+
+namespace WebCore {
+
+WidgetRenderingContext::WidgetRenderingContext(GraphicsContext* context, const IntRect& targetRect)
+ : m_graphicsContext(context)
+ , m_targetRect(targetRect)
+ , m_paintRect(targetRect)
+ , m_hadError(false)
+ , m_target(context->platformContext())
+{
+}
+
+WidgetRenderingContext::~WidgetRenderingContext()
+{
+}
+
+bool WidgetRenderingContext::paintMozillaWidget(GtkThemeWidgetType type, GtkWidgetState* state, int flags, GtkTextDirection textDirection)
+{
+ m_hadError = moz_gtk_widget_paint(type, m_target, &m_paintRect, state, flags, textDirection) != MOZ_GTK_SUCCESS;
+ return !m_hadError;
+}
+
+}
+
+#endif // !GTK_API_VERSION_2
diff --git a/WebCore/platform/gtk/gtk3drawing.c b/WebCore/platform/gtk/gtk3drawing.c
index dda110d..880eb6d 100644
--- a/WebCore/platform/gtk/gtk3drawing.c
+++ b/WebCore/platform/gtk/gtk3drawing.c
@@ -642,8 +642,6 @@ static gint
moz_gtk_scrolled_window_paint(cairo_t* cr, GdkRectangle* rect,
GtkWidgetState* state)
{
- GtkStateType state_type = ConvertGtkState(state);
- GtkShadowType shadow_type = (state->active) ? GTK_SHADOW_IN : GTK_SHADOW_OUT;
GtkStyle* style;
GtkAllocation allocation;
GtkWidget* widget;
@@ -659,9 +657,9 @@ moz_gtk_scrolled_window_paint(cairo_t* cr, GdkRectangle* rect,
gtk_widget_set_allocation(widget, &allocation);
style = gtk_widget_get_style(widget);
- gtk_paint_box(style, cr, state_type, shadow_type,
- widget, "scrolled_window", rect->x - 1, rect->y - 1,
- rect->width + 2, rect->height + 2);
+ gtk_paint_shadow(style, cr, GTK_STATE_NORMAL, GTK_SHADOW_IN,
+ widget, "scrolled_window", rect->x , rect->y,
+ rect->width, rect->height);
return MOZ_GTK_SUCCESS;
}
diff --git a/WebCore/platform/haiku/LocalizedStringsHaiku.cpp b/WebCore/platform/haiku/LocalizedStringsHaiku.cpp
index 4c12cf3..e5ca001 100644
--- a/WebCore/platform/haiku/LocalizedStringsHaiku.cpp
+++ b/WebCore/platform/haiku/LocalizedStringsHaiku.cpp
@@ -415,31 +415,49 @@ String validationMessageTypeMismatchText()
return String();
}
+String validationMessageTypeMismatchForEmailText()
+{
+ notImplemented();
+ return validationMessageTypeMismatchText();
+}
+
+String validationMessageTypeMismatchForMultipleEmailText()
+{
+ notImplemented();
+ return validationMessageTypeMismatchText();
+}
+
+String validationMessageTypeMismatchForURLText()
+{
+ notImplemented();
+ return validationMessageTypeMismatchText();
+}
+
String validationMessagePatternMismatchText()
{
notImplemented();
return String();
}
-String validationMessageTooLongText()
+String validationMessageTooLongText(int, int)
{
notImplemented();
return String();
}
-String validationMessageRangeUnderflowText()
+String validationMessageRangeUnderflowText(const String&)
{
notImplemented();
return String();
}
-String validationMessageRangeOverflowText()
+String validationMessageRangeOverflowText(const String&)
{
notImplemented();
return String();
}
-String validationMessageStepMismatchText()
+String validationMessageStepMismatchText(const String&, const String&)
{
notImplemented();
return String();
diff --git a/WebCore/platform/image-decoders/ImageDecoder.cpp b/WebCore/platform/image-decoders/ImageDecoder.cpp
index 43ff33b..a9d5131 100644
--- a/WebCore/platform/image-decoders/ImageDecoder.cpp
+++ b/WebCore/platform/image-decoders/ImageDecoder.cpp
@@ -53,11 +53,15 @@ static unsigned copyFromSharedBuffer(char* buffer, unsigned bufferLength, const
return bytesExtracted;
}
+<<<<<<< HEAD
#if !OS(ANDROID)
// This method requires BMPImageDecoder, PNGImageDecoder, ICOImageDecoder and
// JPEGDecoder, which aren't used on Android, and which don't all compile.
// TODO: Find a better fix.
ImageDecoder* ImageDecoder::create(const SharedBuffer& data, bool premultiplyAlpha)
+=======
+ImageDecoder* ImageDecoder::create(const SharedBuffer& data, bool premultiplyAlpha, bool ignoreGammaAndColorProfile)
+>>>>>>> webkit.org at r72274
{
// We need at least 4 bytes to figure out what kind of image we're dealing
// with.
@@ -69,15 +73,15 @@ ImageDecoder* ImageDecoder::create(const SharedBuffer& data, bool premultiplyAlp
// GIFs begin with GIF8(7 or 9).
if (strncmp(contents, "GIF8", 4) == 0)
- return new GIFImageDecoder(premultiplyAlpha);
+ return new GIFImageDecoder(premultiplyAlpha, ignoreGammaAndColorProfile);
// Test for PNG.
if (!memcmp(contents, "\x89\x50\x4E\x47", 4))
- return new PNGImageDecoder(premultiplyAlpha);
+ return new PNGImageDecoder(premultiplyAlpha, ignoreGammaAndColorProfile);
// JPEG
if (!memcmp(contents, "\xFF\xD8\xFF", 3))
- return new JPEGImageDecoder(premultiplyAlpha);
+ return new JPEGImageDecoder(premultiplyAlpha, ignoreGammaAndColorProfile);
#if USE(WEBP)
if (!memcmp(contents, "RIFF", 4)) {
@@ -87,19 +91,19 @@ ImageDecoder* ImageDecoder::create(const SharedBuffer& data, bool premultiplyAlp
unsigned length = copyFromSharedBuffer(header, webpExtraMarker, data, webpExtraMarkeroffset);
if (length >= webpExtraMarker) {
if (!memcmp(header, "WEBPVP", webpExtraMarker))
- return new WEBPImageDecoder(premultiplyAlpha);
+ return new WEBPImageDecoder(premultiplyAlpha, ignoreGammaAndColorProfile);
}
}
#endif
// BMP
if (strncmp(contents, "BM", 2) == 0)
- return new BMPImageDecoder(premultiplyAlpha);
+ return new BMPImageDecoder(premultiplyAlpha, ignoreGammaAndColorProfile);
// ICOs always begin with a 2-byte 0 followed by a 2-byte 1.
// CURs begin with 2-byte 0 followed by 2-byte 2.
if (!memcmp(contents, "\x00\x00\x01\x00", 4) || !memcmp(contents, "\x00\x00\x02\x00", 4))
- return new ICOImageDecoder(premultiplyAlpha);
+ return new ICOImageDecoder(premultiplyAlpha, ignoreGammaAndColorProfile);
// Give up. We don't know what the heck this is.
return 0;
@@ -148,7 +152,7 @@ void RGBA32Buffer::zeroFill()
m_hasAlpha = true;
}
-#if !PLATFORM(CF)
+#if !PLATFORM(CG)
void RGBA32Buffer::copyReferenceToBitmapData(const RGBA32Buffer& other)
{
diff --git a/WebCore/platform/image-decoders/ImageDecoder.h b/WebCore/platform/image-decoders/ImageDecoder.h
index 81d6dbb..4b593f9 100644
--- a/WebCore/platform/image-decoders/ImageDecoder.h
+++ b/WebCore/platform/image-decoders/ImageDecoder.h
@@ -151,7 +151,7 @@ namespace WebCore {
#endif
private:
-#if PLATFORM(CF)
+#if PLATFORM(CG)
typedef RetainPtr<CFMutableDataRef> NativeBackingStore;
#else
typedef Vector<PixelData> NativeBackingStore;
@@ -233,9 +233,10 @@ namespace WebCore {
// m_maxNumPixels. (Not supported by all image decoders yet)
class ImageDecoder : public Noncopyable {
public:
- ImageDecoder(bool premultiplyAlpha)
+ ImageDecoder(bool premultiplyAlpha, bool ignoreGammaAndColorProfile)
: m_scaled(false)
, m_premultiplyAlpha(premultiplyAlpha)
+ , m_ignoreGammaAndColorProfile(ignoreGammaAndColorProfile)
, m_sizeAvailable(false)
, m_maxNumPixels(-1)
, m_isAllDataReceived(false)
@@ -248,7 +249,7 @@ namespace WebCore {
// Factory function to create an ImageDecoder. Ports that subclass
// ImageDecoder can provide their own implementation of this to avoid
// needing to write a dedicated setData() implementation.
- static ImageDecoder* create(const SharedBuffer& data, bool premultiplyAlpha);
+ static ImageDecoder* create(const SharedBuffer& data, bool premultiplyAlpha, bool ignoreGammaAndColorProfile);
// The the filename extension usually associated with an undecoded image
// of this type.
@@ -364,6 +365,7 @@ namespace WebCore {
Vector<int> m_scaledColumns;
Vector<int> m_scaledRows;
bool m_premultiplyAlpha;
+ bool m_ignoreGammaAndColorProfile;
private:
// Some code paths compute the size of the image as "width * height * 4"
diff --git a/WebCore/platform/image-decoders/bmp/BMPImageDecoder.cpp b/WebCore/platform/image-decoders/bmp/BMPImageDecoder.cpp
index 1c117a8..219a1e2 100644
--- a/WebCore/platform/image-decoders/bmp/BMPImageDecoder.cpp
+++ b/WebCore/platform/image-decoders/bmp/BMPImageDecoder.cpp
@@ -40,8 +40,8 @@ namespace WebCore {
// don't pack).
static const size_t sizeOfFileHeader = 14;
-BMPImageDecoder::BMPImageDecoder(bool premultiplyAlpha)
- : ImageDecoder(premultiplyAlpha)
+BMPImageDecoder::BMPImageDecoder(bool premultiplyAlpha, bool ignoreGammaAndColorProfile)
+ : ImageDecoder(premultiplyAlpha, ignoreGammaAndColorProfile)
, m_decodedOffset(0)
{
}
diff --git a/WebCore/platform/image-decoders/bmp/BMPImageDecoder.h b/WebCore/platform/image-decoders/bmp/BMPImageDecoder.h
index 3996bf9..695fab4 100644
--- a/WebCore/platform/image-decoders/bmp/BMPImageDecoder.h
+++ b/WebCore/platform/image-decoders/bmp/BMPImageDecoder.h
@@ -39,7 +39,7 @@ namespace WebCore {
// This class decodes the BMP image format.
class BMPImageDecoder : public ImageDecoder {
public:
- BMPImageDecoder(bool premultiplyAlpha);
+ BMPImageDecoder(bool premultiplyAlpha, bool ignoreGammaAndColorProfile);
// ImageDecoder
virtual String filenameExtension() const { return "bmp"; }
diff --git a/WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp b/WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp
index 0f4dbc8..32e94e0 100644
--- a/WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp
+++ b/WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp
@@ -60,8 +60,13 @@ bool RGBA32Buffer::copyBitmapData(const RGBA32Buffer& other)
bool RGBA32Buffer::setSize(int newWidth, int newHeight)
{
- m_backingStore.adoptCF(CFDataCreateMutable(kCFAllocatorDefault, 0));
- CFDataSetLength(m_backingStore.get(), newWidth * newHeight * sizeof(PixelData));
+ ASSERT(!m_backingStore);
+ size_t backingStoreSize = newWidth * newHeight * sizeof(PixelData);
+ CFMutableDataRef backingStoreRef = CFDataCreateMutable(kCFAllocatorDefault, backingStoreSize);
+ if (!backingStoreRef)
+ return false;
+ m_backingStore.adoptCF(backingStoreRef);
+ CFDataSetLength(backingStoreRef, backingStoreSize);
m_bytes = reinterpret_cast<PixelData*>(CFDataGetMutableBytePtr(m_backingStore.get()));
m_size = IntSize(newWidth, newHeight);
diff --git a/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp b/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp
index 18cd903..dfdf35e 100644
--- a/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp
+++ b/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp
@@ -29,8 +29,8 @@
namespace WebCore {
-GIFImageDecoder::GIFImageDecoder(bool premultiplyAlpha)
- : ImageDecoder(premultiplyAlpha)
+GIFImageDecoder::GIFImageDecoder(bool premultiplyAlpha, bool ignoreGammaAndColorProfile)
+ : ImageDecoder(premultiplyAlpha, ignoreGammaAndColorProfile)
, m_alreadyScannedThisDataForFrameCount(true)
, m_repetitionCount(cAnimationLoopOnce)
, m_readOffset(0)
diff --git a/WebCore/platform/image-decoders/gif/GIFImageDecoder.h b/WebCore/platform/image-decoders/gif/GIFImageDecoder.h
index b011e1e..5b4ca10 100644
--- a/WebCore/platform/image-decoders/gif/GIFImageDecoder.h
+++ b/WebCore/platform/image-decoders/gif/GIFImageDecoder.h
@@ -36,7 +36,7 @@ namespace WebCore {
// This class decodes the GIF image format.
class GIFImageDecoder : public ImageDecoder {
public:
- GIFImageDecoder(bool premultiplyAlpha);
+ GIFImageDecoder(bool premultiplyAlpha, bool ignoreGammaAndColorProfile);
virtual ~GIFImageDecoder();
enum GIFQuery { GIFFullQuery, GIFSizeQuery, GIFFrameCountQuery };
diff --git a/WebCore/platform/image-decoders/ico/ICOImageDecoder.cpp b/WebCore/platform/image-decoders/ico/ICOImageDecoder.cpp
index 453efd2..b07cf92 100644
--- a/WebCore/platform/image-decoders/ico/ICOImageDecoder.cpp
+++ b/WebCore/platform/image-decoders/ico/ICOImageDecoder.cpp
@@ -44,8 +44,8 @@ namespace WebCore {
static const size_t sizeOfDirectory = 6;
static const size_t sizeOfDirEntry = 16;
-ICOImageDecoder::ICOImageDecoder(bool premultiplyAlpha)
- : ImageDecoder(premultiplyAlpha)
+ICOImageDecoder::ICOImageDecoder(bool premultiplyAlpha, bool ignoreGammaAndColorProfile)
+ : ImageDecoder(premultiplyAlpha, ignoreGammaAndColorProfile)
, m_decodedOffset(0)
{
}
@@ -201,7 +201,7 @@ bool ICOImageDecoder::decodeAtIndex(size_t index)
}
if (!m_pngDecoders[index]) {
- m_pngDecoders[index].set(new PNGImageDecoder(m_premultiplyAlpha));
+ m_pngDecoders[index].set(new PNGImageDecoder(m_premultiplyAlpha, m_ignoreGammaAndColorProfile));
setDataForPNGDecoderAtIndex(index);
}
// Fail if the size the PNGImageDecoder calculated does not match the size
diff --git a/WebCore/platform/image-decoders/ico/ICOImageDecoder.h b/WebCore/platform/image-decoders/ico/ICOImageDecoder.h
index e2ee9e3..dc631f4 100644
--- a/WebCore/platform/image-decoders/ico/ICOImageDecoder.h
+++ b/WebCore/platform/image-decoders/ico/ICOImageDecoder.h
@@ -40,7 +40,7 @@ namespace WebCore {
// This class decodes the ICO and CUR image formats.
class ICOImageDecoder : public ImageDecoder {
public:
- ICOImageDecoder(bool premultiplyAlpha);
+ ICOImageDecoder(bool premultiplyAlpha, bool ignoreGammaAndColorProfile);
virtual ~ICOImageDecoder();
// ImageDecoder
diff --git a/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp b/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
index da35739..d1de2ca 100644
--- a/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
+++ b/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
@@ -392,8 +392,8 @@ void term_source(j_decompress_ptr jd)
src->decoder->decoder()->jpegComplete();
}
-JPEGImageDecoder::JPEGImageDecoder(bool premultiplyAlpha)
- : ImageDecoder(premultiplyAlpha)
+JPEGImageDecoder::JPEGImageDecoder(bool premultiplyAlpha, bool ignoreGammaAndColorProfile)
+ : ImageDecoder(premultiplyAlpha, ignoreGammaAndColorProfile)
{
}
diff --git a/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h b/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h
index e942b01..a60b387 100644
--- a/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h
+++ b/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h
@@ -37,7 +37,7 @@ namespace WebCore {
// This class decodes the JPEG image format.
class JPEGImageDecoder : public ImageDecoder {
public:
- JPEGImageDecoder(bool premultiplyAlpha);
+ JPEGImageDecoder(bool premultiplyAlpha, bool ignoreGammaAndColorProfile);
virtual ~JPEGImageDecoder();
// ImageDecoder
diff --git a/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp b/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp
index e4f7a0c..8b81896 100644
--- a/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp
+++ b/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp
@@ -169,8 +169,8 @@ private:
unsigned m_currentBufferSize;
};
-PNGImageDecoder::PNGImageDecoder(bool premultiplyAlpha)
- : ImageDecoder(premultiplyAlpha)
+PNGImageDecoder::PNGImageDecoder(bool premultiplyAlpha, bool ignoreGammaAndColorProfile)
+ : ImageDecoder(premultiplyAlpha, ignoreGammaAndColorProfile)
, m_doNothingOnFailure(false)
{
}
@@ -296,7 +296,7 @@ void PNGImageDecoder::headerAvailable()
// Deal with gamma and keep it under our control.
double gamma;
- if (png_get_gAMA(png, info, &gamma)) {
+ if (!m_ignoreGammaAndColorProfile && png_get_gAMA(png, info, &gamma)) {
if ((gamma <= 0.0) || (gamma > cMaxGamma)) {
gamma = cInverseGamma;
png_set_gAMA(png, info, gamma);
@@ -395,16 +395,15 @@ void PNGImageDecoder::rowAvailable(unsigned char* rowBuffer, unsigned rowIndex,
// Check that the row is within the image bounds. LibPNG may supply an extra row.
if (destY < 0 || destY >= scaledSize().height())
return;
- bool sawAlpha = buffer.hasAlpha();
+ bool nonTrivialAlpha = false;
for (int x = 0; x < width; ++x) {
png_bytep pixel = row + (m_scaled ? m_scaledColumns[x] : x) * colorChannels;
unsigned alpha = hasAlpha ? pixel[3] : 255;
buffer.setRGBA(x, destY, pixel[0], pixel[1], pixel[2], alpha);
- if (!sawAlpha && alpha < 255) {
- sawAlpha = true;
- buffer.setHasAlpha(true);
- }
+ nonTrivialAlpha |= alpha < 255;
}
+ if (nonTrivialAlpha && !buffer.hasAlpha())
+ buffer.setHasAlpha(nonTrivialAlpha);
}
void PNGImageDecoder::pngComplete()
diff --git a/WebCore/platform/image-decoders/png/PNGImageDecoder.h b/WebCore/platform/image-decoders/png/PNGImageDecoder.h
index 763b88f..68b0c1f 100644
--- a/WebCore/platform/image-decoders/png/PNGImageDecoder.h
+++ b/WebCore/platform/image-decoders/png/PNGImageDecoder.h
@@ -36,7 +36,7 @@ namespace WebCore {
// This class decodes the PNG image format.
class PNGImageDecoder : public ImageDecoder {
public:
- PNGImageDecoder(bool premultiplyAlpha);
+ PNGImageDecoder(bool premultiplyAlpha, bool ignoreGammaAndColorProfile);
virtual ~PNGImageDecoder();
// ImageDecoder
diff --git a/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp b/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp
index 2275fc7..0fc0bd5 100644
--- a/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp
+++ b/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp
@@ -35,8 +35,8 @@
namespace WebCore {
-WEBPImageDecoder::WEBPImageDecoder(bool premultiplyAlpha)
- : ImageDecoder(premultiplyAlpha)
+WEBPImageDecoder::WEBPImageDecoder(bool premultiplyAlpha, bool ignoreGammaAndColorProfile)
+ : ImageDecoder(premultiplyAlpha, ignoreGammaAndColorProfile)
{
}
diff --git a/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h b/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h
index 266c0ff..57b1dae 100644
--- a/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h
+++ b/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h
@@ -37,7 +37,7 @@ namespace WebCore {
class WEBPImageDecoder : public ImageDecoder {
public:
- WEBPImageDecoder(bool premultiplyAlpha);
+ WEBPImageDecoder(bool premultiplyAlpha, bool ignoreGammaAndColorProfile);
virtual ~WEBPImageDecoder();
virtual String filenameExtension() const { return "vp8"; }
virtual bool isSizeAvailable();
diff --git a/WebCore/platform/mac/ContextMenuItemMac.mm b/WebCore/platform/mac/ContextMenuItemMac.mm
index ce779ec..2d72ba9 100644
--- a/WebCore/platform/mac/ContextMenuItemMac.mm
+++ b/WebCore/platform/mac/ContextMenuItemMac.mm
@@ -58,22 +58,39 @@ ContextMenuItem::ContextMenuItem(ContextMenu* subMenu)
setSubMenu(subMenu);
}
-ContextMenuItem::ContextMenuItem(ContextMenuItemType type, ContextMenuAction action, const String& title, ContextMenu* subMenu)
+static PlatformMenuItemDescription createPlatformMenuItemDescription(ContextMenuItemType type, ContextMenuAction action, const String& title, bool enabled, bool checked)
{
- if (type == SeparatorType) {
- m_platformDescription = [NSMenuItem separatorItem];
- return;
- }
+ if (type == SeparatorType)
+ return [[NSMenuItem separatorItem] retain];
NSMenuItem* item = [[NSMenuItem alloc] initWithTitle:title action:nil keyEquivalent:@""];
- m_platformDescription = item;
- [item release];
+ [item setEnabled:enabled];
+ [item setState:checked ? NSOnState : NSOffState];
+ [item setTag:action];
+
+ return item;
+}
+
+ContextMenuItem::ContextMenuItem(ContextMenuItemType type, ContextMenuAction action, const String& title, ContextMenu* subMenu)
+{
+ m_platformDescription.adoptNS(createPlatformMenuItemDescription(type, action, title, true, false));
- [m_platformDescription.get() setTag:action];
if (subMenu)
setSubMenu(subMenu);
}
+ContextMenuItem::ContextMenuItem(ContextMenuItemType type, ContextMenuAction action, const String& title, bool enabled, bool checked)
+{
+ m_platformDescription.adoptNS(createPlatformMenuItemDescription(type, action, title, enabled, checked));
+}
+
+ContextMenuItem::ContextMenuItem(ContextMenuAction action, const String& title, bool enabled, bool checked, Vector<ContextMenuItem>& subMenuItems)
+{
+ m_platformDescription.adoptNS(createPlatformMenuItemDescription(SubmenuType, action, title, enabled, checked));
+
+ setSubMenu(subMenuItems);
+}
+
ContextMenuItem::~ContextMenuItem()
{
}
@@ -136,6 +153,17 @@ void ContextMenuItem::setSubMenu(ContextMenu* menu)
[subMenu release];
}
+void ContextMenuItem::setSubMenu(Vector<ContextMenuItem>& subMenuItems)
+{
+ NSMenu* subMenu = [[NSMenu alloc] init];
+ [subMenu setAutoenablesItems:NO];
+ for (unsigned i = 0; i < subMenuItems.size(); ++i)
+ [subMenu addItem:subMenuItems[i].releasePlatformDescription()];
+
+ [m_platformDescription.get() setSubmenu:subMenu];
+ [subMenu release];
+}
+
void ContextMenuItem::setChecked(bool checked)
{
if (checked)
diff --git a/WebCore/platform/mac/ContextMenuMac.mm b/WebCore/platform/mac/ContextMenuMac.mm
index c427e3c..7c91028 100644
--- a/WebCore/platform/mac/ContextMenuMac.mm
+++ b/WebCore/platform/mac/ContextMenuMac.mm
@@ -166,6 +166,18 @@ Vector<ContextMenuItem> contextMenuItemVector(PlatformMenuDescription menu)
return items;
}
+PlatformMenuDescription platformMenuDescription(Vector<ContextMenuItem>& menuItemVector)
+{
+ PlatformMenuDescription platformMenu = [[NSMutableArray alloc] initWithCapacity:menuItemVector.size()];
+ for (unsigned i = 0; i < menuItemVector.size(); ++i) {
+ PlatformMenuItemDescription platformItem = menuItemVector[i].releasePlatformDescription();
+ [platformMenu addObject:platformItem];
+ [platformItem release];
+ }
+
+ return [platformMenu autorelease];
+}
+
} // namespace WebCore
#endif // ENABLE(CONTEXT_MENUS)
diff --git a/WebCore/platform/mac/ScrollAnimatorMac.cpp b/WebCore/platform/mac/ScrollAnimatorMac.cpp
new file mode 100644
index 0000000..f127a62
--- /dev/null
+++ b/WebCore/platform/mac/ScrollAnimatorMac.cpp
@@ -0,0 +1,60 @@
+/*
+ * 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"
+
+#if ENABLE(SMOOTH_SCROLLING)
+
+#include "ScrollAnimatorMac.h"
+
+namespace WebCore {
+
+ScrollAnimator* ScrollAnimator::create(ScrollbarClient* client)
+{
+ return new ScrollAnimatorMac(client);
+}
+
+ScrollAnimatorMac::ScrollAnimatorMac(ScrollbarClient* client)
+ : ScrollAnimator(client)
+{
+}
+
+ScrollAnimatorMac::~ScrollAnimatorMac()
+{
+}
+
+bool ScrollAnimatorMac::scroll(ScrollbarOrientation orientation, ScrollGranularity granularity, float step, float multiplier)
+{
+ return ScrollAnimator::scroll(orientation, granularity, step, multiplier);
+}
+
+void ScrollAnimatorMac::setScrollPositionAndStopAnimation(ScrollbarOrientation orientation, float pos)
+{
+ return ScrollAnimator::setScrollPositionAndStopAnimation(orientation, pos);
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(SMOOTH_SCROLLING)
diff --git a/WebCore/platform/mac/ScrollAnimatorMac.h b/WebCore/platform/mac/ScrollAnimatorMac.h
new file mode 100644
index 0000000..3beaa4e
--- /dev/null
+++ b/WebCore/platform/mac/ScrollAnimatorMac.h
@@ -0,0 +1,49 @@
+/*
+ * 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 ScrollAnimatorMac_h
+#define ScrollAnimatorMac_h
+
+#if ENABLE(SMOOTH_SCROLLING)
+
+#include "ScrollAnimator.h"
+#include "Timer.h"
+
+namespace WebCore {
+
+class ScrollAnimatorMac : public ScrollAnimator {
+public:
+ ScrollAnimatorMac(ScrollbarClient*);
+ virtual ~ScrollAnimatorMac();
+
+ virtual bool scroll(ScrollbarOrientation, ScrollGranularity, float step, float multiplier);
+ virtual void setScrollPositionAndStopAnimation(ScrollbarOrientation, float position);
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(SMOOTH_SCROLLING)
+
+#endif // ScrollAnimatorMac_h
diff --git a/WebCore/platform/mac/WebCoreSystemInterface.h b/WebCore/platform/mac/WebCoreSystemInterface.h
index 758639d..201266e 100644
--- a/WebCore/platform/mac/WebCoreSystemInterface.h
+++ b/WebCore/platform/mac/WebCoreSystemInterface.h
@@ -176,6 +176,11 @@ extern void* wkGetHyphenationLocationBeforeIndex;
extern CFIndex (*wkGetHyphenationLocationBeforeIndex)(CFStringRef string, CFIndex index);
#endif
+extern CTLineRef (*wkCreateCTLineWithUniCharProvider)(const UniChar* (*provide)(CFIndex stringIndex, CFIndex* charCount, CFDictionaryRef* attributes, void*), void (*dispose)(const UniChar* chars, void*), void*);
+#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
+extern CTTypesetterRef (*wkCreateCTTypesetterWithUniCharProviderAndOptions)(const UniChar* (*provide)(CFIndex stringIndex, CFIndex* charCount, CFDictionaryRef* attributes, void*), void (*dispose)(const UniChar* chars, void*), void*, CFDictionaryRef options);
+#endif
+
}
#endif
diff --git a/WebCore/platform/mac/WebCoreSystemInterface.mm b/WebCore/platform/mac/WebCoreSystemInterface.mm
index 1882674..9c0c441 100644
--- a/WebCore/platform/mac/WebCoreSystemInterface.mm
+++ b/WebCore/platform/mac/WebCoreSystemInterface.mm
@@ -118,3 +118,8 @@ void* wkGetHyphenationLocationBeforeIndex;
#else
CFIndex (*wkGetHyphenationLocationBeforeIndex)(CFStringRef string, CFIndex index);
#endif
+
+CTLineRef (*wkCreateCTLineWithUniCharProvider)(const UniChar* (*provide)(CFIndex stringIndex, CFIndex* charCount, CFDictionaryRef* attributes, void*), void (*dispose)(const UniChar* chars, void*), void*);
+#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
+CTTypesetterRef (*wkCreateCTTypesetterWithUniCharProviderAndOptions)(const UniChar* (*provide)(CFIndex stringIndex, CFIndex* charCount, CFDictionaryRef* attributes, void*), void (*dispose)(const UniChar* chars, void*), void*, CFDictionaryRef options);
+#endif
diff --git a/WebCore/platform/mock/DeviceOrientationClientMock.cpp b/WebCore/platform/mock/DeviceOrientationClientMock.cpp
index c2c9316..2fa5acb 100644
--- a/WebCore/platform/mock/DeviceOrientationClientMock.cpp
+++ b/WebCore/platform/mock/DeviceOrientationClientMock.cpp
@@ -39,6 +39,7 @@ DeviceOrientationClientMock::DeviceOrientationClientMock()
void DeviceOrientationClientMock::setController(DeviceOrientationController* controller)
{
+ ASSERT(!m_controller);
m_controller = controller;
ASSERT(m_controller);
}
diff --git a/WebCore/platform/mock/SpeechInputClientMock.cpp b/WebCore/platform/mock/SpeechInputClientMock.cpp
index 331209c..820152c 100644
--- a/WebCore/platform/mock/SpeechInputClientMock.cpp
+++ b/WebCore/platform/mock/SpeechInputClientMock.cpp
@@ -89,6 +89,12 @@ void SpeechInputClientMock::setRecognitionResult(const String& result, const Ato
m_recognitionResult.set(language, result);
}
+void SpeechInputClientMock::clearResults()
+{
+ m_resultForEmptyLanguage = String();
+ m_recognitionResult.clear();
+}
+
void SpeechInputClientMock::timerFired(WebCore::Timer<SpeechInputClientMock>*)
{
if (m_recording) {
diff --git a/WebCore/platform/mock/SpeechInputClientMock.h b/WebCore/platform/mock/SpeechInputClientMock.h
index 0e3c456..c2219b4 100644
--- a/WebCore/platform/mock/SpeechInputClientMock.h
+++ b/WebCore/platform/mock/SpeechInputClientMock.h
@@ -49,6 +49,7 @@ public:
SpeechInputClientMock();
void setRecognitionResult(const String& result, const AtomicString& language);
+ void clearResults();
// SpeechInputClient methods.
void setListener(SpeechInputListener*);
diff --git a/WebCore/platform/network/chromium/ResourceRequest.cpp b/WebCore/platform/network/chromium/ResourceRequest.cpp
index a33895a..69591c1 100644
--- a/WebCore/platform/network/chromium/ResourceRequest.cpp
+++ b/WebCore/platform/network/chromium/ResourceRequest.cpp
@@ -42,6 +42,7 @@ PassOwnPtr<CrossThreadResourceRequestData> ResourceRequest::doPlatformCopyData(P
data->m_requestorID = m_requestorID;
data->m_requestorProcessID = m_requestorProcessID;
data->m_appCacheHostID = m_appCacheHostID;
+ data->m_hasUserGesture = m_hasUserGesture;
return data;
}
@@ -50,6 +51,7 @@ void ResourceRequest::doPlatformAdopt(PassOwnPtr<CrossThreadResourceRequestData>
m_requestorID = data->m_requestorID;
m_requestorProcessID = data->m_requestorProcessID;
m_appCacheHostID = data->m_appCacheHostID;
+ m_hasUserGesture = data->m_hasUserGesture;
}
} // namespace WebCore
diff --git a/WebCore/platform/network/chromium/ResourceRequest.h b/WebCore/platform/network/chromium/ResourceRequest.h
index 8571cf4..41ad6e0 100644
--- a/WebCore/platform/network/chromium/ResourceRequest.h
+++ b/WebCore/platform/network/chromium/ResourceRequest.h
@@ -41,6 +41,7 @@ namespace WebCore {
, m_requestorID(0)
, m_requestorProcessID(0)
, m_appCacheHostID(0)
+ , m_hasUserGesture(false)
{
}
@@ -49,6 +50,7 @@ namespace WebCore {
, m_requestorID(0)
, m_requestorProcessID(0)
, m_appCacheHostID(0)
+ , m_hasUserGesture(false)
{
}
@@ -57,6 +59,7 @@ namespace WebCore {
, m_requestorID(0)
, m_requestorProcessID(0)
, m_appCacheHostID(0)
+ , m_hasUserGesture(false)
{
setHTTPReferrer(referrer);
}
@@ -66,6 +69,7 @@ namespace WebCore {
, m_requestorID(0)
, m_requestorProcessID(0)
, m_appCacheHostID(0)
+ , m_hasUserGesture(false)
{
}
@@ -84,6 +88,10 @@ namespace WebCore {
int appCacheHostID() const { return m_appCacheHostID; }
void setAppCacheHostID(int id) { m_appCacheHostID = id; }
+ // True if request was user initiated.
+ bool hasUserGesture() const { return m_hasUserGesture; }
+ void setHasUserGesture(bool hasUserGesture) { m_hasUserGesture = hasUserGesture; }
+
private:
friend class ResourceRequestBase;
@@ -96,12 +104,14 @@ namespace WebCore {
int m_requestorID;
int m_requestorProcessID;
int m_appCacheHostID;
+ bool m_hasUserGesture;
};
struct CrossThreadResourceRequestData : public CrossThreadResourceRequestDataBase {
int m_requestorID;
int m_requestorProcessID;
int m_appCacheHostID;
+ bool m_hasUserGesture;
};
} // namespace WebCore
diff --git a/WebCore/platform/qt/ContextMenuItemQt.cpp b/WebCore/platform/qt/ContextMenuItemQt.cpp
index a65e50c..2a36b87 100644
--- a/WebCore/platform/qt/ContextMenuItemQt.cpp
+++ b/WebCore/platform/qt/ContextMenuItemQt.cpp
@@ -49,6 +49,16 @@ ContextMenuItem::ContextMenuItem(ContextMenuItemType type, ContextMenuAction act
setSubMenu(subMenu);
}
+ContextMenuItem::ContextMenuItem(ContextMenuItemType, ContextMenuAction, const String&, bool, bool)
+{
+ // FIXME: Implement
+}
+
+ContextMenuItem::ContextMenuItem(ContextMenuAction, const String&, bool, bool, Vector<ContextMenuItem>&)
+{
+ // FIXME: Implement
+}
+
ContextMenuItem::~ContextMenuItem()
{
}
@@ -99,6 +109,11 @@ void ContextMenuItem::setSubMenu(ContextMenu* menu)
m_platformDescription.subMenuItems = *menu->platformDescription();
}
+void ContextMenuItem::setSubMenu(Vector<ContextMenuItem>&)
+{
+ // FIXME: Implement
+}
+
void ContextMenuItem::setChecked(bool on)
{
m_platformDescription.checked = on;
diff --git a/WebCore/platform/qt/ContextMenuQt.cpp b/WebCore/platform/qt/ContextMenuQt.cpp
index 2c1a6cb..e3715c9 100644
--- a/WebCore/platform/qt/ContextMenuQt.cpp
+++ b/WebCore/platform/qt/ContextMenuQt.cpp
@@ -80,5 +80,11 @@ Vector<ContextMenuItem> contextMenuItemVector(PlatformMenuDescription)
return Vector<ContextMenuItem>();
}
+PlatformMenuDescription platformMenuDescription(Vector<ContextMenuItem>& menuItemVector)
+{
+ // FIXME - Implement
+ return 0;
+}
+
}
// vim: ts=4 sw=4 et
diff --git a/WebCore/platform/qt/CookieJarQt.cpp b/WebCore/platform/qt/CookieJarQt.cpp
index 4e1de23..049ee0f 100644
--- a/WebCore/platform/qt/CookieJarQt.cpp
+++ b/WebCore/platform/qt/CookieJarQt.cpp
@@ -39,6 +39,7 @@
#include "FrameLoaderClientQt.h"
#include <QNetworkAccessManager>
#include <QNetworkCookie>
+#include <QStringList>
namespace WebCore {
diff --git a/WebCore/platform/qt/RenderThemeQt.cpp b/WebCore/platform/qt/RenderThemeQt.cpp
index 7ef4ab7..789abb6 100644
--- a/WebCore/platform/qt/RenderThemeQt.cpp
+++ b/WebCore/platform/qt/RenderThemeQt.cpp
@@ -242,9 +242,32 @@ bool RenderThemeQt::supportsHover(const RenderStyle*) const
return true;
}
-bool RenderThemeQt::supportsFocusRing(const RenderStyle*) const
+bool RenderThemeQt::supportsFocusRing(const RenderStyle* style) const
{
- return true; // Qt provides this through the style
+ switch (style->appearance()) {
+ case CheckboxPart:
+ case RadioPart:
+ case PushButtonPart:
+ case SquareButtonPart:
+ case ButtonPart:
+ case ButtonBevelPart:
+ case ListboxPart:
+ case ListItemPart:
+ case MenulistPart:
+ case MenulistButtonPart:
+ case SliderHorizontalPart:
+ case SliderVerticalPart:
+ case SliderThumbHorizontalPart:
+ case SliderThumbVerticalPart:
+ case SearchFieldPart:
+ case SearchFieldResultsButtonPart:
+ case SearchFieldCancelButtonPart:
+ case TextFieldPart:
+ case TextAreaPart:
+ return true;
+ default:
+ return false;
+ }
}
int RenderThemeQt::baselinePosition(const RenderObject* o) const
diff --git a/WebCore/platform/text/BidiResolver.h b/WebCore/platform/text/BidiResolver.h
index a99fd01..1f87115 100644
--- a/WebCore/platform/text/BidiResolver.h
+++ b/WebCore/platform/text/BidiResolver.h
@@ -201,6 +201,7 @@ protected:
private:
void raiseExplicitEmbeddingLevel(WTF::Unicode::Direction from, WTF::Unicode::Direction to);
void lowerExplicitEmbeddingLevel(WTF::Unicode::Direction from);
+ void checkDirectionInLowerRaiseEmbeddingLevel();
Vector<WTF::Unicode::Direction, 8> m_currentExplicitEmbeddingSequence;
};
@@ -308,23 +309,39 @@ void BidiResolver<Iterator, Run>::embed(WTF::Unicode::Direction d)
}
template <class Iterator, class Run>
+void BidiResolver<Iterator, Run>::checkDirectionInLowerRaiseEmbeddingLevel()
+{
+ using namespace WTF::Unicode;
+
+ ASSERT(m_status.eor != OtherNeutral || eor.atEnd());
+ // bidi.sor ... bidi.eor ... bidi.last eor; need to append the bidi.sor-bidi.eor run or extend it through bidi.last
+ // Bidi control characters are included into BidiRun, so last direction
+ // could be one of the bidi embeddings when there are nested embeddings.
+ // For example: "&#x202a;&#x202b;....."
+ ASSERT(m_status.last == EuropeanNumberSeparator
+ || m_status.last == EuropeanNumberTerminator
+ || m_status.last == CommonNumberSeparator
+ || m_status.last == BoundaryNeutral
+ || m_status.last == BlockSeparator
+ || m_status.last == SegmentSeparator
+ || m_status.last == WhiteSpaceNeutral
+ || m_status.last == OtherNeutral
+ || m_status.last == RightToLeftEmbedding
+ || m_status.last == LeftToRightEmbedding
+ || m_status.last == RightToLeftOverride
+ || m_status.last == LeftToRightOverride
+ || m_status.last == PopDirectionalFormat);
+ if (m_direction == OtherNeutral)
+ m_direction = m_status.lastStrong == LeftToRight ? LeftToRight : RightToLeft;
+}
+
+template <class Iterator, class Run>
void BidiResolver<Iterator, Run>::lowerExplicitEmbeddingLevel(WTF::Unicode::Direction from)
{
using namespace WTF::Unicode;
if (!emptyRun && eor != last) {
- ASSERT(m_status.eor != OtherNeutral || eor.atEnd());
- // bidi.sor ... bidi.eor ... bidi.last eor; need to append the bidi.sor-bidi.eor run or extend it through bidi.last
- ASSERT(m_status.last == EuropeanNumberSeparator
- || m_status.last == EuropeanNumberTerminator
- || m_status.last == CommonNumberSeparator
- || m_status.last == BoundaryNeutral
- || m_status.last == BlockSeparator
- || m_status.last == SegmentSeparator
- || m_status.last == WhiteSpaceNeutral
- || m_status.last == OtherNeutral);
- if (m_direction == OtherNeutral)
- m_direction = m_status.lastStrong == LeftToRight ? LeftToRight : RightToLeft;
+ checkDirectionInLowerRaiseEmbeddingLevel();
if (from == LeftToRight) {
// bidi.sor ... bidi.eor ... bidi.last L
if (m_status.eor == EuropeanNumber) {
@@ -359,18 +376,7 @@ void BidiResolver<Iterator, Run>::raiseExplicitEmbeddingLevel(WTF::Unicode::Dire
using namespace WTF::Unicode;
if (!emptyRun && eor != last) {
- ASSERT(m_status.eor != OtherNeutral || eor.atEnd());
- // bidi.sor ... bidi.eor ... bidi.last eor; need to append the bidi.sor-bidi.eor run or extend it through bidi.last
- ASSERT(m_status.last == EuropeanNumberSeparator
- || m_status.last == EuropeanNumberTerminator
- || m_status.last == CommonNumberSeparator
- || m_status.last == BoundaryNeutral
- || m_status.last == BlockSeparator
- || m_status.last == SegmentSeparator
- || m_status.last == WhiteSpaceNeutral
- || m_status.last == OtherNeutral);
- if (m_direction == OtherNeutral)
- m_direction = m_status.lastStrong == LeftToRight ? LeftToRight : RightToLeft;
+ checkDirectionInLowerRaiseEmbeddingLevel();
if (to == LeftToRight) {
// bidi.sor ... bidi.eor ... bidi.last L
if (m_status.eor == EuropeanNumber) {
@@ -568,7 +574,7 @@ void BidiResolver<Iterator, Run>::createBidiRunsForLine(const Iterator& end, boo
commitExplicitEmbedding();
break;
- // strong types
+ // strong types
case LeftToRight:
switch(m_status.last) {
case RightToLeft:
@@ -860,11 +866,6 @@ void BidiResolver<Iterator, Run>::createBidiRunsForLine(const Iterator& end, boo
break;
case NonSpacingMark:
case BoundaryNeutral:
- case RightToLeftEmbedding:
- case LeftToRightEmbedding:
- case RightToLeftOverride:
- case LeftToRightOverride:
- case PopDirectionalFormat:
// ignore these
break;
case EuropeanNumber:
@@ -875,11 +876,7 @@ void BidiResolver<Iterator, Run>::createBidiRunsForLine(const Iterator& end, boo
last = current;
- if (emptyRun && !(dirCurrent == RightToLeftEmbedding
- || dirCurrent == LeftToRightEmbedding
- || dirCurrent == RightToLeftOverride
- || dirCurrent == LeftToRightOverride
- || dirCurrent == PopDirectionalFormat)) {
+ if (emptyRun) {
sor = current;
emptyRun = false;
}
@@ -901,17 +898,6 @@ void BidiResolver<Iterator, Run>::createBidiRunsForLine(const Iterator& end, boo
}
}
- if (emptyRun && (dirCurrent == RightToLeftEmbedding
- || dirCurrent == LeftToRightEmbedding
- || dirCurrent == RightToLeftOverride
- || dirCurrent == LeftToRightOverride
- || dirCurrent == PopDirectionalFormat)) {
- // exclude the embedding char itself from the new run so that ATSUI will never see it
- eor = Iterator();
- last = current;
- sor = current;
- }
-
if (!pastEnd && (current == end || current.atEnd())) {
if (emptyRun)
break;
diff --git a/WebCore/platform/text/TextCodecUTF16.cpp b/WebCore/platform/text/TextCodecUTF16.cpp
index 5c23732..95f4dc4 100644
--- a/WebCore/platform/text/TextCodecUTF16.cpp
+++ b/WebCore/platform/text/TextCodecUTF16.cpp
@@ -31,6 +31,8 @@
#include <wtf/text/StringBuffer.h>
#include <wtf/PassOwnPtr.h>
+using namespace std;
+
namespace WebCore {
void TextCodecUTF16::registerEncodingNames(EncodingNameRegistrar registrar)
@@ -115,23 +117,27 @@ String TextCodecUTF16::decode(const char* bytes, size_t length, bool, bool, bool
CString TextCodecUTF16::encode(const UChar* characters, size_t length, UnencodableHandling)
{
+ if (length > numeric_limits<size_t>::max() / 2)
+ CRASH();
+
char* bytes;
CString string = CString::newUninitialized(length * 2, bytes);
// FIXME: CString is not a reasonable data structure for encoded UTF-16, which will have
- // null characters inside it. Perhaps the result of encode should not be a CString?
- if (m_littleEndian)
+ // null characters inside it. Perhaps the result of encode should not be a CString.
+ if (m_littleEndian) {
for (size_t i = 0; i < length; ++i) {
UChar c = characters[i];
bytes[i * 2] = c;
bytes[i * 2 + 1] = c >> 8;
}
- else
+ } else {
for (size_t i = 0; i < length; ++i) {
UChar c = characters[i];
bytes[i * 2] = c >> 8;
bytes[i * 2 + 1] = c;
}
+ }
return string;
}
diff --git a/WebCore/platform/text/TextStream.cpp b/WebCore/platform/text/TextStream.cpp
index 646de3f..1094fa4 100644
--- a/WebCore/platform/text/TextStream.cpp
+++ b/WebCore/platform/text/TextStream.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2004, 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
@@ -29,6 +29,8 @@
#include "PlatformString.h"
#include <wtf/StringExtras.h>
+using namespace std;
+
namespace WebCore {
static const size_t printBufferSize = 100; // large enough for any integer or floating point value in string format, including trailing null character
@@ -84,6 +86,8 @@ TextStream& TextStream::operator<<(const char* string)
{
size_t stringLength = strlen(string);
size_t textLength = m_text.size();
+ if (stringLength > numeric_limits<size_t>::max() - textLength)
+ CRASH();
m_text.grow(textLength + stringLength);
for (size_t i = 0; i < stringLength; ++i)
m_text[textLength + i] = string[i];
diff --git a/WebCore/platform/text/cf/HyphenationCF.cpp b/WebCore/platform/text/cf/HyphenationCF.cpp
index b265c56..dbc11ae 100644
--- a/WebCore/platform/text/cf/HyphenationCF.cpp
+++ b/WebCore/platform/text/cf/HyphenationCF.cpp
@@ -33,6 +33,38 @@
#include <wtf/ListHashSet.h>
#include <wtf/RetainPtr.h>
+#if PLATFORM(WIN)
+
+#include "SoftLinking.h"
+
+#ifdef DEBUG_ALL
+SOFT_LINK_DEBUG_LIBRARY(CoreFoundation)
+#else
+SOFT_LINK_LIBRARY(CoreFoundation)
+#endif
+
+SOFT_LINK_OPTIONAL(CoreFoundation, CFStringGetHyphenationLocationBeforeIndex, CFIndex, , (CFStringRef string, CFIndex location, CFRange limitRange, CFOptionFlags options, CFLocaleRef locale, UTF32Char *character))
+SOFT_LINK_OPTIONAL(CoreFoundation, CFStringIsHyphenationAvailableForLocale, Boolean, , (CFLocaleRef locale))
+
+static CFIndex wkCFStringGetHyphenationLocationBeforeIndex(CFStringRef string, CFIndex location, CFRange limitRange, CFOptionFlags options, CFLocaleRef locale, UTF32Char *character)
+{
+ static CFStringGetHyphenationLocationBeforeIndexPtrType cfStringGetHyphenationLocationBeforeIndex = CFStringGetHyphenationLocationBeforeIndexPtr();
+ if (!cfStringGetHyphenationLocationBeforeIndex)
+ return kCFNotFound;
+ return cfStringGetHyphenationLocationBeforeIndex(string, location, limitRange, options, locale, character);
+}
+
+static Boolean wkCFStringIsHyphenationAvailableForLocale(CFLocaleRef locale)
+{
+ static CFStringIsHyphenationAvailableForLocalePtrType cfStringIsHyphenationAvailableForLocale = CFStringIsHyphenationAvailableForLocalePtr();
+ return cfStringIsHyphenationAvailableForLocale && cfStringIsHyphenationAvailableForLocale(locale);
+}
+
+#define CFStringGetHyphenationLocationBeforeIndex wkCFStringGetHyphenationLocationBeforeIndex
+#define CFStringIsHyphenationAvailableForLocale wkCFStringIsHyphenationAvailableForLocale
+
+#endif // PLATFORM(WIN)
+
namespace WebCore {
template<>
@@ -65,7 +97,7 @@ bool canHyphenate(const AtomicString& localeIdentifier)
size_t lastHyphenLocation(const UChar* characters, size_t length, size_t beforeIndex, const AtomicString& localeIdentifier)
{
- RetainPtr<CFStringRef> string(AdoptCF, CFStringCreateWithCharactersNoCopy(kCFAllocatorDefault, characters, length, kCFAllocatorNull));
+ RetainPtr<CFStringRef> string(AdoptCF, CFStringCreateWithCharactersNoCopy(kCFAllocatorDefault, reinterpret_cast<const UniChar*>(characters), length, kCFAllocatorNull));
RetainPtr<CFLocaleRef> locale = cfLocaleCache().get(localeIdentifier);
ASSERT(locale);
diff --git a/WebCore/platform/text/mac/TextBreakIteratorInternalICUMac.mm b/WebCore/platform/text/mac/TextBreakIteratorInternalICUMac.mm
index 5da10e0..6af5616 100644
--- a/WebCore/platform/text/mac/TextBreakIteratorInternalICUMac.mm
+++ b/WebCore/platform/text/mac/TextBreakIteratorInternalICUMac.mm
@@ -38,17 +38,15 @@ static inline RetainPtr<CFStringRef> textBreakLocalePreference()
static RetainPtr<CFStringRef> topLanguagePreference()
{
- RetainPtr<CFPropertyListRef> languages(AdoptCF, CFPreferencesCopyValue(CFSTR("AppleLanguages"),
- kCFPreferencesAnyApplication, kCFPreferencesCurrentUser, kCFPreferencesAnyHost));
- if (!languages || CFGetTypeID(languages.get()) != CFArrayGetTypeID())
+ NSArray *languagesArray = [[NSUserDefaults standardUserDefaults] arrayForKey:@"AppleLanguages"];
+ if (!languagesArray)
return 0;
- CFArrayRef languagesArray = static_cast<CFArrayRef>(languages.get());
- if (CFArrayGetCount(languagesArray) < 1)
+ if ([languagesArray count] < 1)
return 0;
- const void* value = CFArrayGetValueAtIndex(languagesArray, 0);
- if (!value || CFGetTypeID(value) != CFStringGetTypeID())
+ NSString *value = [languagesArray objectAtIndex:0];
+ if (![value isKindOfClass:[NSString class]])
return 0;
- return static_cast<CFStringRef>(value);
+ return reinterpret_cast<CFStringRef>(value);
}
static RetainPtr<CFStringRef> canonicalLanguageIdentifier(CFStringRef locale)
diff --git a/WebCore/platform/win/ContextMenuItemWin.cpp b/WebCore/platform/win/ContextMenuItemWin.cpp
index d2ce76d..8d1c175 100644
--- a/WebCore/platform/win/ContextMenuItemWin.cpp
+++ b/WebCore/platform/win/ContextMenuItemWin.cpp
@@ -95,6 +95,16 @@ ContextMenuItem::ContextMenuItem(ContextMenuItemType type, ContextMenuAction act
m_platformDescription->dwTypeData = wcsdup(t.charactersWithNullTermination());
}
+ContextMenuItem::ContextMenuItem(ContextMenuItemType, ContextMenuAction, const String&, bool, bool)
+{
+ // FIXME: Implement
+}
+
+ContextMenuItem::ContextMenuItem(ContextMenuAction, const String&, bool, bool, Vector<ContextMenuItem>&)
+{
+ // FIXME: Implement
+}
+
ContextMenuItem::~ContextMenuItem()
{
if (m_platformDescription) {
@@ -172,6 +182,11 @@ void ContextMenuItem::setSubMenu(ContextMenu* subMenu)
m_platformDescription->hSubMenu = subMenu->releasePlatformDescription();
}
+void ContextMenuItem::setSubMenu(Vector<ContextMenuItem>&)
+{
+ // FIXME: Implement
+}
+
void ContextMenuItem::setChecked(bool checked)
{
m_platformDescription->fMask |= MIIM_STATE;
diff --git a/WebCore/platform/win/ContextMenuWin.cpp b/WebCore/platform/win/ContextMenuWin.cpp
index 82511e4..ad53f7e 100644
--- a/WebCore/platform/win/ContextMenuWin.cpp
+++ b/WebCore/platform/win/ContextMenuWin.cpp
@@ -161,4 +161,10 @@ Vector<ContextMenuItem> contextMenuItemVector(PlatformMenuDescription)
return Vector<ContextMenuItem>();
}
+PlatformMenuDescription platformMenuDescription(Vector<ContextMenuItem>& menuItemVector)
+{
+ // FIXME - Implement
+ return 0;
+}
+
}
diff --git a/WebCore/platform/win/EditorWin.cpp b/WebCore/platform/win/EditorWin.cpp
index 4965c97..f9505b3 100644
--- a/WebCore/platform/win/EditorWin.cpp
+++ b/WebCore/platform/win/EditorWin.cpp
@@ -42,8 +42,10 @@ namespace WebCore {
PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame* frame)
{
COMPtr<IDataObject> clipboardData;
+#if !OS(WINCE)
if (!SUCCEEDED(OleGetClipboard(&clipboardData)))
clipboardData = 0;
+#endif
return ClipboardWin::create(Clipboard::CopyAndPaste, clipboardData.get(), policy, frame);
}
diff --git a/WebCore/platform/wince/EditorWinCE.cpp b/WebCore/platform/wince/EditorWinCE.cpp
deleted file mode 100644
index eb0ecb4..0000000
--- a/WebCore/platform/wince/EditorWinCE.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2007-2008 Torch Mobile, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- *
- */
-
-#include "config.h"
-
-#include "Editor.h"
-
-#include "ClipboardWinCE.h"
-#include "Document.h"
-#include "EditorClient.h"
-#include "Element.h"
-#include "HtmlEditing.h"
-#include "TextIterator.h"
-#include "visible_units.h"
-
-#include <windows.h>
-#define _SYS_GUID_OPERATORS_
-
-namespace WebCore {
-
-PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame*)
-{
- return adoptRef(new ClipboardWinCE(policy, false));
-}
-
-} // namespace WebCore
diff --git a/WebCore/platform/wx/LocalizedStringsWx.cpp b/WebCore/platform/wx/LocalizedStringsWx.cpp
index 10ea435..1b46643 100644
--- a/WebCore/platform/wx/LocalizedStringsWx.cpp
+++ b/WebCore/platform/wx/LocalizedStringsWx.cpp
@@ -396,31 +396,49 @@ String validationMessageTypeMismatchText()
return String();
}
+String validationMessageTypeMismatchForEmailText()
+{
+ notImplemented();
+ return validationMessageTypeMismatchText();
+}
+
+String validationMessageTypeMismatchForMultipleEmailText()
+{
+ notImplemented();
+ return validationMessageTypeMismatchText();
+}
+
+String validationMessageTypeMismatchForURLText()
+{
+ notImplemented();
+ return validationMessageTypeMismatchText();
+}
+
String validationMessagePatternMismatchText()
{
notImplemented();
return String();
}
-String validationMessageTooLongText()
+String validationMessageTooLongText(int, int)
{
notImplemented();
return String();
}
-String validationMessageRangeUnderflowText()
+String validationMessageRangeUnderflowText(const String&)
{
notImplemented();
return String();
}
-String validationMessageRangeOverflowText()
+String validationMessageRangeOverflowText(const String&)
{
notImplemented();
return String();
}
-String validationMessageStepMismatchText()
+String validationMessageStepMismatchText(const String&, const String&)
{
notImplemented();
return String();
diff --git a/WebCore/plugins/PluginStream.cpp b/WebCore/plugins/PluginStream.cpp
index 4d73789..f9021a8 100644
--- a/WebCore/plugins/PluginStream.cpp
+++ b/WebCore/plugins/PluginStream.cpp
@@ -31,6 +31,7 @@
#include "Frame.h"
#include "FrameLoader.h"
#include "PluginDebug.h"
+#include "ResourceLoadScheduler.h"
#include "SharedBuffer.h"
#include "SubresourceLoader.h"
#include <StringExtras.h>
@@ -93,12 +94,7 @@ PluginStream::~PluginStream()
void PluginStream::start()
{
ASSERT(!m_loadManually);
-
- m_loader = NetscapePlugInStreamLoader::create(m_frame, this);
-
- m_loader->setShouldBufferData(false);
- m_loader->documentLoader()->addPlugInStreamLoader(m_loader.get());
- m_loader->load(m_resourceRequest);
+ m_loader = resourceLoadScheduler()->schedulePluginStreamLoad(m_frame, this, m_resourceRequest);
}
void PluginStream::stop()
diff --git a/WebCore/rendering/InlineBox.cpp b/WebCore/rendering/InlineBox.cpp
index b8f0ce1..145096b 100644
--- a/WebCore/rendering/InlineBox.cpp
+++ b/WebCore/rendering/InlineBox.cpp
@@ -164,22 +164,26 @@ void InlineBox::paint(PaintInfo& paintInfo, int tx, int ty)
if (!paintInfo.shouldPaintWithinRoot(renderer()) || (paintInfo.phase != PaintPhaseForeground && paintInfo.phase != PaintPhaseSelection))
return;
+ IntPoint childPoint = IntPoint(tx, ty);
+ if (parent()->renderer()->style()->isFlippedBlocksWritingMode()) // Faster than calling containingBlock().
+ childPoint = renderer()->containingBlock()->flipForWritingMode(toRenderBox(renderer()), childPoint, RenderBox::ParentToChildFlippingAdjustment);
+
// Paint all phases of replaced elements atomically, as though the replaced element established its
// own stacking context. (See Appendix E.2, section 6.4 on inline block/table elements in the CSS2.1
// specification.)
bool preservePhase = paintInfo.phase == PaintPhaseSelection || paintInfo.phase == PaintPhaseTextClip;
PaintInfo info(paintInfo);
info.phase = preservePhase ? paintInfo.phase : PaintPhaseBlockBackground;
- renderer()->paint(info, tx, ty);
+ renderer()->paint(info, childPoint.x(), childPoint.y());
if (!preservePhase) {
info.phase = PaintPhaseChildBlockBackgrounds;
- renderer()->paint(info, tx, ty);
+ renderer()->paint(info, childPoint.x(), childPoint.y());
info.phase = PaintPhaseFloat;
- renderer()->paint(info, tx, ty);
+ renderer()->paint(info, childPoint.x(), childPoint.y());
info.phase = PaintPhaseForeground;
- renderer()->paint(info, tx, ty);
+ renderer()->paint(info, childPoint.x(), childPoint.y());
info.phase = PaintPhaseOutline;
- renderer()->paint(info, tx, ty);
+ renderer()->paint(info, childPoint.x(), childPoint.y());
}
}
diff --git a/WebCore/rendering/InlineBox.h b/WebCore/rendering/InlineBox.h
index 72e5534..c5f1997 100644
--- a/WebCore/rendering/InlineBox.h
+++ b/WebCore/rendering/InlineBox.h
@@ -113,6 +113,13 @@ public:
virtual bool isLineBreak() const { return false; }
virtual void adjustPosition(int dx, int dy);
+ void adjustLineDirectionPosition(int delta)
+ {
+ if (isHorizontal())
+ adjustPosition(delta, 0);
+ else
+ adjustPosition(0, delta);
+ }
virtual void paint(PaintInfo&, int tx, int ty);
virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, int x, int y, int tx, int ty);
@@ -248,7 +255,7 @@ public:
// The logical height is our extent in the block flow direction, i.e., height for horizontal text and width for vertical text.
int logicalHeight() const;
- virtual int baselinePosition() const { return boxModelObject()->baselinePosition(m_firstLine, isHorizontal() ? HorizontalLine : VerticalLine, PositionOnContainingLine); }
+ virtual int baselinePosition(FontBaseline baselineType) const { return boxModelObject()->baselinePosition(baselineType, m_firstLine, isHorizontal() ? HorizontalLine : VerticalLine, PositionOnContainingLine); }
virtual int lineHeight() const { return boxModelObject()->lineHeight(m_firstLine, isHorizontal() ? HorizontalLine : VerticalLine, PositionOnContainingLine); }
diff --git a/WebCore/rendering/InlineFlowBox.cpp b/WebCore/rendering/InlineFlowBox.cpp
index 8525673..e67c751 100644
--- a/WebCore/rendering/InlineFlowBox.cpp
+++ b/WebCore/rendering/InlineFlowBox.cpp
@@ -35,6 +35,7 @@
#include "RenderTableCell.h"
#include "RootInlineBox.h"
#include "Text.h"
+#include "VerticalPositionCache.h"
#include <math.h>
@@ -359,6 +360,43 @@ int InlineFlowBox::placeBoxesInInlineDirection(int logicalLeft, bool& needsWordS
return logicalLeft;
}
+bool InlineFlowBox::requiresIdeographicBaseline(const GlyphOverflowAndFallbackFontsMap& textBoxDataMap) const
+{
+ if (isHorizontal())
+ return false;
+
+ if (renderer()->style(m_firstLine)->font().primaryFont()->orientation() == Vertical)
+ return true;
+
+ for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) {
+ if (curr->renderer()->isPositioned())
+ continue; // Positioned placeholders don't affect calculations.
+
+ if (curr->isInlineFlowBox()) {
+ if (static_cast<InlineFlowBox*>(curr)->requiresIdeographicBaseline(textBoxDataMap))
+ return true;
+ } else {
+ if (curr->renderer()->style(m_firstLine)->font().primaryFont()->orientation() == Vertical)
+ return true;
+
+ const Vector<const SimpleFontData*>* usedFonts = 0;
+ if (curr->isInlineTextBox()) {
+ GlyphOverflowAndFallbackFontsMap::const_iterator it = textBoxDataMap.find(static_cast<InlineTextBox*>(curr));
+ usedFonts = it == textBoxDataMap.end() ? 0 : &it->second.first;
+ }
+
+ if (usedFonts) {
+ for (size_t i = 0; i < usedFonts->size(); ++i) {
+ if (usedFonts->at(i)->orientation() == Vertical)
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
void InlineFlowBox::adjustMaxAscentAndDescent(int& maxAscent, int& maxDescent,
int maxPositionTop, int maxPositionBottom)
{
@@ -387,29 +425,102 @@ void InlineFlowBox::adjustMaxAscentAndDescent(int& maxAscent, int& maxDescent,
}
}
-static int verticalPositionForBox(InlineBox* curr, bool firstLine)
+static int verticalPositionForBox(InlineBox* box, FontBaseline baselineType, bool firstLine, VerticalPositionCache& verticalPositionCache)
{
- if (curr->renderer()->isText())
- return curr->parent()->logicalTop();
- if (curr->renderer()->isBox())
- return toRenderBox(curr->renderer())->verticalPosition(firstLine);
- return toRenderInline(curr->renderer())->verticalPositionFromCache(firstLine);
+ if (box->renderer()->isText())
+ return box->parent()->logicalTop();
+
+ RenderBoxModelObject* renderer = box->boxModelObject();
+ ASSERT(renderer->isInline());
+ if (!renderer->isInline())
+ return 0;
+
+ // This method determines the vertical position for inline elements.
+ if (firstLine && !renderer->document()->usesFirstLineRules())
+ firstLine = false;
+
+ // Check the cache.
+ bool isRenderInline = renderer->isRenderInline();
+ if (isRenderInline && !firstLine) {
+ int verticalPosition = verticalPositionCache.get(renderer, baselineType);
+ if (verticalPosition != PositionUndefined)
+ return verticalPosition;
+ }
+
+ int verticalPosition = 0;
+ EVerticalAlign verticalAlign = renderer->style()->verticalAlign();
+ if (verticalAlign == TOP)
+ verticalPosition = PositionTop;
+ else if (verticalAlign == BOTTOM)
+ verticalPosition = PositionBottom;
+ else {
+ RenderObject* parent = renderer->parent();
+ if (parent->isRenderInline() && parent->style()->verticalAlign() != TOP && parent->style()->verticalAlign() != BOTTOM)
+ verticalPosition = box->parent()->logicalTop();
+
+ if (verticalAlign != BASELINE) {
+ const Font& font = parent->style(firstLine)->font();
+ int fontSize = font.pixelSize();
+
+ LineDirectionMode lineDirection = parent->style()->isHorizontalWritingMode() ? HorizontalLine : VerticalLine;
+
+ if (verticalAlign == SUB)
+ verticalPosition += fontSize / 5 + 1;
+ else if (verticalAlign == SUPER)
+ verticalPosition -= fontSize / 3 + 1;
+ else if (verticalAlign == TEXT_TOP)
+ verticalPosition += renderer->baselinePosition(baselineType, firstLine, lineDirection) - font.ascent(baselineType);
+ else if (verticalAlign == MIDDLE)
+ verticalPosition += -static_cast<int>(font.xHeight() / 2) - renderer->lineHeight(firstLine, lineDirection) / 2 + renderer->baselinePosition(baselineType, firstLine, lineDirection);
+ else if (verticalAlign == TEXT_BOTTOM) {
+ verticalPosition += font.descent(baselineType);
+ // lineHeight - baselinePosition is always 0 for replaced elements (except inline blocks), so don't bother wasting time in that case.
+ if (!renderer->isReplaced() || renderer->isInlineBlockOrInlineTable())
+ verticalPosition -= (renderer->lineHeight(firstLine, lineDirection) - renderer->baselinePosition(baselineType, firstLine, lineDirection));
+ } else if (verticalAlign == BASELINE_MIDDLE)
+ verticalPosition += -renderer->lineHeight(firstLine, lineDirection) / 2 + renderer->baselinePosition(baselineType, firstLine, lineDirection);
+ else if (verticalAlign == LENGTH)
+ verticalPosition -= renderer->style()->verticalAlignLength().calcValue(renderer->lineHeight(firstLine, lineDirection));
+ }
+ }
+
+ // Store the cached value.
+ if (isRenderInline && !firstLine)
+ verticalPositionCache.set(renderer, baselineType, verticalPosition);
+
+ return verticalPosition;
}
void InlineFlowBox::computeLogicalBoxHeights(int& maxPositionTop, int& maxPositionBottom,
- int& maxAscent, int& maxDescent, bool strictMode, GlyphOverflowAndFallbackFontsMap& textBoxDataMap)
+ int& maxAscent, int& maxDescent, bool& setMaxAscent, bool& setMaxDescent,
+ bool strictMode, GlyphOverflowAndFallbackFontsMap& textBoxDataMap,
+ FontBaseline baselineType, VerticalPositionCache& verticalPositionCache)
{
+ // The primary purpose of this function is to compute the maximal ascent and descent values for
+ // a line.
+ //
+ // The maxAscent value represents the distance of the highest point of any box (including line-height) from
+ // the root box's baseline. The maxDescent value represents the distance of the lowest point of any box
+ // (also including line-height) from the root box baseline. These values can be negative.
+ //
+ // A secondary purpose of this function is to store the offset of very box's baseline from the root box's
+ // baseline. This information is cached in the logicalTop() of every box. We're effectively just using
+ // the logicalTop() as scratch space.
if (isRootInlineBox()) {
// Examine our root box.
int height = lineHeight();
- int baseline = baselinePosition();
+ int baseline = baselinePosition(baselineType);
if (hasTextChildren() || strictMode) {
int ascent = baseline;
int descent = height - ascent;
- if (maxAscent < ascent)
+ if (maxAscent < ascent || !setMaxAscent) {
maxAscent = ascent;
- if (maxDescent < descent)
+ setMaxAscent = true;
+ }
+ if (maxDescent < descent || !setMaxDescent) {
maxDescent = descent;
+ setMaxDescent = true;
+ }
}
}
@@ -418,7 +529,18 @@ void InlineFlowBox::computeLogicalBoxHeights(int& maxPositionTop, int& maxPositi
continue; // Positioned placeholders don't affect calculations.
bool isInlineFlow = curr->isInlineFlowBox();
-
+
+ // Because a box can be positioned such that it ends up fully above or fully below the
+ // root line box, we only consider it to affect the maxAscent and maxDescent values if some
+ // part of the box (EXCLUDING line-height) is above (for ascent) or below (for descent) the root box's baseline.
+ bool affectsAscent = false;
+ bool affectsDescent = false;
+
+ // The verticalPositionForBox function returns the distance between the child box's baseline
+ // and the root box's baseline. The value is negative if the child box's baseline is above the
+ // root box's baseline, and it is positive if the child box's baseline is below the root box's baseline.
+ curr->setLogicalTop(verticalPositionForBox(curr, baselineType, m_firstLine, verticalPositionCache));
+
int lineHeight;
int baseline;
Vector<const SimpleFontData*>* usedFonts = 0;
@@ -427,39 +549,45 @@ void InlineFlowBox::computeLogicalBoxHeights(int& maxPositionTop, int& maxPositi
usedFonts = it == textBoxDataMap.end() ? 0 : &it->second.first;
}
- if (usedFonts) {
+ if (usedFonts && curr->renderer()->style(m_firstLine)->lineHeight().isNegative()) {
usedFonts->append(curr->renderer()->style(m_firstLine)->font().primaryFont());
Length parentLineHeight = curr->renderer()->parent()->style()->lineHeight();
- if (parentLineHeight.isNegative()) {
- int baselineToBottom = 0;
- baseline = 0;
- for (size_t i = 0; i < usedFonts->size(); ++i) {
- int halfLeading = (usedFonts->at(i)->lineSpacing() - usedFonts->at(i)->ascent() - usedFonts->at(i)->descent()) / 2;
- baseline = max(baseline, halfLeading + usedFonts->at(i)->ascent());
- baselineToBottom = max(baselineToBottom, usedFonts->at(i)->lineSpacing() - usedFonts->at(i)->ascent() - usedFonts->at(i)->descent() - halfLeading);
- }
- lineHeight = baseline + baselineToBottom;
- } else if (parentLineHeight.isPercent()) {
- lineHeight = parentLineHeight.calcMinValue(curr->renderer()->style()->fontSize());
- baseline = 0;
- for (size_t i = 0; i < usedFonts->size(); ++i) {
- int halfLeading = (lineHeight - usedFonts->at(i)->ascent() - usedFonts->at(i)->descent()) / 2;
- baseline = max(baseline, halfLeading + usedFonts->at(i)->ascent());
- }
- } else {
- lineHeight = parentLineHeight.value();
- baseline = 0;
- for (size_t i = 0; i < usedFonts->size(); ++i) {
- int halfLeading = (lineHeight - usedFonts->at(i)->ascent() - usedFonts->at(i)->descent()) / 2;
- baseline = max(baseline, halfLeading + usedFonts->at(i)->ascent());
+ bool baselineSet = false;
+ baseline = 0;
+ int baselineToBottom = 0;
+ for (size_t i = 0; i < usedFonts->size(); ++i) {
+ int halfLeading = (usedFonts->at(i)->lineSpacing() - usedFonts->at(i)->height()) / 2;
+ int usedFontAscent = halfLeading + usedFonts->at(i)->ascent(baselineType);
+ int usedFontDescent = usedFonts->at(i)->lineSpacing() - usedFontAscent;
+ if (!baselineSet) {
+ baselineSet = true;
+ baseline = usedFontAscent;
+ baselineToBottom = usedFontDescent;
+ } else {
+ baseline = max(baseline, usedFontAscent);
+ baselineToBottom = max(baselineToBottom, usedFontDescent);
}
}
+ lineHeight = baseline + baselineToBottom;
} else {
lineHeight = curr->lineHeight();
- baseline = curr->baselinePosition();
+ baseline = curr->baselinePosition(baselineType);
+ if (curr->isText() || isInlineFlow) {
+ // Examine the font box for inline flows and text boxes to see if any part of it is above the baseline.
+ // If the top of our font box relative to the root box baseline is above the root box baseline, then
+ // we are contributing to the maxAscent value.
+ affectsAscent = curr->renderer()->style(m_firstLine)->font().ascent(baselineType) - curr->logicalTop() > 0;
+
+ // Descent is similar. If any part of our font box is below the root box's baseline, then
+ // we contribute to the maxDescent value.
+ affectsDescent = curr->renderer()->style(m_firstLine)->font().descent(baselineType) + curr->logicalTop() > 0;
+ } else {
+ // Replaced elements always affect both the ascent and descent.
+ affectsAscent = true;
+ affectsDescent = true;
+ }
}
- curr->setLogicalTop(verticalPositionForBox(curr, m_firstLine));
if (curr->logicalTop() == PositionTop) {
if (maxPositionTop < lineHeight)
maxPositionTop = lineHeight;
@@ -467,23 +595,35 @@ void InlineFlowBox::computeLogicalBoxHeights(int& maxPositionTop, int& maxPositi
if (maxPositionBottom < lineHeight)
maxPositionBottom = lineHeight;
} else if ((!isInlineFlow || static_cast<InlineFlowBox*>(curr)->hasTextChildren()) || curr->boxModelObject()->hasInlineDirectionBordersOrPadding() || strictMode) {
+ // Note that these values can be negative. Even though we only affect the maxAscent and maxDescent values
+ // if our box (excluding line-height) was above (for ascent) or below (for descent) the root baseline, once you factor in line-height
+ // the final box can end up being fully above or fully below the root box's baseline! This is ok, but what it
+ // means is that ascent and descent (including leading), can end up being negative. The setMaxAscent and
+ // setMaxDescent booleans are used to ensure that we're willing to initially set maxAscent/Descent to negative
+ // values.
int ascent = baseline - curr->logicalTop();
int descent = lineHeight - ascent;
- if (maxAscent < ascent)
+ if (affectsAscent && (maxAscent < ascent || !setMaxAscent)) {
maxAscent = ascent;
- if (maxDescent < descent)
+ setMaxAscent = true;
+ }
+ if (affectsDescent && (maxDescent < descent || !setMaxDescent)) {
maxDescent = descent;
+ setMaxDescent = true;
+ }
}
if (curr->isInlineFlowBox())
- static_cast<InlineFlowBox*>(curr)->computeLogicalBoxHeights(maxPositionTop, maxPositionBottom, maxAscent, maxDescent, strictMode, textBoxDataMap);
+ static_cast<InlineFlowBox*>(curr)->computeLogicalBoxHeights(maxPositionTop, maxPositionBottom, maxAscent, maxDescent,
+ setMaxAscent, setMaxDescent, strictMode, textBoxDataMap,
+ baselineType, verticalPositionCache);
}
}
-void InlineFlowBox::placeBoxesInBlockDirection(int top, int maxHeight, int maxAscent, bool strictMode, int& lineTop, int& lineBottom, bool& setLineTop)
+void InlineFlowBox::placeBoxesInBlockDirection(int top, int maxHeight, int maxAscent, bool strictMode, int& lineTop, int& lineBottom, bool& setLineTop, FontBaseline baselineType)
{
if (isRootInlineBox())
- setLogicalTop(top + maxAscent - baselinePosition()); // Place our root box.
+ setLogicalTop(top + maxAscent - baselinePosition(baselineType)); // Place our root box.
for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) {
if (curr->renderer()->isPositioned())
@@ -493,7 +633,7 @@ void InlineFlowBox::placeBoxesInBlockDirection(int top, int maxHeight, int maxAs
// line-height).
bool isInlineFlow = curr->isInlineFlowBox();
if (isInlineFlow)
- static_cast<InlineFlowBox*>(curr)->placeBoxesInBlockDirection(top, maxHeight, maxAscent, strictMode, lineTop, lineBottom, setLineTop);
+ static_cast<InlineFlowBox*>(curr)->placeBoxesInBlockDirection(top, maxHeight, maxAscent, strictMode, lineTop, lineBottom, setLineTop, baselineType);
bool childAffectsTopBottomPos = true;
if (curr->logicalTop() == PositionTop)
@@ -503,14 +643,14 @@ void InlineFlowBox::placeBoxesInBlockDirection(int top, int maxHeight, int maxAs
else {
if ((isInlineFlow && !static_cast<InlineFlowBox*>(curr)->hasTextChildren()) && !curr->boxModelObject()->hasInlineDirectionBordersOrPadding() && !strictMode)
childAffectsTopBottomPos = false;
- int posAdjust = maxAscent - curr->baselinePosition();
+ int posAdjust = maxAscent - curr->baselinePosition(baselineType);
curr->setLogicalTop(curr->logicalTop() + top + posAdjust);
}
int newLogicalTop = curr->logicalTop();
if (curr->isText() || curr->isInlineFlowBox()) {
const Font& font = curr->renderer()->style(m_firstLine)->font();
- newLogicalTop += curr->baselinePosition() - font.ascent();
+ newLogicalTop += curr->baselinePosition(baselineType) - font.ascent(baselineType);
if (curr->isInlineFlowBox()) {
RenderBoxModelObject* boxObject = toRenderBoxModelObject(curr->renderer());
newLogicalTop -= boxObject->style(m_firstLine)->isHorizontalWritingMode() ? boxObject->borderTop() + boxObject->paddingTop() :
@@ -536,7 +676,7 @@ void InlineFlowBox::placeBoxesInBlockDirection(int top, int maxHeight, int maxAs
if (isRootInlineBox()) {
const Font& font = renderer()->style(m_firstLine)->font();
- setLogicalTop(logicalTop() + baselinePosition() - font.ascent());
+ setLogicalTop(logicalTop() + baselinePosition(baselineType) - font.ascent(baselineType));
if (hasTextChildren() || strictMode) {
if (!setLineTop) {
diff --git a/WebCore/rendering/InlineFlowBox.h b/WebCore/rendering/InlineFlowBox.h
index be6dfd2..e3127af 100644
--- a/WebCore/rendering/InlineFlowBox.h
+++ b/WebCore/rendering/InlineFlowBox.h
@@ -30,6 +30,7 @@ class HitTestRequest;
class HitTestResult;
class InlineTextBox;
class RenderLineBoxList;
+class VerticalPositionCache;
typedef HashMap<const InlineTextBox*, pair<Vector<const SimpleFontData*>, GlyphOverflow> > GlyphOverflowAndFallbackFontsMap;
@@ -155,13 +156,15 @@ public:
bool onEndChain(RenderObject* endObject);
int placeBoxesInInlineDirection(int logicalLeft, bool& needsWordSpacing, GlyphOverflowAndFallbackFontsMap&);
void computeLogicalBoxHeights(int& maxPositionTop, int& maxPositionBottom,
- int& maxAscent, int& maxDescent, bool strictMode, GlyphOverflowAndFallbackFontsMap&);
+ int& maxAscent, int& maxDescent, bool& setMaxAscent, bool& setMaxDescent,
+ bool strictMode, GlyphOverflowAndFallbackFontsMap&, FontBaseline, VerticalPositionCache&);
void adjustMaxAscentAndDescent(int& maxAscent, int& maxDescent,
int maxPositionTop, int maxPositionBottom);
- void placeBoxesInBlockDirection(int logicalTop, int maxHeight, int maxAscent, bool strictMode, int& lineTop, int& lineBottom, bool& setLineTop);
+ void placeBoxesInBlockDirection(int logicalTop, int maxHeight, int maxAscent, bool strictMode, int& lineTop, int& lineBottom, bool& setLineTop, FontBaseline);
void flipLinesInBlockDirection(int lineTop, int lineBottom);
void computeBlockDirectionOverflow(int lineTop, int lineBottom, bool strictMode, GlyphOverflowAndFallbackFontsMap&);
-
+ bool requiresIdeographicBaseline(const GlyphOverflowAndFallbackFontsMap&) const;
+
void removeChild(InlineBox* child);
virtual RenderObject::SelectionState selectionState();
diff --git a/WebCore/rendering/InlineTextBox.cpp b/WebCore/rendering/InlineTextBox.cpp
index 9c96cc6..575bdf2 100644
--- a/WebCore/rendering/InlineTextBox.cpp
+++ b/WebCore/rendering/InlineTextBox.cpp
@@ -43,11 +43,11 @@ using namespace std;
namespace WebCore {
-int InlineTextBox::baselinePosition() const
+int InlineTextBox::baselinePosition(FontBaseline baselineType) const
{
if (!isText() || !parent())
return 0;
- return parent()->baselinePosition();
+ return parent()->baselinePosition(baselineType);
}
int InlineTextBox::lineHeight() const
@@ -171,9 +171,7 @@ IntRect InlineTextBox::selectionRect(int tx, int ty, int startPos, int endPos)
int width = isHorizontal() ? logicalWidth : selHeight;
int height = isHorizontal() ? selHeight : logicalWidth;
- IntRect result = IntRect(topPoint, IntSize(width, height));
- flipForWritingMode(result);
- return result;
+ return IntRect(topPoint, IntSize(width, height));
}
void InlineTextBox::deleteLine(RenderArena* arena)
diff --git a/WebCore/rendering/InlineTextBox.h b/WebCore/rendering/InlineTextBox.h
index e72d625..bc2219b 100644
--- a/WebCore/rendering/InlineTextBox.h
+++ b/WebCore/rendering/InlineTextBox.h
@@ -70,7 +70,7 @@ public:
static inline bool compareByStart(const InlineTextBox* first, const InlineTextBox* second) { return first->start() < second->start(); }
- virtual int baselinePosition() const;
+ virtual int baselinePosition(FontBaseline) const;
virtual int lineHeight() const;
private:
diff --git a/WebCore/rendering/MediaControlElements.cpp b/WebCore/rendering/MediaControlElements.cpp
index adaac03..1af1b80 100644
--- a/WebCore/rendering/MediaControlElements.cpp
+++ b/WebCore/rendering/MediaControlElements.cpp
@@ -166,7 +166,7 @@ bool MediaControlElement::rendererIsNeeded(RenderStyle* style)
{
ASSERT(document()->page());
- return HTMLDivElement::rendererIsNeeded(style) && parent() && parent()->renderer()
+ return HTMLDivElement::rendererIsNeeded(style) && parentNode() && parentNode()->renderer()
&& (!style->hasAppearance() || document()->page()->theme()->shouldRenderMediaControlPart(style->appearance(), m_mediaElement));
}
@@ -183,12 +183,12 @@ void MediaControlElement::attach()
return;
renderer->setStyle(style.get());
setRenderer(renderer);
- if (parent() && parent()->renderer()) {
+ if (parentNode() && parentNode()->renderer()) {
// Find next sibling with a renderer to determine where to insert.
Node* sibling = nextSibling();
while (sibling && !sibling->renderer())
sibling = sibling->nextSibling();
- parent()->renderer()->addChild(renderer, sibling ? sibling->renderer() : 0);
+ parentNode()->renderer()->addChild(renderer, sibling ? sibling->renderer() : 0);
}
ContainerNode::attach();
}
@@ -202,7 +202,7 @@ void MediaControlElement::updateStyle()
if (!style)
return;
- bool needsRenderer = rendererIsNeeded(style.get()) && parent() && parent()->renderer();
+ bool needsRenderer = rendererIsNeeded(style.get()) && parentNode() && parentNode()->renderer();
if (renderer() && !needsRenderer)
detach();
else if (!renderer() && needsRenderer)
@@ -416,7 +416,7 @@ bool MediaControlInputElement::rendererIsNeeded(RenderStyle* style)
{
ASSERT(document()->page());
- return HTMLInputElement::rendererIsNeeded(style) && parent() && parent()->renderer()
+ return HTMLInputElement::rendererIsNeeded(style) && parentNode() && parentNode()->renderer()
&& (!style->hasAppearance() || document()->page()->theme()->shouldRenderMediaControlPart(style->appearance(), mediaElement()));
}
@@ -434,12 +434,12 @@ void MediaControlInputElement::attach()
return;
renderer->setStyle(style.get());
setRenderer(renderer);
- if (parent() && parent()->renderer()) {
+ if (parentNode() && parentNode()->renderer()) {
// Find next sibling with a renderer to determine where to insert.
Node* sibling = nextSibling();
while (sibling && !sibling->renderer())
sibling = sibling->nextSibling();
- parent()->renderer()->addChild(renderer, sibling ? sibling->renderer() : 0);
+ parentNode()->renderer()->addChild(renderer, sibling ? sibling->renderer() : 0);
}
ContainerNode::attach();
}
@@ -453,7 +453,7 @@ void MediaControlInputElement::updateStyle()
if (!style)
return;
- bool needsRenderer = rendererIsNeeded(style.get()) && parent() && parent()->renderer();
+ bool needsRenderer = rendererIsNeeded(style.get()) && parentNode() && parentNode()->renderer();
if (renderer() && !needsRenderer)
detach();
else if (!renderer() && needsRenderer)
diff --git a/WebCore/rendering/RenderBlock.cpp b/WebCore/rendering/RenderBlock.cpp
index a43fea9..aadc1d4 100644
--- a/WebCore/rendering/RenderBlock.cpp
+++ b/WebCore/rendering/RenderBlock.cpp
@@ -931,11 +931,9 @@ static bool canMergeContiguousAnonymousBlocks(RenderObject* oldChild, RenderObje
if (prev && prev->firstChild() && prev->firstChild()->isInline() && prev->firstChild()->isRunIn())
return false;
-#if ENABLE(RUBY)
if ((prev && (prev->isRubyRun() || prev->isRubyBase()))
|| (next && (next->isRubyRun() || next->isRubyBase())))
return false;
-#endif
if (!prev || !next)
return true;
@@ -1164,7 +1162,7 @@ void RenderBlock::layoutBlock(bool relayoutChildren, int pageHeight)
colInfo->clearForcedBreaks();
}
- LayoutStateMaintainer statePusher(view(), this, IntSize(x(), y()), hasColumns() || hasTransform() || hasReflection(), pageHeight, pageHeightChanged, colInfo);
+ LayoutStateMaintainer statePusher(view(), this, IntSize(x(), y()), hasColumns() || hasTransform() || hasReflection() || style()->isFlippedBlocksWritingMode(), pageHeight, pageHeightChanged, colInfo);
// We use four values, maxTopPos, maxTopNeg, maxBottomPos, and maxBottomNeg, to track
// our current maximal positive and negative margins. These values are used when we
@@ -1997,7 +1995,7 @@ bool RenderBlock::layoutOnlyPositionedObjects()
if (!posChildNeedsLayout() || normalChildNeedsLayout() || selfNeedsLayout())
return false;
- LayoutStateMaintainer statePusher(view(), this, IntSize(x(), y()), hasColumns() || hasTransform() || hasReflection());
+ LayoutStateMaintainer statePusher(view(), this, IntSize(x(), y()), hasColumns() || hasTransform() || hasReflection() || style()->isFlippedBlocksWritingMode());
if (needsPositionedMovementLayout()) {
tryLayoutDoingPositionedMovementOnly();
@@ -2583,8 +2581,9 @@ void RenderBlock::paintSelection(PaintInfo& paintInfo, int tx, int ty)
if (RenderLayer* layer = enclosingLayer()) {
gapRectsBounds.move(IntSize(-tx, -ty));
if (!hasLayer()) {
- FloatRect localBounds(gapRectsBounds);
- gapRectsBounds = localToContainerQuad(localBounds, layer->renderer()).enclosingBoundingBox();
+ IntRect localBounds(gapRectsBounds);
+ flipForWritingMode(localBounds);
+ gapRectsBounds = localToContainerQuad(FloatRect(localBounds), layer->renderer()).enclosingBoundingBox();
gapRectsBounds.move(layer->scrolledContentOffset());
}
layer->addBlockSelectionGapsBounds(gapRectsBounds);
@@ -3978,8 +3977,12 @@ void RenderBlock::addIntrudingFloats(RenderBlock* prev, int logicalLeftOffset, i
// above. |logicalLeftOffset| will equal the margin in this case, so it's already been taken
// into account. Only apply this code if prev is the parent, since otherwise the left margin
// will get applied twice.
- if (prev != parent())
- floatingObj->setLeft(floatingObj->left() + (style()->isHorizontalWritingMode() ? prev->marginLeft() : prev->marginTop()));
+ if (prev != parent()) {
+ if (style()->isHorizontalWritingMode())
+ floatingObj->setLeft(floatingObj->left() + prev->marginLeft());
+ else
+ floatingObj->setTop(floatingObj->top() + prev->marginTop());
+ }
floatingObj->m_shouldPaint = false; // We are not in the direct inheritance chain for this float. We will never paint it.
floatingObj->m_renderer = r->m_renderer;
@@ -4150,7 +4153,7 @@ bool RenderBlock::nodeAtPoint(const HitTestRequest& request, HitTestResult& resu
if (hitTestAction == HitTestBlockBackground || hitTestAction == HitTestChildBlockBackground) {
IntRect boundsRect(tx, ty, width(), height());
if (visibleToHitTesting() && boundsRect.intersects(result.rectForPoint(_x, _y))) {
- updateHitTestResult(result, IntPoint(_x - tx, _y - ty));
+ updateHitTestResult(result, flipForWritingMode(IntPoint(_x - tx, _y - ty)));
if (!result.addNodeToRectBasedTestResult(node(), _x, _y, boundsRect))
return true;
}
@@ -4174,8 +4177,8 @@ bool RenderBlock::hitTestFloats(const HitTestRequest& request, HitTestResult& re
for (it.toLast(); (floatingObject = it.current()); --it) {
if (floatingObject->m_shouldPaint && !floatingObject->m_renderer->hasSelfPaintingLayer()) {
int xOffset = floatingObject->left() + floatingObject->m_renderer->marginLeft() - floatingObject->m_renderer->x();
- int yOffset = floatingObject->top() + floatingObject->m_renderer->marginTop() - floatingObject->m_renderer->y();
- IntPoint childPoint= flipForWritingMode(floatingObject->m_renderer, IntPoint(tx + xOffset, ty + yOffset), ParentToChildFlippingAdjustment);
+ int yOffset = floatingObject->top() + floatingObject->m_renderer->marginTop() - floatingObject->m_renderer->y();
+ IntPoint childPoint = flipForWritingMode(floatingObject->m_renderer, IntPoint(tx + xOffset, ty + yOffset), ParentToChildFlippingAdjustment);
if (floatingObject->m_renderer->hitTest(request, result, IntPoint(x, y), childPoint.x(), childPoint.y())) {
updateHitTestResult(result, IntPoint(x - childPoint.x(), y - childPoint.y()));
return true;
@@ -4278,8 +4281,9 @@ Position RenderBlock::positionForRenderer(RenderObject* renderer, bool start) co
// FIXME: This function should go on RenderObject as an instance method. Then
// all cases in which positionForPoint recurs could call this instead to
// prevent crossing editable boundaries. This would require many tests.
-static VisiblePosition positionForPointRespectingEditingBoundaries(RenderBox* parent, RenderBox* child, const IntPoint& pointInParentCoordinates)
+static VisiblePosition positionForPointRespectingEditingBoundaries(RenderBlock* parent, RenderBox* child, const IntPoint& pointInParentCoordinates)
{
+ // FIXME: This is wrong if the child's writing-mode is different from the parent's.
IntPoint pointInChildCoordinates(pointInParentCoordinates - child->location());
// If this is an anonymous renderer, we just recur normally
@@ -4297,14 +4301,15 @@ static VisiblePosition positionForPointRespectingEditingBoundaries(RenderBox* pa
if (!ancestor || ancestor->node()->isContentEditable() == childNode->isContentEditable())
return child->positionForPoint(pointInChildCoordinates);
- // Otherwise return before or after the child, depending on if the click was left or right of the child
- int childMidX = child->width() / 2;
- if (pointInChildCoordinates.x() < childMidX)
+ // Otherwise return before or after the child, depending on if the click was to the logical left or logical right of the child
+ int childMiddle = parent->logicalWidthForChild(child) / 2;
+ int logicalLeft = parent->style()->isHorizontalWritingMode() ? pointInChildCoordinates.x() : pointInChildCoordinates.y();
+ if (logicalLeft < childMiddle)
return ancestor->createVisiblePosition(childNode->nodeIndex(), DOWNSTREAM);
return ancestor->createVisiblePosition(childNode->nodeIndex() + 1, UPSTREAM);
}
-VisiblePosition RenderBlock::positionForPointWithInlineChildren(const IntPoint& pointInContents)
+VisiblePosition RenderBlock::positionForPointWithInlineChildren(const IntPoint& pointInLogicalContents)
{
ASSERT(childrenInline());
@@ -4323,8 +4328,8 @@ VisiblePosition RenderBlock::positionForPointWithInlineChildren(const IntPoint&
lastRootBoxWithChildren = root;
// check if this root line box is located at this y coordinate
- if (pointInContents.y() < root->selectionBottom()) {
- closestBox = root->closestLeafChildForXPos(pointInContents.x());
+ if (pointInLogicalContents.y() < root->selectionBottom()) {
+ closestBox = root->closestLeafChildForLogicalLeftPosition(pointInLogicalContents.x());
if (closestBox)
break;
}
@@ -4334,17 +4339,22 @@ VisiblePosition RenderBlock::positionForPointWithInlineChildren(const IntPoint&
if (!moveCaretToBoundary && !closestBox && lastRootBoxWithChildren) {
// y coordinate is below last root line box, pretend we hit it
- closestBox = lastRootBoxWithChildren->closestLeafChildForXPos(pointInContents.x());
+ closestBox = lastRootBoxWithChildren->closestLeafChildForLogicalLeftPosition(pointInLogicalContents.x());
}
if (closestBox) {
- if (moveCaretToBoundary && pointInContents.y() < firstRootBoxWithChildren->selectionTop()) {
+ if (moveCaretToBoundary && pointInLogicalContents.y() < firstRootBoxWithChildren->selectionTop()) {
// y coordinate is above first root line box, so return the start of the first
return VisiblePosition(positionForBox(firstRootBoxWithChildren->firstLeafChild(), true), DOWNSTREAM);
}
- // pass the box a y position that is inside it
- return closestBox->renderer()->positionForPoint(IntPoint(pointInContents.x(), closestBox->m_y));
+ // pass the box a top position that is inside it
+ IntPoint point(pointInLogicalContents.x(), closestBox->logicalTop());
+ if (!style()->isHorizontalWritingMode())
+ point = point.transposedPoint();
+ if (closestBox->renderer()->isReplaced())
+ return positionForPointRespectingEditingBoundaries(this, toRenderBox(closestBox->renderer()), point);
+ return closestBox->renderer()->positionForPoint(point);
}
if (lastRootBoxWithChildren) {
@@ -4370,9 +4380,13 @@ VisiblePosition RenderBlock::positionForPoint(const IntPoint& point)
return RenderBox::positionForPoint(point);
if (isReplaced()) {
- if (point.y() < 0 || (point.y() < height() && point.x() < 0))
+ // FIXME: This seems wrong when the object's writing-mode doesn't match the line's writing-mode.
+ int pointLogicalLeft = style()->isHorizontalWritingMode() ? point.x() : point.y();
+ int pointLogicalTop = style()->isHorizontalWritingMode() ? point.y() : point.x();
+
+ if (pointLogicalTop < 0 || (pointLogicalTop < logicalHeight() && pointLogicalLeft < 0))
return createVisiblePosition(caretMinOffset(), DOWNSTREAM);
- if (point.y() >= height() || (point.y() >= 0 && point.x() >= width()))
+ if (pointLogicalTop >= logicalHeight() || (pointLogicalTop >= 0 && pointLogicalLeft >= logicalWidth()))
return createVisiblePosition(caretMaxOffset(), DOWNSTREAM);
}
@@ -4380,11 +4394,14 @@ VisiblePosition RenderBlock::positionForPoint(const IntPoint& point)
int contentsY = point.y();
offsetForContents(contentsX, contentsY);
IntPoint pointInContents(contentsX, contentsY);
+ IntPoint pointInLogicalContents(pointInContents);
+ if (!style()->isHorizontalWritingMode())
+ pointInLogicalContents = pointInLogicalContents.transposedPoint();
if (childrenInline())
- return positionForPointWithInlineChildren(pointInContents);
+ return positionForPointWithInlineChildren(pointInLogicalContents);
- if (lastChildBox() && contentsY > lastChildBox()->y()) {
+ if (lastChildBox() && pointInContents.y() > lastChildBox()->logicalTop()) {
for (RenderBox* childBox = lastChildBox(); childBox; childBox = childBox->previousSiblingBox()) {
if (isChildHitTestCandidate(childBox))
return positionForPointRespectingEditingBoundaries(this, childBox, pointInContents);
@@ -4392,7 +4409,7 @@ VisiblePosition RenderBlock::positionForPoint(const IntPoint& point)
} else {
for (RenderBox* childBox = firstChildBox(); childBox; childBox = childBox->nextSiblingBox()) {
// We hit child if our click is above the bottom of its padding box (like IE6/7 and FF3).
- if (isChildHitTestCandidate(childBox) && contentsY < childBox->frameRect().bottom())
+ if (isChildHitTestCandidate(childBox) && pointInContents.y() < childBox->logicalBottom())
return positionForPointRespectingEditingBoundaries(this, childBox, pointInContents);
}
}
@@ -5255,7 +5272,7 @@ int RenderBlock::lineHeight(bool firstLine, LineDirectionMode direction, LinePos
return m_lineHeight;
}
-int RenderBlock::baselinePosition(bool firstLine, LineDirectionMode direction, LinePositionMode linePositionMode) const
+int RenderBlock::baselinePosition(FontBaseline baselineType, bool firstLine, LineDirectionMode direction, LinePositionMode linePositionMode) const
{
// Inline blocks are replaced elements. Otherwise, just pass off to
// the base class. If we're being queried as though we're the root line
@@ -5276,28 +5293,29 @@ int RenderBlock::baselinePosition(bool firstLine, LineDirectionMode direction, L
// vertically (e.g., an overflow:hidden block that has had scrollTop moved) or if the baseline is outside
// of our content box.
bool ignoreBaseline = (layer() && (layer()->marquee() || (direction == HorizontalLine ? (layer()->verticalScrollbar() || layer()->scrollYOffset() != 0)
- : (layer()->horizontalScrollbar() || layer()->scrollXOffset() != 0)))) || isWritingModeRoot();
+ : (layer()->horizontalScrollbar() || layer()->scrollXOffset() != 0)))) || (isWritingModeRoot() && !isRubyRun());
+
int baselinePos = ignoreBaseline ? -1 : lastLineBoxBaseline();
int bottomOfContent = direction == HorizontalLine ? borderTop() + paddingTop() + contentHeight() : borderRight() + paddingRight() + contentWidth();
if (baselinePos != -1 && baselinePos <= bottomOfContent)
return direction == HorizontalLine ? marginTop() + baselinePos : marginRight() + baselinePos;
- return RenderBox::baselinePosition(firstLine, direction, linePositionMode);
+ return RenderBox::baselinePosition(baselineType, firstLine, direction, linePositionMode);
}
const Font& f = style(firstLine)->font();
- return f.ascent() + (lineHeight(firstLine, direction, linePositionMode) - f.height()) / 2;
+ return f.ascent(baselineType) + (lineHeight(firstLine, direction, linePositionMode) - f.height()) / 2;
}
int RenderBlock::firstLineBoxBaseline() const
{
- if (!isBlockFlow() || isWritingModeRoot())
+ if (!isBlockFlow() || (isWritingModeRoot() && !isRubyRun()))
return -1;
if (childrenInline()) {
if (firstLineBox())
- return firstLineBox()->logicalTop() + style(true)->font().ascent();
+ return firstLineBox()->logicalTop() + style(true)->font().ascent(firstRootBox()->baselineType());
else
return -1;
}
@@ -5316,7 +5334,7 @@ int RenderBlock::firstLineBoxBaseline() const
int RenderBlock::lastLineBoxBaseline() const
{
- if (!isBlockFlow() || isWritingModeRoot())
+ if (!isBlockFlow() || (isWritingModeRoot() && !isRubyRun()))
return -1;
LineDirectionMode lineDirection = style()->isHorizontalWritingMode() ? HorizontalLine : VerticalLine;
@@ -5327,7 +5345,7 @@ int RenderBlock::lastLineBoxBaseline() const
return f.ascent() + (lineHeight(true, lineDirection, PositionOfInteriorLineBoxes) - f.height()) / 2 + (lineDirection == HorizontalLine ? borderTop() + paddingTop() : borderRight() + paddingRight());
}
if (lastLineBox())
- return lastLineBox()->logicalTop() + style(lastLineBox() == firstLineBox())->font().ascent();
+ return lastLineBox()->logicalTop() + style(lastLineBox() == firstLineBox())->font().ascent(lastRootBox()->baselineType());
return -1;
} else {
bool haveNormalFlowChild = false;
diff --git a/WebCore/rendering/RenderBlock.h b/WebCore/rendering/RenderBlock.h
index 1cc89c0..645c0ec 100644
--- a/WebCore/rendering/RenderBlock.h
+++ b/WebCore/rendering/RenderBlock.h
@@ -58,7 +58,7 @@ public:
// These two functions are overridden for inline-block.
virtual int lineHeight(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
- virtual int baselinePosition(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
+ virtual int baselinePosition(FontBaseline, bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
RenderLineBoxList* lineBoxes() { return &m_lineBoxes; }
const RenderLineBoxList* lineBoxes() const { return &m_lineBoxes; }
@@ -458,7 +458,7 @@ private:
RootInlineBox* constructLine(unsigned runCount, BidiRun* firstRun, BidiRun* lastRun, bool firstLine, bool lastLine, RenderObject* endObject);
InlineFlowBox* createLineBoxes(RenderObject*, bool firstLine);
void computeInlineDirectionPositionsForLine(RootInlineBox*, bool firstLine, BidiRun* firstRun, BidiRun* trailingSpaceRun, bool reachedEnd, GlyphOverflowAndFallbackFontsMap&);
- void computeBlockDirectionPositionsForLine(RootInlineBox*, BidiRun*, GlyphOverflowAndFallbackFontsMap&);
+ void computeBlockDirectionPositionsForLine(RootInlineBox*, BidiRun*, GlyphOverflowAndFallbackFontsMap&, VerticalPositionCache&);
void deleteEllipsisLineBoxes();
void checkLinesForTextOverflow();
void addOverflowFromInlineChildren();
diff --git a/WebCore/rendering/RenderBlockLineLayout.cpp b/WebCore/rendering/RenderBlockLineLayout.cpp
index e843110..b6dc39f 100644
--- a/WebCore/rendering/RenderBlockLineLayout.cpp
+++ b/WebCore/rendering/RenderBlockLineLayout.cpp
@@ -35,6 +35,7 @@
#include "RenderView.h"
#include "Settings.h"
#include "TrailingFloatsRootInlineBox.h"
+#include "VerticalPositionCache.h"
#include "break_lines.h"
#include <wtf/AlwaysInline.h>
#include <wtf/RefCountedLeakCounter.h>
@@ -477,9 +478,10 @@ void RenderBlock::computeInlineDirectionPositionsForLine(RootInlineBox* lineBox,
lineBox->placeBoxesInInlineDirection(logicalLeft, needsWordSpacing, textBoxDataMap);
}
-void RenderBlock::computeBlockDirectionPositionsForLine(RootInlineBox* lineBox, BidiRun* firstRun, GlyphOverflowAndFallbackFontsMap& textBoxDataMap)
+void RenderBlock::computeBlockDirectionPositionsForLine(RootInlineBox* lineBox, BidiRun* firstRun, GlyphOverflowAndFallbackFontsMap& textBoxDataMap,
+ VerticalPositionCache& verticalPositionCache)
{
- setLogicalHeight(lineBox->alignBoxesInBlockDirection(logicalHeight(), textBoxDataMap));
+ setLogicalHeight(lineBox->alignBoxesInBlockDirection(logicalHeight(), textBoxDataMap, verticalPositionCache));
lineBox->setBlockLogicalHeight(logicalHeight());
// Now make sure we place replaced render objects correctly.
@@ -639,6 +641,7 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintLogica
if (fullLayout || o->selfNeedsLayout())
dirtyLineBoxesForRenderer(o, fullLayout);
o->setNeedsLayout(false);
+<<<<<<< HEAD
#ifdef ANDROID_LAYOUT
if (doTextWrap && !hasTextToWrap && o->isText()) {
Node* node = o->node();
@@ -661,6 +664,8 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintLogica
#endif
if (!o->isText())
toRenderInline(o)->invalidateVerticalPosition(); // FIXME: Should do better here and not always invalidate everything.
+=======
+>>>>>>> webkit.org at r72274
}
o = bidiNext(this, o, 0, false, &endOfInline);
}
@@ -783,6 +788,8 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintLogica
bool isLineEmpty = true;
bool paginated = view()->layoutState() && view()->layoutState()->isPaginated();
+ VerticalPositionCache verticalPositionCache;
+
while (!end.atEnd()) {
// FIXME: Is this check necessary before the first iteration or can it be moved to the end?
if (checkForEndLineMatch && (endLineMatched = matchedEndLine(resolver, cleanLineStart, cleanLineBidiStatus, endLine, endLineLogicalTop, repaintLogicalBottom, repaintLogicalTop)))
@@ -883,7 +890,7 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintLogica
computeInlineDirectionPositionsForLine(lineBox, firstLine, resolver.firstRun(), trailingSpaceRun, end.atEnd(), textBoxDataMap);
// Now position our text runs vertically.
- computeBlockDirectionPositionsForLine(lineBox, resolver.firstRun(), textBoxDataMap);
+ computeBlockDirectionPositionsForLine(lineBox, resolver.firstRun(), textBoxDataMap, verticalPositionCache);
#if ENABLE(SVG)
// SVG text layout code computes vertical & horizontal positions on its own.
@@ -1013,7 +1020,8 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintLogica
m_lineBoxes.appendLineBox(trailingFloatsLineBox);
trailingFloatsLineBox->setConstructed();
GlyphOverflowAndFallbackFontsMap textBoxDataMap;
- trailingFloatsLineBox->alignBoxesInBlockDirection(logicalHeight(), textBoxDataMap);
+ VerticalPositionCache verticalPositionCache;
+ trailingFloatsLineBox->alignBoxesInBlockDirection(logicalHeight(), textBoxDataMap, verticalPositionCache);
trailingFloatsLineBox->setBlockDirectionOverflowPositions(logicalHeight(), bottomLayoutOverflow, logicalHeight(), bottomVisualOverflow);
trailingFloatsLineBox->setBlockLogicalHeight(logicalHeight());
}
@@ -2162,66 +2170,38 @@ void RenderBlock::addOverflowFromInlineChildren()
int RenderBlock::beforeSideVisibleOverflowForLine(RootInlineBox* line) const
{
- switch (style()->writingMode()) {
- case TopToBottomWritingMode:
+ // Overflow is in the block's coordinate space, which means it isn't purely physical. For flipped blocks (rl and bt),
+ // we continue to use top and left overflow even though physically it's bottom and right.
+ if (style()->isHorizontalWritingMode())
return line->topVisibleOverflow();
- case LeftToRightWritingMode:
- return line->leftVisibleOverflow();
- case RightToLeftWritingMode:
- return line->rightVisibleOverflow();
- case BottomToTopWritingMode:
- return line->bottomVisibleOverflow();
- }
- ASSERT_NOT_REACHED();
- return line->topVisibleOverflow();
+ return line->leftVisibleOverflow();
}
int RenderBlock::afterSideVisibleOverflowForLine(RootInlineBox* line) const
{
- switch (style()->writingMode()) {
- case TopToBottomWritingMode:
+ // Overflow is in the block's coordinate space, which means it isn't purely physical. For flipped blocks (rl and bt),
+ // we continue to use bottom and right overflow even though physically it's top and left.
+ if (style()->isHorizontalWritingMode())
return line->bottomVisibleOverflow();
- case LeftToRightWritingMode:
- return line->rightVisibleOverflow();
- case RightToLeftWritingMode:
- return line->leftVisibleOverflow();
- case BottomToTopWritingMode:
- return line->topVisibleOverflow();
- }
- ASSERT_NOT_REACHED();
- return line->bottomVisibleOverflow();
+ return line->rightVisibleOverflow();
}
int RenderBlock::beforeSideLayoutOverflowForLine(RootInlineBox* line) const
{
- switch (style()->writingMode()) {
- case TopToBottomWritingMode:
+ // Overflow is in the block's coordinate space, which means it isn't purely physical. For flipped blocks (rl and bt),
+ // we continue to use top and left overflow even though physically it's bottom and right.
+ if (style()->isHorizontalWritingMode())
return line->topLayoutOverflow();
- case LeftToRightWritingMode:
- return line->leftLayoutOverflow();
- case RightToLeftWritingMode:
- return line->rightLayoutOverflow();
- case BottomToTopWritingMode:
- return line->bottomLayoutOverflow();
- }
- ASSERT_NOT_REACHED();
- return line->topLayoutOverflow();
+ return line->leftLayoutOverflow();
}
int RenderBlock::afterSideLayoutOverflowForLine(RootInlineBox* line) const
{
- switch (style()->writingMode()) {
- case TopToBottomWritingMode:
+ // Overflow is in the block's coordinate space, which means it isn't purely physical. For flipped blocks (rl and bt),
+ // we continue to use bottom and right overflow even though physically it's top and left.
+ if (style()->isHorizontalWritingMode())
return line->bottomLayoutOverflow();
- case LeftToRightWritingMode:
- return line->rightLayoutOverflow();
- case RightToLeftWritingMode:
- return line->leftLayoutOverflow();
- case BottomToTopWritingMode:
- return line->topLayoutOverflow();
- }
- ASSERT_NOT_REACHED();
- return line->bottomLayoutOverflow();
+ return line->rightLayoutOverflow();
}
void RenderBlock::deleteEllipsisLineBoxes()
diff --git a/WebCore/rendering/RenderBox.cpp b/WebCore/rendering/RenderBox.cpp
index fc617c4..41e2cd5 100644
--- a/WebCore/rendering/RenderBox.cpp
+++ b/WebCore/rendering/RenderBox.cpp
@@ -297,15 +297,13 @@ void RenderBox::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle
// If our zoom factor changes and we have a defined scrollLeft/Top, we need to adjust that value into the
// new zoomed coordinate space.
if (hasOverflowClip() && oldStyle && style() && oldStyle->effectiveZoom() != style()->effectiveZoom()) {
- int left = scrollLeft();
- if (left) {
+ if (int left = layer()->scrollXOffset()) {
left = (left / oldStyle->effectiveZoom()) * style()->effectiveZoom();
- setScrollLeft(left);
+ layer()->scrollToXOffset(left);
}
- int top = scrollTop();
- if (top) {
+ if (int top = layer()->scrollYOffset()) {
top = (top / oldStyle->effectiveZoom()) * style()->effectiveZoom();
- setScrollTop(top);
+ layer()->scrollToYOffset(top);
}
}
@@ -387,7 +385,7 @@ void RenderBox::layout()
return;
}
- LayoutStateMaintainer statePusher(view(), this, IntSize(x(), y()));
+ LayoutStateMaintainer statePusher(view(), this, IntSize(x(), y()), style()->isFlippedBlocksWritingMode());
while (child) {
child->layoutIfNeeded();
ASSERT(!child->needsLayout());
@@ -1183,7 +1181,7 @@ void RenderBox::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool
fixed |= isFixedPos;
IntSize containerOffset = offsetFromContainer(o, roundedIntPoint(transformState.mappedPoint()));
-
+
bool preserve3D = useTransforms && (o->style()->preserves3D() || style()->preserves3D());
if (useTransforms && shouldUseTransformFromContainer(o)) {
TransformationMatrix t;
@@ -1243,9 +1241,11 @@ IntSize RenderBox::offsetFromContainer(RenderObject* o, const IntPoint& point) c
offset += relativePositionOffset();
if (!isInline() || isReplaced()) {
- if (style()->position() != AbsolutePosition && style()->position() != FixedPosition)
+ if (style()->position() != AbsolutePosition && style()->position() != FixedPosition) {
o->adjustForColumns(offset, IntPoint(point.x() + x(), point.y() + y()));
- offset.expand(x(), y());
+ offset += locationOffsetIncludingFlipping();
+ } else
+ offset += locationOffset();
}
if (o->hasOverflowClip())
@@ -1338,12 +1338,21 @@ IntRect RenderBox::clippedOverflowRectForRepaint(RenderBoxModelObject* repaintCo
r.inflate(v->maximalOutlineSize());
}
}
+
computeRectForRepaint(repaintContainer, r);
return r;
}
void RenderBox::computeRectForRepaint(RenderBoxModelObject* repaintContainer, IntRect& rect, bool fixed)
{
+ // The rect we compute at each step is shifted by our x/y offset in the parent container's coordinate space.
+ // Only when we cross a writing mode boundary will we have to possibly flipForWritingMode (to convert into a more appropriate
+ // offset corner for the enclosing container). This allows for a fully RL or BT document to repaint
+ // properly even during layout, since the rect remains flipped all the way until the end.
+ //
+ // RenderView::computeRectForRepaint then converts the rect to physical coordinates. We also convert to
+ // physical when we hit a repaintContainer boundary. Therefore the final rect returned is always in the
+ // physical coordinate space of the repaintContainer.
if (RenderView* v = view()) {
// LayoutState is only valid for root-relative repainting
if (v->layoutStateEnabled() && !repaintContainer) {
@@ -1366,14 +1375,19 @@ void RenderBox::computeRectForRepaint(RenderBoxModelObject* repaintContainer, In
if (hasReflection())
rect.unite(reflectedRect(rect));
- if (repaintContainer == this)
+ if (repaintContainer == this) {
+ if (repaintContainer->style()->isFlippedBlocksWritingMode())
+ flipForWritingMode(rect);
return;
+ }
bool containerSkipped;
RenderObject* o = container(repaintContainer, &containerSkipped);
if (!o)
return;
+ if (isWritingModeRoot() && !isPositioned())
+ flipForWritingMode(rect);
IntPoint topLeft = rect.location();
topLeft.move(x(), y());
@@ -1433,10 +1447,7 @@ void RenderBox::computeRectForRepaint(RenderBoxModelObject* repaintContainer, In
rect.move(-containerOffset);
return;
}
-
- if (o->isBox())
- toRenderBox(o)->flipForWritingMode(rect);
-
+
o->computeRectForRepaint(repaintContainer, rect, fixed);
}
@@ -3164,7 +3175,7 @@ bool RenderBox::shrinkToAvoidFloats() const
bool RenderBox::avoidsFloats() const
{
- return isReplaced() || hasOverflowClip() || isHR() || isWritingModeRoot();
+ return isReplaced() || hasOverflowClip() || isHR() || isLegend() || isWritingModeRoot();
}
void RenderBox::addShadowOverflow()
@@ -3249,10 +3260,14 @@ int RenderBox::lineHeight(bool /*firstLine*/, LineDirectionMode direction, LineP
return 0;
}
-int RenderBox::baselinePosition(bool /*firstLine*/, LineDirectionMode direction, LinePositionMode /*linePositionMode*/) const
+int RenderBox::baselinePosition(FontBaseline baselineType, bool /*firstLine*/, LineDirectionMode direction, LinePositionMode /*linePositionMode*/) const
{
- if (isReplaced())
- return direction == HorizontalLine ? m_marginTop + height() + m_marginBottom : m_marginRight + width() + m_marginLeft;
+ if (isReplaced()) {
+ int result = direction == HorizontalLine ? m_marginTop + height() + m_marginBottom : m_marginRight + width() + m_marginLeft;
+ if (baselineType == AlphabeticBaseline)
+ return result;
+ return result - result / 2;
+ }
return 0;
}
@@ -3272,7 +3287,7 @@ void RenderBox::blockDirectionOverflow(bool isLineHorizontal, int& logicalTopLay
}
}
-IntPoint RenderBox::flipForWritingMode(RenderBox* child, const IntPoint& point, FlippingAdjustment adjustment)
+IntPoint RenderBox::flipForWritingMode(const RenderBox* child, const IntPoint& point, FlippingAdjustment adjustment) const
{
if (!style()->isFlippedBlocksWritingMode())
return point;
@@ -3284,7 +3299,7 @@ IntPoint RenderBox::flipForWritingMode(RenderBox* child, const IntPoint& point,
return IntPoint(point.x() + width() - child->width() - child->x() - (adjustment == ParentToChildFlippingAdjustment ? child->x() : 0), point.y());
}
-void RenderBox::flipForWritingMode(IntRect& rect)
+void RenderBox::flipForWritingMode(IntRect& rect) const
{
if (!style()->isFlippedBlocksWritingMode())
return;
@@ -3295,35 +3310,35 @@ void RenderBox::flipForWritingMode(IntRect& rect)
rect.setX(width() - rect.right());
}
-int RenderBox::flipForWritingMode(int position)
+int RenderBox::flipForWritingMode(int position) const
{
if (!style()->isFlippedBlocksWritingMode())
return position;
return logicalHeight() - position;
}
-IntPoint RenderBox::flipForWritingMode(const IntPoint& position)
+IntPoint RenderBox::flipForWritingMode(const IntPoint& position) const
{
if (!style()->isFlippedBlocksWritingMode())
return position;
return style()->isHorizontalWritingMode() ? IntPoint(position.x(), height() - position.y()) : IntPoint(width() - position.x(), position.y());
}
-IntSize RenderBox::flipForWritingMode(const IntSize& offset)
+IntSize RenderBox::flipForWritingMode(const IntSize& offset) const
{
if (!style()->isFlippedBlocksWritingMode())
return offset;
return style()->isHorizontalWritingMode() ? IntSize(offset.width(), height() - offset.height()) : IntSize(width() - offset.width(), offset.height());
}
-IntSize RenderBox::locationOffsetIncludingFlipping()
+IntSize RenderBox::locationOffsetIncludingFlipping() const
{
if (!parent() || !parent()->isBox())
return locationOffset();
- RenderBox* parent = parentBox();
- IntPoint localPoint = parent->flipForWritingMode(this, location(), ChildToParentFlippingAdjustment);
- return IntSize(localPoint.x(), localPoint.y());
+ IntRect rect(frameRect());
+ parentBox()->flipForWritingMode(rect);
+ return IntSize(rect.x(), rect.y());
}
} // namespace WebCore
diff --git a/WebCore/rendering/RenderBox.h b/WebCore/rendering/RenderBox.h
index ac96bb7..091796b 100644
--- a/WebCore/rendering/RenderBox.h
+++ b/WebCore/rendering/RenderBox.h
@@ -378,15 +378,15 @@ public:
bool isWritingModeRoot() const { return !parent() || parent()->style()->writingMode() != style()->writingMode(); }
virtual int lineHeight(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
- virtual int baselinePosition(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
+ virtual int baselinePosition(FontBaseline, bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
enum FlippingAdjustment { ChildToParentFlippingAdjustment, ParentToChildFlippingAdjustment };
- IntPoint flipForWritingMode(RenderBox* child, const IntPoint&, FlippingAdjustment);
- int flipForWritingMode(int position);
- IntPoint flipForWritingMode(const IntPoint&);
- IntSize flipForWritingMode(const IntSize&);
- void flipForWritingMode(IntRect&);
- IntSize locationOffsetIncludingFlipping();
+ IntPoint flipForWritingMode(const RenderBox* child, const IntPoint&, FlippingAdjustment) const;
+ int flipForWritingMode(int position) const; // The offset is in the block direction (y for horizontal writing modes, x for vertical writing modes).
+ IntPoint flipForWritingMode(const IntPoint&) const;
+ IntSize flipForWritingMode(const IntSize&) const;
+ void flipForWritingMode(IntRect&) const;
+ IntSize locationOffsetIncludingFlipping() const;
#ifdef ANDROID_LAYOUT
int getVisibleWidth() const { return m_visibleWidth; }
diff --git a/WebCore/rendering/RenderBoxModelObject.cpp b/WebCore/rendering/RenderBoxModelObject.cpp
index ae89e0a..1580b49 100644
--- a/WebCore/rendering/RenderBoxModelObject.cpp
+++ b/WebCore/rendering/RenderBoxModelObject.cpp
@@ -845,53 +845,6 @@ void RenderBoxModelObject::calculateBackgroundImageGeometry(const FillLayer* fil
destRect.intersect(IntRect(tx, ty, w, h));
}
-int RenderBoxModelObject::verticalPosition(bool firstLine) const
-{
- // This method determines the vertical position for inline elements.
- ASSERT(isInline());
- if (!isInline())
- return 0;
-
- int vpos = 0;
- EVerticalAlign va = style()->verticalAlign();
- if (va == TOP)
- vpos = PositionTop;
- else if (va == BOTTOM)
- vpos = PositionBottom;
- else {
- bool checkParent = parent()->isRenderInline() && parent()->style()->verticalAlign() != TOP && parent()->style()->verticalAlign() != BOTTOM;
- vpos = checkParent ? toRenderInline(parent())->verticalPositionFromCache(firstLine) : 0;
- // don't allow elements nested inside text-top to have a different valignment.
- if (va == BASELINE)
- return vpos;
-
- const Font& f = parent()->style(firstLine)->font();
- int fontsize = f.pixelSize();
-
- LineDirectionMode lineDirection = parent()->style()->isHorizontalWritingMode() ? HorizontalLine : VerticalLine;
-
- if (va == SUB)
- vpos += fontsize / 5 + 1;
- else if (va == SUPER)
- vpos -= fontsize / 3 + 1;
- else if (va == TEXT_TOP)
- vpos += baselinePosition(firstLine, lineDirection) - f.ascent();
- else if (va == MIDDLE)
- vpos += -static_cast<int>(f.xHeight() / 2) - lineHeight(firstLine, lineDirection) / 2 + baselinePosition(firstLine, lineDirection);
- else if (va == TEXT_BOTTOM) {
- vpos += f.descent();
- // lineHeight - baselinePosition is always 0 for replaced elements (except inline blocks), so don't bother wasting time in that case.
- if (!isReplaced() || style()->display() == INLINE_BLOCK)
- vpos -= (lineHeight(firstLine, lineDirection) - baselinePosition(firstLine, lineDirection));
- } else if (va == BASELINE_MIDDLE)
- vpos += -lineHeight(firstLine, lineDirection) / 2 + baselinePosition(firstLine, lineDirection);
- else if (va == LENGTH)
- vpos -= style()->verticalAlignLength().calcValue(lineHeight(firstLine, lineDirection));
- }
-
- return vpos;
-}
-
bool RenderBoxModelObject::paintNinePieceImage(GraphicsContext* graphicsContext, int tx, int ty, int w, int h, const RenderStyle* style,
const NinePieceImage& ninePieceImage, CompositeOperator op)
{
diff --git a/WebCore/rendering/RenderBoxModelObject.h b/WebCore/rendering/RenderBoxModelObject.h
index 121601f..f502424 100644
--- a/WebCore/rendering/RenderBoxModelObject.h
+++ b/WebCore/rendering/RenderBoxModelObject.h
@@ -28,11 +28,6 @@
namespace WebCore {
-// Values for vertical alignment.
-const int PositionTop = -0x7fffffff;
-const int PositionBottom = 0x7fffffff;
-const int PositionUndefined = 0x80000000;
-
// Modes for some of the line-related functions.
enum LinePositionMode { PositionOnContainingLine, PositionOfInteriorLineBoxes };
enum LineDirectionMode { HorizontalLine, VerticalLine };
@@ -113,13 +108,10 @@ public:
bool paintNinePieceImage(GraphicsContext*, int tx, int ty, int w, int h, const RenderStyle*, const NinePieceImage&, CompositeOperator = CompositeSourceOver);
void paintBoxShadow(GraphicsContext*, int tx, int ty, int w, int h, const RenderStyle*, ShadowStyle, bool includeLogicalLeftEdge = true, bool includeLogicalRightEdge = true);
void paintFillLayerExtended(const PaintInfo&, const Color&, const FillLayer*, int tx, int ty, int width, int height, InlineFlowBox* = 0, CompositeOperator = CompositeSourceOver, RenderObject* backgroundObject = 0);
-
- // The difference between this inline's baseline position and the line's baseline position.
- int verticalPosition(bool firstLine) const;
// Overridden by subclasses to determine line height and baseline position.
virtual int lineHeight(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const = 0;
- virtual int baselinePosition(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const = 0;
+ virtual int baselinePosition(FontBaseline, bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const = 0;
// Called by RenderObject::destroy() (and RenderWidget::destroy()) and is the only way layers should ever be destroyed
void destroyLayer();
diff --git a/WebCore/rendering/RenderFileUploadControl.cpp b/WebCore/rendering/RenderFileUploadControl.cpp
index 3da8530..82bd1fa 100644
--- a/WebCore/rendering/RenderFileUploadControl.cpp
+++ b/WebCore/rendering/RenderFileUploadControl.cpp
@@ -231,7 +231,7 @@ void RenderFileUploadControl::paintObject(PaintInfo& paintInfo, int tx, int ty)
RenderButton* buttonRenderer = toRenderButton(m_button->renderer());
int textY = buttonRenderer->absoluteBoundingBoxRect().y()
+ buttonRenderer->marginTop() + buttonRenderer->borderTop() + buttonRenderer->paddingTop()
- + buttonRenderer->baselinePosition(true, HorizontalLine, PositionOnContainingLine);
+ + buttonRenderer->baselinePosition(AlphabeticBaseline, true, HorizontalLine, PositionOnContainingLine);
paintInfo.context->setFillColor(style()->visitedDependentColor(CSSPropertyColor), style()->colorSpace());
diff --git a/WebCore/rendering/RenderFlexibleBox.cpp b/WebCore/rendering/RenderFlexibleBox.cpp
index d4dc75a..841442b 100644
--- a/WebCore/rendering/RenderFlexibleBox.cpp
+++ b/WebCore/rendering/RenderFlexibleBox.cpp
@@ -214,7 +214,7 @@ void RenderFlexibleBox::layoutBlock(bool relayoutChildren, int /*pageHeight FIXM
return;
LayoutRepainter repainter(*this, checkForRepaintDuringLayout());
- LayoutStateMaintainer statePusher(view(), this, IntSize(x(), y()), hasTransform() || hasReflection());
+ LayoutStateMaintainer statePusher(view(), this, IntSize(x(), y()), hasTransform() || hasReflection() || style()->isFlippedBlocksWritingMode());
int previousWidth = width();
int previousHeight = height();
diff --git a/WebCore/rendering/RenderImage.cpp b/WebCore/rendering/RenderImage.cpp
index d21c1ea..48f21f1 100644
--- a/WebCore/rendering/RenderImage.cpp
+++ b/WebCore/rendering/RenderImage.cpp
@@ -61,6 +61,7 @@ using namespace HTMLNames;
RenderImage::RenderImage(Node* node)
: RenderReplaced(node, IntSize(0, 0))
+ , m_needsToSetSizeForAltText(false)
{
updateAltText();
@@ -89,34 +90,35 @@ static const unsigned short paddingHeight = 4;
static const int maxAltTextWidth = 1024;
static const int maxAltTextHeight = 256;
+IntSize RenderImage::imageSizeForError(CachedImage* newImage) const
+{
+ ASSERT_ARG(newImage, newImage);
+ ASSERT_ARG(newImage, newImage->image());
+
+ // imageSize() returns 0 for the error image. We need the true size of the
+ // error image, so we have to get it by grabbing image() directly.
+ return IntSize(paddingWidth + newImage->image()->width() * style()->effectiveZoom(), paddingHeight + newImage->image()->height() * style()->effectiveZoom());
+}
+
// Sets the image height and width to fit the alt text. Returns true if the
// image size changed.
bool RenderImage::setImageSizeForAltText(CachedImage* newImage /* = 0 */)
{
- int imageWidth = 0;
- int imageHeight = 0;
-
- // If we'll be displaying either text or an image, add a little padding.
- if (!m_altText.isEmpty() || newImage) {
- imageWidth = paddingWidth;
- imageHeight = paddingHeight;
- }
-
- if (newImage && newImage->image()) {
- // imageSize() returns 0 for the error image. We need the true size of the
- // error image, so we have to get it by grabbing image() directly.
- imageWidth += newImage->image()->width() * style()->effectiveZoom();
- imageHeight += newImage->image()->height() * style()->effectiveZoom();
+ IntSize imageSize;
+ if (newImage && newImage->image())
+ imageSize = imageSizeForError(newImage);
+ else if (!m_altText.isEmpty() || newImage) {
+ // If we'll be displaying either text or an image, add a little padding.
+ imageSize = IntSize(paddingWidth, paddingHeight);
}
-
+
// we have an alt and the user meant it (its not a text we invented)
if (!m_altText.isEmpty()) {
const Font& font = style()->font();
- imageWidth = max(imageWidth, min(font.width(TextRun(m_altText.characters(), m_altText.length())), maxAltTextWidth));
- imageHeight = max(imageHeight, min(font.height(), maxAltTextHeight));
+ IntSize textSize(min(font.width(TextRun(m_altText.characters(), m_altText.length())), maxAltTextWidth), min(font.height(), maxAltTextHeight));
+ imageSize = imageSize.expandedTo(textSize);
}
-
- IntSize imageSize = IntSize(imageWidth, imageHeight);
+
if (imageSize == intrinsicSize())
return false;
@@ -124,6 +126,16 @@ bool RenderImage::setImageSizeForAltText(CachedImage* newImage /* = 0 */)
return true;
}
+void RenderImage::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
+{
+ RenderReplaced::styleDidChange(diff, oldStyle);
+ if (m_needsToSetSizeForAltText) {
+ if (!m_altText.isEmpty() && setImageSizeForAltText(m_imageResource->cachedImage()))
+ imageDimensionsChanged(true /* imageSizeChanged */);
+ m_needsToSetSizeForAltText = false;
+ }
+}
+
void RenderImage::imageChanged(WrappedImagePtr newImage, const IntRect* rect)
{
if (documentBeingDestroyed())
@@ -141,12 +153,25 @@ void RenderImage::imageChanged(WrappedImagePtr newImage, const IntRect* rect)
bool imageSizeChanged = false;
// Set image dimensions, taking into account the size of the alt text.
- if (m_imageResource->errorOccurred())
+ if (m_imageResource->errorOccurred()) {
+ if (!m_altText.isEmpty() && document()->isPendingStyleRecalc()) {
+ ASSERT(node());
+ if (node()) {
+ m_needsToSetSizeForAltText = true;
+ node()->setNeedsStyleRecalc(SyntheticStyleChange);
+ }
+ return;
+ }
imageSizeChanged = setImageSizeForAltText(m_imageResource->cachedImage());
+ }
+
+ imageDimensionsChanged(imageSizeChanged, rect);
+}
+void RenderImage::imageDimensionsChanged(bool imageSizeChanged, const IntRect* rect)
+{
bool shouldRepaint = true;
- // Image dimensions have been changed, see what needs to be done
if (m_imageResource->imageSize(style()->effectiveZoom()) != intrinsicSize() || imageSizeChanged) {
if (!m_imageResource->errorOccurred())
setIntrinsicSize(m_imageResource->imageSize(style()->effectiveZoom()));
diff --git a/WebCore/rendering/RenderImage.h b/WebCore/rendering/RenderImage.h
index 308c863..86f5621 100644
--- a/WebCore/rendering/RenderImage.h
+++ b/WebCore/rendering/RenderImage.h
@@ -52,6 +52,8 @@ public:
void highQualityRepaintTimerFired(Timer<RenderImage>*);
protected:
+ virtual void styleDidChange(StyleDifference, const RenderStyle*);
+
virtual void imageChanged(WrappedImagePtr, const IntRect* = 0);
virtual void paintIntoRect(GraphicsContext*, const IntRect&);
@@ -83,13 +85,16 @@ private:
virtual int computeReplacedLogicalWidth(bool includeMaxWidth = true) const;
virtual int computeReplacedLogicalHeight() const;
+ IntSize imageSizeForError(CachedImage*) const;
+ void imageDimensionsChanged(bool imageSizeChanged, const IntRect* = 0);
+
int calcAspectRatioLogicalWidth() const;
int calcAspectRatioLogicalHeight() const;
-private:
// Text to display as long as the image isn't available.
String m_altText;
OwnPtr<RenderImageResource> m_imageResource;
+ bool m_needsToSetSizeForAltText;
friend class RenderImageScaleObserver;
};
diff --git a/WebCore/rendering/RenderInline.cpp b/WebCore/rendering/RenderInline.cpp
index 1a792e7..8f828f9 100644
--- a/WebCore/rendering/RenderInline.cpp
+++ b/WebCore/rendering/RenderInline.cpp
@@ -48,7 +48,6 @@ RenderInline::RenderInline(Node* node)
: RenderBoxModelObject(node)
, m_continuation(0)
, m_lineHeight(-1)
- , m_verticalPosition(PositionUndefined)
{
setChildrenInline(true);
}
@@ -628,7 +627,6 @@ IntRect RenderInline::clippedOverflowRectForRepaint(RenderBoxModelObject* repain
}
IntRect r(-ow + left, -ow + top, boundingBox.width() + ow * 2, boundingBox.height() + ow * 2);
- cb->flipForWritingMode(r);
if (cb->hasColumns())
cb->adjustRectForColumns(r);
@@ -904,23 +902,10 @@ int RenderInline::lineHeight(bool firstLine, LineDirectionMode /*direction*/, Li
return m_lineHeight;
}
-int RenderInline::baselinePosition(bool firstLine, LineDirectionMode direction, LinePositionMode linePositionMode) const
+int RenderInline::baselinePosition(FontBaseline baselineType, bool firstLine, LineDirectionMode direction, LinePositionMode linePositionMode) const
{
const Font& f = style(firstLine)->font();
- return f.ascent() + (lineHeight(firstLine, direction, linePositionMode) - f.height()) / 2;
-}
-
-int RenderInline::verticalPositionFromCache(bool firstLine) const
-{
- if (firstLine) // We're only really a first-line style if the document actually uses first-line rules.
- firstLine = document()->usesFirstLineRules();
- int vpos = m_verticalPosition;
- if (m_verticalPosition == PositionUndefined || firstLine) {
- vpos = verticalPosition(firstLine);
- if (!firstLine)
- m_verticalPosition = vpos;
- }
- return vpos;
+ return f.ascent(baselineType) + (lineHeight(firstLine, direction, linePositionMode) - f.height()) / 2;
}
IntSize RenderInline::relativePositionedInlineOffset(const RenderBox* child) const
diff --git a/WebCore/rendering/RenderInline.h b/WebCore/rendering/RenderInline.h
index 1eb32ff..399a167 100644
--- a/WebCore/rendering/RenderInline.h
+++ b/WebCore/rendering/RenderInline.h
@@ -77,9 +77,6 @@ public:
virtual void addFocusRingRects(Vector<IntRect>&, int tx, int ty);
void paintOutline(GraphicsContext*, int tx, int ty);
- int verticalPositionFromCache(bool firstLine) const;
- void invalidateVerticalPosition() { m_verticalPosition = PositionUndefined; }
-
protected:
virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);
@@ -134,7 +131,7 @@ private:
virtual void dirtyLinesFromChangedChild(RenderObject* child) { m_lineBoxes.dirtyLinesFromChangedChild(this, child); }
virtual int lineHeight(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
- virtual int baselinePosition(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
+ virtual int baselinePosition(FontBaseline, bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
virtual void childBecameNonInline(RenderObject* child);
@@ -159,7 +156,6 @@ private:
RenderBoxModelObject* m_continuation; // Can be either a block or an inline. <b><i><p>Hello</p></i></b>. In this example the <i> will have a block as its continuation but the
// <b> will just have an inline as its continuation.
mutable int m_lineHeight;
- mutable int m_verticalPosition;
};
inline RenderInline* toRenderInline(RenderObject* object)
diff --git a/WebCore/rendering/RenderLayer.cpp b/WebCore/rendering/RenderLayer.cpp
index 2f1032f..12360c8 100644
--- a/WebCore/rendering/RenderLayer.cpp
+++ b/WebCore/rendering/RenderLayer.cpp
@@ -3970,8 +3970,15 @@ void showLayerTree(const WebCore::RenderLayer* layer)
return;
if (WebCore::Frame* frame = layer->renderer()->frame()) {
- WTF::String output = externalRepresentation(frame, WebCore::RenderAsTextShowAllLayers | WebCore::RenderAsTextShowLayerNesting | WebCore::RenderAsTextShowCompositedLayers | WebCore::RenderAsTextShowAddresses | WebCore::RenderAsTextShowIDAndClass);
+ WTF::String output = externalRepresentation(frame, WebCore::RenderAsTextShowAllLayers | WebCore::RenderAsTextShowLayerNesting | WebCore::RenderAsTextShowCompositedLayers | WebCore::RenderAsTextShowAddresses | WebCore::RenderAsTextShowIDAndClass | WebCore::RenderAsTextDontUpdateLayout | WebCore::RenderAsTextShowLayoutState);
fprintf(stderr, "%s\n", output.utf8().data());
}
}
+
+void showLayerTree(const WebCore::RenderObject* renderer)
+{
+ if (!renderer)
+ return;
+ showLayerTree(renderer->enclosingLayer());
+}
#endif
diff --git a/WebCore/rendering/RenderLayer.h b/WebCore/rendering/RenderLayer.h
index 060c7c6..27d2b31 100644
--- a/WebCore/rendering/RenderLayer.h
+++ b/WebCore/rendering/RenderLayer.h
@@ -704,7 +704,8 @@ private:
#ifndef NDEBUG
// Outside the WebCore namespace for ease of invocation from gdb.
-void showLayerTree(const WebCore::RenderLayer* layer);
+void showLayerTree(const WebCore::RenderLayer*);
+void showLayerTree(const WebCore::RenderObject*);
#endif
#endif // RenderLayer_h
diff --git a/WebCore/rendering/RenderLayerBacking.cpp b/WebCore/rendering/RenderLayerBacking.cpp
index 6f8dbc8..517a6d2 100644
--- a/WebCore/rendering/RenderLayerBacking.cpp
+++ b/WebCore/rendering/RenderLayerBacking.cpp
@@ -1152,7 +1152,7 @@ bool RenderLayerBacking::showRepaintCounter() const
bool RenderLayerBacking::startAnimation(double timeOffset, const Animation* anim, const KeyframeList& keyframes)
{
bool hasOpacity = keyframes.containsProperty(CSSPropertyOpacity);
- bool hasTransform = keyframes.containsProperty(CSSPropertyWebkitTransform);
+ bool hasTransform = renderer()->isBox() && keyframes.containsProperty(CSSPropertyWebkitTransform);
if (!hasOpacity && !hasTransform)
return false;
diff --git a/WebCore/rendering/RenderListBox.cpp b/WebCore/rendering/RenderListBox.cpp
index 532c551..5717871 100644
--- a/WebCore/rendering/RenderListBox.cpp
+++ b/WebCore/rendering/RenderListBox.cpp
@@ -238,9 +238,9 @@ void RenderListBox::computeLogicalHeight()
}
}
-int RenderListBox::baselinePosition(bool firstLine, LineDirectionMode lineDirection, LinePositionMode linePositionMode) const
+int RenderListBox::baselinePosition(FontBaseline baselineType, bool firstLine, LineDirectionMode lineDirection, LinePositionMode linePositionMode) const
{
- return RenderBox::baselinePosition(firstLine, lineDirection, linePositionMode) - baselineAdjustment;
+ return RenderBox::baselinePosition(baselineType, firstLine, lineDirection, linePositionMode) - baselineAdjustment;
}
IntRect RenderListBox::itemBoundingBoxRect(int tx, int ty, int index)
diff --git a/WebCore/rendering/RenderListBox.h b/WebCore/rendering/RenderListBox.h
index 072fc91..69acb57 100644
--- a/WebCore/rendering/RenderListBox.h
+++ b/WebCore/rendering/RenderListBox.h
@@ -71,7 +71,7 @@ private:
virtual bool scroll(ScrollDirection, ScrollGranularity, float multiplier = 1, Node** stopNode = 0);
virtual void computePreferredLogicalWidths();
- virtual int baselinePosition(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
+ virtual int baselinePosition(FontBaseline, bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
virtual void computeLogicalHeight();
virtual void layout();
diff --git a/WebCore/rendering/RenderListItem.cpp b/WebCore/rendering/RenderListItem.cpp
index 1f600fe..2b64f04 100644
--- a/WebCore/rendering/RenderListItem.cpp
+++ b/WebCore/rendering/RenderListItem.cpp
@@ -161,7 +161,7 @@ static RenderObject* getParentOfFirstLineBox(RenderBlock* curr, RenderObject* ma
if (currChild->isFloating() || currChild->isPositioned())
continue;
- if (currChild->isTable() || !currChild->isRenderBlock())
+ if (currChild->isTable() || !currChild->isRenderBlock() || (currChild->isBox() && toRenderBox(currChild)->isWritingModeRoot()))
break;
if (curr->isListItem() && inQuirksMode && currChild->node() &&
@@ -246,39 +246,39 @@ void RenderListItem::layout()
void RenderListItem::positionListMarker()
{
if (m_marker && m_marker->parent()->isBox() && !m_marker->isInside() && m_marker->inlineBoxWrapper()) {
- int markerOldX = m_marker->x();
- int yOffset = 0;
- int xOffset = 0;
+ int markerOldLogicalLeft = m_marker->logicalLeft();
+ int blockOffset = 0;
+ int lineOffset = 0;
for (RenderBox* o = m_marker->parentBox(); o != this; o = o->parentBox()) {
- yOffset += o->y();
- xOffset += o->x();
+ blockOffset += o->logicalTop();
+ lineOffset += o->logicalLeft();
}
bool adjustOverflow = false;
- int markerXPos;
+ int markerLogicalLeft;
RootInlineBox* root = m_marker->inlineBoxWrapper()->root();
// FIXME: Inline flows in the line box hierarchy that have self-painting layers should act as cutoff points
// and really shouldn't keep propagating overflow up. This won't really break anything other than repainting
// not being as tight as it could be though.
if (style()->isLeftToRightDirection()) {
- int leftLineOffset = logicalLeftOffsetForLine(yOffset, logicalLeftOffsetForLine(yOffset, false), false);
- markerXPos = leftLineOffset - xOffset - paddingLeft() - borderLeft() + m_marker->marginLeft();
- m_marker->inlineBoxWrapper()->adjustPosition(markerXPos - markerOldX, 0);
+ int leftLineOffset = logicalLeftOffsetForLine(blockOffset, logicalLeftOffsetForLine(blockOffset, false), false);
+ markerLogicalLeft = leftLineOffset - lineOffset - paddingStart() - borderStart() + m_marker->marginStart();
+ m_marker->inlineBoxWrapper()->adjustLineDirectionPosition(markerLogicalLeft - markerOldLogicalLeft);
for (InlineFlowBox* box = m_marker->inlineBoxWrapper()->parent(); box; box = box->parent()) {
- if (markerXPos < box->leftLayoutOverflow()) {
- box->setInlineDirectionOverflowPositions(markerXPos, box->rightLayoutOverflow(), box->leftVisualOverflow(), box->rightVisualOverflow());
+ if (markerLogicalLeft < box->logicalLeftLayoutOverflow()) {
+ box->setInlineDirectionOverflowPositions(markerLogicalLeft, box->logicalRightLayoutOverflow(), box->logicalLeftVisualOverflow(), box->logicalRightVisualOverflow());
if (box == root)
adjustOverflow = true;
}
}
} else {
- int rightLineOffset = logicalRightOffsetForLine(yOffset, logicalRightOffsetForLine(yOffset, false), false);
- markerXPos = rightLineOffset - xOffset + paddingRight() + borderRight() + m_marker->marginLeft();
- m_marker->inlineBoxWrapper()->adjustPosition(markerXPos - markerOldX, 0);
+ int rightLineOffset = logicalRightOffsetForLine(blockOffset, logicalRightOffsetForLine(blockOffset, false), false);
+ markerLogicalLeft = rightLineOffset - lineOffset + paddingStart() + borderStart() + m_marker->marginEnd();
+ m_marker->inlineBoxWrapper()->adjustLineDirectionPosition(markerLogicalLeft - markerOldLogicalLeft);
for (InlineFlowBox* box = m_marker->inlineBoxWrapper()->parent(); box; box = box->parent()) {
- if (markerXPos + m_marker->width() > box->rightLayoutOverflow()) {
- box->setInlineDirectionOverflowPositions(box->leftLayoutOverflow(), markerXPos + m_marker->width(), box->leftVisualOverflow(), box->rightVisualOverflow());
+ if (markerLogicalLeft + m_marker->logicalWidth() > box->logicalRightLayoutOverflow()) {
+ box->setInlineDirectionOverflowPositions(box->logicalLeftLayoutOverflow(), markerLogicalLeft + m_marker->logicalWidth(), box->logicalLeftVisualOverflow(), box->logicalRightVisualOverflow());
if (box == root)
adjustOverflow = true;
}
@@ -286,7 +286,9 @@ void RenderListItem::positionListMarker()
}
if (adjustOverflow) {
- IntRect markerRect(markerXPos + xOffset, yOffset, m_marker->width(), m_marker->height());
+ IntRect markerRect(markerLogicalLeft + lineOffset, blockOffset, m_marker->width(), m_marker->height());
+ if (!style()->isHorizontalWritingMode())
+ markerRect = markerRect.transposedRect();
RenderBox* o = m_marker;
do {
o = o->parentBox();
@@ -300,7 +302,7 @@ void RenderListItem::positionListMarker()
void RenderListItem::paint(PaintInfo& paintInfo, int tx, int ty)
{
- if (!height())
+ if (!logicalHeight())
return;
RenderBlock::paint(paintInfo, tx, ty);
diff --git a/WebCore/rendering/RenderListMarker.cpp b/WebCore/rendering/RenderListMarker.cpp
index ab5da61..2f33afb 100644
--- a/WebCore/rendering/RenderListMarker.cpp
+++ b/WebCore/rendering/RenderListMarker.cpp
@@ -1086,9 +1086,12 @@ IntRect RenderListMarker::localSelectionRect()
{
InlineBox* box = inlineBoxWrapper();
if (!box)
- return IntRect();
- RootInlineBox* root = box->root();
- return IntRect(x(), root->selectionTop() - y(), width(), root->selectionHeight());
+ return IntRect(0, 0, width(), height());
+ RootInlineBox* root = m_inlineBoxWrapper->root();
+ int newLogicalTop = root->block()->style()->isFlippedBlocksWritingMode() ? m_inlineBoxWrapper->logicalBottom() - root->selectionBottom() : root->selectionTop() - m_inlineBoxWrapper->logicalTop();
+ if (root->block()->style()->isHorizontalWritingMode())
+ return IntRect(0, newLogicalTop, width(), root->selectionHeight());
+ return IntRect(newLogicalTop, 0, root->selectionHeight(), height());
}
void RenderListMarker::paint(PaintInfo& paintInfo, int tx, int ty)
@@ -1099,16 +1102,18 @@ void RenderListMarker::paint(PaintInfo& paintInfo, int tx, int ty)
if (style()->visibility() != VISIBLE)
return;
- IntRect marker = getRelativeMarkerRect();
- marker.move(tx, ty);
-
- IntRect box(tx + x(), ty + y(), width(), height());
+ IntPoint boxOrigin(tx + x(), ty + y());
+ IntRect overflowRect(visibleOverflowRect());
+ overflowRect.move(boxOrigin.x(), boxOrigin.y());
+ overflowRect.inflate(maximalOutlineSize(paintInfo.phase));
- if (box.y() > paintInfo.rect.bottom() || box.y() + box.height() < paintInfo.rect.y())
+ if (!paintInfo.rect.intersects(overflowRect))
return;
- if (hasBoxDecorations())
- paintBoxDecorations(paintInfo, box.x(), box.y());
+ IntRect box(boxOrigin, IntSize(width(), height()));
+
+ IntRect marker = getRelativeMarkerRect();
+ marker.move(boxOrigin.x(), boxOrigin.y());
GraphicsContext* context = paintInfo.context;
@@ -1117,10 +1122,10 @@ void RenderListMarker::paint(PaintInfo& paintInfo, int tx, int ty)
if (style()->highlight() != nullAtom && !paintInfo.context->paintingDisabled())
paintCustomHighlight(tx, ty, style()->highlight(), true);
#endif
- context->drawImage(m_image->image(this, marker.size()), style()->colorSpace(), marker.location());
+ context->drawImage(m_image->image(this, marker.size()), style()->colorSpace(), marker);
if (selectionState() != SelectionNone) {
IntRect selRect = localSelectionRect();
- selRect.move(tx, ty);
+ selRect.move(boxOrigin.x(), boxOrigin.y());
context->fillRect(selRect, selectionBackgroundColor(), style()->colorSpace());
}
return;
@@ -1134,7 +1139,7 @@ void RenderListMarker::paint(PaintInfo& paintInfo, int tx, int ty)
if (selectionState() != SelectionNone) {
IntRect selRect = localSelectionRect();
- selRect.move(tx, ty);
+ selRect.move(boxOrigin.x(), boxOrigin.y());
context->fillRect(selRect, selectionBackgroundColor(), style()->colorSpace());
}
@@ -1146,10 +1151,6 @@ void RenderListMarker::paint(PaintInfo& paintInfo, int tx, int ty)
EListStyleType type = style()->listStyleType();
switch (type) {
- case Asterisks:
- case Footnotes:
- context->drawText(style()->font(), TextRun(m_text), marker.location());
- return;
case Disc:
context->drawEllipse(marker);
return;
@@ -1235,6 +1236,8 @@ void RenderListMarker::paint(PaintInfo& paintInfo, int tx, int ty)
case UpperNorwegian:
case UpperRoman:
case Urdu:
+ case Asterisks:
+ case Footnotes:
break;
}
if (m_text.isEmpty())
@@ -1242,32 +1245,51 @@ void RenderListMarker::paint(PaintInfo& paintInfo, int tx, int ty)
TextRun textRun(m_text);
- // Text is not arbitrary. We can judge whether it's RTL from the first character,
- // and we only need to handle the direction RightToLeft for now.
- bool textNeedsReversing = direction(m_text[0]) == RightToLeft;
- Vector<UChar> reversedText;
- if (textNeedsReversing) {
- int length = m_text.length();
- reversedText.grow(length);
- for (int i = 0; i < length; ++i)
- reversedText[length - i - 1] = m_text[i];
- textRun = TextRun(reversedText.data(), length);
+ if (!style()->isHorizontalWritingMode()) {
+ marker.move(-boxOrigin.x(), -boxOrigin.y());
+ marker = marker.transposedRect();
+ marker.move(box.x(), box.y() - logicalHeight());
+ context->save();
+ context->translate(marker.x(), marker.bottom());
+ context->rotate(static_cast<float>(deg2rad(90.)));
+ context->translate(-marker.x(), -marker.bottom());
}
- const Font& font = style()->font();
- const UChar suffix = listMarkerSuffix(type, m_listItem->value());
- if (style()->isLeftToRightDirection()) {
- int width = font.width(textRun);
- context->drawText(style()->font(), textRun, marker.location());
- UChar suffixSpace[2] = { suffix, ' ' };
- context->drawText(style()->font(), TextRun(suffixSpace, 2), marker.location() + IntSize(width, 0));
- } else {
- UChar spaceSuffix[2] = { ' ', suffix };
- TextRun spaceSuffixRun(spaceSuffix, 2);
- int width = font.width(spaceSuffixRun);
- context->drawText(style()->font(), spaceSuffixRun, marker.location());
- context->drawText(style()->font(), textRun, marker.location() + IntSize(width, 0));
+ IntPoint textOrigin = IntPoint(marker.x(), marker.y() + style()->font().ascent());
+
+ if (type == Asterisks || type == Footnotes)
+ context->drawText(style()->font(), textRun, textOrigin);
+ else {
+ // Text is not arbitrary. We can judge whether it's RTL from the first character,
+ // and we only need to handle the direction RightToLeft for now.
+ bool textNeedsReversing = direction(m_text[0]) == RightToLeft;
+ Vector<UChar> reversedText;
+ if (textNeedsReversing) {
+ int length = m_text.length();
+ reversedText.grow(length);
+ for (int i = 0; i < length; ++i)
+ reversedText[length - i - 1] = m_text[i];
+ textRun = TextRun(reversedText.data(), length);
+ }
+
+ const Font& font = style()->font();
+ const UChar suffix = listMarkerSuffix(type, m_listItem->value());
+ if (style()->isLeftToRightDirection()) {
+ int width = font.width(textRun);
+ context->drawText(style()->font(), textRun, textOrigin);
+ UChar suffixSpace[2] = { suffix, ' ' };
+ context->drawText(style()->font(), TextRun(suffixSpace, 2), textOrigin + IntSize(width, 0));
+ } else {
+ UChar spaceSuffix[2] = { ' ', suffix };
+ TextRun spaceSuffixRun(spaceSuffix, 2);
+ int width = font.width(spaceSuffixRun);
+ context->drawText(style()->font(), spaceSuffixRun, textOrigin);
+ context->drawText(style()->font(), textRun, textOrigin + IntSize(width, 0));
+ }
}
+
+ if (!style()->isHorizontalWritingMode())
+ context->restore();
}
void RenderListMarker::layout()
@@ -1278,18 +1300,19 @@ void RenderListMarker::layout()
setWidth(m_image->imageSize(this, style()->effectiveZoom()).width());
setHeight(m_image->imageSize(this, style()->effectiveZoom()).height());
} else {
- setWidth(minPreferredLogicalWidth());
- setHeight(style()->font().height());
+ setLogicalWidth(minPreferredLogicalWidth());
+ setLogicalHeight(style()->font().height());
}
- m_marginLeft = m_marginRight = 0;
+ setMarginStart(0);
+ setMarginEnd(0);
- Length leftMargin = style()->marginLeft();
- Length rightMargin = style()->marginRight();
- if (leftMargin.isFixed())
- m_marginLeft = leftMargin.value();
- if (rightMargin.isFixed())
- m_marginRight = rightMargin.value();
+ Length startMargin = style()->marginStart();
+ Length endMargin = style()->marginEnd();
+ if (startMargin.isFixed())
+ setMarginStart(startMargin.value());
+ if (endMargin.isFixed())
+ setMarginEnd(endMargin.value());
setNeedsLayout(false);
}
@@ -1319,13 +1342,14 @@ void RenderListMarker::computePreferredLogicalWidths()
// until we support the CSS3 marker pseudoclass to allow control over the width and height of the marker box.
int bulletWidth = font.ascent() / 2;
m_image->setImageContainerSize(IntSize(bulletWidth, bulletWidth));
- m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth = m_image->imageSize(this, style()->effectiveZoom()).width();
+ IntSize imageSize = m_image->imageSize(this, style()->effectiveZoom());
+ m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth = style()->isHorizontalWritingMode() ? imageSize.width() : imageSize.height();
setPreferredLogicalWidthsDirty(false);
updateMargins();
return;
}
- int width = 0;
+ int logicalWidth = 0;
EListStyleType type = style()->listStyleType();
switch (type) {
case NoneListStyle:
@@ -1333,13 +1357,13 @@ void RenderListMarker::computePreferredLogicalWidths()
case Asterisks:
case Footnotes:
m_text = listMarkerText(type, m_listItem->value());
- width = font.width(m_text); // no suffix for these types
+ logicalWidth = font.width(m_text); // no suffix for these types
break;
case Circle:
case Disc:
case Square:
m_text = listMarkerText(type, 0); // value is ignored for these types
- width = (font.ascent() * 2 / 3 + 1) / 2 + 2;
+ logicalWidth = (font.ascent() * 2 / 3 + 1) / 2 + 2;
break;
case Afar:
case Amharic:
@@ -1416,18 +1440,18 @@ void RenderListMarker::computePreferredLogicalWidths()
case Urdu:
m_text = listMarkerText(type, m_listItem->value());
if (m_text.isEmpty())
- width = 0;
+ logicalWidth = 0;
else {
int itemWidth = font.width(m_text);
UChar suffixSpace[2] = { listMarkerSuffix(type, m_listItem->value()), ' ' };
int suffixSpaceWidth = font.width(TextRun(suffixSpace, 2));
- width = itemWidth + suffixSpaceWidth;
+ logicalWidth = itemWidth + suffixSpaceWidth;
}
break;
}
- m_minPreferredLogicalWidth = width;
- m_maxPreferredLogicalWidth = width;
+ m_minPreferredLogicalWidth = logicalWidth;
+ m_maxPreferredLogicalWidth = logicalWidth;
setPreferredLogicalWidthsDirty(false);
@@ -1438,26 +1462,18 @@ void RenderListMarker::updateMargins()
{
const Font& font = style()->font();
- int marginLeft = 0;
- int marginRight = 0;
+ int marginStart = 0;
+ int marginEnd = 0;
if (isInside()) {
- if (isImage()) {
- if (style()->isLeftToRightDirection())
- marginRight = cMarkerPadding;
- else
- marginLeft = cMarkerPadding;
- } else switch (style()->listStyleType()) {
+ if (isImage())
+ marginEnd = cMarkerPadding;
+ else switch (style()->listStyleType()) {
case Disc:
case Circle:
case Square:
- if (style()->isLeftToRightDirection()) {
- marginLeft = -1;
- marginRight = font.ascent() - minPreferredLogicalWidth() + 1;
- } else {
- marginLeft = font.ascent() - minPreferredLogicalWidth() + 1;
- marginRight = -1;
- }
+ marginStart = -1;
+ marginEnd = font.ascent() - minPreferredLogicalWidth() + 1;
break;
default:
break;
@@ -1465,44 +1481,46 @@ void RenderListMarker::updateMargins()
} else {
if (style()->isLeftToRightDirection()) {
if (isImage())
- marginLeft = -minPreferredLogicalWidth() - cMarkerPadding;
+ marginStart = -minPreferredLogicalWidth() - cMarkerPadding;
else {
int offset = font.ascent() * 2 / 3;
switch (style()->listStyleType()) {
case Disc:
case Circle:
case Square:
- marginLeft = -offset - cMarkerPadding - 1;
+ marginStart = -offset - cMarkerPadding - 1;
break;
case NoneListStyle:
break;
default:
- marginLeft = m_text.isEmpty() ? 0 : -minPreferredLogicalWidth() - offset / 2;
+ marginStart = m_text.isEmpty() ? 0 : -minPreferredLogicalWidth() - offset / 2;
}
}
+ marginEnd = -marginStart - minPreferredLogicalWidth();
} else {
if (isImage())
- marginLeft = cMarkerPadding;
+ marginEnd = cMarkerPadding;
else {
int offset = font.ascent() * 2 / 3;
switch (style()->listStyleType()) {
case Disc:
case Circle:
case Square:
- marginLeft = offset + cMarkerPadding + 1 - minPreferredLogicalWidth();
+ marginEnd = offset + cMarkerPadding + 1 - minPreferredLogicalWidth();
break;
case NoneListStyle:
break;
default:
- marginLeft = m_text.isEmpty() ? 0 : offset / 2;
+ marginEnd = m_text.isEmpty() ? 0 : offset / 2;
}
}
+ marginStart = -marginEnd - minPreferredLogicalWidth();
}
- marginRight = -marginLeft - minPreferredLogicalWidth();
+
}
- style()->setMarginLeft(Length(marginLeft, Fixed));
- style()->setMarginRight(Length(marginRight, Fixed));
+ style()->setMarginStart(Length(marginStart, Fixed));
+ style()->setMarginEnd(Length(marginEnd, Fixed));
}
int RenderListMarker::lineHeight(bool firstLine, LineDirectionMode direction, LinePositionMode linePositionMode) const
@@ -1512,11 +1530,11 @@ int RenderListMarker::lineHeight(bool firstLine, LineDirectionMode direction, Li
return RenderBox::lineHeight(firstLine, direction, linePositionMode);
}
-int RenderListMarker::baselinePosition(bool firstLine, LineDirectionMode direction, LinePositionMode linePositionMode) const
+int RenderListMarker::baselinePosition(FontBaseline baselineType, bool firstLine, LineDirectionMode direction, LinePositionMode linePositionMode) const
{
if (!isImage())
- return m_listItem->baselinePosition(firstLine, direction, PositionOfInteriorLineBoxes);
- return RenderBox::baselinePosition(firstLine, direction, linePositionMode);
+ return m_listItem->baselinePosition(baselineType, firstLine, direction, PositionOfInteriorLineBoxes);
+ return RenderBox::baselinePosition(baselineType, firstLine, direction, linePositionMode);
}
String RenderListMarker::suffix() const
@@ -1546,14 +1564,16 @@ bool RenderListMarker::isInside() const
IntRect RenderListMarker::getRelativeMarkerRect()
{
if (isImage())
- return IntRect(x(), y(), m_image->imageSize(this, style()->effectiveZoom()).width(), m_image->imageSize(this, style()->effectiveZoom()).height());
-
+ return IntRect(0, 0, m_image->imageSize(this, style()->effectiveZoom()).width(), m_image->imageSize(this, style()->effectiveZoom()).height());
+
+ IntRect relativeRect;
EListStyleType type = style()->listStyleType();
switch (type) {
case Asterisks:
case Footnotes: {
const Font& font = style()->font();
- return IntRect(x(), y() + font.ascent(), font.width(m_text), font.height());
+ relativeRect = IntRect(0, 0, font.width(m_text), font.height());
+ break;
}
case Disc:
case Circle:
@@ -1562,7 +1582,8 @@ IntRect RenderListMarker::getRelativeMarkerRect()
const Font& font = style()->font();
int ascent = font.ascent();
int bulletWidth = (ascent * 2 / 3 + 1) / 2;
- return IntRect(x() + 1, y() + 3 * (ascent - ascent * 2 / 3) / 2, bulletWidth, bulletWidth);
+ relativeRect = IntRect(1, 3 * (ascent - ascent * 2 / 3) / 2, bulletWidth, bulletWidth);
+ break;
}
case NoneListStyle:
return IntRect();
@@ -1645,10 +1666,15 @@ IntRect RenderListMarker::getRelativeMarkerRect()
int itemWidth = font.width(m_text);
UChar suffixSpace[2] = { listMarkerSuffix(type, m_listItem->value()), ' ' };
int suffixSpaceWidth = font.width(TextRun(suffixSpace, 2));
- return IntRect(x(), y() + font.ascent(), itemWidth + suffixSpaceWidth, font.height());
+ relativeRect = IntRect(0, 0, itemWidth + suffixSpaceWidth, font.height());
+ }
+
+ if (!style()->isHorizontalWritingMode()) {
+ relativeRect = relativeRect.transposedRect();
+ relativeRect.setX(width() - relativeRect.x() - relativeRect.width());
}
- return IntRect();
+ return relativeRect;
}
void RenderListMarker::setSelectionState(SelectionState state)
diff --git a/WebCore/rendering/RenderListMarker.h b/WebCore/rendering/RenderListMarker.h
index fe025c3..d23e674 100644
--- a/WebCore/rendering/RenderListMarker.h
+++ b/WebCore/rendering/RenderListMarker.h
@@ -59,7 +59,7 @@ private:
virtual InlineBox* createInlineBox();
virtual int lineHeight(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
- virtual int baselinePosition(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
+ virtual int baselinePosition(FontBaseline, bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
bool isImage() const;
bool isText() const { return !isImage(); }
diff --git a/WebCore/rendering/RenderMenuList.cpp b/WebCore/rendering/RenderMenuList.cpp
index a88903f..5ad661f 100644
--- a/WebCore/rendering/RenderMenuList.cpp
+++ b/WebCore/rendering/RenderMenuList.cpp
@@ -419,7 +419,7 @@ PopupMenuStyle RenderMenuList::itemStyle(unsigned listIndex) const
Element* element = listItems[listIndex];
RenderStyle* style = element->renderStyle() ? element->renderStyle() : element->computedStyle();
- return style ? PopupMenuStyle(style->visitedDependentColor(CSSPropertyColor), itemBackgroundColor(listIndex), style->font(), style->visibility() == VISIBLE, style->textIndent(), style->direction()) : menuStyle();
+ return style ? PopupMenuStyle(style->visitedDependentColor(CSSPropertyColor), itemBackgroundColor(listIndex), style->font(), style->visibility() == VISIBLE, style->display() == NONE, style->textIndent(), style->direction()) : menuStyle();
}
Color RenderMenuList::itemBackgroundColor(unsigned listIndex) const
@@ -449,7 +449,7 @@ Color RenderMenuList::itemBackgroundColor(unsigned listIndex) const
PopupMenuStyle RenderMenuList::menuStyle() const
{
RenderStyle* s = m_innerBlock ? m_innerBlock->style() : style();
- return PopupMenuStyle(s->visitedDependentColor(CSSPropertyColor), s->visitedDependentColor(CSSPropertyBackgroundColor), s->font(), s->visibility() == VISIBLE, s->textIndent(), s->direction());
+ return PopupMenuStyle(s->visitedDependentColor(CSSPropertyColor), s->visitedDependentColor(CSSPropertyBackgroundColor), s->font(), s->visibility() == VISIBLE, s->display() == NONE, s->textIndent(), s->direction());
}
HostWindow* RenderMenuList::hostWindow() const
diff --git a/WebCore/rendering/RenderMenuList.h b/WebCore/rendering/RenderMenuList.h
index 7faa372..2c99b1e 100644
--- a/WebCore/rendering/RenderMenuList.h
+++ b/WebCore/rendering/RenderMenuList.h
@@ -137,7 +137,7 @@ private:
};
inline RenderMenuList* toRenderMenuList(RenderObject* object)
-{
+{
ASSERT(!object || object->isMenuList());
return static_cast<RenderMenuList*>(object);
}
diff --git a/WebCore/rendering/RenderObject.cpp b/WebCore/rendering/RenderObject.cpp
index b04d455..503b0a3 100644
--- a/WebCore/rendering/RenderObject.cpp
+++ b/WebCore/rendering/RenderObject.cpp
@@ -120,7 +120,6 @@ RenderObject* RenderObject::createObject(Node* node, RenderStyle* style)
return image;
}
-#if ENABLE(RUBY)
if (node->hasTagName(rubyTag)) {
if (style->display() == INLINE)
return new (arena) RenderRubyAsInline(node);
@@ -130,7 +129,6 @@ RenderObject* RenderObject::createObject(Node* node, RenderStyle* style)
// treat <rt> as ruby text ONLY if it still has its default treatment of block
if (node->hasTagName(rtTag) && style->display() == BLOCK)
return new (arena) RenderRubyText(node);
-#endif
switch (style->display()) {
case NONE:
@@ -260,6 +258,15 @@ bool RenderObject::isHR() const
return node() && node()->hasTagName(hrTag);
}
+bool RenderObject::isLegend() const
+{
+ return node() && (node()->hasTagName(legendTag)
+#if ENABLE(WML)
+ || node()->hasTagName(WMLNames::insertedLegendTag)
+#endif
+ );
+}
+
bool RenderObject::isHTMLMarquee() const
{
return node() && node()->renderer() == this && node()->hasTagName(marqueeTag);
diff --git a/WebCore/rendering/RenderObject.h b/WebCore/rendering/RenderObject.h
index 9c29ce1..bfc62fe 100644
--- a/WebCore/rendering/RenderObject.h
+++ b/WebCore/rendering/RenderObject.h
@@ -266,12 +266,12 @@ public:
virtual bool isRenderPart() const { return false; }
virtual bool isRenderView() const { return false; }
virtual bool isReplica() const { return false; }
-#if ENABLE(RUBY)
+
virtual bool isRuby() const { return false; }
virtual bool isRubyBase() const { return false; }
virtual bool isRubyRun() const { return false; }
virtual bool isRubyText() const { return false; }
-#endif
+
virtual bool isSlider() const { return false; }
virtual bool isTable() const { return false; }
virtual bool isTableCell() const { return false; }
@@ -288,6 +288,7 @@ public:
bool isRoot() const { return document()->documentElement() == m_node; }
bool isBody() const;
bool isHR() const;
+ bool isLegend() const;
bool isHTMLMarquee() const;
@@ -314,6 +315,7 @@ public:
// to add SVG renderer methods to RenderObject with an ASSERT_NOT_REACHED() default implementation.
virtual bool isSVGRoot() const { return false; }
virtual bool isSVGContainer() const { return false; }
+ virtual bool isSVGViewportContainer() const { return false; }
virtual bool isSVGGradientStop() const { return false; }
virtual bool isSVGHiddenContainer() const { return false; }
virtual bool isSVGPath() const { return false; }
diff --git a/WebCore/rendering/RenderReplaced.cpp b/WebCore/rendering/RenderReplaced.cpp
index a087038..b1a7711 100644
--- a/WebCore/rendering/RenderReplaced.cpp
+++ b/WebCore/rendering/RenderReplaced.cpp
@@ -284,17 +284,20 @@ VisiblePosition RenderReplaced::positionForPoint(const IntPoint& point)
RootInlineBox* root = box->root();
- int top = root->lineTop();
- int bottom = root->nextRootBox() ? root->nextRootBox()->lineTop() : root->lineBottom();
+ int top = root->selectionTop();
+ int bottom = root->selectionBottom();
- if (point.y() + y() < top)
+ int blockDirectionPosition = box->isHorizontal() ? point.y() + y() : point.x() + x();
+ int lineDirectionPosition = box->isHorizontal() ? point.x() + x() : point.y() + y();
+
+ if (blockDirectionPosition < top)
return createVisiblePosition(caretMinOffset(), DOWNSTREAM); // coordinates are above
- if (point.y() + y() >= bottom)
+ if (blockDirectionPosition >= bottom)
return createVisiblePosition(caretMaxOffset(), DOWNSTREAM); // coordinates are below
if (node()) {
- if (point.x() <= width() / 2)
+ if (lineDirectionPosition <= box->logicalLeft() + (box->logicalWidth() / 2))
return createVisiblePosition(0, DOWNSTREAM);
return createVisiblePosition(1, DOWNSTREAM);
}
@@ -326,25 +329,22 @@ IntRect RenderReplaced::localSelectionRect(bool checkWhetherSelected) const
if (!m_inlineBoxWrapper)
// We're a block-level replaced element. Just return our own dimensions.
return IntRect(0, 0, width(), height());
-
- RenderBlock* cb = containingBlock();
- if (!cb)
- return IntRect();
RootInlineBox* root = m_inlineBoxWrapper->root();
- return IntRect(0, root->selectionTop() - y(), width(), root->selectionHeight());
+ int newLogicalTop = root->block()->style()->isFlippedBlocksWritingMode() ? m_inlineBoxWrapper->logicalBottom() - root->selectionBottom() : root->selectionTop() - m_inlineBoxWrapper->logicalTop();
+ if (root->block()->style()->isHorizontalWritingMode())
+ return IntRect(0, newLogicalTop, width(), root->selectionHeight());
+ return IntRect(newLogicalTop, 0, root->selectionHeight(), height());
}
void RenderReplaced::setSelectionState(SelectionState s)
{
- RenderBox::setSelectionState(s);
+ RenderBox::setSelectionState(s); // The selection state for our containing block hierarchy is updated by the base class call.
if (m_inlineBoxWrapper) {
RootInlineBox* line = m_inlineBoxWrapper->root();
if (line)
line->setHasSelectedChildren(isSelected());
}
-
- containingBlock()->setSelectionState(s);
}
bool RenderReplaced::isSelected() const
diff --git a/WebCore/rendering/RenderReplaced.h b/WebCore/rendering/RenderReplaced.h
index fbc5151..d6ebba6 100644
--- a/WebCore/rendering/RenderReplaced.h
+++ b/WebCore/rendering/RenderReplaced.h
@@ -53,7 +53,7 @@ protected:
virtual void paint(PaintInfo&, int tx, int ty);
bool shouldPaint(PaintInfo&, int& tx, int& ty);
- IntRect localSelectionRect(bool checkWhetherSelected = true) const;
+ IntRect localSelectionRect(bool checkWhetherSelected = true) const; // This is in local coordinates, but it's a physical rect (so the top left corner is physical top left).
private:
virtual const char* renderName() const { return "RenderReplaced"; }
diff --git a/WebCore/rendering/RenderRuby.cpp b/WebCore/rendering/RenderRuby.cpp
index 7e19a79..1c5cfaf 100644
--- a/WebCore/rendering/RenderRuby.cpp
+++ b/WebCore/rendering/RenderRuby.cpp
@@ -30,7 +30,6 @@
#include "config.h"
-#if ENABLE(RUBY)
#include "RenderRuby.h"
#include "RenderRubyRun.h"
@@ -203,5 +202,3 @@ void RenderRubyAsBlock::removeChild(RenderObject* child)
}
} // namespace WebCore
-
-#endif // ENABLE(RUBY)
diff --git a/WebCore/rendering/RenderRuby.h b/WebCore/rendering/RenderRuby.h
index a5dafe9..49a84d8 100644
--- a/WebCore/rendering/RenderRuby.h
+++ b/WebCore/rendering/RenderRuby.h
@@ -31,8 +31,6 @@
#ifndef RenderRuby_h
#define RenderRuby_h
-#if ENABLE(RUBY)
-
#include "RenderBlock.h"
#include "RenderInline.h"
@@ -86,6 +84,4 @@ private:
} // namespace WebCore
-#endif
-
#endif // RenderRuby_h
diff --git a/WebCore/rendering/RenderRubyBase.cpp b/WebCore/rendering/RenderRubyBase.cpp
index 967a054..83399a1 100644
--- a/WebCore/rendering/RenderRubyBase.cpp
+++ b/WebCore/rendering/RenderRubyBase.cpp
@@ -30,7 +30,6 @@
#include "config.h"
-#if ENABLE(RUBY)
#include "RenderRubyBase.h"
namespace WebCore {
@@ -184,5 +183,3 @@ void RenderRubyBase::mergeBlockChildren(RenderRubyBase* toBase, RenderObject* fr
}
} // namespace WebCore
-
-#endif // ENABLE(RUBY)
diff --git a/WebCore/rendering/RenderRubyBase.h b/WebCore/rendering/RenderRubyBase.h
index 29c4858..c029bd5 100644
--- a/WebCore/rendering/RenderRubyBase.h
+++ b/WebCore/rendering/RenderRubyBase.h
@@ -31,8 +31,6 @@
#ifndef RenderRubyBase_h
#define RenderRubyBase_h
-#if ENABLE(RUBY)
-
#include "RenderBlock.h"
namespace WebCore {
@@ -62,6 +60,4 @@ private:
} // namespace WebCore
-#endif
-
#endif // RenderRubyBase_h
diff --git a/WebCore/rendering/RenderRubyRun.cpp b/WebCore/rendering/RenderRubyRun.cpp
index d48646b..a83a3e2 100644
--- a/WebCore/rendering/RenderRubyRun.cpp
+++ b/WebCore/rendering/RenderRubyRun.cpp
@@ -30,7 +30,6 @@
#include "config.h"
-#if ENABLE(RUBY)
#include "RenderRubyRun.h"
#include "RenderRubyBase.h"
@@ -221,10 +220,17 @@ RenderRubyRun* RenderRubyRun::staticCreateRubyRun(const RenderObject* parentRuby
RefPtr<RenderStyle> newStyle = RenderStyle::create();
newStyle->inheritFrom(parentRuby->style());
newStyle->setDisplay(INLINE_BLOCK);
+ if (parentRuby->style()->isFlippedLinesWritingMode()) {
+ // Ruby text is always in the line direction, so invert our block flow relative to the parent to
+ // ensure that the Ruby ends up on the correct side.
+ if (parentRuby->style()->isHorizontalWritingMode())
+ newStyle->setWritingMode(TopToBottomWritingMode);
+ else
+ newStyle->setWritingMode(RightToLeftWritingMode);
+ }
+
rr->setStyle(newStyle.release());
return rr;
}
} // namespace WebCore
-
-#endif // ENABLE(RUBY)
diff --git a/WebCore/rendering/RenderRubyRun.h b/WebCore/rendering/RenderRubyRun.h
index acf359b..222ddb6 100644
--- a/WebCore/rendering/RenderRubyRun.h
+++ b/WebCore/rendering/RenderRubyRun.h
@@ -31,8 +31,6 @@
#ifndef RenderRubyRun_h
#define RenderRubyRun_h
-#if ENABLE(RUBY)
-
#include "RenderBlock.h"
namespace WebCore {
@@ -80,6 +78,4 @@ private:
} // namespace WebCore
-#endif
-
#endif // RenderRubyRun_h
diff --git a/WebCore/rendering/RenderRubyText.cpp b/WebCore/rendering/RenderRubyText.cpp
index 12e8fea..14cf7fc 100644
--- a/WebCore/rendering/RenderRubyText.cpp
+++ b/WebCore/rendering/RenderRubyText.cpp
@@ -30,7 +30,6 @@
#include "config.h"
-#if ENABLE(RUBY)
#include "RenderRubyText.h"
namespace WebCore {
@@ -50,5 +49,3 @@ bool RenderRubyText::isChildAllowed(RenderObject* child, RenderStyle*) const
}
} // namespace WebCore
-
-#endif // ENABLE(RUBY)
diff --git a/WebCore/rendering/RenderRubyText.h b/WebCore/rendering/RenderRubyText.h
index 865d179..e475914 100644
--- a/WebCore/rendering/RenderRubyText.h
+++ b/WebCore/rendering/RenderRubyText.h
@@ -31,8 +31,6 @@
#ifndef RenderRubyText_h
#define RenderRubyText_h
-#if ENABLE(RUBY)
-
#include "RenderBlock.h"
namespace WebCore {
@@ -51,6 +49,4 @@ public:
} // namespace WebCore
-#endif
-
#endif // RenderRubyText_h
diff --git a/WebCore/rendering/RenderSVGGradientStop.cpp b/WebCore/rendering/RenderSVGGradientStop.cpp
index a5e5808..094fc7f 100644
--- a/WebCore/rendering/RenderSVGGradientStop.cpp
+++ b/WebCore/rendering/RenderSVGGradientStop.cpp
@@ -72,7 +72,7 @@ void RenderSVGGradientStop::layout()
SVGGradientElement* RenderSVGGradientStop::gradientElement() const
{
- ContainerNode* parentNode = node()->parent();
+ ContainerNode* parentNode = node()->parentNode();
if (parentNode->hasTagName(linearGradientTag) || parentNode->hasTagName(radialGradientTag))
return static_cast<SVGGradientElement*>(parentNode);
return 0;
diff --git a/WebCore/rendering/RenderSVGViewportContainer.h b/WebCore/rendering/RenderSVGViewportContainer.h
index 63c336c..5373ca8 100644
--- a/WebCore/rendering/RenderSVGViewportContainer.h
+++ b/WebCore/rendering/RenderSVGViewportContainer.h
@@ -36,6 +36,7 @@ public:
private:
virtual bool isSVGContainer() const { return true; }
+ virtual bool isSVGViewportContainer() const { return true; }
virtual const char* renderName() const { return "RenderSVGViewportContainer"; }
AffineTransform viewportTransform() const;
diff --git a/WebCore/rendering/RenderSlider.cpp b/WebCore/rendering/RenderSlider.cpp
index 35d72f4..d680bc7 100644
--- a/WebCore/rendering/RenderSlider.cpp
+++ b/WebCore/rendering/RenderSlider.cpp
@@ -159,8 +159,9 @@ RenderSlider::~RenderSlider()
m_thumb->detach();
}
-int RenderSlider::baselinePosition(bool /*firstLine*/, LineDirectionMode, LinePositionMode) const
+int RenderSlider::baselinePosition(FontBaseline, bool /*firstLine*/, LineDirectionMode, LinePositionMode) const
{
+ // FIXME: Patch this function for writing-mode.
return height() + marginTop();
}
@@ -285,7 +286,7 @@ void RenderSlider::layout()
if (oldSize != size())
thumb->setChildNeedsLayout(true, false);
- LayoutStateMaintainer statePusher(view(), this, size());
+ LayoutStateMaintainer statePusher(view(), this, size(), style()->isFlippedBlocksWritingMode());
IntRect oldThumbRect = thumb->frameRect();
diff --git a/WebCore/rendering/RenderSlider.h b/WebCore/rendering/RenderSlider.h
index fa743de..03779a3 100644
--- a/WebCore/rendering/RenderSlider.h
+++ b/WebCore/rendering/RenderSlider.h
@@ -42,7 +42,7 @@ namespace WebCore {
virtual const char* renderName() const { return "RenderSlider"; }
virtual bool isSlider() const { return true; }
- virtual int baselinePosition(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
+ virtual int baselinePosition(FontBaseline, bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
virtual void computePreferredLogicalWidths();
virtual void layout();
virtual void updateFromElement();
diff --git a/WebCore/rendering/RenderTable.cpp b/WebCore/rendering/RenderTable.cpp
index d158284..de10680 100644
--- a/WebCore/rendering/RenderTable.cpp
+++ b/WebCore/rendering/RenderTable.cpp
@@ -268,7 +268,7 @@ void RenderTable::layout()
recalcSectionsIfNeeded();
LayoutRepainter repainter(*this, checkForRepaintDuringLayout());
- LayoutStateMaintainer statePusher(view(), this, IntSize(x(), y()));
+ LayoutStateMaintainer statePusher(view(), this, IntSize(x(), y()), style()->isFlippedBlocksWritingMode());
setLogicalHeight(0);
m_overflow.clear();
@@ -1211,10 +1211,12 @@ bool RenderTable::nodeAtPoint(const HitTestRequest& request, HitTestResult& resu
// Check kids first.
if (!hasOverflowClip() || overflowClipRect(tx, ty).intersects(result.rectForPoint(xPos, yPos))) {
for (RenderObject* child = lastChild(); child; child = child->previousSibling()) {
- if (child->isBox() && !toRenderBox(child)->hasSelfPaintingLayer() && (child->isTableSection() || child == m_caption) &&
- child->nodeAtPoint(request, result, xPos, yPos, tx, ty, action)) {
- updateHitTestResult(result, IntPoint(xPos - tx, yPos - ty));
- return true;
+ if (child->isBox() && !toRenderBox(child)->hasSelfPaintingLayer() && (child->isTableSection() || child == m_caption)) {
+ IntPoint childPoint = flipForWritingMode(toRenderBox(child), IntPoint(tx, ty), ParentToChildFlippingAdjustment);
+ if (child->nodeAtPoint(request, result, xPos, yPos, childPoint.x(), childPoint.y(), action)) {
+ updateHitTestResult(result, IntPoint(xPos - childPoint.x(), yPos - childPoint.y()));
+ return true;
+ }
}
}
}
@@ -1222,7 +1224,7 @@ bool RenderTable::nodeAtPoint(const HitTestRequest& request, HitTestResult& resu
// Check our bounds next.
IntRect boundsRect = IntRect(tx, ty, width(), height());
if (visibleToHitTesting() && (action == HitTestBlockBackground || action == HitTestChildBlockBackground) && boundsRect.intersects(result.rectForPoint(xPos, yPos))) {
- updateHitTestResult(result, IntPoint(xPos - tx, yPos - ty));
+ updateHitTestResult(result, flipForWritingMode(IntPoint(xPos - tx, yPos - ty)));
if (!result.addNodeToRectBasedTestResult(node(), xPos, yPos, boundsRect))
return true;
}
diff --git a/WebCore/rendering/RenderTableCell.cpp b/WebCore/rendering/RenderTableCell.cpp
index 3ba185a..801a362 100644
--- a/WebCore/rendering/RenderTableCell.cpp
+++ b/WebCore/rendering/RenderTableCell.cpp
@@ -299,19 +299,15 @@ void RenderTableCell::computeRectForRepaint(RenderBoxModelObject* repaintContain
RenderBlock::computeRectForRepaint(repaintContainer, r, fixed);
}
-int RenderTableCell::baselinePosition(bool firstLine, LineDirectionMode lineDirection, LinePositionMode linePositionMode) const
+int RenderTableCell::baselinePosition() const
{
- // FIXME: This function still needs to be patched for writing-mode.
- if (linePositionMode == PositionOfInteriorLineBoxes)
- return RenderBlock::baselinePosition(firstLine, lineDirection, linePositionMode);
-
// <http://www.w3.org/TR/2007/CR-CSS21-20070719/tables.html#height-layout>: The baseline of a cell is the baseline of
// the first in-flow line box in the cell, or the first in-flow table-row in the cell, whichever comes first. If there
// is no such line box or table-row, the baseline is the bottom of content edge of the cell box.
int firstLineBaseline = firstLineBoxBaseline();
if (firstLineBaseline != -1)
return firstLineBaseline;
- return paddingTop() + borderTop() + contentHeight();
+ return paddingBefore() + borderBefore() + contentLogicalHeight();
}
void RenderTableCell::styleWillChange(StyleDifference diff, const RenderStyle* newStyle)
diff --git a/WebCore/rendering/RenderTableCell.h b/WebCore/rendering/RenderTableCell.h
index 15e6bab..281c226 100644
--- a/WebCore/rendering/RenderTableCell.h
+++ b/WebCore/rendering/RenderTableCell.h
@@ -98,7 +98,7 @@ public:
void paintBackgroundsBehindCell(PaintInfo&, int tx, int ty, RenderObject* backgroundObject);
- virtual int baselinePosition(bool firstLine = false, LineDirectionMode = HorizontalLine, LinePositionMode = PositionOnContainingLine) const;
+ int baselinePosition() const;
void setIntrinsicPaddingBefore(int p) { m_intrinsicPaddingBefore = p; }
void setIntrinsicPaddingAfter(int p) { m_intrinsicPaddingAfter = p; }
diff --git a/WebCore/rendering/RenderTableRow.cpp b/WebCore/rendering/RenderTableRow.cpp
index 2166ef2..98544a6 100644
--- a/WebCore/rendering/RenderTableRow.cpp
+++ b/WebCore/rendering/RenderTableRow.cpp
@@ -115,7 +115,7 @@ void RenderTableRow::layout()
ASSERT(needsLayout());
// Table rows do not add translation.
- LayoutStateMaintainer statePusher(view(), this, IntSize());
+ LayoutStateMaintainer statePusher(view(), this, IntSize(), style()->isFlippedBlocksWritingMode());
bool paginated = view()->layoutState()->isPaginated();
@@ -175,9 +175,12 @@ bool RenderTableRow::nodeAtPoint(const HitTestRequest& request, HitTestResult& r
// at the moment (a demoted inline <form> for example). If we ever implement a
// table-specific hit-test method (which we should do for performance reasons anyway),
// then we can remove this check.
- if (child->isTableCell() && !toRenderBox(child)->hasSelfPaintingLayer() && child->nodeAtPoint(request, result, x, y, tx, ty, action)) {
- updateHitTestResult(result, IntPoint(x - tx, y - ty));
- return true;
+ if (child->isTableCell() && !toRenderBox(child)->hasSelfPaintingLayer()) {
+ IntPoint cellPoint = flipForWritingMode(toRenderTableCell(child), IntPoint(tx, ty), ParentToChildFlippingAdjustment);
+ if (child->nodeAtPoint(request, result, x, y, cellPoint.x(), cellPoint.y(), action)) {
+ updateHitTestResult(result, IntPoint(x - cellPoint.x(), y - cellPoint.y()));
+ return true;
+ }
}
}
diff --git a/WebCore/rendering/RenderTableSection.cpp b/WebCore/rendering/RenderTableSection.cpp
index e07461f..30620d2 100644
--- a/WebCore/rendering/RenderTableSection.cpp
+++ b/WebCore/rendering/RenderTableSection.cpp
@@ -430,7 +430,7 @@ void RenderTableSection::layout()
{
ASSERT(needsLayout());
- LayoutStateMaintainer statePusher(view(), this, IntSize(x(), y()));
+ LayoutStateMaintainer statePusher(view(), this, IntSize(x(), y()), style()->isFlippedBlocksWritingMode());
for (RenderObject* child = children()->firstChild(); child; child = child->nextSibling()) {
if (child->isTableRow()) {
child->layoutIfNeeded();
@@ -571,7 +571,7 @@ int RenderTableSection::layoutRows(int toAdd)
int vspacing = table()->vBorderSpacing();
int nEffCols = table()->numEffCols();
- LayoutStateMaintainer statePusher(view(), this, IntSize(x(), y()));
+ LayoutStateMaintainer statePusher(view(), this, IntSize(x(), y()), style()->isFlippedBlocksWritingMode());
for (int r = 0; r < totalRows; r++) {
// Set the row's x/y position and width/height.
@@ -1327,36 +1327,44 @@ bool RenderTableSection::nodeAtPoint(const HitTestRequest& request, HitTestResul
// at the moment (a demoted inline <form> for example). If we ever implement a
// table-specific hit-test method (which we should do for performance reasons anyway),
// then we can remove this check.
- if (child->isBox() && !toRenderBox(child)->hasSelfPaintingLayer() && child->nodeAtPoint(request, result, xPos, yPos, tx, ty, action)) {
- updateHitTestResult(result, IntPoint(xPos - tx, yPos - ty));
- return true;
+ if (child->isBox() && !toRenderBox(child)->hasSelfPaintingLayer()) {
+ IntPoint childPoint = flipForWritingMode(toRenderBox(child), IntPoint(tx, ty), ParentToChildFlippingAdjustment);
+ if (child->nodeAtPoint(request, result, xPos, yPos, childPoint.x(), childPoint.y(), action)) {
+ updateHitTestResult(result, IntPoint(xPos - childPoint.x(), yPos - childPoint.y()));
+ return true;
+ }
}
}
return false;
}
- int relativeY = yPos - ty;
- // leftrow corresponds to the first row that starts after the y mouse position
- unsigned leftrow = std::upper_bound(m_rowPos.begin(), m_rowPos.end(), relativeY) - m_rowPos.begin();
- if (leftrow == m_rowPos.size())
+ IntPoint location = IntPoint(xPos - tx, yPos - ty);
+ if (style()->isFlippedBlocksWritingMode()) {
+ if (style()->isHorizontalWritingMode())
+ location.setY(height() - location.y());
+ else
+ location.setX(width() - location.x());
+ }
+
+ int offsetInColumnDirection = style()->isHorizontalWritingMode() ? location.y() : location.x();
+ // Find the first row that starts after offsetInColumnDirection.
+ unsigned nextRow = std::upper_bound(m_rowPos.begin(), m_rowPos.end(), offsetInColumnDirection) - m_rowPos.begin();
+ if (nextRow == m_rowPos.size())
return false;
- // Grab the last row that starts before the y mouse position.
- if (leftrow > 0)
- --leftrow;
+ // Now set hitRow to the index of the hit row, or 0.
+ unsigned hitRow = nextRow > 0 ? nextRow - 1 : 0;
Vector<int>& columnPos = table()->columnPositions();
- bool rtl = !style()->isLeftToRightDirection();
- int relativeX = xPos - tx;
- if (rtl)
- relativeX = columnPos[columnPos.size() - 1] - relativeX;
+ int offsetInRowDirection = style()->isHorizontalWritingMode() ? location.x() : location.y();
+ if (!style()->isLeftToRightDirection())
+ offsetInRowDirection = columnPos[columnPos.size() - 1] - offsetInRowDirection;
- unsigned leftcol = std::lower_bound(columnPos.begin(), columnPos.end(), relativeX) - columnPos.begin();
- if (leftcol == columnPos.size())
+ unsigned nextColumn = std::lower_bound(columnPos.begin(), columnPos.end(), offsetInRowDirection) - columnPos.begin();
+ if (nextColumn == columnPos.size())
return false;
- if (leftcol > 0)
- --leftcol;
+ unsigned hitColumn = nextColumn > 0 ? nextColumn - 1 : 0;
- CellStruct& current = cellAt(leftrow, leftcol);
+ CellStruct& current = cellAt(hitRow, hitColumn);
// If the cell is empty, there's nothing to do
if (!current.hasCells())
@@ -1364,8 +1372,9 @@ bool RenderTableSection::nodeAtPoint(const HitTestRequest& request, HitTestResul
for (int i = current.cells.size() - 1; i >= 0; --i) {
RenderTableCell* cell = current.cells[i];
- if (static_cast<RenderObject*>(cell)->nodeAtPoint(request, result, xPos, yPos, tx, ty, action)) {
- updateHitTestResult(result, IntPoint(xPos - tx, yPos - ty));
+ IntPoint cellPoint = flipForWritingMode(cell, IntPoint(tx, ty), ParentToChildFlippingAdjustment);
+ if (static_cast<RenderObject*>(cell)->nodeAtPoint(request, result, xPos, yPos, cellPoint.x(), cellPoint.y(), action)) {
+ updateHitTestResult(result, IntPoint(xPos - cellPoint.x(), yPos - cellPoint.y()));
return true;
}
}
diff --git a/WebCore/rendering/RenderText.cpp b/WebCore/rendering/RenderText.cpp
index aa362b3..7635d07 100644
--- a/WebCore/rendering/RenderText.cpp
+++ b/WebCore/rendering/RenderText.cpp
@@ -59,6 +59,9 @@ static void makeCapitalized(String* string, UChar previous)
unsigned length = string->length();
const UChar* characters = string->characters();
+ if (length >= numeric_limits<unsigned>::max())
+ CRASH();
+
StringBuffer stringWithPrevious(length + 1);
stringWithPrevious[0] = previous == noBreakSpace ? ' ' : previous;
for (unsigned i = 1; i < length + 1; i++) {
@@ -422,13 +425,13 @@ VisiblePosition RenderText::positionForPoint(const IntPoint& point)
int pointBlockDirection = firstTextBox()->isHorizontal() ? point.y() : point.x();
// FIXME: We should be able to roll these special cases into the general cases in the loop below.
- if (firstTextBox() && pointBlockDirection < firstTextBox()->root()->lineBottom() && pointLineDirection < firstTextBox()->logicalLeft()) {
+ if (firstTextBox() && pointBlockDirection < firstTextBox()->root()->selectionBottom() && pointLineDirection < firstTextBox()->logicalLeft()) {
// at the y coordinate of the first line or above
// and the x coordinate is to the left of the first text box left edge
offset = firstTextBox()->offsetForPosition(pointLineDirection);
return createVisiblePosition(offset + firstTextBox()->start(), DOWNSTREAM);
}
- if (lastTextBox() && pointBlockDirection >= lastTextBox()->root()->lineTop() && pointLineDirection >= lastTextBox()->logicalRight()) {
+ if (lastTextBox() && pointBlockDirection >= lastTextBox()->root()->selectionTop() && pointLineDirection >= lastTextBox()->logicalRight()) {
// at the y coordinate of the last line or below
// and the x coordinate is to the right of the last text box right edge
offset = lastTextBox()->offsetForPosition(pointLineDirection);
@@ -437,8 +440,11 @@ VisiblePosition RenderText::positionForPoint(const IntPoint& point)
InlineTextBox* lastBoxAbove = 0;
for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox()) {
- if (pointBlockDirection >= box->root()->lineTop()) {
- int bottom = box->root()->nextRootBox() ? box->root()->nextRootBox()->lineTop() : box->root()->lineBottom();
+ RootInlineBox* rootBox = box->root();
+ if (pointBlockDirection >= rootBox->selectionTop()) {
+ int bottom = rootBox->selectionBottom();
+ if (rootBox->nextRootBox())
+ bottom = min(bottom, rootBox->nextRootBox()->lineTop());
if (pointBlockDirection < bottom) {
offset = box->offsetForPosition(pointLineDirection);
@@ -481,8 +487,8 @@ IntRect RenderText::localCaretRect(InlineBox* inlineBox, int caretOffset, int* e
InlineTextBox* box = static_cast<InlineTextBox*>(inlineBox);
- int height = box->root()->lineBottom() - box->root()->lineTop();
- int top = box->root()->lineTop();
+ int height = box->root()->selectionHeight();
+ int top = box->root()->selectionTop();
int left = box->positionForOffset(caretOffset);
diff --git a/WebCore/rendering/RenderTextControl.cpp b/WebCore/rendering/RenderTextControl.cpp
index e81dfb9..9b9e51a 100644
--- a/WebCore/rendering/RenderTextControl.cpp
+++ b/WebCore/rendering/RenderTextControl.cpp
@@ -30,6 +30,7 @@
#include "Frame.h"
#include "HTMLBRElement.h"
#include "HTMLFormControlElement.h"
+#include "HTMLInputElement.h"
#include "HTMLNames.h"
#include "HitTestResult.h"
#include "RenderLayer.h"
@@ -256,6 +257,22 @@ void setSelectionRange(Node* node, int start, int end)
frame->selection()->setSelection(newSelection);
}
+bool RenderTextControl::isSelectableElement(Node* node) const
+{
+ if (!node || !m_innerText)
+ return false;
+
+ if (node->rootEditableElement() == m_innerText)
+ return true;
+
+ if (!m_innerText->contains(node))
+ return false;
+
+ Node* shadowAncestor = node->shadowAncestorNode();
+ return shadowAncestor && (shadowAncestor->hasTagName(textareaTag)
+ || (shadowAncestor->hasTagName(inputTag) && static_cast<HTMLInputElement*>(shadowAncestor)->isTextField()));
+}
+
PassRefPtr<Range> RenderTextControl::selection(int start, int end) const
{
if (!m_innerText)
@@ -284,7 +301,7 @@ VisiblePosition RenderTextControl::visiblePositionForIndex(int index) const
int RenderTextControl::indexForVisiblePosition(const VisiblePosition& pos) const
{
Position indexPosition = pos.deepEquivalent();
- if (!indexPosition.node() || indexPosition.node()->rootEditableElement() != m_innerText)
+ if (!isSelectableElement(indexPosition.node()))
return 0;
ExceptionCode ec = 0;
RefPtr<Range> range = Range::create(document());
@@ -561,14 +578,52 @@ void RenderTextControl::updatePlaceholderVisibility(bool placeholderShouldBeVisi
{
bool oldPlaceholderVisible = m_placeholderVisible;
m_placeholderVisible = placeholderShouldBeVisible;
- if (oldPlaceholderVisible != m_placeholderVisible || placeholderValueChanged) {
- // Sets the inner text style to the normal style or :placeholder style.
- setInnerTextStyle(createInnerTextStyle(textBaseStyle()));
+ if (oldPlaceholderVisible != m_placeholderVisible || placeholderValueChanged)
+ repaint();
+}
- // updateFromElement() of the subclasses updates the text content
- // to the element's value(), placeholder(), or the empty string.
- updateFromElement();
+void RenderTextControl::paintPlaceholder(PaintInfo& paintInfo, int tx, int ty)
+{
+ if (style()->visibility() != VISIBLE)
+ return;
+
+ IntRect clipRect(tx + borderLeft(), ty + borderTop(), width() - borderLeft() - borderRight(), height() - borderBottom() - borderTop());
+ if (clipRect.isEmpty())
+ return;
+
+ paintInfo.context->save();
+
+ paintInfo.context->clip(clipRect);
+
+ RefPtr<RenderStyle> placeholderStyle = getCachedPseudoStyle(INPUT_PLACEHOLDER);
+ if (!placeholderStyle)
+ placeholderStyle = style();
+
+ paintInfo.context->setFillColor(placeholderStyle->visitedDependentColor(CSSPropertyColor), placeholderStyle->colorSpace());
+
+ String placeholderText = static_cast<HTMLTextFormControlElement*>(node())->strippedPlaceholder();
+ TextRun textRun(placeholderText.characters(), placeholderText.length(), 0, 0, 0, !placeholderStyle->isLeftToRightDirection(), placeholderStyle->unicodeBidi() == Override, false, false);
+
+ RenderBox* textRenderer = innerTextElement() ? innerTextElement()->renderBox() : 0;
+ if (textRenderer) {
+ IntPoint textPoint;
+ textPoint.setY(ty + borderTop() + paddingTop() + textRenderer->paddingTop() + placeholderStyle->font().ascent());
+ if (placeholderStyle->isLeftToRightDirection())
+ textPoint.setX(tx + textBlockInsetLeft());
+ else
+ textPoint.setX(tx + width() - textBlockInsetRight() - style()->font().width(textRun));
+
+ paintInfo.context->drawBidiText(placeholderStyle->font(), textRun, textPoint);
}
+ paintInfo.context->restore();
+}
+
+void RenderTextControl::paintObject(PaintInfo& paintInfo, int tx, int ty)
+{
+ if (m_placeholderVisible && paintInfo.phase == PaintPhaseForeground)
+ paintPlaceholder(paintInfo, tx, ty);
+
+ RenderBlock::paintObject(paintInfo, tx, ty);
}
} // namespace WebCore
diff --git a/WebCore/rendering/RenderTextControl.h b/WebCore/rendering/RenderTextControl.h
index 0060973..4b1d6e3 100644
--- a/WebCore/rendering/RenderTextControl.h
+++ b/WebCore/rendering/RenderTextControl.h
@@ -96,6 +96,7 @@ private:
virtual bool canHaveChildren() const { return false; }
virtual bool avoidsFloats() const { return true; }
void setInnerTextStyle(PassRefPtr<RenderStyle>);
+ virtual void paintObject(PaintInfo&, int tx, int ty);
virtual void addFocusRingRects(Vector<IntRect>&, int tx, int ty);
@@ -107,6 +108,12 @@ private:
bool hasVisibleTextArea() const;
friend void setSelectionRange(Node*, int start, int end);
+ bool isSelectableElement(Node*) const;
+
+ virtual int textBlockInsetLeft() const = 0;
+ virtual int textBlockInsetRight() const = 0;
+
+ void paintPlaceholder(PaintInfo&, int tx, int ty);
bool m_wasChangedSinceLastChangeEvent;
bool m_lastChangeWasUserEdit;
diff --git a/WebCore/rendering/RenderTextControlMultiLine.cpp b/WebCore/rendering/RenderTextControlMultiLine.cpp
index 2c93164..eaa7eca 100644
--- a/WebCore/rendering/RenderTextControlMultiLine.cpp
+++ b/WebCore/rendering/RenderTextControlMultiLine.cpp
@@ -55,8 +55,6 @@ void RenderTextControlMultiLine::subtreeHasChanged()
if (!node()->focused())
return;
- node()->dispatchEvent(Event::create(eventNames().inputEvent, true, false));
-
if (Frame* frame = this->frame())
frame->editor()->textDidChangeInTextArea(textArea);
}
@@ -66,10 +64,7 @@ bool RenderTextControlMultiLine::nodeAtPoint(const HitTestRequest& request, HitT
if (!RenderTextControl::nodeAtPoint(request, result, x, y, tx, ty, hitTestAction))
return false;
- bool resultIsTextValueOrPlaceholder
- = (!m_placeholderVisible && result.innerNode() == innerTextElement())
- || (m_placeholderVisible && result.innerNode()->isDescendantOf(innerTextElement()));
- if (result.innerNode() == node() || resultIsTextValueOrPlaceholder)
+ if (result.innerNode() == node() || result.innerNode() == innerTextElement())
hitInnerTextElement(result, x, y, tx, ty);
return true;
@@ -102,9 +97,9 @@ void RenderTextControlMultiLine::adjustControlHeightBasedOnLineHeight(int lineHe
setHeight(height() + lineHeight * static_cast<HTMLTextAreaElement*>(node())->rows());
}
-int RenderTextControlMultiLine::baselinePosition(bool firstLine, LineDirectionMode direction, LinePositionMode linePositionMode) const
+int RenderTextControlMultiLine::baselinePosition(FontBaseline baselineType, bool firstLine, LineDirectionMode direction, LinePositionMode linePositionMode) const
{
- return RenderBox::baselinePosition(firstLine, direction, linePositionMode);
+ return RenderBox::baselinePosition(baselineType, firstLine, direction, linePositionMode);
}
void RenderTextControlMultiLine::updateFromElement()
@@ -112,11 +107,7 @@ void RenderTextControlMultiLine::updateFromElement()
createSubtreeIfNeeded(0);
RenderTextControl::updateFromElement();
- HTMLTextAreaElement* textArea = static_cast<HTMLTextAreaElement*>(node());
- if (m_placeholderVisible)
- setInnerTextValue(textArea->strippedPlaceholder());
- else
- setInnerTextValue(textArea->value());
+ setInnerTextValue(static_cast<HTMLTextAreaElement*>(node())->value());
}
void RenderTextControlMultiLine::cacheSelection(int start, int end)
@@ -126,16 +117,8 @@ void RenderTextControlMultiLine::cacheSelection(int start, int end)
PassRefPtr<RenderStyle> RenderTextControlMultiLine::createInnerTextStyle(const RenderStyle* startStyle) const
{
- RefPtr<RenderStyle> textBlockStyle;
- if (m_placeholderVisible) {
- if (RenderStyle* pseudoStyle = getCachedPseudoStyle(INPUT_PLACEHOLDER))
- textBlockStyle = RenderStyle::clone(pseudoStyle);
- }
- if (!textBlockStyle) {
- textBlockStyle = RenderStyle::create();
- textBlockStyle->inheritFrom(startStyle);
- }
-
+ RefPtr<RenderStyle> textBlockStyle = RenderStyle::create();
+ textBlockStyle->inheritFrom(startStyle);
adjustInnerTextStyle(startStyle, textBlockStyle.get());
textBlockStyle->setDisplay(BLOCK);
@@ -146,5 +129,25 @@ RenderStyle* RenderTextControlMultiLine::textBaseStyle() const
{
return style();
}
+
+int RenderTextControlMultiLine::textBlockInsetLeft() const
+{
+ int inset = borderLeft() + paddingLeft();
+ if (HTMLElement* innerText = innerTextElement()) {
+ if (RenderBox* innerTextRenderer = innerText->renderBox())
+ inset += innerTextRenderer->paddingLeft();
+ }
+ return inset;
+}
+
+int RenderTextControlMultiLine::textBlockInsetRight() const
+{
+ int inset = borderRight() + paddingRight();
+ if (HTMLElement* innerText = innerTextElement()) {
+ if (RenderBox* innerTextRenderer = innerText->renderBox())
+ inset += innerTextRenderer->paddingRight();
+ }
+ return inset;
+}
}
diff --git a/WebCore/rendering/RenderTextControlMultiLine.h b/WebCore/rendering/RenderTextControlMultiLine.h
index e061e89..6dc2032 100644
--- a/WebCore/rendering/RenderTextControlMultiLine.h
+++ b/WebCore/rendering/RenderTextControlMultiLine.h
@@ -43,13 +43,15 @@ private:
virtual float getAvgCharWidth(AtomicString family);
virtual int preferredContentWidth(float charWidth) const;
virtual void adjustControlHeightBasedOnLineHeight(int lineHeight);
- virtual int baselinePosition(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
+ virtual int baselinePosition(FontBaseline, bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const;
virtual void updateFromElement();
virtual void cacheSelection(int start, int end);
virtual RenderStyle* textBaseStyle() const;
virtual PassRefPtr<RenderStyle> createInnerTextStyle(const RenderStyle* startStyle) const;
+ virtual int textBlockInsetLeft() const;
+ virtual int textBlockInsetRight() const;
};
inline RenderTextControlMultiLine* toRenderTextControlMultiLine(RenderObject* object)
diff --git a/WebCore/rendering/RenderTextControlSingleLine.cpp b/WebCore/rendering/RenderTextControlSingleLine.cpp
index ea03c61..da85863 100644
--- a/WebCore/rendering/RenderTextControlSingleLine.cpp
+++ b/WebCore/rendering/RenderTextControlSingleLine.cpp
@@ -401,7 +401,7 @@ void RenderTextControlSingleLine::forwardEvent(Event* event)
m_resultsButton->defaultEventHandler(event);
else if (m_cancelButton && localPoint.x() > textRight)
m_cancelButton->defaultEventHandler(event);
- else if (m_innerSpinButton && localPoint.x() > textRight && localPoint.x() < textRight + m_innerSpinButton->renderBox()->width())
+ else if (m_innerSpinButton && localPoint.x() > textRight && m_innerSpinButton->renderBox() && localPoint.x() < textRight + m_innerSpinButton->renderBox()->width())
m_innerSpinButton->defaultEventHandler(event);
else if (m_outerSpinButton && localPoint.x() > textRight)
m_outerSpinButton->defaultEventHandler(event);
@@ -678,25 +678,14 @@ void RenderTextControlSingleLine::updateFromElement()
if (m_cancelButton)
updateCancelButtonVisibility();
- if (m_placeholderVisible) {
- // node() must be an HTMLInputElement. WMLInputElement doesn't support placeholder.
- ASSERT(node()->isHTMLElement());
- ExceptionCode ec = 0;
- innerTextElement()->setInnerText(static_cast<HTMLInputElement*>(node())->strippedPlaceholder(), ec);
- ASSERT(!ec);
- } else {
- if (!inputElement()->suggestedValue().isNull())
- setInnerTextValue(inputElement()->suggestedValue());
- else {
- bool shouldUpdateValue = true;
- if (node()->isHTMLElement()) {
- // For HTMLInputElement, update the renderer value if the element
- // supports placeholder or the formControlValueMatchesRenderer()
- // flag is false. It protects an unacceptable renderer value from
- // being overwritten with the DOM value.
- shouldUpdateValue = static_cast<HTMLTextFormControlElement*>(node())->supportsPlaceholder() || !static_cast<HTMLInputElement*>(node())->formControlValueMatchesRenderer();
- }
- if (shouldUpdateValue)
+ if (!inputElement()->suggestedValue().isNull())
+ setInnerTextValue(inputElement()->suggestedValue());
+ else {
+ if (node()->hasTagName(inputTag)) {
+ // For HTMLInputElement, update the renderer value if the formControlValueMatchesRenderer()
+ // flag is false. It protects an unacceptable renderer value from
+ // being overwritten with the DOM value.
+ if (!static_cast<HTMLInputElement*>(node())->formControlValueMatchesRenderer())
setInnerTextValue(inputElement()->value());
}
}
@@ -712,16 +701,8 @@ void RenderTextControlSingleLine::cacheSelection(int start, int end)
PassRefPtr<RenderStyle> RenderTextControlSingleLine::createInnerTextStyle(const RenderStyle* startStyle) const
{
- RefPtr<RenderStyle> textBlockStyle;
- if (m_placeholderVisible) {
- if (RenderStyle* pseudoStyle = getCachedPseudoStyle(INPUT_PLACEHOLDER))
- textBlockStyle = RenderStyle::clone(pseudoStyle);
- }
- if (!textBlockStyle) {
- textBlockStyle = RenderStyle::create();
- textBlockStyle->inheritFrom(startStyle);
- }
-
+ RefPtr<RenderStyle> textBlockStyle = RenderStyle::create();
+ textBlockStyle->inheritFrom(startStyle);
adjustInnerTextStyle(startStyle, textBlockStyle.get());
textBlockStyle->setWhiteSpace(PRE);
@@ -744,13 +725,6 @@ PassRefPtr<RenderStyle> RenderTextControlSingleLine::createInnerTextStyle(const
textBlockStyle->setPaddingLeft(Length(1, Fixed));
textBlockStyle->setPaddingRight(Length(1, Fixed));
- // When the placeholder is going to be displayed, temporarily override the text security to be "none".
- // After this, updateFromElement will immediately update the text displayed.
- // When the placeholder is no longer visible, updatePlaceholderVisiblity will reset the style,
- // and the text security mode will be set back to the computed value correctly.
- if (m_placeholderVisible)
- textBlockStyle->setTextSecurity(TSNONE);
-
return textBlockStyle.release();
}
@@ -956,7 +930,7 @@ PopupMenuStyle RenderTextControlSingleLine::itemStyle(unsigned) const
PopupMenuStyle RenderTextControlSingleLine::menuStyle() const
{
- return PopupMenuStyle(style()->visitedDependentColor(CSSPropertyColor), style()->visitedDependentColor(CSSPropertyBackgroundColor), style()->font(), style()->visibility() == VISIBLE, style()->textIndent(), style()->direction());
+ return PopupMenuStyle(style()->visitedDependentColor(CSSPropertyColor), style()->visitedDependentColor(CSSPropertyBackgroundColor), style()->font(), style()->visibility() == VISIBLE, style()->display() == NONE, style()->textIndent(), style()->direction());
}
int RenderTextControlSingleLine::clientInsetLeft() const
@@ -1116,4 +1090,24 @@ InputElement* RenderTextControlSingleLine::inputElement() const
return toInputElement(static_cast<Element*>(node()));
}
+int RenderTextControlSingleLine::textBlockInsetLeft() const
+{
+ int inset = borderLeft() + clientPaddingLeft();
+ if (HTMLElement* innerText = innerTextElement()) {
+ if (RenderBox* innerTextRenderer = innerText->renderBox())
+ inset += innerTextRenderer->paddingLeft();
+ }
+ return inset;
+}
+
+int RenderTextControlSingleLine::textBlockInsetRight() const
+{
+ int inset = borderRight() + clientPaddingRight();
+ if (HTMLElement* innerText = innerTextElement()) {
+ if (RenderBox* innerTextRenderer = innerText->renderBox())
+ inset += innerTextRenderer->paddingRight();
+ }
+ return inset;
+}
+
}
diff --git a/WebCore/rendering/RenderTextControlSingleLine.h b/WebCore/rendering/RenderTextControlSingleLine.h
index 0deb063..26987fd 100644
--- a/WebCore/rendering/RenderTextControlSingleLine.h
+++ b/WebCore/rendering/RenderTextControlSingleLine.h
@@ -143,6 +143,9 @@ private:
InputElement* inputElement() const;
+ virtual int textBlockInsetLeft() const;
+ virtual int textBlockInsetRight() const;
+
bool m_searchPopupIsVisible;
bool m_shouldDrawCapsLockIndicator;
@@ -161,7 +164,7 @@ private:
};
inline RenderTextControlSingleLine* toRenderTextControlSingleLine(RenderObject* object)
-{
+{
ASSERT(!object || object->isTextField());
return static_cast<RenderTextControlSingleLine*>(object);
}
diff --git a/WebCore/rendering/RenderTreeAsText.cpp b/WebCore/rendering/RenderTreeAsText.cpp
index ec36b7e..f93cd55 100644
--- a/WebCore/rendering/RenderTreeAsText.cpp
+++ b/WebCore/rendering/RenderTreeAsText.cpp
@@ -413,6 +413,41 @@ void RenderTreeAsText::writeRenderObject(TextStream& ts, const RenderObject& o,
}
}
}
+
+ if (behavior & RenderAsTextShowLayoutState) {
+ bool needsLayout = o.selfNeedsLayout() || o.needsPositionedMovementLayout() || o.posChildNeedsLayout() || o.normalChildNeedsLayout();
+ if (needsLayout)
+ ts << " (needs layout:";
+
+ bool havePrevious = false;
+ if (o.selfNeedsLayout()) {
+ ts << " self";
+ havePrevious = true;
+ }
+
+ if (o.needsPositionedMovementLayout()) {
+ if (havePrevious)
+ ts << ",";
+ havePrevious = true;
+ ts << " positioned movement";
+ }
+
+ if (o.normalChildNeedsLayout()) {
+ if (havePrevious)
+ ts << ",";
+ havePrevious = true;
+ ts << " child";
+ }
+
+ if (o.posChildNeedsLayout()) {
+ if (havePrevious)
+ ts << ",";
+ ts << " positioned child";
+ }
+
+ if (needsLayout)
+ ts << ")";
+ }
#if PLATFORM(QT)
// Print attributes of embedded QWidgets. E.g. when the WebCore::Widget
@@ -691,7 +726,8 @@ String externalRepresentation(Frame* frame, RenderAsTextBehavior behavior)
printContext.begin(frame->contentRenderer()->width());
}
- frame->document()->updateLayout();
+ if (!(behavior & RenderAsTextDontUpdateLayout))
+ frame->document()->updateLayout();
RenderObject* o = frame->contentRenderer();
if (!o)
diff --git a/WebCore/rendering/RenderTreeAsText.h b/WebCore/rendering/RenderTreeAsText.h
index 59a0abb..4c8b145 100644
--- a/WebCore/rendering/RenderTreeAsText.h
+++ b/WebCore/rendering/RenderTreeAsText.h
@@ -48,7 +48,9 @@ enum RenderAsTextBehaviorFlags {
RenderAsTextShowCompositedLayers = 1 << 2, // Show which layers are composited.
RenderAsTextShowAddresses = 1 << 3, // Show layer and renderer addresses.
RenderAsTextShowIDAndClass = 1 << 4, // Show id and class attributes
- RenderAsTextPrintingMode = 1 << 5 // Dump the tree in printing mode.
+ RenderAsTextPrintingMode = 1 << 5, // Dump the tree in printing mode.
+ RenderAsTextDontUpdateLayout = 1 << 6, // Don't update layout, to make it safe to call showLayerTree() from the debugger inside layout or painting code.
+ RenderAsTextShowLayoutState = 1 << 7 // Print the various 'needs layout' bits on renderers.
};
typedef unsigned RenderAsTextBehavior;
diff --git a/WebCore/rendering/RenderView.cpp b/WebCore/rendering/RenderView.cpp
index 3349403..2885f15 100644
--- a/WebCore/rendering/RenderView.cpp
+++ b/WebCore/rendering/RenderView.cpp
@@ -307,11 +307,6 @@ void RenderView::repaintRectangleInViewAndCompositedLayers(const IntRect& ur, bo
repaintViewRectangle(ur, immediate);
#if USE(ACCELERATED_COMPOSITING)
- // If we're a frame, repaintViewRectangle will have repainted via a RenderObject in the
- // parent document.
- if (document()->ownerElement())
- return;
-
if (compositor()->inCompositingMode())
compositor()->repaintCompositedLayersAbsoluteRect(ur);
#endif
@@ -326,6 +321,7 @@ void RenderView::computeRectForRepaint(RenderBoxModelObject* repaintContainer, I
if (printing())
return;
+<<<<<<< HEAD
#ifdef ANDROID_FIXED_ELEMENTS
#if ENABLE(COMPOSITED_FIXED_ELEMENTS)
const Settings * settings = document()->settings();
@@ -335,6 +331,17 @@ void RenderView::computeRectForRepaint(RenderBoxModelObject* repaintContainer, I
if (false)
#endif
#endif
+=======
+ if (style()->isFlippedBlocksWritingMode()) {
+ // We have to flip by hand since the view's logical height has not been determined. We
+ // can use the viewport width and height.
+ if (style()->isHorizontalWritingMode())
+ rect.setY(viewHeight() - rect.bottom());
+ else
+ rect.setX(viewWidth() - rect.right());
+ }
+
+>>>>>>> webkit.org at r72274
if (fixed && m_frameView)
rect.move(m_frameView->scrollX(), m_frameView->scrollY());
diff --git a/WebCore/rendering/RootInlineBox.cpp b/WebCore/rendering/RootInlineBox.cpp
index 3e5b6c7..cdc6525 100644
--- a/WebCore/rendering/RootInlineBox.cpp
+++ b/WebCore/rendering/RootInlineBox.cpp
@@ -47,6 +47,7 @@ RootInlineBox::RootInlineBox(RenderBlock* block)
, m_lineBottom(0)
, m_paginationStrut(0)
, m_blockLogicalHeight(0)
+ , m_baselineType(AlphabeticBaseline)
{
setIsHorizontal(block->style()->isHorizontalWritingMode());
}
@@ -214,7 +215,7 @@ void RootInlineBox::childRemoved(InlineBox* box)
}
}
-int RootInlineBox::alignBoxesInBlockDirection(int heightOfBlock, GlyphOverflowAndFallbackFontsMap& textBoxDataMap)
+int RootInlineBox::alignBoxesInBlockDirection(int heightOfBlock, GlyphOverflowAndFallbackFontsMap& textBoxDataMap, VerticalPositionCache& verticalPositionCache)
{
#if ENABLE(SVG)
// SVG will handle vertical alignment on its own.
@@ -226,11 +227,16 @@ int RootInlineBox::alignBoxesInBlockDirection(int heightOfBlock, GlyphOverflowAn
int maxPositionBottom = 0;
int maxAscent = 0;
int maxDescent = 0;
+ bool setMaxAscent = false;
+ bool setMaxDescent = false;
// Figure out if we're in no-quirks mode.
bool noQuirksMode = renderer()->document()->inNoQuirksMode();
- computeLogicalBoxHeights(maxPositionTop, maxPositionBottom, maxAscent, maxDescent, noQuirksMode, textBoxDataMap);
+ m_baselineType = requiresIdeographicBaseline(textBoxDataMap) ? IdeographicBaseline : AlphabeticBaseline;
+
+ computeLogicalBoxHeights(maxPositionTop, maxPositionBottom, maxAscent, maxDescent, setMaxAscent, setMaxDescent, noQuirksMode,
+ textBoxDataMap, m_baselineType, verticalPositionCache);
if (maxAscent + maxDescent < max(maxPositionTop, maxPositionBottom))
adjustMaxAscentAndDescent(maxAscent, maxDescent, maxPositionTop, maxPositionBottom);
@@ -239,7 +245,7 @@ int RootInlineBox::alignBoxesInBlockDirection(int heightOfBlock, GlyphOverflowAn
int lineTop = heightOfBlock;
int lineBottom = heightOfBlock;
bool setLineTop = false;
- placeBoxesInBlockDirection(heightOfBlock, maxHeight, maxAscent, noQuirksMode, lineTop, lineBottom, setLineTop);
+ placeBoxesInBlockDirection(heightOfBlock, maxHeight, maxAscent, noQuirksMode, lineTop, lineBottom, setLineTop, m_baselineType);
computeBlockDirectionOverflow(lineTop, lineBottom, noQuirksMode, textBoxDataMap);
setLineTopBottomPositions(lineTop, lineBottom);
@@ -403,7 +409,7 @@ static bool isEditableLeaf(InlineBox* leaf)
return leaf && leaf->renderer() && leaf->renderer()->node() && leaf->renderer()->node()->isContentEditable();
}
-InlineBox* RootInlineBox::closestLeafChildForXPos(int x, bool onlyEditableLeaves)
+InlineBox* RootInlineBox::closestLeafChildForLogicalLeftPosition(int leftPosition, bool onlyEditableLeaves)
{
InlineBox* firstLeaf = firstLeafChild();
InlineBox* lastLeaf = lastLeafChild();
@@ -411,13 +417,13 @@ InlineBox* RootInlineBox::closestLeafChildForXPos(int x, bool onlyEditableLeaves
return firstLeaf;
// Avoid returning a list marker when possible.
- if (x <= firstLeaf->m_x && !firstLeaf->renderer()->isListMarker() && (!onlyEditableLeaves || isEditableLeaf(firstLeaf)))
- // The x coordinate is less or equal to left edge of the firstLeaf.
+ if (leftPosition <= firstLeaf->logicalLeft() && !firstLeaf->renderer()->isListMarker() && (!onlyEditableLeaves || isEditableLeaf(firstLeaf)))
+ // The leftPosition coordinate is less or equal to left edge of the firstLeaf.
// Return it.
return firstLeaf;
- if (x >= lastLeaf->m_x + lastLeaf->m_logicalWidth && !lastLeaf->renderer()->isListMarker() && (!onlyEditableLeaves || isEditableLeaf(lastLeaf)))
- // The x coordinate is greater or equal to right edge of the lastLeaf.
+ if (leftPosition >= lastLeaf->logicalRight() && !lastLeaf->renderer()->isListMarker() && (!onlyEditableLeaves || isEditableLeaf(lastLeaf)))
+ // The leftPosition coordinate is greater or equal to right edge of the lastLeaf.
// Return it.
return lastLeaf;
@@ -425,7 +431,7 @@ InlineBox* RootInlineBox::closestLeafChildForXPos(int x, bool onlyEditableLeaves
for (InlineBox* leaf = firstLeaf; leaf; leaf = leaf->nextLeafChild()) {
if (!leaf->renderer()->isListMarker() && (!onlyEditableLeaves || isEditableLeaf(leaf))) {
closestLeaf = leaf;
- if (x < leaf->m_x + leaf->m_logicalWidth)
+ if (leftPosition < leaf->logicalRight())
// The x coordinate is less than the right edge of the box.
// Return it.
return leaf;
diff --git a/WebCore/rendering/RootInlineBox.h b/WebCore/rendering/RootInlineBox.h
index f13d00f..851b4b1 100644
--- a/WebCore/rendering/RootInlineBox.h
+++ b/WebCore/rendering/RootInlineBox.h
@@ -57,7 +57,7 @@ public:
int selectionBottom() const;
int selectionHeight() const { return max(0, selectionBottom() - selectionTop()); }
- int alignBoxesInBlockDirection(int heightOfBlock, GlyphOverflowAndFallbackFontsMap&);
+ int alignBoxesInBlockDirection(int heightOfBlock, GlyphOverflowAndFallbackFontsMap&, VerticalPositionCache&);
void setLineTopBottomPositions(int top, int bottom);
virtual RenderLineBoxList* rendererLineBoxes() const;
@@ -88,7 +88,7 @@ public:
virtual void clearTruncation();
- virtual int baselinePosition() const { return boxModelObject()->baselinePosition(m_firstLine, isHorizontal() ? HorizontalLine : VerticalLine, PositionOfInteriorLineBoxes); }
+ virtual int baselinePosition(FontBaseline baselineType) const { return boxModelObject()->baselinePosition(baselineType, m_firstLine, isHorizontal() ? HorizontalLine : VerticalLine, PositionOfInteriorLineBoxes); }
virtual int lineHeight() const { return boxModelObject()->lineHeight(m_firstLine, isHorizontal() ? HorizontalLine : VerticalLine, PositionOfInteriorLineBoxes); }
#if PLATFORM(MAC)
@@ -110,7 +110,7 @@ public:
RenderBlock* block() const;
- InlineBox* closestLeafChildForXPos(int x, bool onlyEditableLeaves = false);
+ InlineBox* closestLeafChildForLogicalLeftPosition(int, bool onlyEditableLeaves = false);
Vector<RenderBox*>& floats()
{
@@ -125,6 +125,8 @@ public:
virtual void extractLineBoxFromRenderObject();
virtual void attachLineBoxToRenderObject();
virtual void removeLineBoxFromRenderObject();
+
+ FontBaseline baselineType() const { return m_baselineType; }
private:
bool hasEllipsisBox() const { return m_hasEllipsisBoxOrHyphen; }
@@ -148,6 +150,9 @@ private:
// The logical height of the block at the end of this line. This is where the next line starts.
int m_blockLogicalHeight;
+ // Whether or not this line uses alphabetic or ideographic baselines by default.
+ FontBaseline m_baselineType;
+
WTF::Unicode::Direction m_lineBreakBidiStatusEor : 5;
WTF::Unicode::Direction m_lineBreakBidiStatusLastStrong : 5;
WTF::Unicode::Direction m_lineBreakBidiStatusLast : 5;
diff --git a/WebCore/rendering/SVGImageBufferTools.cpp b/WebCore/rendering/SVGImageBufferTools.cpp
index 903aa21..20f45b1 100644
--- a/WebCore/rendering/SVGImageBufferTools.cpp
+++ b/WebCore/rendering/SVGImageBufferTools.cpp
@@ -81,10 +81,8 @@ void SVGImageBufferTools::renderSubtreeToImageBuffer(ImageBuffer* image, RenderO
PaintInfo info(image->context(), PaintInfo::infiniteRect(), PaintPhaseForeground, 0, 0, 0);
- // FIXME: isSVGContainer returns true for RenderSVGViewportContainer, so if this is ever
- // called with one of those, we will read from the wrong offset in an object due to a bad cast.
RenderSVGContainer* svgContainer = 0;
- if (item && item->isSVGContainer())
+ if (item && item->isSVGContainer() && !item->isSVGViewportContainer())
svgContainer = toRenderSVGContainer(item);
bool drawsContents = svgContainer ? svgContainer->drawsContents() : false;
diff --git a/WebCore/rendering/ShadowElement.cpp b/WebCore/rendering/ShadowElement.cpp
index c52ce17..cea3164 100644
--- a/WebCore/rendering/ShadowElement.cpp
+++ b/WebCore/rendering/ShadowElement.cpp
@@ -45,7 +45,7 @@ void ShadowBlockElement::layoutAsPart(const IntRect& partRect)
RenderBox* selfRenderer = toRenderBox(renderer());
IntRect oldRect = selfRenderer->frameRect();
- LayoutStateMaintainer statePusher(parentRenderer->view(), parentRenderer, parentRenderer->size());
+ LayoutStateMaintainer statePusher(parentRenderer->view(), parentRenderer, parentRenderer->size(), parentRenderer->style()->isFlippedBlocksWritingMode());
if (oldRect.size() != partRect.size())
selfRenderer->setChildNeedsLayout(true, false);
diff --git a/WebCore/rendering/ShadowElement.h b/WebCore/rendering/ShadowElement.h
index 04db62b..f5668ef 100644
--- a/WebCore/rendering/ShadowElement.h
+++ b/WebCore/rendering/ShadowElement.h
@@ -43,13 +43,13 @@ protected:
{
}
- HTMLElement* shadowParent() const { return m_shadowParent; }
+ HTMLElement* shadowParent() const { return m_shadowParent.get(); }
private:
virtual bool isShadowNode() const { return true; }
- virtual ContainerNode* shadowParentNode() { return m_shadowParent; }
+ virtual ContainerNode* shadowParentNode() { return m_shadowParent.get(); }
- HTMLElement* m_shadowParent;
+ RefPtr<HTMLElement> m_shadowParent;
};
class ShadowBlockElement : public ShadowElement<HTMLDivElement> {
diff --git a/WebCore/rendering/TextControlInnerElements.cpp b/WebCore/rendering/TextControlInnerElements.cpp
index 6495d04..fba523e 100644
--- a/WebCore/rendering/TextControlInnerElements.cpp
+++ b/WebCore/rendering/TextControlInnerElements.cpp
@@ -51,23 +51,11 @@ public:
RenderTextControlInnerBlock(Node* node, bool isMultiLine) : RenderBlock(node), m_multiLine(isMultiLine) { }
private:
- virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, int x, int y, int tx, int ty, HitTestAction);
virtual VisiblePosition positionForPoint(const IntPoint&);
bool m_multiLine;
};
-bool RenderTextControlInnerBlock::nodeAtPoint(const HitTestRequest& request, HitTestResult& result, int x, int y, int tx, int ty, HitTestAction hitTestAction)
-{
- RenderObject* renderer = node()->shadowAncestorNode()->renderer();
-
- bool placeholderIsVisible = false;
- if (renderer->isTextField())
- placeholderIsVisible = toRenderTextControlSingleLine(renderer)->placeholderIsVisible();
-
- return RenderBlock::nodeAtPoint(request, result, x, y, tx, ty, placeholderIsVisible ? HitTestBlockBackground : hitTestAction);
-}
-
VisiblePosition RenderTextControlInnerBlock::positionForPoint(const IntPoint& point)
{
IntPoint contentsPoint(point);
@@ -154,7 +142,7 @@ void TextControlInnerTextElement::defaultEventHandler(Event* event)
if (shadowAncestor && shadowAncestor != this)
shadowAncestor->defaultEventHandler(event);
}
- if (event->defaultHandled())
+ if (!event->defaultHandled())
HTMLDivElement::defaultEventHandler(event);
}
diff --git a/WebCore/rendering/TextControlInnerElements.h b/WebCore/rendering/TextControlInnerElements.h
index 61c9dba..51c9aff 100644
--- a/WebCore/rendering/TextControlInnerElements.h
+++ b/WebCore/rendering/TextControlInnerElements.h
@@ -47,12 +47,12 @@ protected:
private:
virtual bool isMouseFocusable() const { return false; }
- virtual bool isShadowNode() const { return m_shadowParent; }
- virtual ContainerNode* shadowParentNode() { return m_shadowParent; }
+ virtual bool isShadowNode() const { return m_shadowParent.get(); }
+ virtual ContainerNode* shadowParentNode() { return m_shadowParent.get(); }
virtual bool isSpellCheckingEnabled() const;
void setShadowParentNode(HTMLElement* shadowParent) { m_shadowParent = shadowParent; }
- HTMLElement* m_shadowParent;
+ RefPtr<HTMLElement> m_shadowParent;
};
class TextControlInnerTextElement : public TextControlInnerElement {
diff --git a/WebCore/rendering/VerticalPositionCache.h b/WebCore/rendering/VerticalPositionCache.h
new file mode 100644
index 0000000..4deaef5
--- /dev/null
+++ b/WebCore/rendering/VerticalPositionCache.h
@@ -0,0 +1,70 @@
+/*
+ * 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 VerticalPositionCache_h
+#define VerticalPositionCache_h
+
+#include "FontBaseline.h"
+#include <wtf/HashMap.h>
+
+namespace WebCore {
+
+class RenderObject;
+
+// Values for vertical alignment.
+const int PositionTop = -0x7fffffff;
+const int PositionBottom = 0x7fffffff;
+const int PositionUndefined = 0x80000000;
+
+class VerticalPositionCache : public Noncopyable {
+public:
+ VerticalPositionCache()
+ { }
+
+ int get(RenderObject* renderer, FontBaseline baselineType) const
+ {
+ const HashMap<RenderObject*, int>& mapToCheck = baselineType == AlphabeticBaseline ? m_alphabeticPositions : m_ideographicPositions;
+ const HashMap<RenderObject*, int>::const_iterator it = mapToCheck.find(renderer);
+ if (it == mapToCheck.end())
+ return PositionUndefined;
+ return it->second;
+ }
+
+ void set(RenderObject* renderer, FontBaseline baselineType, int position)
+ {
+ if (baselineType == AlphabeticBaseline)
+ m_alphabeticPositions.set(renderer, position);
+ else
+ m_ideographicPositions.set(renderer, position);
+ }
+
+private:
+ HashMap<RenderObject*, int> m_alphabeticPositions;
+ HashMap<RenderObject*, int> m_ideographicPositions;
+};
+
+} // namespace WebCore
+
+#endif // VerticalPositionCache_h
diff --git a/WebCore/rendering/style/RenderStyle.cpp b/WebCore/rendering/style/RenderStyle.cpp
index a6e7d59..0ea3673 100644
--- a/WebCore/rendering/style/RenderStyle.cpp
+++ b/WebCore/rendering/style/RenderStyle.cpp
@@ -1332,6 +1332,36 @@ Length RenderStyle::marginEndUsing(const RenderStyle* otherStyle) const
return otherStyle->isLeftToRightDirection() ? marginBottom() : marginTop();
}
+void RenderStyle::setMarginStart(Length margin)
+{
+ if (isHorizontalWritingMode()) {
+ if (isLeftToRightDirection())
+ setMarginLeft(margin);
+ else
+ setMarginRight(margin);
+ } else {
+ if (isLeftToRightDirection())
+ setMarginTop(margin);
+ else
+ setMarginBottom(margin);
+ }
+}
+
+void RenderStyle::setMarginEnd(Length margin)
+{
+ if (isHorizontalWritingMode()) {
+ if (isLeftToRightDirection())
+ setMarginRight(margin);
+ else
+ setMarginLeft(margin);
+ } else {
+ if (isLeftToRightDirection())
+ setMarginBottom(margin);
+ else
+ setMarginTop(margin);
+ }
+}
+
Length RenderStyle::paddingBefore() const
{
switch (writingMode()) {
diff --git a/WebCore/rendering/style/RenderStyle.h b/WebCore/rendering/style/RenderStyle.h
index 75dc58f..c206acd 100644
--- a/WebCore/rendering/style/RenderStyle.h
+++ b/WebCore/rendering/style/RenderStyle.h
@@ -985,6 +985,8 @@ public:
void setMarginBottom(Length v) { SET_VAR(surround, margin.m_bottom, v) }
void setMarginLeft(Length v) { SET_VAR(surround, margin.m_left, v) }
void setMarginRight(Length v) { SET_VAR(surround, margin.m_right, v) }
+ void setMarginStart(Length);
+ void setMarginEnd(Length);
void resetPadding() { SET_VAR(surround, padding, LengthBox(Auto)) }
void setPaddingBox(const LengthBox& b) { SET_VAR(surround, padding, b) }
diff --git a/WebCore/rendering/svg/SVGInlineTextBox.cpp b/WebCore/rendering/svg/SVGInlineTextBox.cpp
index 699d788..d1f660a 100644
--- a/WebCore/rendering/svg/SVGInlineTextBox.cpp
+++ b/WebCore/rendering/svg/SVGInlineTextBox.cpp
@@ -588,7 +588,7 @@ IntRect SVGInlineTextBox::calculateBoundaries() const
RenderStyle* style = textRenderer->style();
ASSERT(style);
- int baseline = baselinePosition();
+ int baseline = baselinePosition(AlphabeticBaseline);
int heightDifference = baseline - style->font().ascent();
unsigned textFragmentsSize = m_textFragments.size();
diff --git a/WebCore/storage/IDBFactoryBackendInterface.cpp b/WebCore/storage/IDBFactoryBackendInterface.cpp
index f1c0fb7..935ccac 100644
--- a/WebCore/storage/IDBFactoryBackendInterface.cpp
+++ b/WebCore/storage/IDBFactoryBackendInterface.cpp
@@ -43,7 +43,10 @@ PassRefPtr<IDBFactoryBackendInterface> IDBFactoryBackendInterface::create()
return IDBFactoryBackendImpl::create();
}
+IDBFactoryBackendInterface::~IDBFactoryBackendInterface()
+{
+}
+
} // namespace WebCore
#endif // ENABLE(INDEXED_DATABASE)
-
diff --git a/WebCore/storage/IDBFactoryBackendInterface.h b/WebCore/storage/IDBFactoryBackendInterface.h
index 7d922c3..445f9e9 100644
--- a/WebCore/storage/IDBFactoryBackendInterface.h
+++ b/WebCore/storage/IDBFactoryBackendInterface.h
@@ -49,7 +49,7 @@ class SecurityOrigin;
class IDBFactoryBackendInterface : public ThreadSafeShared<IDBFactoryBackendInterface> {
public:
static PassRefPtr<IDBFactoryBackendInterface> create();
- virtual ~IDBFactoryBackendInterface() { }
+ virtual ~IDBFactoryBackendInterface();
virtual void open(const String& name, const String& description, PassRefPtr<IDBCallbacks>, PassRefPtr<SecurityOrigin>, Frame*, const String& dataDir, int64_t maximumSize) = 0;
};
@@ -59,4 +59,3 @@ public:
#endif
#endif // IDBFactoryBackendInterface_h
-
diff --git a/WebCore/storage/IDBKey.cpp b/WebCore/storage/IDBKey.cpp
index d0f3c2b..8e411b7 100644
--- a/WebCore/storage/IDBKey.cpp
+++ b/WebCore/storage/IDBKey.cpp
@@ -93,9 +93,9 @@ String IDBKey::whereSyntax(String qualifiedTableName) const
{
switch (m_type) {
case IDBKey::StringType:
- return qualifiedTableName + "keyString = ? ";
+ return qualifiedTableName + "keyString = ? AND " + qualifiedTableName + "keyDate IS NULL AND " + qualifiedTableName + "keyNumber IS NULL ";
case IDBKey::NumberType:
- return qualifiedTableName + "keyNumber = ? ";
+ return qualifiedTableName + "keyString IS NULL AND " + qualifiedTableName + "keyDate IS NULL AND " + qualifiedTableName + "keyNumber = ? ";
// FIXME: Implement date.
case IDBKey::NullType:
return qualifiedTableName + "keyString IS NULL AND " + qualifiedTableName + "keyDate IS NULL AND " + qualifiedTableName + "keyNumber IS NULL ";
diff --git a/WebCore/storage/chromium/IDBFactoryBackendInterface.cpp b/WebCore/storage/chromium/IDBFactoryBackendInterface.cpp
index 016cab0..c0fb444 100644
--- a/WebCore/storage/chromium/IDBFactoryBackendInterface.cpp
+++ b/WebCore/storage/chromium/IDBFactoryBackendInterface.cpp
@@ -39,7 +39,11 @@ PassRefPtr<IDBFactoryBackendInterface> IDBFactoryBackendInterface::create()
return ChromiumBridge::idbFactory();
}
+IDBFactoryBackendInterface::~IDBFactoryBackendInterface()
+{
+ ChromiumBridge::idbShutdown();
+}
+
} // namespace WebCore
#endif // ENABLE(INDEXED_DATABASE)
-
diff --git a/WebCore/svg/DeprecatedSVGAnimatedPropertyTraits.h b/WebCore/svg/DeprecatedSVGAnimatedPropertyTraits.h
index e20a4c7..3e31095 100644
--- a/WebCore/svg/DeprecatedSVGAnimatedPropertyTraits.h
+++ b/WebCore/svg/DeprecatedSVGAnimatedPropertyTraits.h
@@ -22,26 +22,13 @@
#define DeprecatedSVGAnimatedPropertyTraits_h
#if ENABLE(SVG)
-#include "PlatformString.h"
-#include "SVGTransformList.h"
+// FIXME: Remove this file!
namespace WebCore {
template<typename Type>
struct DeprecatedSVGAnimatedPropertyTraits : public Noncopyable { };
-// SVGAnimatedTransformList
-template<>
-struct DeprecatedSVGAnimatedPropertyTraits<SVGTransformList*> : public Noncopyable {
- typedef SVGTransformList* PassType;
- typedef SVGTransformList* ReturnType;
- typedef RefPtr<SVGTransformList> StoredType;
-
- static ReturnType null() { return 0; }
- static ReturnType toReturnType(const StoredType& type) { return type.get(); }
- static String toString(PassType type) { return type ? type->valueAsString() : String(); }
-};
-
}
#endif
diff --git a/WebCore/svg/DeprecatedSVGAnimatedTemplate.h b/WebCore/svg/DeprecatedSVGAnimatedTemplate.h
index 9258692..7021d12 100644
--- a/WebCore/svg/DeprecatedSVGAnimatedTemplate.h
+++ b/WebCore/svg/DeprecatedSVGAnimatedTemplate.h
@@ -27,10 +27,10 @@
#include <wtf/Forward.h>
#include <wtf/HashMap.h>
+// FIXME: Remove this file!
namespace WebCore {
class SVGElement;
- class SVGTransformList;
struct DeprecatedSVGAnimatedTypeWrapperKey {
// Empty value
@@ -151,9 +151,6 @@ namespace WebCore {
return wrapper.release();
}
- // Common type definitions, to ease IDL generation.
- typedef DeprecatedSVGAnimatedTemplate<SVGTransformList*> SVGAnimatedTransformList;
-
}
#endif
diff --git a/WebCore/svg/SVGAElement.cpp b/WebCore/svg/SVGAElement.cpp
index 8e429d0..8e0e56e 100644
--- a/WebCore/svg/SVGAElement.cpp
+++ b/WebCore/svg/SVGAElement.cpp
@@ -121,7 +121,7 @@ void SVGAElement::synchronizeProperty(const QualifiedName& attrName)
RenderObject* SVGAElement::createRenderer(RenderArena* arena, RenderStyle*)
{
- if (static_cast<SVGElement*>(parent())->isTextContent())
+ if (static_cast<SVGElement*>(parentNode())->isTextContent())
return new (arena) RenderSVGInline(this);
return new (arena) RenderSVGTransformableContainer(this);
@@ -207,8 +207,8 @@ bool SVGAElement::childShouldCreateRenderer(Node* child) const
// The 'a' element may contain any element that its parent may contain, except itself.
if (child->hasTagName(SVGNames::aTag))
return false;
- if (parent() && parent()->isSVGElement())
- return parent()->childShouldCreateRenderer(child);
+ if (parentNode() && parentNode()->isSVGElement())
+ return parentNode()->childShouldCreateRenderer(child);
return SVGElement::childShouldCreateRenderer(child);
}
diff --git a/WebCore/svg/SVGAnimateTransformElement.cpp b/WebCore/svg/SVGAnimateTransformElement.cpp
index 7471ea7..f5d5aa8 100644
--- a/WebCore/svg/SVGAnimateTransformElement.cpp
+++ b/WebCore/svg/SVGAnimateTransformElement.cpp
@@ -86,15 +86,16 @@ void SVGAnimateTransformElement::parseMappedAttribute(Attribute* attr)
}
-static PassRefPtr<SVGTransformList> transformListFor(SVGElement* element)
+static SVGTransformList* transformListFor(SVGElement* element)
{
ASSERT(element);
if (element->isStyledTransformable())
- return static_cast<SVGStyledTransformableElement*>(element)->transform();
+ return &static_cast<SVGStyledTransformableElement*>(element)->transform();
if (element->hasTagName(SVGNames::textTag))
- return static_cast<SVGTextElement*>(element)->transform();
+ return &static_cast<SVGTextElement*>(element)->transform();
if (element->hasTagName(SVGNames::linearGradientTag) || element->hasTagName(SVGNames::radialGradientTag))
- return static_cast<SVGGradientElement*>(element)->gradientTransform();
+ return &static_cast<SVGGradientElement*>(element)->gradientTransform();
+ // FIXME: Handle patternTransform, which is obviously missing!
return 0;
}
@@ -109,9 +110,8 @@ void SVGAnimateTransformElement::resetToBaseValue(const String& baseValue)
}
if (baseValue.isEmpty()) {
- ExceptionCode ec;
- RefPtr<SVGTransformList> list = transformListFor(targetElement());
- list->clear(ec);
+ if (SVGTransformList* list = transformListFor(targetElement()))
+ list->clear();
} else
targetElement()->setAttribute(SVGNames::transformAttr, baseValue);
}
@@ -121,18 +121,17 @@ void SVGAnimateTransformElement::calculateAnimatedValue(float percentage, unsign
if (!hasValidTarget())
return;
SVGElement* targetElement = resultElement->targetElement();
- RefPtr<SVGTransformList> transformList = transformListFor(targetElement);
+ SVGTransformList* transformList = transformListFor(targetElement);
ASSERT(transformList);
- ExceptionCode ec;
if (!isAdditive())
- transformList->clear(ec);
+ transformList->clear();
if (isAccumulated() && repeat) {
SVGTransform accumulatedTransform = SVGTransformDistance(m_fromTransform, m_toTransform).scaledDistance(repeat).addToSVGTransform(SVGTransform());
- transformList->appendItem(accumulatedTransform, ec);
+ transformList->append(accumulatedTransform);
}
SVGTransform transform = SVGTransformDistance(m_fromTransform, m_toTransform).scaledDistance(percentage).addToSVGTransform(m_fromTransform);
- transformList->appendItem(transform, ec);
+ transformList->append(transform);
}
bool SVGAnimateTransformElement::calculateFromAndToValues(const String& fromString, const String& toString)
@@ -181,18 +180,22 @@ void SVGAnimateTransformElement::applyResultsToTarget()
}
// ...except in case where we have additional instances in <use> trees.
+ SVGTransformList* transformList = transformListFor(targetElement);
+ if (!transformList)
+ return;
+
const HashSet<SVGElementInstance*>& instances = targetElement->instancesForElement();
- RefPtr<SVGTransformList> transformList = transformListFor(targetElement);
const HashSet<SVGElementInstance*>::const_iterator end = instances.end();
for (HashSet<SVGElementInstance*>::const_iterator it = instances.begin(); it != end; ++it) {
SVGElement* shadowTreeElement = (*it)->shadowTreeElement();
ASSERT(shadowTreeElement);
if (shadowTreeElement->isStyledTransformable())
- static_cast<SVGStyledTransformableElement*>(shadowTreeElement)->setTransformBaseValue(transformList.get());
+ static_cast<SVGStyledTransformableElement*>(shadowTreeElement)->setTransformBaseValue(*transformList);
else if (shadowTreeElement->hasTagName(SVGNames::textTag))
- static_cast<SVGTextElement*>(shadowTreeElement)->setTransformBaseValue(transformList.get());
+ static_cast<SVGTextElement*>(shadowTreeElement)->setTransformBaseValue(*transformList);
else if (shadowTreeElement->hasTagName(SVGNames::linearGradientTag) || shadowTreeElement->hasTagName(SVGNames::radialGradientTag))
- static_cast<SVGGradientElement*>(shadowTreeElement)->setGradientTransformBaseValue(transformList.get());
+ static_cast<SVGGradientElement*>(shadowTreeElement)->setGradientTransformBaseValue(*transformList);
+ // FIXME: Handle patternTransform, obviously missing!
if (RenderObject* renderer = shadowTreeElement->renderer()) {
renderer->setNeedsTransformUpdate();
RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
diff --git a/WebCore/platform/graphics/cairo/FontPlatformData.h b/WebCore/svg/SVGAnimatedTransformList.h
index e5ffef2..dcf87dd 100644
--- a/WebCore/platform/graphics/cairo/FontPlatformData.h
+++ b/WebCore/svg/SVGAnimatedTransformList.h
@@ -1,6 +1,5 @@
/*
- * Copyright (C) 2010 Igalia S.L.
- * All rights reserved.
+ * Copyright (C) Research In Motion Limited 2010. 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
@@ -16,18 +15,19 @@
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
- *
*/
-#ifndef FontPlatformData_h
-#define FontPlatformData_h
+#ifndef SVGAnimatedTransformList_h
+#define SVGAnimatedTransformList_h
-#if defined(USE_FREETYPE)
-#include "FontPlatformDataFreeType.h"
-#elif defined(USE_PANGO)
-#include "FontPlatformDataPango.h"
-#elif PLATFORM(WIN)
-#include "FontPlatformDataCairoWin.h"
-#endif
+#if ENABLE(SVG)
+#include "SVGAnimatedTransformListPropertyTearOff.h"
+
+namespace WebCore {
-#endif // FontPlatformData_h
+typedef SVGAnimatedTransformListPropertyTearOff SVGAnimatedTransformList;
+
+} // namespace WebCore
+
+#endif // ENABLE(SVG)
+#endif
diff --git a/WebCore/svg/SVGAnimationElement.cpp b/WebCore/svg/SVGAnimationElement.cpp
index b5eaafc..25b319e 100644
--- a/WebCore/svg/SVGAnimationElement.cpp
+++ b/WebCore/svg/SVGAnimationElement.cpp
@@ -382,7 +382,18 @@ void SVGAnimationElement::calculateKeyTimesForCalcModePaced()
}
static inline double solveEpsilon(double duration) { return 1. / (200. * duration); }
-
+
+unsigned SVGAnimationElement::calculateKeyTimesIndex(float percent) const
+{
+ unsigned index;
+ unsigned keyTimesCount = m_keyTimes.size();
+ for (index = 1; index < keyTimesCount; ++index) {
+ if (m_keyTimes[index] >= percent)
+ break;
+ }
+ return --index;
+}
+
float SVGAnimationElement::calculatePercentForSpline(float percent, unsigned splineIndex) const
{
ASSERT(calcMode() == CalcModeSpline);
@@ -398,17 +409,10 @@ float SVGAnimationElement::calculatePercentFromKeyPoints(float percent) const
{
ASSERT(!m_keyPoints.isEmpty());
ASSERT(calcMode() != CalcModePaced);
- unsigned keyTimesCount = m_keyTimes.size();
- ASSERT(keyTimesCount > 1);
- ASSERT(m_keyPoints.size() == keyTimesCount);
-
- unsigned index;
- for (index = 1; index < keyTimesCount; ++index) {
- if (m_keyTimes[index] >= percent)
- break;
- }
- --index;
+ ASSERT(m_keyTimes.size() > 1);
+ ASSERT(m_keyPoints.size() == m_keyTimes.size());
+ unsigned index = calculateKeyTimesIndex(percent);
float fromPercent = m_keyTimes[index];
float toPercent = m_keyTimes[index + 1];
float fromKeyPoint = m_keyPoints[index];
@@ -451,13 +455,7 @@ void SVGAnimationElement::currentValuesForValuesAnimation(float percent, float&
ASSERT(!keyTimesCount || valuesCount == keyTimesCount);
ASSERT(!keyTimesCount || (keyTimesCount > 1 && m_keyTimes[0] == 0));
- unsigned index;
- for (index = 1; index < keyTimesCount; ++index) {
- if (m_keyTimes[index] >= percent)
- break;
- }
- --index;
-
+ unsigned index = calculateKeyTimesIndex(percent);
if (calcMode == CalcModeDiscrete) {
if (!keyTimesCount)
index = percent == 1.0f ? valuesCount - 1 : static_cast<unsigned>(percent * valuesCount);
@@ -510,10 +508,12 @@ void SVGAnimationElement::startedActiveInterval()
if (hasAttribute(SVGNames::keyPointsAttr) && m_keyPoints.size() != m_keyTimes.size())
return;
+ AnimationMode animationMode = this->animationMode();
CalcMode calcMode = this->calcMode();
if (calcMode == CalcModeSpline) {
- unsigned num = m_keySplines.size() + 1;
- if ((hasAttribute(SVGNames::keyPointsAttr) && m_keyPoints.size() != num) || m_values.size() != num)
+ unsigned splinesCount = m_keySplines.size() + 1;
+ if ((hasAttribute(SVGNames::keyPointsAttr) && m_keyPoints.size() != splinesCount)
+ || (animationMode == ValuesAnimation && m_values.size() != splinesCount))
return;
}
@@ -521,7 +521,6 @@ void SVGAnimationElement::startedActiveInterval()
String to = toValue();
String by = byValue();
SVGElement* target = targetElement();
- AnimationMode animationMode = this->animationMode();
if (animationMode == NoAnimation)
return;
if (animationMode == FromToAnimation) {
@@ -558,6 +557,7 @@ void SVGAnimationElement::updateAnimation(float percent, unsigned repeat, SVGSMI
return;
float effectivePercent;
+ CalcMode mode = calcMode();
if (animationMode() == ValuesAnimation) {
String from;
String to;
@@ -569,9 +569,11 @@ void SVGAnimationElement::updateAnimation(float percent, unsigned repeat, SVGSMI
m_lastValuesAnimationFrom = from;
m_lastValuesAnimationTo = to;
}
- } else if (!m_keyPoints.isEmpty() && calcMode() != CalcModePaced)
+ } else if (!m_keyPoints.isEmpty() && mode != CalcModePaced)
effectivePercent = calculatePercentFromKeyPoints(percent);
- else
+ else if (m_keyPoints.isEmpty() && mode == CalcModeSpline && m_keyTimes.size() > 1)
+ effectivePercent = calculatePercentForSpline(percent, calculateKeyTimesIndex(percent));
+ else
effectivePercent = percent;
calculateAnimatedValue(effectivePercent, repeat, resultElement);
diff --git a/WebCore/svg/SVGAnimationElement.h b/WebCore/svg/SVGAnimationElement.h
index 2e11fe6..367e63f 100644
--- a/WebCore/svg/SVGAnimationElement.h
+++ b/WebCore/svg/SVGAnimationElement.h
@@ -104,6 +104,7 @@ namespace WebCore {
float calculatePercentFromKeyPoints(float percent) const;
void currentValuesFromKeyPoints(float percent, float& effectivePercent, String& from, String& to) const;
float calculatePercentForSpline(float percent, unsigned splineIndex) const;
+ unsigned calculateKeyTimesIndex(float percent) const;
// SVGExternalResourcesRequired
DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGAnimationElement, SVGNames::externalResourcesRequiredAttr, bool, ExternalResourcesRequired, externalResourcesRequired)
diff --git a/WebCore/svg/SVGCircleElement.cpp b/WebCore/svg/SVGCircleElement.cpp
index eb38b87..a2c6a8d 100644
--- a/WebCore/svg/SVGCircleElement.cpp
+++ b/WebCore/svg/SVGCircleElement.cpp
@@ -77,6 +77,9 @@ void SVGCircleElement::svgAttributeChanged(const QualifiedName& attrName)
if (isLengthAttribute)
updateRelativeLengthsInformation();
+ if (SVGTests::handleAttributeChange(this, attrName))
+ return;
+
RenderSVGPath* renderer = static_cast<RenderSVGPath*>(this->renderer());
if (!renderer)
return;
@@ -93,8 +96,7 @@ void SVGCircleElement::svgAttributeChanged(const QualifiedName& attrName)
return;
}
- if (SVGTests::isKnownAttribute(attrName)
- || SVGLangSpace::isKnownAttribute(attrName)
+ if (SVGLangSpace::isKnownAttribute(attrName)
|| SVGExternalResourcesRequired::isKnownAttribute(attrName))
RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
}
diff --git a/WebCore/svg/SVGElement.cpp b/WebCore/svg/SVGElement.cpp
index 6c2c4a2..3e9bda0 100644
--- a/WebCore/svg/SVGElement.cpp
+++ b/WebCore/svg/SVGElement.cpp
@@ -347,13 +347,6 @@ void SVGElement::updateAnimatedSVGAttribute(const QualifiedName& name) const
clearIsSynchronizingSVGAttributes();
}
-ContainerNode* SVGElement::eventParentNode()
-{
- if (ContainerNode* shadowParent = shadowParentNode())
- return shadowParent;
- return StyledElement::eventParentNode();
-}
-
}
#endif // ENABLE(SVG)
diff --git a/WebCore/svg/SVGElement.h b/WebCore/svg/SVGElement.h
index 517515f..96e7fd7 100644
--- a/WebCore/svg/SVGElement.h
+++ b/WebCore/svg/SVGElement.h
@@ -99,8 +99,6 @@ namespace WebCore {
virtual bool isSupported(StringImpl* feature, StringImpl* version) const;
- virtual ContainerNode* eventParentNode();
-
virtual bool needsPendingResourceHandling() const { return true; }
virtual void buildPendingResource() { }
diff --git a/WebCore/svg/SVGEllipseElement.cpp b/WebCore/svg/SVGEllipseElement.cpp
index 7615a24..5726c53 100644
--- a/WebCore/svg/SVGEllipseElement.cpp
+++ b/WebCore/svg/SVGEllipseElement.cpp
@@ -82,6 +82,9 @@ void SVGEllipseElement::svgAttributeChanged(const QualifiedName& attrName)
if (isLengthAttribute)
updateRelativeLengthsInformation();
+
+ if (SVGTests::handleAttributeChange(this, attrName))
+ return;
RenderSVGPath* renderer = static_cast<RenderSVGPath*>(this->renderer());
if (!renderer)
@@ -99,8 +102,7 @@ void SVGEllipseElement::svgAttributeChanged(const QualifiedName& attrName)
return;
}
- if (SVGTests::isKnownAttribute(attrName)
- || SVGLangSpace::isKnownAttribute(attrName)
+ if (SVGLangSpace::isKnownAttribute(attrName)
|| SVGExternalResourcesRequired::isKnownAttribute(attrName))
RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
}
diff --git a/WebCore/svg/SVGFEDisplacementMapElement.cpp b/WebCore/svg/SVGFEDisplacementMapElement.cpp
index ea8a7b8..ba3311b 100644
--- a/WebCore/svg/SVGFEDisplacementMapElement.cpp
+++ b/WebCore/svg/SVGFEDisplacementMapElement.cpp
@@ -69,6 +69,18 @@ void SVGFEDisplacementMapElement::parseMappedAttribute(Attribute* attr)
SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
}
+void SVGFEDisplacementMapElement::svgAttributeChanged(const QualifiedName& attrName)
+{
+ SVGFilterPrimitiveStandardAttributes::svgAttributeChanged(attrName);
+
+ if (attrName == SVGNames::xChannelSelectorAttr
+ || attrName == SVGNames::yChannelSelectorAttr
+ || attrName == SVGNames::inAttr
+ || attrName == SVGNames::in2Attr
+ || attrName == SVGNames::scaleAttr)
+ invalidate();
+}
+
void SVGFEDisplacementMapElement::synchronizeProperty(const QualifiedName& attrName)
{
SVGFilterPrimitiveStandardAttributes::synchronizeProperty(attrName);
diff --git a/WebCore/svg/SVGFEDisplacementMapElement.h b/WebCore/svg/SVGFEDisplacementMapElement.h
index a2c9e43..8131d82 100644
--- a/WebCore/svg/SVGFEDisplacementMapElement.h
+++ b/WebCore/svg/SVGFEDisplacementMapElement.h
@@ -36,6 +36,7 @@ private:
SVGFEDisplacementMapElement(const QualifiedName& tagName, Document*);
virtual void parseMappedAttribute(Attribute*);
+ virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*);
diff --git a/WebCore/svg/SVGFEImageElement.cpp b/WebCore/svg/SVGFEImageElement.cpp
index 0ea7933..1db8edb 100644
--- a/WebCore/svg/SVGFEImageElement.cpp
+++ b/WebCore/svg/SVGFEImageElement.cpp
@@ -90,6 +90,14 @@ void SVGFEImageElement::parseMappedAttribute(Attribute* attr)
}
}
+void SVGFEImageElement::svgAttributeChanged(const QualifiedName& attrName)
+{
+ SVGFilterPrimitiveStandardAttributes::svgAttributeChanged(attrName);
+
+ if (attrName == SVGNames::preserveAspectRatioAttr)
+ invalidate();
+}
+
void SVGFEImageElement::synchronizeProperty(const QualifiedName& attrName)
{
SVGFilterPrimitiveStandardAttributes::synchronizeProperty(attrName);
diff --git a/WebCore/svg/SVGFEImageElement.h b/WebCore/svg/SVGFEImageElement.h
index 0dcf2c8..0b9c5d8 100644
--- a/WebCore/svg/SVGFEImageElement.h
+++ b/WebCore/svg/SVGFEImageElement.h
@@ -48,6 +48,7 @@ private:
SVGFEImageElement(const QualifiedName&, Document*);
virtual void parseMappedAttribute(Attribute*);
+ virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
virtual void notifyFinished(CachedResource*);
diff --git a/WebCore/svg/SVGFELightElement.cpp b/WebCore/svg/SVGFELightElement.cpp
index 315aa29..7fed774 100644
--- a/WebCore/svg/SVGFELightElement.cpp
+++ b/WebCore/svg/SVGFELightElement.cpp
@@ -78,8 +78,8 @@ void SVGFELightElement::svgAttributeChanged(const QualifiedName& attrName)
|| attrName == SVGNames::pointsAtZAttr
|| attrName == SVGNames::specularExponentAttr
|| attrName == SVGNames::limitingConeAngleAttr) {
- if (ContainerNode* parentNode = parent()) {
- RenderObject* renderer = parentNode->renderer();
+ if (ContainerNode* parent = parentNode()) {
+ RenderObject* renderer = parent->renderer();
if (renderer && renderer->isSVGResourceFilterPrimitive())
RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
}
@@ -131,8 +131,8 @@ void SVGFELightElement::childrenChanged(bool changedByParser, Node* beforeChange
SVGElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
if (!changedByParser) {
- if (ContainerNode* parentNode = parent()) {
- RenderObject* renderer = parentNode->renderer();
+ if (ContainerNode* parent = parentNode()) {
+ RenderObject* renderer = parent->renderer();
if (renderer && renderer->isSVGResourceFilterPrimitive())
RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
}
diff --git a/WebCore/svg/SVGFEMergeNodeElement.cpp b/WebCore/svg/SVGFEMergeNodeElement.cpp
index ee1ac3a..54bb2fe 100644
--- a/WebCore/svg/SVGFEMergeNodeElement.cpp
+++ b/WebCore/svg/SVGFEMergeNodeElement.cpp
@@ -55,11 +55,11 @@ void SVGFEMergeNodeElement::svgAttributeChanged(const QualifiedName& attrName)
if (attrName != SVGNames::inAttr)
return;
- ContainerNode* parentNode = parent();
- if (!parentNode)
+ ContainerNode* parent = parentNode();
+ if (!parent)
return;
- RenderObject* renderer = parentNode->renderer();
+ RenderObject* renderer = parent->renderer();
if (!renderer || !renderer->isSVGResourceFilterPrimitive())
return;
diff --git a/WebCore/svg/SVGFETileElement.cpp b/WebCore/svg/SVGFETileElement.cpp
index 9664490..590b6b8 100644
--- a/WebCore/svg/SVGFETileElement.cpp
+++ b/WebCore/svg/SVGFETileElement.cpp
@@ -47,6 +47,14 @@ void SVGFETileElement::parseMappedAttribute(Attribute* attr)
SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
}
+void SVGFETileElement::svgAttributeChanged(const QualifiedName& attrName)
+{
+ SVGFilterPrimitiveStandardAttributes::svgAttributeChanged(attrName);
+
+ if (attrName == SVGNames::inAttr)
+ invalidate();
+}
+
void SVGFETileElement::synchronizeProperty(const QualifiedName& attrName)
{
SVGFilterPrimitiveStandardAttributes::synchronizeProperty(attrName);
diff --git a/WebCore/svg/SVGFETileElement.h b/WebCore/svg/SVGFETileElement.h
index ffa9d81..b0c97d2 100644
--- a/WebCore/svg/SVGFETileElement.h
+++ b/WebCore/svg/SVGFETileElement.h
@@ -35,6 +35,7 @@ private:
SVGFETileElement(const QualifiedName&, Document*);
virtual void parseMappedAttribute(Attribute*);
+ virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*);
diff --git a/WebCore/svg/SVGForeignObjectElement.cpp b/WebCore/svg/SVGForeignObjectElement.cpp
index e4f7096..d21172a 100644
--- a/WebCore/svg/SVGForeignObjectElement.cpp
+++ b/WebCore/svg/SVGForeignObjectElement.cpp
@@ -81,6 +81,9 @@ void SVGForeignObjectElement::svgAttributeChanged(const QualifiedName& attrName)
if (isLengthAttribute)
updateRelativeLengthsInformation();
+ if (SVGTests::handleAttributeChange(this, attrName))
+ return;
+
RenderObject* renderer = this->renderer();
if (!renderer)
return;
@@ -92,7 +95,6 @@ void SVGForeignObjectElement::svgAttributeChanged(const QualifiedName& attrName)
}
if (isLengthAttribute
- || SVGTests::isKnownAttribute(attrName)
|| SVGLangSpace::isKnownAttribute(attrName)
|| SVGExternalResourcesRequired::isKnownAttribute(attrName))
RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
diff --git a/WebCore/svg/SVGGElement.cpp b/WebCore/svg/SVGGElement.cpp
index a455cd5..b6b4a70 100644
--- a/WebCore/svg/SVGGElement.cpp
+++ b/WebCore/svg/SVGGElement.cpp
@@ -55,6 +55,9 @@ void SVGGElement::svgAttributeChanged(const QualifiedName& attrName)
{
SVGStyledTransformableElement::svgAttributeChanged(attrName);
+ if (SVGTests::handleAttributeChange(this, attrName))
+ return;
+
RenderObject* renderer = this->renderer();
if (!renderer)
return;
@@ -65,8 +68,7 @@ void SVGGElement::svgAttributeChanged(const QualifiedName& attrName)
return;
}
- if (SVGTests::isKnownAttribute(attrName)
- || SVGLangSpace::isKnownAttribute(attrName)
+ if (SVGLangSpace::isKnownAttribute(attrName)
|| SVGExternalResourcesRequired::isKnownAttribute(attrName))
RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
}
diff --git a/WebCore/svg/SVGGradientElement.cpp b/WebCore/svg/SVGGradientElement.cpp
index ca61088..337944b 100644
--- a/WebCore/svg/SVGGradientElement.cpp
+++ b/WebCore/svg/SVGGradientElement.cpp
@@ -41,7 +41,6 @@ namespace WebCore {
SVGGradientElement::SVGGradientElement(const QualifiedName& tagName, Document* document)
: SVGStyledElement(tagName, document)
, m_gradientUnits(SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)
- , m_gradientTransform(SVGTransformList::create(SVGNames::gradientTransformAttr))
{
}
@@ -53,11 +52,12 @@ void SVGGradientElement::parseMappedAttribute(Attribute* attr)
else if (attr->value() == "objectBoundingBox")
setGradientUnitsBaseValue(SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
} else if (attr->name() == SVGNames::gradientTransformAttr) {
- SVGTransformList* gradientTransforms = gradientTransformBaseValue();
- if (!SVGTransformable::parseTransformAttribute(gradientTransforms, attr->value())) {
- ExceptionCode ec = 0;
- gradientTransforms->clear(ec);
- }
+ SVGTransformList newList;
+ if (!SVGTransformable::parseTransformAttribute(newList, attr->value()))
+ newList.clear();
+
+ detachAnimatedGradientTransformListWrappers(newList.size());
+ gradientTransformBaseValue() = newList;
} else if (attr->name() == SVGNames::spreadMethodAttr) {
if (attr->value() == "reflect")
setSpreadMethodBaseValue(SpreadMethodReflect);
diff --git a/WebCore/svg/SVGGradientElement.h b/WebCore/svg/SVGGradientElement.h
index 6e23608..1b28e22 100644
--- a/WebCore/svg/SVGGradientElement.h
+++ b/WebCore/svg/SVGGradientElement.h
@@ -24,6 +24,7 @@
#if ENABLE(SVG)
#include "Gradient.h"
#include "SVGAnimatedPropertyMacros.h"
+#include "SVGAnimatedTransformList.h"
#include "SVGExternalResourcesRequired.h"
#include "SVGStyledElement.h"
#include "SVGTransformList.h"
@@ -51,7 +52,7 @@ namespace WebCore {
DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGGradientElement, SVGNames::spreadMethodAttr, int, SpreadMethod, spreadMethod)
DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGGradientElement, SVGNames::gradientUnitsAttr, int, GradientUnits, gradientUnits)
- DECLARE_ANIMATED_PROPERTY(SVGGradientElement, SVGNames::gradientTransformAttr, SVGTransformList*, GradientTransform, gradientTransform)
+ DECLARE_ANIMATED_TRANSFORM_LIST_PROPERTY_NEW(SVGGradientElement, SVGNames::gradientTransformAttr, SVGTransformList, GradientTransform, gradientTransform)
// SVGURIReference
DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGGradientElement, XLinkNames::hrefAttr, String, Href, href)
diff --git a/WebCore/svg/SVGImageElement.cpp b/WebCore/svg/SVGImageElement.cpp
index fcfa54f..3eb64db 100644
--- a/WebCore/svg/SVGImageElement.cpp
+++ b/WebCore/svg/SVGImageElement.cpp
@@ -98,6 +98,9 @@ void SVGImageElement::svgAttributeChanged(const QualifiedName& attrName)
if (isLengthAttribute)
updateRelativeLengthsInformation();
+ if (SVGTests::handleAttributeChange(this, attrName))
+ return;
+
RenderObject* renderer = this->renderer();
if (!renderer)
return;
@@ -115,7 +118,6 @@ void SVGImageElement::svgAttributeChanged(const QualifiedName& attrName)
}
if (attrName == SVGNames::preserveAspectRatioAttr
- || SVGTests::isKnownAttribute(attrName)
|| SVGLangSpace::isKnownAttribute(attrName)
|| SVGExternalResourcesRequired::isKnownAttribute(attrName))
RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
diff --git a/WebCore/svg/SVGLength.cpp b/WebCore/svg/SVGLength.cpp
index f8381bf..8168cf6 100644
--- a/WebCore/svg/SVGLength.cpp
+++ b/WebCore/svg/SVGLength.cpp
@@ -347,7 +347,7 @@ bool SVGLength::determineViewport(const SVGElement* context, float& width, float
}
// Resolve value against enclosing non-SVG RenderBox
- if (!context->parent() || context->parent()->isSVGElement())
+ if (!context->parentNode() || context->parentNode()->isSVGElement())
return false;
RenderObject* renderer = context->renderer();
diff --git a/WebCore/svg/SVGLineElement.cpp b/WebCore/svg/SVGLineElement.cpp
index 4ee5f0d..ac461fe 100644
--- a/WebCore/svg/SVGLineElement.cpp
+++ b/WebCore/svg/SVGLineElement.cpp
@@ -79,6 +79,9 @@ void SVGLineElement::svgAttributeChanged(const QualifiedName& attrName)
if (isLengthAttribute)
updateRelativeLengthsInformation();
+ if (SVGTests::handleAttributeChange(this, attrName))
+ return;
+
RenderSVGPath* renderer = static_cast<RenderSVGPath*>(this->renderer());
if (!renderer)
return;
@@ -95,8 +98,7 @@ void SVGLineElement::svgAttributeChanged(const QualifiedName& attrName)
return;
}
- if (SVGTests::isKnownAttribute(attrName)
- || SVGLangSpace::isKnownAttribute(attrName)
+ if (SVGLangSpace::isKnownAttribute(attrName)
|| SVGExternalResourcesRequired::isKnownAttribute(attrName))
RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
}
diff --git a/WebCore/svg/SVGLinearGradientElement.cpp b/WebCore/svg/SVGLinearGradientElement.cpp
index 840a31e..fa3e40c 100644
--- a/WebCore/svg/SVGLinearGradientElement.cpp
+++ b/WebCore/svg/SVGLinearGradientElement.cpp
@@ -127,8 +127,11 @@ void SVGLinearGradientElement::collectGradientAttributes(LinearGradientAttribute
if (!attributes.hasBoundingBoxMode() && current->hasAttribute(SVGNames::gradientUnitsAttr))
attributes.setBoundingBoxMode(current->gradientUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
- if (!attributes.hasGradientTransform() && current->hasAttribute(SVGNames::gradientTransformAttr))
- attributes.setGradientTransform(current->gradientTransform()->consolidate().matrix());
+ if (!attributes.hasGradientTransform() && current->hasAttribute(SVGNames::gradientTransformAttr)) {
+ AffineTransform transform;
+ current->gradientTransform().concatenate(transform);
+ attributes.setGradientTransform(transform);
+ }
if (!attributes.hasStops()) {
const Vector<Gradient::ColorStop>& stops(current->buildStops());
diff --git a/WebCore/svg/SVGMatrix.h b/WebCore/svg/SVGMatrix.h
new file mode 100644
index 0000000..807b703
--- /dev/null
+++ b/WebCore/svg/SVGMatrix.h
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) Research In Motion Limited 2010. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef SVGMatrix_h
+#define SVGMatrix_h
+
+#if ENABLE(SVG)
+#include "AffineTransform.h"
+#include "SVGException.h"
+
+namespace WebCore {
+
+// Only used in the bindings.
+class SVGMatrix : public AffineTransform {
+public:
+ SVGMatrix() { }
+ SVGMatrix(const AffineTransform& other)
+ : AffineTransform(other)
+ {
+ }
+
+ SVGMatrix(double a, double b, double c, double d, double e, double f)
+ : AffineTransform(a, b, c, d, e, f)
+ {
+ }
+
+ SVGMatrix translate(double tx, double ty)
+ {
+ AffineTransform copy = *this;
+ copy.translate(tx, ty);
+ return static_cast<SVGMatrix>(copy);
+ }
+
+ SVGMatrix scale(double s)
+ {
+ AffineTransform copy = *this;
+ copy.scale(s, s);
+ return static_cast<SVGMatrix>(copy);
+ }
+
+ SVGMatrix scaleNonUniform(double sx, double sy)
+ {
+ AffineTransform copy = *this;
+ copy.scale(sx, sy);
+ return static_cast<SVGMatrix>(copy);
+ }
+
+ SVGMatrix rotate(double d)
+ {
+ AffineTransform copy = *this;
+ copy.rotate(d);
+ return static_cast<SVGMatrix>(copy);
+ }
+
+ SVGMatrix flipX()
+ {
+ AffineTransform copy = *this;
+ copy.flipX();
+ return static_cast<SVGMatrix>(copy);
+ }
+
+ SVGMatrix flipY()
+ {
+ AffineTransform copy = *this;
+ copy.flipY();
+ return static_cast<SVGMatrix>(copy);
+ }
+
+ SVGMatrix skewX(double angle)
+ {
+ AffineTransform copy = *this;
+ copy.skewX(angle);
+ return static_cast<SVGMatrix>(copy);
+ }
+
+ SVGMatrix skewY(double angle)
+ {
+ AffineTransform copy = *this;
+ copy.skewY(angle);
+ return static_cast<SVGMatrix>(copy);
+ }
+
+ // SVGMatrix::multiply needs to call SVGMatrix::multLeft.
+ SVGMatrix multiply(const SVGMatrix& other)
+ {
+ AffineTransform copy = *this;
+ copy.multLeft(static_cast<const AffineTransform&>(other));
+ return static_cast<SVGMatrix>(copy);
+ }
+
+ SVGMatrix inverse(ExceptionCode& ec) const
+ {
+ AffineTransform transform = AffineTransform::inverse();
+ if (!isInvertible())
+ ec = SVGException::SVG_MATRIX_NOT_INVERTABLE;
+
+ return transform;
+ }
+
+ SVGMatrix rotateFromVector(double x, double y, ExceptionCode& ec)
+ {
+ if (!x || !y)
+ ec = SVGException::SVG_INVALID_VALUE_ERR;
+
+ AffineTransform copy = *this;
+ copy.rotateFromVector(x, y);
+ return static_cast<SVGMatrix>(copy);
+ }
+
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(SVG)
+#endif
diff --git a/WebCore/svg/SVGMatrix.idl b/WebCore/svg/SVGMatrix.idl
index c6e996d..270a62c 100644
--- a/WebCore/svg/SVGMatrix.idl
+++ b/WebCore/svg/SVGMatrix.idl
@@ -22,29 +22,29 @@
module svg {
- interface [Conditional=SVG, PODType=AffineTransform] SVGMatrix {
+ interface [Conditional=SVG] SVGMatrix {
// FIXME: these attributes should all be floats but since we implement
// AffineTransform with doubles setting these as doubles makes more sense.
- attribute double a;
- attribute double b;
- attribute double c;
- attribute double d;
- attribute double e;
- attribute double f;
+ attribute [StrictTypeChecking] double a;
+ attribute [StrictTypeChecking] double b;
+ attribute [StrictTypeChecking] double c;
+ attribute [StrictTypeChecking] double d;
+ attribute [StrictTypeChecking] double e;
+ attribute [StrictTypeChecking] double f;
- [Custom] SVGMatrix multiply(in SVGMatrix secondMatrix);
- [Custom] SVGMatrix inverse()
+ [StrictTypeChecking, RequiresAllArguments=Raise] SVGMatrix multiply(in SVGMatrix secondMatrix);
+ SVGMatrix inverse()
raises(SVGException);
- [Immutable] SVGMatrix translate(in float x, in float y);
- [Immutable] SVGMatrix scale(in float scaleFactor);
- [Immutable] SVGMatrix scaleNonUniform(in float scaleFactorX, in float scaleFactorY);
- [Immutable] SVGMatrix rotate(in float angle);
- [Custom] SVGMatrix rotateFromVector(in float x, in float y)
+ [Immutable, StrictTypeChecking, RequiresAllArguments=Raise] SVGMatrix translate(in float x, in float y);
+ [Immutable, StrictTypeChecking, RequiresAllArguments=Raise] SVGMatrix scale(in float scaleFactor);
+ [Immutable, StrictTypeChecking, RequiresAllArguments=Raise] SVGMatrix scaleNonUniform(in float scaleFactorX, in float scaleFactorY);
+ [Immutable, StrictTypeChecking, RequiresAllArguments=Raise] SVGMatrix rotate(in float angle);
+ [StrictTypeChecking, RequiresAllArguments=Raise] SVGMatrix rotateFromVector(in float x, in float y)
raises(SVGException);
[Immutable] SVGMatrix flipX();
[Immutable] SVGMatrix flipY();
- [Immutable] SVGMatrix skewX(in float angle);
- [Immutable] SVGMatrix skewY(in float angle);
+ [Immutable, StrictTypeChecking, RequiresAllArguments=Raise] SVGMatrix skewX(in float angle);
+ [Immutable, StrictTypeChecking, RequiresAllArguments=Raise] SVGMatrix skewY(in float angle);
};
}
diff --git a/WebCore/svg/SVGPathElement.cpp b/WebCore/svg/SVGPathElement.cpp
index 920e947..8f8bef9 100644
--- a/WebCore/svg/SVGPathElement.cpp
+++ b/WebCore/svg/SVGPathElement.cpp
@@ -201,6 +201,9 @@ void SVGPathElement::svgAttributeChanged(const QualifiedName& attrName)
{
SVGStyledTransformableElement::svgAttributeChanged(attrName);
+ if (SVGTests::handleAttributeChange(this, attrName))
+ return;
+
RenderSVGPath* renderer = static_cast<RenderSVGPath*>(this->renderer());
if (!renderer)
return;
@@ -218,7 +221,6 @@ void SVGPathElement::svgAttributeChanged(const QualifiedName& attrName)
}
if (attrName == SVGNames::pathLengthAttr
- || SVGTests::isKnownAttribute(attrName)
|| SVGLangSpace::isKnownAttribute(attrName)
|| SVGExternalResourcesRequired::isKnownAttribute(attrName))
RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
diff --git a/WebCore/svg/SVGPatternElement.cpp b/WebCore/svg/SVGPatternElement.cpp
index 0f3b5d4..229e1db 100644
--- a/WebCore/svg/SVGPatternElement.cpp
+++ b/WebCore/svg/SVGPatternElement.cpp
@@ -57,7 +57,6 @@ inline SVGPatternElement::SVGPatternElement(const QualifiedName& tagName, Docume
, m_height(LengthModeHeight)
, m_patternUnits(SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)
, m_patternContentUnits(SVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE)
- , m_patternTransform(SVGTransformList::create(SVGNames::patternTransformAttr))
{
}
@@ -79,11 +78,12 @@ void SVGPatternElement::parseMappedAttribute(Attribute* attr)
else if (attr->value() == "objectBoundingBox")
setPatternContentUnitsBaseValue(SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
} else if (attr->name() == SVGNames::patternTransformAttr) {
- SVGTransformList* patternTransforms = patternTransformBaseValue();
- if (!SVGTransformable::parseTransformAttribute(patternTransforms, attr->value())) {
- ExceptionCode ec = 0;
- patternTransforms->clear(ec);
- }
+ SVGTransformList newList;
+ if (!SVGTransformable::parseTransformAttribute(newList, attr->value()))
+ newList.clear();
+
+ detachAnimatedPatternTransformListWrappers(newList.size());
+ patternTransformBaseValue() = newList;
} else if (attr->name() == SVGNames::xAttr)
setXBaseValue(SVGLength(LengthModeWidth, attr->value()));
else if (attr->name() == SVGNames::yAttr)
@@ -224,8 +224,11 @@ void SVGPatternElement::collectPatternAttributes(PatternAttributes& attributes)
if (!attributes.hasBoundingBoxModeContent() && current->hasAttribute(SVGNames::patternContentUnitsAttr))
attributes.setBoundingBoxModeContent(current->patternContentUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
- if (!attributes.hasPatternTransform() && current->hasAttribute(SVGNames::patternTransformAttr))
- attributes.setPatternTransform(current->patternTransform()->consolidate().matrix());
+ if (!attributes.hasPatternTransform() && current->hasAttribute(SVGNames::patternTransformAttr)) {
+ AffineTransform transform;
+ current->patternTransform().concatenate(transform);
+ attributes.setPatternTransform(transform);
+ }
if (!attributes.hasPatternContentElement() && current->hasChildNodes())
attributes.setPatternContentElement(current);
diff --git a/WebCore/svg/SVGPatternElement.h b/WebCore/svg/SVGPatternElement.h
index ce63a22..37f91ca 100644
--- a/WebCore/svg/SVGPatternElement.h
+++ b/WebCore/svg/SVGPatternElement.h
@@ -24,6 +24,7 @@
#if ENABLE(SVG)
#include "SVGAnimatedLength.h"
#include "SVGAnimatedPropertyMacros.h"
+#include "SVGAnimatedTransformList.h"
#include "SVGExternalResourcesRequired.h"
#include "SVGFitToViewBox.h"
#include "SVGLangSpace.h"
@@ -70,7 +71,7 @@ namespace WebCore {
DECLARE_ANIMATED_PROPERTY_NEW(SVGPatternElement, SVGNames::heightAttr, SVGLength, Height, height)
DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGPatternElement, SVGNames::patternUnitsAttr, int, PatternUnits, patternUnits)
DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGPatternElement, SVGNames::patternContentUnitsAttr, int, PatternContentUnits, patternContentUnits)
- DECLARE_ANIMATED_PROPERTY(SVGPatternElement, SVGNames::patternTransformAttr, SVGTransformList*, PatternTransform, patternTransform)
+ DECLARE_ANIMATED_TRANSFORM_LIST_PROPERTY_NEW(SVGPatternElement, SVGNames::patternTransformAttr, SVGTransformList, PatternTransform, patternTransform)
// SVGURIReference
DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGPatternElement, XLinkNames::hrefAttr, String, Href, href)
diff --git a/WebCore/svg/SVGPoint.idl b/WebCore/svg/SVGPoint.idl
index 19c6292..f6d2514 100644
--- a/WebCore/svg/SVGPoint.idl
+++ b/WebCore/svg/SVGPoint.idl
@@ -26,7 +26,7 @@ module svg {
attribute [StrictTypeChecking] float x;
attribute [StrictTypeChecking] float y;
- SVGPoint matrixTransform(in SVGMatrix matrix);
+ [StrictTypeChecking, RequiresAllArguments=Raise] SVGPoint matrixTransform(in SVGMatrix matrix);
};
}
diff --git a/WebCore/svg/SVGPolyElement.cpp b/WebCore/svg/SVGPolyElement.cpp
index 7b95a32..211dd58 100644
--- a/WebCore/svg/SVGPolyElement.cpp
+++ b/WebCore/svg/SVGPolyElement.cpp
@@ -66,6 +66,9 @@ void SVGPolyElement::svgAttributeChanged(const QualifiedName& attrName)
{
SVGStyledTransformableElement::svgAttributeChanged(attrName);
+ if (SVGTests::handleAttributeChange(this, attrName))
+ return;
+
RenderSVGPath* renderer = static_cast<RenderSVGPath*>(this->renderer());
if (!renderer)
return;
@@ -82,8 +85,7 @@ void SVGPolyElement::svgAttributeChanged(const QualifiedName& attrName)
return;
}
- if (SVGTests::isKnownAttribute(attrName)
- || SVGLangSpace::isKnownAttribute(attrName)
+ if (SVGLangSpace::isKnownAttribute(attrName)
|| SVGExternalResourcesRequired::isKnownAttribute(attrName))
RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
}
diff --git a/WebCore/svg/SVGRadialGradientElement.cpp b/WebCore/svg/SVGRadialGradientElement.cpp
index 584b1b6..aaf32bc 100644
--- a/WebCore/svg/SVGRadialGradientElement.cpp
+++ b/WebCore/svg/SVGRadialGradientElement.cpp
@@ -137,8 +137,11 @@ void SVGRadialGradientElement::collectGradientAttributes(RadialGradientAttribute
if (!attributes.hasBoundingBoxMode() && current->hasAttribute(SVGNames::gradientUnitsAttr))
attributes.setBoundingBoxMode(current->gradientUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
- if (!attributes.hasGradientTransform() && current->hasAttribute(SVGNames::gradientTransformAttr))
- attributes.setGradientTransform(current->gradientTransform()->consolidate().matrix());
+ if (!attributes.hasGradientTransform() && current->hasAttribute(SVGNames::gradientTransformAttr)) {
+ AffineTransform transform;
+ current->gradientTransform().concatenate(transform);
+ attributes.setGradientTransform(transform);
+ }
if (!attributes.hasStops()) {
const Vector<Gradient::ColorStop>& stops(current->buildStops());
diff --git a/WebCore/svg/SVGRectElement.cpp b/WebCore/svg/SVGRectElement.cpp
index 46ed8de..c3ff3cb 100644
--- a/WebCore/svg/SVGRectElement.cpp
+++ b/WebCore/svg/SVGRectElement.cpp
@@ -94,6 +94,9 @@ void SVGRectElement::svgAttributeChanged(const QualifiedName& attrName)
if (isLengthAttribute)
updateRelativeLengthsInformation();
+ if (SVGTests::handleAttributeChange(this, attrName))
+ return;
+
RenderSVGPath* renderer = static_cast<RenderSVGPath*>(this->renderer());
if (!renderer)
return;
@@ -110,8 +113,7 @@ void SVGRectElement::svgAttributeChanged(const QualifiedName& attrName)
return;
}
- if (SVGTests::isKnownAttribute(attrName)
- || SVGLangSpace::isKnownAttribute(attrName)
+ if (SVGLangSpace::isKnownAttribute(attrName)
|| SVGExternalResourcesRequired::isKnownAttribute(attrName))
RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
}
diff --git a/WebCore/svg/SVGSVGElement.cpp b/WebCore/svg/SVGSVGElement.cpp
index 314f522..e90fba4 100644
--- a/WebCore/svg/SVGSVGElement.cpp
+++ b/WebCore/svg/SVGSVGElement.cpp
@@ -91,6 +91,18 @@ SVGSVGElement::~SVGSVGElement()
document()->accessSVGExtensions()->removeTimeContainer(this);
}
+void SVGSVGElement::willMoveToNewOwnerDocument()
+{
+ document()->unregisterForDocumentActivationCallbacks(this);
+ SVGStyledLocatableElement::willMoveToNewOwnerDocument();
+}
+
+void SVGSVGElement::didMoveToNewOwnerDocument()
+{
+ document()->registerForDocumentActivationCallbacks(this);
+ SVGStyledLocatableElement::didMoveToNewOwnerDocument();
+}
+
const AtomicString& SVGSVGElement::contentScriptType() const
{
DEFINE_STATIC_LOCAL(const AtomicString, defaultValue, ("text/ecmascript"));
@@ -319,11 +331,13 @@ void SVGSVGElement::svgAttributeChanged(const QualifiedName& attrName)
updateRelativeLengthsInformation();
}
+ if (SVGTests::handleAttributeChange(this, attrName))
+ return;
+
if (!renderer())
return;
if (updateRelativeLengths
- || SVGTests::isKnownAttribute(attrName)
|| SVGLangSpace::isKnownAttribute(attrName)
|| SVGExternalResourcesRequired::isKnownAttribute(attrName)
|| SVGZoomAndPan::isKnownAttribute(attrName)
@@ -437,9 +451,9 @@ FloatPoint SVGSVGElement::createSVGPoint()
return FloatPoint();
}
-AffineTransform SVGSVGElement::createSVGMatrix()
+SVGMatrix SVGSVGElement::createSVGMatrix()
{
- return AffineTransform();
+ return SVGMatrix();
}
FloatRect SVGSVGElement::createSVGRect()
@@ -452,9 +466,9 @@ SVGTransform SVGSVGElement::createSVGTransform()
return SVGTransform(SVGTransform::SVG_TRANSFORM_MATRIX);
}
-SVGTransform SVGSVGElement::createSVGTransformFromMatrix(const AffineTransform& matrix)
+SVGTransform SVGSVGElement::createSVGTransformFromMatrix(const SVGMatrix& matrix)
{
- return SVGTransform(matrix);
+ return SVGTransform(static_cast<const AffineTransform&>(matrix));
}
AffineTransform SVGSVGElement::localCoordinateSpaceTransform(SVGLocatable::CTMScope mode) const
@@ -570,8 +584,13 @@ AffineTransform SVGSVGElement::viewBoxToViewTransform(float viewWidth, float vie
viewBoxRect = viewBox();
AffineTransform ctm = SVGFitToViewBox::viewBoxToViewTransform(viewBoxRect, preserveAspectRatio(), viewWidth, viewHeight);
- if (useCurrentView() && currentView())
- return currentView()->transform()->concatenate().matrix() * ctm;
+ if (useCurrentView() && currentView()) {
+ AffineTransform transform;
+ if (!currentView()->transform().concatenate(transform))
+ return ctm;
+
+ return transform * ctm;
+ }
return ctm;
}
diff --git a/WebCore/svg/SVGSVGElement.h b/WebCore/svg/SVGSVGElement.h
index dca3ac2..f73fb3f 100644
--- a/WebCore/svg/SVGSVGElement.h
+++ b/WebCore/svg/SVGSVGElement.h
@@ -35,6 +35,7 @@
namespace WebCore {
class SVGAngle;
class SVGLength;
+ class SVGMatrix;
class SVGTransform;
class SVGViewSpec;
class SVGViewElement;
@@ -108,10 +109,10 @@ namespace WebCore {
static SVGLength createSVGLength();
static SVGAngle createSVGAngle();
static FloatPoint createSVGPoint();
- static AffineTransform createSVGMatrix();
+ static SVGMatrix createSVGMatrix();
static FloatRect createSVGRect();
static SVGTransform createSVGTransform();
- static SVGTransform createSVGTransformFromMatrix(const AffineTransform&);
+ static SVGTransform createSVGTransformFromMatrix(const SVGMatrix&);
AffineTransform viewBoxToViewTransform(float viewWidth, float viewHeight) const;
@@ -121,6 +122,10 @@ namespace WebCore {
Element* getElementById(const AtomicString&) const;
+ protected:
+ virtual void willMoveToNewOwnerDocument();
+ virtual void didMoveToNewOwnerDocument();
+
private:
SVGSVGElement(const QualifiedName&, Document*);
virtual ~SVGSVGElement();
diff --git a/WebCore/svg/SVGScriptElement.cpp b/WebCore/svg/SVGScriptElement.cpp
index 6532ac2..9146ddc 100644
--- a/WebCore/svg/SVGScriptElement.cpp
+++ b/WebCore/svg/SVGScriptElement.cpp
@@ -31,21 +31,15 @@
namespace WebCore {
-inline SVGScriptElement::SVGScriptElement(const QualifiedName& tagName, Document* document, bool createdByParser)
+inline SVGScriptElement::SVGScriptElement(const QualifiedName& tagName, Document* document, bool createdByParser, bool isEvaluated)
: SVGElement(tagName, document)
- , m_data(this, this)
+ , ScriptElement(this, createdByParser, isEvaluated)
{
- m_data.setCreatedByParser(createdByParser);
}
PassRefPtr<SVGScriptElement> SVGScriptElement::create(const QualifiedName& tagName, Document* document, bool createdByParser)
{
- return adoptRef(new SVGScriptElement(tagName, document, createdByParser));
-}
-
-String SVGScriptElement::scriptContent() const
-{
- return m_data.scriptContent();
+ return adoptRef(new SVGScriptElement(tagName, document, createdByParser, false));
}
void SVGScriptElement::parseMappedAttribute(Attribute* attr)
@@ -69,13 +63,13 @@ void SVGScriptElement::svgAttributeChanged(const QualifiedName& attrName)
SVGElement::svgAttributeChanged(attrName);
if (SVGURIReference::isKnownAttribute(attrName))
- handleSourceAttribute(m_data, href());
+ handleSourceAttribute(href());
else if (SVGExternalResourcesRequired::isKnownAttribute(attrName)) {
// Handle dynamic updates of the 'externalResourcesRequired' attribute. Only possible case: changing from 'true' to 'false'
// causes an immediate dispatch of the SVGLoad event. If the attribute value was 'false' before inserting the script element
// in the document, the SVGLoad event has already been dispatched.
- if (!externalResourcesRequiredBaseValue() && !m_data.haveFiredLoadEvent() && !m_data.createdByParser()) {
- m_data.setHaveFiredLoadEvent(true);
+ if (!externalResourcesRequiredBaseValue() && !haveFiredLoadEvent() && !createdByParser()) {
+ setHaveFiredLoadEvent(true);
ASSERT(haveLoadedRequiredResources());
sendSVGLoadEventIfPossible();
@@ -102,14 +96,14 @@ void SVGScriptElement::synchronizeProperty(const QualifiedName& attrName)
void SVGScriptElement::insertedIntoDocument()
{
SVGElement::insertedIntoDocument();
- ScriptElement::insertedIntoDocument(m_data, sourceAttributeValue());
+ ScriptElement::insertedIntoDocument(sourceAttributeValue());
- if (m_data.createdByParser())
+ if (createdByParser())
return;
// Eventually send SVGLoad event now for the dynamically inserted script element
if (!externalResourcesRequiredBaseValue()) {
- m_data.setHaveFiredLoadEvent(true);
+ setHaveFiredLoadEvent(true);
sendSVGLoadEventIfPossible();
}
}
@@ -117,12 +111,12 @@ void SVGScriptElement::insertedIntoDocument()
void SVGScriptElement::removedFromDocument()
{
SVGElement::removedFromDocument();
- ScriptElement::removedFromDocument(m_data);
+ ScriptElement::removedFromDocument();
}
void SVGScriptElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
{
- ScriptElement::childrenChanged(m_data);
+ ScriptElement::childrenChanged();
SVGElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
}
@@ -133,12 +127,12 @@ bool SVGScriptElement::isURLAttribute(Attribute* attr) const
void SVGScriptElement::finishParsingChildren()
{
- ScriptElement::finishParsingChildren(m_data, sourceAttributeValue());
+ ScriptElement::finishParsingChildren(sourceAttributeValue());
SVGElement::finishParsingChildren();
// A SVGLoad event has been fired by SVGElement::finishParsingChildren.
if (!externalResourcesRequiredBaseValue())
- m_data.setHaveFiredLoadEvent(true);
+ setHaveFiredLoadEvent(true);
}
String SVGScriptElement::type() const
@@ -151,11 +145,6 @@ void SVGScriptElement::setType(const String& type)
m_type = type;
}
-String SVGScriptElement::scriptCharset() const
-{
- return m_data.scriptCharset();
-}
-
void SVGScriptElement::addSubresourceAttributeURLs(ListHashSet<KURL>& urls) const
{
SVGElement::addSubresourceAttributeURLs(urls);
@@ -165,7 +154,7 @@ void SVGScriptElement::addSubresourceAttributeURLs(ListHashSet<KURL>& urls) cons
bool SVGScriptElement::haveLoadedRequiredResources()
{
- return !externalResourcesRequiredBaseValue() || m_data.haveFiredLoadEvent();
+ return !externalResourcesRequiredBaseValue() || haveFiredLoadEvent();
}
String SVGScriptElement::sourceAttributeValue() const
@@ -212,9 +201,9 @@ void SVGScriptElement::dispatchLoadEvent()
{
bool externalResourcesRequired = externalResourcesRequiredBaseValue();
- if (m_data.createdByParser())
- ASSERT(externalResourcesRequired != m_data.haveFiredLoadEvent());
- else if (m_data.haveFiredLoadEvent()) {
+ if (createdByParser())
+ ASSERT(externalResourcesRequired != haveFiredLoadEvent());
+ else if (haveFiredLoadEvent()) {
// If we've already fired an load event and externalResourcesRequired is set to 'true'
// externalResourcesRequired has been modified while loading the <script>. Don't dispatch twice.
if (externalResourcesRequired)
@@ -226,10 +215,10 @@ void SVGScriptElement::dispatchLoadEvent()
// SVG fires the SVGLoad event immediately after parsing the <script> element, if externalResourcesRequired
// is set to 'false', otherwhise it dispatches the 'SVGLoad' event just after loading the remote resource.
if (externalResourcesRequired) {
- ASSERT(!m_data.haveFiredLoadEvent());
+ ASSERT(!haveFiredLoadEvent());
// Dispatch SVGLoad event
- m_data.setHaveFiredLoadEvent(true);
+ setHaveFiredLoadEvent(true);
ASSERT(haveLoadedRequiredResources());
sendSVGLoadEventIfPossible();
@@ -241,9 +230,9 @@ void SVGScriptElement::dispatchErrorEvent()
dispatchEvent(Event::create(eventNames().errorEvent, true, false));
}
-bool SVGScriptElement::shouldExecuteAsJavaScript() const
+PassRefPtr<Element> SVGScriptElement::cloneElementWithoutAttributesAndChildren() const
{
- return m_data.shouldExecuteAsJavaScript();
+ return adoptRef(new SVGScriptElement(tagQName(), document(), false, isEvaluated()));
}
}
diff --git a/WebCore/svg/SVGScriptElement.h b/WebCore/svg/SVGScriptElement.h
index e8695fb..7532bf2 100644
--- a/WebCore/svg/SVGScriptElement.h
+++ b/WebCore/svg/SVGScriptElement.h
@@ -41,9 +41,7 @@ namespace WebCore {
void setType(const String&);
private:
- SVGScriptElement(const QualifiedName&, Document*, bool createdByParser);
-
- virtual String scriptContent() const;
+ SVGScriptElement(const QualifiedName&, Document*, bool createdByParser, bool isEvaluated);
virtual void parseMappedAttribute(Attribute*);
virtual void insertedIntoDocument();
@@ -55,12 +53,8 @@ namespace WebCore {
virtual bool isURLAttribute(Attribute*) const;
virtual void finishParsingChildren();
- virtual String scriptCharset() const;
-
virtual void addSubresourceAttributeURLs(ListHashSet<KURL>&) const;
- virtual bool shouldExecuteAsJavaScript() const;
-
virtual bool haveLoadedRequiredResources();
virtual String sourceAttributeValue() const;
@@ -75,13 +69,14 @@ namespace WebCore {
virtual void dispatchLoadEvent();
virtual void dispatchErrorEvent();
+ PassRefPtr<Element> cloneElementWithoutAttributesAndChildren() const;
+
// SVGURIReference
DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGScriptElement, XLinkNames::hrefAttr, String, Href, href)
// SVGExternalResourcesRequired
DECLARE_ANIMATED_STATIC_PROPERTY_NEW(SVGScriptElement, SVGNames::externalResourcesRequiredAttr, bool, ExternalResourcesRequired, externalResourcesRequired)
- ScriptElementData m_data;
String m_type;
};
diff --git a/WebCore/svg/SVGStyleElement.cpp b/WebCore/svg/SVGStyleElement.cpp
index 4a80319..042af1c 100644
--- a/WebCore/svg/SVGStyleElement.cpp
+++ b/WebCore/svg/SVGStyleElement.cpp
@@ -40,6 +40,12 @@ inline SVGStyleElement::SVGStyleElement(const QualifiedName& tagName, Document*
{
}
+SVGStyleElement::~SVGStyleElement()
+{
+ if (m_sheet)
+ m_sheet->clearOwnerNode();
+}
+
PassRefPtr<SVGStyleElement> SVGStyleElement::create(const QualifiedName& tagName, Document* document, bool createdByParser)
{
return adoptRef(new SVGStyleElement(tagName, document, createdByParser));
@@ -114,11 +120,6 @@ void SVGStyleElement::childrenChanged(bool changedByParser, Node* beforeChange,
SVGElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
}
-StyleSheet* SVGStyleElement::sheet()
-{
- return StyleElement::sheet(this);
-}
-
}
#endif // ENABLE(SVG)
diff --git a/WebCore/svg/SVGStyleElement.h b/WebCore/svg/SVGStyleElement.h
index bb46549..acf358e 100644
--- a/WebCore/svg/SVGStyleElement.h
+++ b/WebCore/svg/SVGStyleElement.h
@@ -33,8 +33,9 @@ class SVGStyleElement : public SVGElement
, public StyleElement {
public:
static PassRefPtr<SVGStyleElement> create(const QualifiedName&, Document*, bool createdByParser);
+ virtual ~SVGStyleElement();
- StyleSheet* sheet();
+ using StyleElement::sheet;
virtual const AtomicString& type() const;
void setType(const AtomicString&, ExceptionCode&);
diff --git a/WebCore/svg/SVGStyledElement.cpp b/WebCore/svg/SVGStyledElement.cpp
index 64030bc..d5ef486 100644
--- a/WebCore/svg/SVGStyledElement.cpp
+++ b/WebCore/svg/SVGStyledElement.cpp
@@ -362,14 +362,14 @@ void SVGStyledElement::updateRelativeLengthsInformation(bool hasRelativeLengths,
}
// Find first styled parent node, and notify it that we've changed our relative length state.
- Node* node = parent();
+ ContainerNode* node = parentNode();
while (node) {
if (!node->isSVGElement())
break;
SVGElement* element = static_cast<SVGElement*>(node);
if (!element->isStyled()) {
- node = node->parent();
+ node = node->parentNode();
continue;
}
diff --git a/WebCore/svg/SVGStyledTransformableElement.cpp b/WebCore/svg/SVGStyledTransformableElement.cpp
index 87d812c..e5cd42b 100644
--- a/WebCore/svg/SVGStyledTransformableElement.cpp
+++ b/WebCore/svg/SVGStyledTransformableElement.cpp
@@ -34,7 +34,6 @@ namespace WebCore {
SVGStyledTransformableElement::SVGStyledTransformableElement(const QualifiedName& tagName, Document* document)
: SVGStyledLocatableElement(tagName, document)
- , m_transform(SVGTransformList::create(SVGNames::transformAttr))
{
}
@@ -54,9 +53,11 @@ AffineTransform SVGStyledTransformableElement::getScreenCTM(StyleUpdateStrategy
AffineTransform SVGStyledTransformableElement::animatedLocalTransform() const
{
- return m_supplementalTransform ? *m_supplementalTransform * transform()->concatenate().matrix() : transform()->concatenate().matrix();
+ AffineTransform matrix;
+ transform().concatenate(matrix);
+ return m_supplementalTransform ? *m_supplementalTransform * matrix : matrix;
}
-
+
AffineTransform* SVGStyledTransformableElement::supplementalTransform()
{
if (!m_supplementalTransform)
@@ -67,11 +68,11 @@ AffineTransform* SVGStyledTransformableElement::supplementalTransform()
void SVGStyledTransformableElement::parseMappedAttribute(Attribute* attr)
{
if (SVGTransformable::isKnownAttribute(attr->name())) {
- SVGTransformList* localTransforms = transformBaseValue();
- if (!SVGTransformable::parseTransformAttribute(localTransforms, attr->value())) {
- ExceptionCode ec = 0;
- localTransforms->clear(ec);
- }
+ SVGTransformList newList;
+ if (!SVGTransformable::parseTransformAttribute(newList, attr->value()))
+ newList.clear();
+ detachAnimatedTransformListWrappers(newList.size());
+ transformBaseValue() = newList;
} else
SVGStyledLocatableElement::parseMappedAttribute(attr);
}
diff --git a/WebCore/svg/SVGStyledTransformableElement.h b/WebCore/svg/SVGStyledTransformableElement.h
index f6309dd..54907c1 100644
--- a/WebCore/svg/SVGStyledTransformableElement.h
+++ b/WebCore/svg/SVGStyledTransformableElement.h
@@ -60,7 +60,7 @@ protected:
virtual void parseMappedAttribute(Attribute*);
virtual void synchronizeProperty(const QualifiedName&);
- DECLARE_ANIMATED_PROPERTY(SVGStyledTransformableElement, SVGNames::transformAttr, SVGTransformList*, Transform, transform)
+ DECLARE_ANIMATED_TRANSFORM_LIST_PROPERTY_NEW(SVGStyledTransformableElement, SVGNames::transformAttr, SVGTransformList, Transform, transform)
private:
virtual bool isStyledTransformable() const { return true; }
diff --git a/WebCore/svg/SVGTests.cpp b/WebCore/svg/SVGTests.cpp
index 3317964..2b9cb14 100644
--- a/WebCore/svg/SVGTests.cpp
+++ b/WebCore/svg/SVGTests.cpp
@@ -26,6 +26,7 @@
#include "Attribute.h"
#include "DOMImplementation.h"
#include "Language.h"
+#include "SVGElement.h"
#include "SVGNames.h"
#include "SVGStringList.h"
@@ -82,13 +83,34 @@ bool SVGTests::parseMappedAttribute(Attribute* attr)
return false;
}
-bool SVGTests::isKnownAttribute(const QualifiedName& attrName)
+static bool knownAttribute(const QualifiedName& attrName)
{
return attrName == SVGNames::requiredFeaturesAttr
|| attrName == SVGNames::requiredExtensionsAttr
|| attrName == SVGNames::systemLanguageAttr;
}
+bool SVGTests::isKnownAttribute(const QualifiedName& attrName)
+{
+ return knownAttribute(attrName);
+}
+
+bool SVGTests::handleAttributeChange(const SVGElement* targetElement, const QualifiedName& attrName)
+{
+ if (!knownAttribute(attrName))
+ return false;
+ if (!targetElement->inDocument())
+ return false;
+ SVGElement* svgElement = const_cast<SVGElement*>(targetElement);
+ ASSERT(svgElement);
+ bool valid = svgElement->isValid();
+ if (valid && !svgElement->attached())
+ svgElement->attach();
+ if (!valid && svgElement->attached())
+ svgElement->detach();
+ return true;
+}
+
}
#endif // ENABLE(SVG)
diff --git a/WebCore/svg/SVGTests.h b/WebCore/svg/SVGTests.h
index f662e9a..8cba9d2 100644
--- a/WebCore/svg/SVGTests.h
+++ b/WebCore/svg/SVGTests.h
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org>
+ * Copyright (C) 2004, 2005, 2006, 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
@@ -28,6 +28,7 @@ namespace WebCore {
class Attribute;
class QualifiedName;
+class SVGElement;
class SVGTests {
public:
@@ -41,6 +42,8 @@ public:
bool parseMappedAttribute(Attribute*);
bool isKnownAttribute(const QualifiedName&);
+ static bool handleAttributeChange(const SVGElement*, const QualifiedName&);
+
protected:
SVGTests();
diff --git a/WebCore/svg/SVGTextContentElement.cpp b/WebCore/svg/SVGTextContentElement.cpp
index cdb9d81..0cbcc9a 100644
--- a/WebCore/svg/SVGTextContentElement.cpp
+++ b/WebCore/svg/SVGTextContentElement.cpp
@@ -201,11 +201,20 @@ void SVGTextContentElement::synchronizeProperty(const QualifiedName& attrName)
synchronizeExternalResourcesRequired();
}
+void SVGTextContentElement::svgAttributeChanged(const QualifiedName& attrName)
+{
+ SVGStyledElement::svgAttributeChanged(attrName);
+
+ if (SVGTests::handleAttributeChange(this, attrName))
+ return;
+
+ // FIXME: also handle attribute changes for lengthAdjust and textLength
+}
+
bool SVGTextContentElement::isKnownAttribute(const QualifiedName& attrName)
{
return (attrName.matches(SVGNames::lengthAdjustAttr) ||
attrName.matches(SVGNames::textLengthAttr) ||
- SVGTests::isKnownAttribute(attrName) ||
SVGLangSpace::isKnownAttribute(attrName) ||
SVGExternalResourcesRequired::isKnownAttribute(attrName) ||
SVGStyledElement::isKnownAttribute(attrName));
diff --git a/WebCore/svg/SVGTextContentElement.h b/WebCore/svg/SVGTextContentElement.h
index d3aa061..fd2e003 100644
--- a/WebCore/svg/SVGTextContentElement.h
+++ b/WebCore/svg/SVGTextContentElement.h
@@ -64,6 +64,7 @@ namespace WebCore {
virtual bool isValid() const { return SVGTests::isValid(); }
virtual void parseMappedAttribute(Attribute*);
+ virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
virtual bool selfHasRelativeLengths() const;
diff --git a/WebCore/svg/SVGTextElement.cpp b/WebCore/svg/SVGTextElement.cpp
index c8f280e..bfa36c8 100644
--- a/WebCore/svg/SVGTextElement.cpp
+++ b/WebCore/svg/SVGTextElement.cpp
@@ -38,7 +38,6 @@ namespace WebCore {
inline SVGTextElement::SVGTextElement(const QualifiedName& tagName, Document* doc)
: SVGTextPositioningElement(tagName, doc)
, SVGTransformable()
- , m_transform(SVGTransformList::create(SVGNames::transformAttr))
{
}
@@ -50,11 +49,12 @@ PassRefPtr<SVGTextElement> SVGTextElement::create(const QualifiedName& tagName,
void SVGTextElement::parseMappedAttribute(Attribute* attr)
{
if (SVGTransformable::isKnownAttribute(attr->name())) {
- SVGTransformList* localTransforms = transformBaseValue();
- if (!SVGTransformable::parseTransformAttribute(localTransforms, attr->value())) {
- ExceptionCode ec = 0;
- localTransforms->clear(ec);
- }
+ SVGTransformList newList;
+ if (!SVGTransformable::parseTransformAttribute(newList, attr->value()))
+ newList.clear();
+
+ detachAnimatedTransformListWrappers(newList.size());
+ transformBaseValue() = newList;
} else
SVGTextPositioningElement::parseMappedAttribute(attr);
}
@@ -86,7 +86,9 @@ AffineTransform SVGTextElement::getScreenCTM(StyleUpdateStrategy styleUpdateStra
AffineTransform SVGTextElement::animatedLocalTransform() const
{
- return m_supplementalTransform ? transform()->concatenate().matrix() * *m_supplementalTransform : transform()->concatenate().matrix();
+ AffineTransform matrix;
+ transform().concatenate(matrix);
+ return m_supplementalTransform ? *m_supplementalTransform * matrix : matrix;
}
AffineTransform* SVGTextElement::supplementalTransform()
diff --git a/WebCore/svg/SVGTextElement.h b/WebCore/svg/SVGTextElement.h
index 00afa59..3bfee46 100644
--- a/WebCore/svg/SVGTextElement.h
+++ b/WebCore/svg/SVGTextElement.h
@@ -22,6 +22,7 @@
#define SVGTextElement_h
#if ENABLE(SVG)
+#include "SVGAnimatedTransformList.h"
#include "SVGTextPositioningElement.h"
#include "SVGTransformable.h"
@@ -54,7 +55,7 @@ namespace WebCore {
virtual void svgAttributeChanged(const QualifiedName&);
virtual void synchronizeProperty(const QualifiedName&);
- DECLARE_ANIMATED_PROPERTY(SVGTextElement, SVGNames::transformAttr, SVGTransformList*, Transform, transform)
+ DECLARE_ANIMATED_TRANSFORM_LIST_PROPERTY_NEW(SVGTextElement, SVGNames::transformAttr, SVGTransformList, Transform, transform)
// Used by <animateMotion>
OwnPtr<AffineTransform> m_supplementalTransform;
diff --git a/WebCore/svg/SVGTransform.cpp b/WebCore/svg/SVGTransform.cpp
index 86774db..c39fe39 100644
--- a/WebCore/svg/SVGTransform.cpp
+++ b/WebCore/svg/SVGTransform.cpp
@@ -19,17 +19,17 @@
*/
#include "config.h"
-#if ENABLE(SVG)
+#if ENABLE(SVG)
#include "FloatPoint.h"
#include "FloatSize.h"
#include "SVGAngle.h"
#include "SVGSVGElement.h"
#include "SVGTransform.h"
-#include <math.h>
+#include <wtf/MathExtras.h>
-using namespace WebCore;
+namespace WebCore {
SVGTransform::SVGTransform()
: m_type(SVG_TRANSFORM_UNKNOWN)
@@ -40,8 +40,6 @@ SVGTransform::SVGTransform()
SVGTransform::SVGTransform(SVGTransformType type)
: m_type(type)
, m_angle(0)
- , m_center(FloatPoint())
- , m_matrix(AffineTransform())
{
}
@@ -52,37 +50,20 @@ SVGTransform::SVGTransform(const AffineTransform& matrix)
{
}
-bool SVGTransform::isValid()
-{
- return (m_type != SVG_TRANSFORM_UNKNOWN);
-}
-
-SVGTransform::SVGTransformType SVGTransform::type() const
-{
- return m_type;
-}
-
-AffineTransform SVGTransform::matrix() const
-{
- return m_matrix;
-}
-
-float SVGTransform::angle() const
+void SVGTransform::setMatrix(const AffineTransform& matrix)
{
- return m_angle;
-}
-
-FloatPoint SVGTransform::rotationCenter() const
-{
- return m_center;
+ m_type = SVG_TRANSFORM_MATRIX;
+ m_angle = 0;
+ m_matrix = matrix;
}
-void SVGTransform::setMatrix(AffineTransform matrix)
+void SVGTransform::updateMatrix()
{
+ // The underlying matrix has been changed, alter the transformation type.
+ // Spec: In case the matrix object is changed directly (i.e., without using the methods on the SVGTransform interface itself)
+ // then the type of the SVGTransform changes to SVG_TRANSFORM_MATRIX.
m_type = SVG_TRANSFORM_MATRIX;
m_angle = 0;
-
- m_matrix = matrix;
}
void SVGTransform::setTranslate(float tx, float ty)
@@ -145,5 +126,6 @@ void SVGTransform::setSkewY(float angle)
m_matrix.skewY(angle);
}
-#endif // ENABLE(SVG)
+} // namespace WebCore
+#endif // ENABLE(SVG)
diff --git a/WebCore/svg/SVGTransform.h b/WebCore/svg/SVGTransform.h
index db6a42f..36dd038 100644
--- a/WebCore/svg/SVGTransform.h
+++ b/WebCore/svg/SVGTransform.h
@@ -22,67 +22,70 @@
#define SVGTransform_h
#if ENABLE(SVG)
-#include "AffineTransform.h"
#include "FloatPoint.h"
+#include "SVGMatrix.h"
namespace WebCore {
-
- class FloatSize;
-
- class SVGTransform {
- public:
- enum SVGTransformType {
- SVG_TRANSFORM_UNKNOWN = 0,
- SVG_TRANSFORM_MATRIX = 1,
- SVG_TRANSFORM_TRANSLATE = 2,
- SVG_TRANSFORM_SCALE = 3,
- SVG_TRANSFORM_ROTATE = 4,
- SVG_TRANSFORM_SKEWX = 5,
- SVG_TRANSFORM_SKEWY = 6
- };
-
- SVGTransform();
- SVGTransform(SVGTransformType);
- explicit SVGTransform(const AffineTransform&);
- SVGTransformType type() const;
+class FloatSize;
- AffineTransform matrix() const;
-
- float angle() const;
- FloatPoint rotationCenter() const;
-
- void setMatrix(AffineTransform);
-
- void setTranslate(float tx, float ty);
- void setScale(float sx, float sy);
- void setRotate(float angle, float cx, float cy);
- void setSkewX(float angle);
- void setSkewY(float angle);
-
- // Internal use only (animation system)
- FloatPoint translate() const;
- FloatSize scale() const;
-
- bool isValid();
-
- private:
- SVGTransformType m_type;
- float m_angle;
- FloatPoint m_center;
- AffineTransform m_matrix;
+class SVGTransform {
+public:
+ enum SVGTransformType {
+ SVG_TRANSFORM_UNKNOWN = 0,
+ SVG_TRANSFORM_MATRIX = 1,
+ SVG_TRANSFORM_TRANSLATE = 2,
+ SVG_TRANSFORM_SCALE = 3,
+ SVG_TRANSFORM_ROTATE = 4,
+ SVG_TRANSFORM_SKEWX = 5,
+ SVG_TRANSFORM_SKEWY = 6
};
+
+ SVGTransform();
+ SVGTransform(SVGTransformType);
+ explicit SVGTransform(const AffineTransform&);
- inline bool operator==(const SVGTransform& a, const SVGTransform& b)
- {
- return a.type() == b.type() && a.angle() == b.angle() && a.matrix() == b.matrix();
- }
-
- inline bool operator!=(const SVGTransform& a, const SVGTransform& b)
- {
- return !(a == b);
- }
+ SVGTransformType type() const { return m_type; }
+
+ SVGMatrix& svgMatrix() { return static_cast<SVGMatrix&>(m_matrix); }
+ AffineTransform matrix() const { return m_matrix; }
+ void updateMatrix();
+
+ float angle() const { return m_angle; }
+ FloatPoint rotationCenter() const { return m_center; }
+
+ void setMatrix(const AffineTransform&);
+ void setTranslate(float tx, float ty);
+ void setScale(float sx, float sy);
+ void setRotate(float angle, float cx, float cy);
+ void setSkewX(float angle);
+ void setSkewY(float angle);
+ // Internal use only (animation system)
+ FloatPoint translate() const;
+ FloatSize scale() const;
+
+ bool isValid() const { return m_type != SVG_TRANSFORM_UNKNOWN; }
+
+private:
+ friend bool operator==(const SVGTransform& a, const SVGTransform& b);
+
+ SVGTransformType m_type;
+ float m_angle;
+ FloatPoint m_center;
+ AffineTransform m_matrix;
+};
+
+inline bool operator==(const SVGTransform& a, const SVGTransform& b)
+{
+ return a.m_type == b.m_type && a.m_angle == b.m_angle && a.m_matrix == b.m_matrix;
+}
+
+inline bool operator!=(const SVGTransform& a, const SVGTransform& b)
+{
+ return !(a == b);
+}
+
} // namespace WebCore
#endif // ENABLE(SVG)
diff --git a/WebCore/svg/SVGTransform.idl b/WebCore/svg/SVGTransform.idl
index dde234c..773ad6c 100644
--- a/WebCore/svg/SVGTransform.idl
+++ b/WebCore/svg/SVGTransform.idl
@@ -21,26 +21,26 @@
module svg {
- interface [Conditional=SVG, PODType=SVGTransform] SVGTransform {
+ interface [Conditional=SVG] SVGTransform {
// Transform Types
- const unsigned short SVG_TRANSFORM_UNKNOWN = 0;
- const unsigned short SVG_TRANSFORM_MATRIX = 1;
+ const unsigned short SVG_TRANSFORM_UNKNOWN = 0;
+ const unsigned short SVG_TRANSFORM_MATRIX = 1;
const unsigned short SVG_TRANSFORM_TRANSLATE = 2;
- const unsigned short SVG_TRANSFORM_SCALE = 3;
- const unsigned short SVG_TRANSFORM_ROTATE = 4;
- const unsigned short SVG_TRANSFORM_SKEWX = 5;
- const unsigned short SVG_TRANSFORM_SKEWY = 6;
+ const unsigned short SVG_TRANSFORM_SCALE = 3;
+ const unsigned short SVG_TRANSFORM_ROTATE = 4;
+ const unsigned short SVG_TRANSFORM_SKEWX = 5;
+ const unsigned short SVG_TRANSFORM_SKEWY = 6;
readonly attribute unsigned short type;
readonly attribute SVGMatrix matrix;
readonly attribute float angle;
- void setMatrix(in SVGMatrix matrix);
- void setTranslate(in float tx, in float ty);
- void setScale(in float sx, in float sy);
- void setRotate(in float angle, in float cx, in float cy);
- void setSkewX(in float angle);
- void setSkewY(in float angle);
+ [StrictTypeChecking, RequiresAllArguments=Raise] void setMatrix(in SVGMatrix matrix);
+ [StrictTypeChecking, RequiresAllArguments=Raise] void setTranslate(in float tx, in float ty);
+ [StrictTypeChecking, RequiresAllArguments=Raise] void setScale(in float sx, in float sy);
+ [StrictTypeChecking, RequiresAllArguments=Raise] void setRotate(in float angle, in float cx, in float cy);
+ [StrictTypeChecking, RequiresAllArguments=Raise] void setSkewX(in float angle);
+ [StrictTypeChecking, RequiresAllArguments=Raise] void setSkewY(in float angle);
};
}
diff --git a/WebCore/svg/SVGTransformList.cpp b/WebCore/svg/SVGTransformList.cpp
index ae2f298..9137a89 100644
--- a/WebCore/svg/SVGTransformList.cpp
+++ b/WebCore/svg/SVGTransformList.cpp
@@ -26,53 +26,52 @@
#include "AffineTransform.h"
#include "SVGSVGElement.h"
#include "SVGTransform.h"
+#include <wtf/text/StringConcatenate.h>
+#include <wtf/text/StringBuilder.h>
-using namespace WebCore;
+namespace WebCore {
-SVGTransformList::SVGTransformList(const QualifiedName& attributeName)
- : SVGPODList<SVGTransform>(attributeName)
-{
-}
-
-SVGTransformList::~SVGTransformList()
-{
-}
-
-SVGTransform SVGTransformList::createSVGTransformFromMatrix(const AffineTransform& matrix) const
+SVGTransform SVGTransformList::createSVGTransformFromMatrix(const SVGMatrix& matrix) const
{
return SVGSVGElement::createSVGTransformFromMatrix(matrix);
}
SVGTransform SVGTransformList::consolidate()
{
- ExceptionCode ec = 0;
- return initialize(concatenate(), ec);
+ AffineTransform matrix;
+ if (!concatenate(matrix))
+ return SVGTransform();
+
+ SVGTransform transform(matrix);
+ clear();
+ append(transform);
+ return transform;
}
-SVGTransform SVGTransformList::concatenate() const
+bool SVGTransformList::concatenate(AffineTransform& result) const
{
- unsigned int length = numberOfItems();
- if (!length)
- return SVGTransform();
-
- AffineTransform matrix;
- ExceptionCode ec = 0;
- for (unsigned int i = 0; i < length; i++)
- matrix = getItem(i, ec).matrix() * matrix;
+ unsigned size = this->size();
+ if (!size)
+ return false;
- return SVGTransform(matrix);
+ for (unsigned i = 0; i < size; ++i)
+ result = at(i).matrix() * result;
+
+ return true;
}
String SVGTransformList::valueAsString() const
{
// TODO: We may want to build a real transform string, instead of concatting to a matrix(...).
- SVGTransform transform = concatenate();
- if (transform.type() == SVGTransform::SVG_TRANSFORM_MATRIX) {
- AffineTransform matrix = transform.matrix();
- return String::format("matrix(%f %f %f %f %f %f)", matrix.a(), matrix.b(), matrix.c(), matrix.d(), matrix.e(), matrix.f());
- }
+ AffineTransform matrix;
+ concatenate(matrix);
- return String();
+ StringBuilder builder;
+ builder.append(makeString("matrix(", String::number(matrix.a()), ' ', String::number(matrix.b()), ' ', String::number(matrix.c()), ' '));
+ builder.append(makeString(String::number(matrix.d()), ' ', String::number(matrix.e()), ' ', String::number(matrix.f()), ')'));
+ return builder.toString();
}
+} // namespace WebCore
+
#endif // ENABLE(SVG)
diff --git a/WebCore/svg/SVGTransformList.h b/WebCore/svg/SVGTransformList.h
index 5bb5e85..e071355 100644
--- a/WebCore/svg/SVGTransformList.h
+++ b/WebCore/svg/SVGTransformList.h
@@ -22,29 +22,24 @@
#define SVGTransformList_h
#if ENABLE(SVG)
-#include "SVGList.h"
#include "SVGTransform.h"
-#include <wtf/Forward.h>
-#include <wtf/PassRefPtr.h>
+#include <wtf/Vector.h>
+#include <wtf/text/WTFString.h>
namespace WebCore {
- class SVGTransformList : public SVGPODList<SVGTransform> {
- public:
- static PassRefPtr<SVGTransformList> create(const QualifiedName& attributeName) { return adoptRef(new SVGTransformList(attributeName)); }
- virtual ~SVGTransformList();
+class SVGTransformList : public Vector<SVGTransform> {
+public:
+ SVGTransformList() { }
- SVGTransform createSVGTransformFromMatrix(const AffineTransform&) const;
- SVGTransform consolidate();
+ SVGTransform createSVGTransformFromMatrix(const SVGMatrix&) const;
+ SVGTransform consolidate();
- // Internal use only
- SVGTransform concatenate() const;
+ // Internal use only
+ bool concatenate(AffineTransform& result) const;
- String valueAsString() const;
-
- private:
- SVGTransformList(const QualifiedName&);
- };
+ String valueAsString() const;
+};
} // namespace WebCore
diff --git a/WebCore/svg/SVGTransformList.idl b/WebCore/svg/SVGTransformList.idl
index 08252c3..cdd813d 100644
--- a/WebCore/svg/SVGTransformList.idl
+++ b/WebCore/svg/SVGTransformList.idl
@@ -31,20 +31,22 @@ module svg {
void clear()
raises(DOMException);
- SVGTransform initialize(in SVGTransform item)
+ [StrictTypeChecking, RequiresAllArguments=Raise] SVGTransform initialize(in SVGTransform item)
raises(DOMException, SVGException);
- SVGTransform getItem(in unsigned long index)
+ [StrictTypeChecking, RequiresAllArguments=Raise] SVGTransform getItem(in unsigned long index)
raises(DOMException);
- SVGTransform insertItemBefore(in SVGTransform item, in unsigned long index)
+ [StrictTypeChecking, RequiresAllArguments=Raise] SVGTransform insertItemBefore(in SVGTransform item, in unsigned long index)
raises(DOMException, SVGException);
- SVGTransform replaceItem(in SVGTransform item, in unsigned long index)
+ [StrictTypeChecking, RequiresAllArguments=Raise] SVGTransform replaceItem(in SVGTransform item, in unsigned long index)
raises(DOMException, SVGException);
- SVGTransform removeItem(in unsigned long index)
+ [StrictTypeChecking, RequiresAllArguments=Raise] SVGTransform removeItem(in unsigned long index)
raises(DOMException);
- SVGTransform appendItem(in SVGTransform item)
+ [StrictTypeChecking, RequiresAllArguments=Raise] SVGTransform appendItem(in SVGTransform item)
raises(DOMException, SVGException);
- SVGTransform createSVGTransformFromMatrix(in SVGMatrix matrix);
- SVGTransform consolidate();
+
+ [StrictTypeChecking, RequiresAllArguments=Raise] SVGTransform createSVGTransformFromMatrix(in SVGMatrix matrix);
+ SVGTransform consolidate()
+ raises(DOMException);
};
}
diff --git a/WebCore/svg/SVGTransformable.cpp b/WebCore/svg/SVGTransformable.cpp
index a25e086..006bb94 100644
--- a/WebCore/svg/SVGTransformable.cpp
+++ b/WebCore/svg/SVGTransformable.cpp
@@ -89,7 +89,7 @@ static int parseTransformParamList(const UChar*& ptr, const UChar* end, float* v
static const int requiredValuesForType[] = {0, 6, 1, 1, 1, 1, 1};
static const int optionalValuesForType[] = {0, 0, 1, 1, 2, 0, 0};
-bool SVGTransformable::parseTransformValue(unsigned type, const UChar*& ptr, const UChar* end, SVGTransform& t)
+bool SVGTransformable::parseTransformValue(unsigned type, const UChar*& ptr, const UChar* end, SVGTransform& transform)
{
if (type == SVGTransform::SVG_TRANSFORM_UNKNOWN)
return false;
@@ -100,33 +100,33 @@ bool SVGTransformable::parseTransformValue(unsigned type, const UChar*& ptr, con
return false;
switch (type) {
- case SVGTransform::SVG_TRANSFORM_SKEWX:
- t.setSkewX(values[0]);
- break;
- case SVGTransform::SVG_TRANSFORM_SKEWY:
- t.setSkewY(values[0]);
- break;
- case SVGTransform::SVG_TRANSFORM_SCALE:
- if (valueCount == 1) // Spec: if only one param given, assume uniform scaling
- t.setScale(values[0], values[0]);
- else
- t.setScale(values[0], values[1]);
- break;
- case SVGTransform::SVG_TRANSFORM_TRANSLATE:
- if (valueCount == 1) // Spec: if only one param given, assume 2nd param to be 0
- t.setTranslate(values[0], 0);
- else
- t.setTranslate(values[0], values[1]);
- break;
- case SVGTransform::SVG_TRANSFORM_ROTATE:
- if (valueCount == 1)
- t.setRotate(values[0], 0, 0);
- else
- t.setRotate(values[0], values[1], values[2]);
- break;
- case SVGTransform::SVG_TRANSFORM_MATRIX:
- t.setMatrix(AffineTransform(values[0], values[1], values[2], values[3], values[4], values[5]));
- break;
+ case SVGTransform::SVG_TRANSFORM_SKEWX:
+ transform.setSkewX(values[0]);
+ break;
+ case SVGTransform::SVG_TRANSFORM_SKEWY:
+ transform.setSkewY(values[0]);
+ break;
+ case SVGTransform::SVG_TRANSFORM_SCALE:
+ if (valueCount == 1) // Spec: if only one param given, assume uniform scaling
+ transform.setScale(values[0], values[0]);
+ else
+ transform.setScale(values[0], values[1]);
+ break;
+ case SVGTransform::SVG_TRANSFORM_TRANSLATE:
+ if (valueCount == 1) // Spec: if only one param given, assume 2nd param to be 0
+ transform.setTranslate(values[0], 0);
+ else
+ transform.setTranslate(values[0], values[1]);
+ break;
+ case SVGTransform::SVG_TRANSFORM_ROTATE:
+ if (valueCount == 1)
+ transform.setRotate(values[0], 0, 0);
+ else
+ transform.setRotate(values[0], values[1], values[2]);
+ break;
+ case SVGTransform::SVG_TRANSFORM_MATRIX:
+ transform.setMatrix(AffineTransform(values[0], values[1], values[2], values[3], values[4], values[5]));
+ break;
}
return true;
@@ -165,19 +165,16 @@ static inline bool parseAndSkipType(const UChar*& currTransform, const UChar* en
return true;
}
-bool SVGTransformable::parseTransformAttribute(SVGTransformList* list, const AtomicString& transform)
+bool SVGTransformable::parseTransformAttribute(SVGTransformList& list, const AtomicString& transform)
{
const UChar* start = transform.characters();
return parseTransformAttribute(list, start, start + transform.length());
}
-bool SVGTransformable::parseTransformAttribute(SVGTransformList* list, const UChar*& currTransform, const UChar* end, TransformParsingMode mode)
+bool SVGTransformable::parseTransformAttribute(SVGTransformList& list, const UChar*& currTransform, const UChar* end, TransformParsingMode mode)
{
- ExceptionCode ec = 0;
- if (mode == ClearList) {
- list->clear(ec);
- ASSERT(!ec);
- }
+ if (mode == ClearList)
+ list.clear();
bool delimParsed = false;
while (currTransform < end) {
@@ -188,11 +185,11 @@ bool SVGTransformable::parseTransformAttribute(SVGTransformList* list, const UCh
if (!parseAndSkipType(currTransform, end, type))
return false;
- SVGTransform t;
- if (!parseTransformValue(type, currTransform, end, t))
+ SVGTransform transform;
+ if (!parseTransformValue(type, currTransform, end, transform))
return false;
- list->appendItem(t, ec);
+ list.append(transform);
skipOptionalSpaces(currTransform, end);
if (currTransform < end && *currTransform == ',') {
delimParsed = true;
diff --git a/WebCore/svg/SVGTransformable.h b/WebCore/svg/SVGTransformable.h
index e2fec4e..1cd2881 100644
--- a/WebCore/svg/SVGTransformable.h
+++ b/WebCore/svg/SVGTransformable.h
@@ -40,8 +40,8 @@ public:
DoNotClearList
};
- static bool parseTransformAttribute(SVGTransformList*, const AtomicString& transform);
- static bool parseTransformAttribute(SVGTransformList*, const UChar*& ptr, const UChar* end, TransformParsingMode mode = ClearList);
+ static bool parseTransformAttribute(SVGTransformList&, const AtomicString& transform);
+ static bool parseTransformAttribute(SVGTransformList&, const UChar*& ptr, const UChar* end, TransformParsingMode mode = ClearList);
static bool parseTransformValue(unsigned type, const UChar*& ptr, const UChar* end, SVGTransform&);
virtual AffineTransform localCoordinateSpaceTransform(SVGLocatable::CTMScope) const { return animatedLocalTransform(); }
diff --git a/WebCore/svg/SVGUseElement.cpp b/WebCore/svg/SVGUseElement.cpp
index 75ed4c5..a69334c 100644
--- a/WebCore/svg/SVGUseElement.cpp
+++ b/WebCore/svg/SVGUseElement.cpp
@@ -143,6 +143,9 @@ void SVGUseElement::svgAttributeChanged(const QualifiedName& attrName)
if (isXYAttribute || isWidthHeightAttribute)
updateRelativeLengthsInformation();
+ if (SVGTests::handleAttributeChange(this, attrName))
+ return;
+
RenderObject* object = renderer();
if (!object)
return;
@@ -180,8 +183,7 @@ void SVGUseElement::svgAttributeChanged(const QualifiedName& attrName)
return;
}
- if (SVGTests::isKnownAttribute(attrName)
- || SVGLangSpace::isKnownAttribute(attrName)
+ if (SVGLangSpace::isKnownAttribute(attrName)
|| SVGExternalResourcesRequired::isKnownAttribute(attrName))
invalidateShadowTree();
}
@@ -743,7 +745,7 @@ void SVGUseElement::removeDisallowedElementsFromSubtree(Node* subtree)
if (isDisallowedElement(node)) {
Node* next = node->traverseNextSibling(subtree);
// The subtree is not in document so this won't generate events that could mutate the tree.
- node->parent()->removeChild(node, ec);
+ node->parentNode()->removeChild(node, ec);
node = next;
} else
node = node->traverseNextNode(subtree);
diff --git a/WebCore/svg/SVGViewSpec.cpp b/WebCore/svg/SVGViewSpec.cpp
index 2eafff1..d6bade3 100644
--- a/WebCore/svg/SVGViewSpec.cpp
+++ b/WebCore/svg/SVGViewSpec.cpp
@@ -33,13 +33,12 @@ namespace WebCore {
SVGViewSpec::SVGViewSpec(SVGElement* contextElement)
: m_contextElement(contextElement)
- , m_transform(SVGTransformList::create(SVGNames::transformAttr))
{
}
void SVGViewSpec::setTransform(const String& transform)
{
- SVGTransformable::parseTransformAttribute(m_transform.get(), transform);
+ SVGTransformable::parseTransformAttribute(m_transform, transform);
}
void SVGViewSpec::setViewBoxString(const String& viewBoxStr)
@@ -144,7 +143,7 @@ bool SVGViewSpec::parseViewSpec(const String& viewSpec)
if (currViewSpec >= end || *currViewSpec != '(')
return false;
currViewSpec++;
- SVGTransformable::parseTransformAttribute(m_transform.get(), currViewSpec, end, SVGTransformable::DoNotClearList);
+ SVGTransformable::parseTransformAttribute(m_transform, currViewSpec, end, SVGTransformable::DoNotClearList);
if (currViewSpec >= end || *currViewSpec != ')')
return false;
currViewSpec++;
diff --git a/WebCore/svg/SVGViewSpec.h b/WebCore/svg/SVGViewSpec.h
index f557d23..dd466ef 100644
--- a/WebCore/svg/SVGViewSpec.h
+++ b/WebCore/svg/SVGViewSpec.h
@@ -42,7 +42,7 @@ namespace WebCore {
bool parseViewSpec(const String&);
void setTransform(const String&);
- SVGTransformList* transform() const { return m_transform.get(); }
+ SVGTransformList transform() const { return m_transform; }
void setViewBoxString(const String&);
@@ -61,7 +61,7 @@ namespace WebCore {
DECLARE_ANIMATED_PROPERTY_NEW(SVGViewSpec, SVGNames::viewBoxAttr, FloatRect, ViewBox, viewBox)
DECLARE_ANIMATED_PROPERTY_NEW(SVGViewSpec, SVGNames::preserveAspectRatioAttr, SVGPreserveAspectRatio, PreserveAspectRatio, preserveAspectRatio)
- mutable RefPtr<SVGTransformList> m_transform;
+ SVGTransformList m_transform;
String m_viewTargetString;
};
diff --git a/WebCore/svg/animation/SMILTimeContainer.cpp b/WebCore/svg/animation/SMILTimeContainer.cpp
index b9f210e..b790859 100644
--- a/WebCore/svg/animation/SMILTimeContainer.cpp
+++ b/WebCore/svg/animation/SMILTimeContainer.cpp
@@ -255,7 +255,7 @@ void SMILTimeContainer::updateAnimations(SMILTime elapsed)
sortByPriority(toAnimate, elapsed);
// Calculate animation contributions.
- typedef HashMap<ElementAttributePair, SVGSMILElement*> ResultElementMap;
+ typedef HashMap<ElementAttributePair, RefPtr<SVGSMILElement> > ResultElementMap;
ResultElementMap resultsElements;
for (unsigned n = 0; n < toAnimate.size(); ++n) {
SVGSMILElement* animation = toAnimate[n];
@@ -274,7 +274,7 @@ void SMILTimeContainer::updateAnimations(SMILTime elapsed)
// Results are accumulated to the first animation that animates a particular element/attribute pair.
ElementAttributePair key(targetElement, attributeName);
- SVGSMILElement* resultElement = resultsElements.get(key);
+ SVGSMILElement* resultElement = resultsElements.get(key).get();
if (!resultElement) {
resultElement = animation;
resultElement->resetToBaseValue(baseValueFor(key));
@@ -297,7 +297,7 @@ void SMILTimeContainer::updateAnimations(SMILTime elapsed)
Vector<SVGSMILElement*> animationsToApply;
ResultElementMap::iterator end = resultsElements.end();
for (ResultElementMap::iterator it = resultsElements.begin(); it != end; ++it)
- animationsToApply.append(it->second);
+ animationsToApply.append(it->second.get());
// Sort <animateTranform> to be the last one to be applied. <animate> may change transform attribute as
// well (directly or indirectly by modifying <use> x/y) and this way transforms combine properly.
diff --git a/WebCore/svg/animation/SVGSMILElement.cpp b/WebCore/svg/animation/SVGSMILElement.cpp
index 6757fee..441cfc3 100644
--- a/WebCore/svg/animation/SVGSMILElement.cpp
+++ b/WebCore/svg/animation/SVGSMILElement.cpp
@@ -147,7 +147,7 @@ void SVGSMILElement::insertedIntoDocument()
SVGElement::insertedIntoDocument();
#ifndef NDEBUG
// Verify we are not in <use> instance tree.
- for (Node* n = this; n; n = n->parent())
+ for (ContainerNode* n = this; n; n = n->parentNode())
ASSERT(!n->isShadowNode());
#endif
SVGSVGElement* owner = ownerSVGElement();
diff --git a/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h b/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h
index 0777b6a..40d3888 100644
--- a/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h
+++ b/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h
@@ -91,6 +91,7 @@ private:
return adoptRef(new SVGAnimatedListPropertyTearOff<PropertyType>(contextElement, attributeName, values));
}
+protected:
SVGAnimatedListPropertyTearOff(SVGElement* contextElement, const QualifiedName& attributeName, PropertyType& values)
: SVGAnimatedProperty(contextElement, attributeName)
, m_values(values)
@@ -99,7 +100,6 @@ private:
m_wrappers.fill(0, values.size());
}
-private:
PropertyType& m_values;
// FIXME: The list wrapper cache is shared between baseVal/animVal. If we implement animVal,
diff --git a/WebCore/svg/properties/SVGAnimatedPropertyMacros.h b/WebCore/svg/properties/SVGAnimatedPropertyMacros.h
index e1c75b9..870d26e 100644
--- a/WebCore/svg/properties/SVGAnimatedPropertyMacros.h
+++ b/WebCore/svg/properties/SVGAnimatedPropertyMacros.h
@@ -27,6 +27,7 @@
#include "SVGAnimatedStaticPropertyTearOff.h"
#include "SVGAnimatedPropertySynchronizer.h"
#include "SVGAnimatedPropertyTearOff.h"
+#include "SVGAnimatedTransformListPropertyTearOff.h"
#include "SVGNames.h" // FIXME: Temporary hack, until we expand the macros in all files, so we don't need a global SVGNames.h include
#include "SVGPropertyTraits.h"
@@ -156,6 +157,19 @@ void detachAnimated##UpperProperty##ListWrappers(unsigned newListSize) \
static_cast<SVGAnimatedListPropertyTearOff<PropertyType>*>(wrapper)->detachListWrappers(newListSize); \
}
+#define DECLARE_ANIMATED_TRANSFORM_LIST_PROPERTY_NEW(OwnerType, DOMAttribute, PropertyType, UpperProperty, LowerProperty) \
+DECLARE_ANIMATED_PROPERTY_NEW_SHARED(OwnerType, DOMAttribute, DOMAttribute.localName(), SVGAnimatedTransformListPropertyTearOff, PropertyType, UpperProperty, LowerProperty) \
+\
+void detachAnimated##UpperProperty##ListWrappers(unsigned newListSize) \
+{ \
+ SVGElement* contextElement = GetOwnerElementForType<OwnerType, IsDerivedFromSVGElement<OwnerType>::value>::ownerElement(this); \
+ SVGAnimatedProperty* wrapper = SVGAnimatedProperty::lookupWrapper<SVGAnimatedTransformListPropertyTearOff>(contextElement, DOMAttribute.localName()); \
+ if (!wrapper) \
+ return; \
+ static_cast<SVGAnimatedTransformListPropertyTearOff*>(wrapper)->detachListWrappers(newListSize); \
+}
+
+
}
#endif // ENABLE(SVG)
diff --git a/WebCore/svg/properties/SVGAnimatedTransformListPropertyTearOff.h b/WebCore/svg/properties/SVGAnimatedTransformListPropertyTearOff.h
new file mode 100644
index 0000000..2aa94c3
--- /dev/null
+++ b/WebCore/svg/properties/SVGAnimatedTransformListPropertyTearOff.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) Research In Motion Limited 2010. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef SVGAnimatedTransformListPropertyTearOff_h
+#define SVGAnimatedTransformListPropertyTearOff_h
+
+#if ENABLE(SVG)
+#include "SVGAnimatedListPropertyTearOff.h"
+#include "SVGTransformList.h"
+#include "SVGTransformListPropertyTearOff.h"
+
+namespace WebCore {
+
+class SVGAnimatedTransformListPropertyTearOff : public SVGAnimatedListPropertyTearOff<SVGTransformList> {
+public:
+ SVGProperty* baseVal()
+ {
+ if (!m_baseVal)
+ m_baseVal = SVGTransformListPropertyTearOff::create(this, BaseValRole);
+ return m_baseVal.get();
+ }
+
+ SVGProperty* animVal()
+ {
+ if (!m_animVal)
+ m_animVal = SVGTransformListPropertyTearOff::create(this, AnimValRole);
+ return m_animVal.get();
+ }
+
+private:
+ friend class SVGAnimatedProperty;
+
+ static PassRefPtr<SVGAnimatedTransformListPropertyTearOff> create(SVGElement* contextElement, const QualifiedName& attributeName, SVGTransformList& values)
+ {
+ ASSERT(contextElement);
+ return adoptRef(new SVGAnimatedTransformListPropertyTearOff(contextElement, attributeName, values));
+ }
+
+ SVGAnimatedTransformListPropertyTearOff(SVGElement* contextElement, const QualifiedName& attributeName, SVGTransformList& values)
+ : SVGAnimatedListPropertyTearOff<SVGTransformList>(contextElement, attributeName, values)
+ {
+ }
+};
+
+}
+
+#endif // ENABLE(SVG)
+#endif // SVGAnimatedTransformListPropertyTearOff_h
diff --git a/WebCore/svg/properties/SVGListProperty.h b/WebCore/svg/properties/SVGListProperty.h
index 7edc0f1..f143389 100644
--- a/WebCore/svg/properties/SVGListProperty.h
+++ b/WebCore/svg/properties/SVGListProperty.h
@@ -287,7 +287,7 @@ public:
processIncomingListItemWrapper(newItem, &index);
// Detach the existing wrapper.
- RefPtr<ListItemTearOff>& oldItem = wrappers.at(index);
+ RefPtr<ListItemTearOff> oldItem = wrappers.at(index);
if (oldItem)
oldItem->detachWrapper();
@@ -336,7 +336,7 @@ public:
ASSERT(values.size() == wrappers.size());
// Detach the existing wrapper.
- RefPtr<ListItemTearOff>& oldItem = wrappers.at(index);
+ RefPtr<ListItemTearOff> oldItem = wrappers.at(index);
if (oldItem)
oldItem->detachWrapper();
diff --git a/WebCore/svg/properties/SVGListPropertyTearOff.h b/WebCore/svg/properties/SVGListPropertyTearOff.h
index 56d626f..5a71735 100644
--- a/WebCore/svg/properties/SVGListPropertyTearOff.h
+++ b/WebCore/svg/properties/SVGListPropertyTearOff.h
@@ -109,7 +109,7 @@ public:
return Base::appendItemValuesAndWrappers(m_animatedProperty.get(), passNewItem, ec);
}
-private:
+protected:
SVGListPropertyTearOff(AnimatedListPropertyTearOff* animatedProperty, SVGPropertyRole role)
: SVGListProperty<PropertyType>(role)
, m_animatedProperty(animatedProperty)
@@ -179,7 +179,6 @@ private:
}
}
-private:
// Back pointer to the animated property that created us
// For example (text.x.baseVal): m_animatedProperty points to the 'x' SVGAnimatedLengthList object
RefPtr<AnimatedListPropertyTearOff> m_animatedProperty;
diff --git a/WebCore/svg/properties/SVGProperty.h b/WebCore/svg/properties/SVGProperty.h
index 43167b7..104fb0e 100644
--- a/WebCore/svg/properties/SVGProperty.h
+++ b/WebCore/svg/properties/SVGProperty.h
@@ -34,6 +34,8 @@ enum SVGPropertyRole {
class SVGProperty : public RefCounted<SVGProperty> {
public:
virtual ~SVGProperty() { }
+
+ virtual void commitChange() = 0;
};
}
diff --git a/WebCore/svg/properties/SVGPropertyTearOff.h b/WebCore/svg/properties/SVGPropertyTearOff.h
index 2ffaede..219a4a6 100644
--- a/WebCore/svg/properties/SVGPropertyTearOff.h
+++ b/WebCore/svg/properties/SVGPropertyTearOff.h
@@ -69,6 +69,9 @@ public:
void detachWrapper()
{
+ if (m_valueIsCopy)
+ return;
+
// Switch from a live value, to a non-live value.
// For example: <text x="50"/>
// var item = text.x.baseVal.getItem(0);
@@ -76,7 +79,6 @@ public:
// item.value still has to report '50' and it has to be possible to modify 'item'
// w/o changing the "new item" (with x=100) in the text element.
// Whenever the XML DOM modifies the "x" attribute, all existing wrappers are detached, using this function.
- ASSERT(!m_valueIsCopy);
m_value = new PropertyType(*m_value);
m_valueIsCopy = true;
m_animatedProperty = 0;
diff --git a/WebCore/svg/properties/SVGPropertyTraits.h b/WebCore/svg/properties/SVGPropertyTraits.h
index 85bca7e..5364853 100644
--- a/WebCore/svg/properties/SVGPropertyTraits.h
+++ b/WebCore/svg/properties/SVGPropertyTraits.h
@@ -30,6 +30,7 @@
#include "SVGPointList.h"
#include "SVGPreserveAspectRatio.h"
#include "SVGStringList.h"
+#include "SVGTransformList.h"
#include <wtf/text/StringBuilder.h>
namespace WebCore {
@@ -130,6 +131,13 @@ struct SVGPropertyTraits<SVGPointList> {
typedef FloatPoint ListItemType;
};
+template<>
+struct SVGPropertyTraits<SVGTransformList> {
+ static SVGTransformList initialValue() { return SVGTransformList(); }
+ static String toString(const SVGTransformList& type) { return type.valueAsString(); }
+ typedef SVGTransform ListItemType;
+};
+
}
#endif
diff --git a/WebCore/svg/properties/SVGStaticPropertyWithParentTearOff.h b/WebCore/svg/properties/SVGStaticPropertyWithParentTearOff.h
new file mode 100644
index 0000000..1e58341
--- /dev/null
+++ b/WebCore/svg/properties/SVGStaticPropertyWithParentTearOff.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) Research In Motion Limited 2010. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef SVGStaticPropertyWithParentTearOff_h
+#define SVGStaticPropertyWithParentTearOff_h
+
+#if ENABLE(SVG)
+#include "SVGPropertyTearOff.h"
+
+namespace WebCore {
+
+#if COMPILER(MSVC)
+// UpdateMethod is 12 bytes. We have to pack to a size greater than or equal to that to avoid an
+// alignment warning (C4121). 16 is the next-largest size allowed for packing, so we use that.
+#pragma pack(push, 16)
+#endif
+template<typename ParentType, typename PropertyType>
+class SVGStaticPropertyWithParentTearOff : public SVGPropertyTearOff<PropertyType> {
+public:
+ typedef SVGStaticPropertyWithParentTearOff<ParentType, PropertyType> Self;
+ typedef void (ParentType::*UpdateMethod)();
+
+ // Used for non-animated POD types that are not associated with a SVGAnimatedProperty object, nor with a XML DOM attribute
+ // and that contain a parent type that's exposed to the bindings via a SVGStaticPropertyTearOff object
+ // (for example: SVGTransform::matrix).
+ static PassRefPtr<Self> create(SVGProperty* parent, PropertyType& value, UpdateMethod update)
+ {
+ ASSERT(parent);
+ return adoptRef(new Self(parent, value, update));
+ }
+
+ virtual void commitChange()
+ {
+ (static_cast<SVGPropertyTearOff<ParentType>*>(m_parent.get())->propertyReference().*m_update)();
+ m_parent->commitChange();
+ }
+
+private:
+ SVGStaticPropertyWithParentTearOff(SVGProperty* parent, PropertyType& value, UpdateMethod update)
+ : SVGPropertyTearOff<PropertyType>(0, value)
+ , m_update(update)
+ , m_parent(parent)
+ {
+ }
+
+ UpdateMethod m_update;
+ RefPtr<SVGProperty> m_parent;
+};
+#if COMPILER(MSVC)
+#pragma pack(pop)
+#endif
+
+}
+
+#endif // ENABLE(SVG)
+#endif // SVGStaticPropertyWithParentTearOff_h
diff --git a/WebCore/svg/properties/SVGTransformListPropertyTearOff.h b/WebCore/svg/properties/SVGTransformListPropertyTearOff.h
new file mode 100644
index 0000000..636871a
--- /dev/null
+++ b/WebCore/svg/properties/SVGTransformListPropertyTearOff.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) Research In Motion Limited 2010. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef SVGTransformListPropertyTearOff_h
+#define SVGTransformListPropertyTearOff_h
+
+#if ENABLE(SVG)
+#include "SVGListPropertyTearOff.h"
+
+namespace WebCore {
+
+// SVGTransformList contains two additional methods, that can be exposed to the bindings.
+class SVGTransformListPropertyTearOff : public SVGListPropertyTearOff<SVGTransformList> {
+public:
+ typedef SVGAnimatedListPropertyTearOff<SVGTransformList> AnimatedListPropertyTearOff;
+ typedef SVGAnimatedListPropertyTearOff<SVGTransformList>::ListWrapperCache ListWrapperCache;
+
+ static PassRefPtr<SVGListPropertyTearOff<SVGTransformList> > create(AnimatedListPropertyTearOff* animatedProperty, SVGPropertyRole role)
+ {
+ ASSERT(animatedProperty);
+ return adoptRef(new SVGTransformListPropertyTearOff(animatedProperty, role));
+ }
+
+ PassRefPtr<SVGPropertyTearOff<SVGTransform> > createSVGTransformFromMatrix(SVGPropertyTearOff<SVGMatrix>* matrix)
+ {
+ ASSERT(matrix);
+ SVGTransformList& values = m_animatedProperty->values();
+ return SVGPropertyTearOff<SVGTransform>::create(values.createSVGTransformFromMatrix(matrix->propertyReference()));
+ }
+
+ PassRefPtr<SVGPropertyTearOff<SVGTransform> > consolidate(ExceptionCode& ec)
+ {
+ if (!canAlterList(ec))
+ return 0;
+
+ SVGTransformList& values = m_animatedProperty->values();
+ ListWrapperCache& wrappers = m_animatedProperty->wrappers();
+ ASSERT(values.size() == wrappers.size());
+
+ m_animatedProperty->detachListWrappers(0);
+ RefPtr<SVGPropertyTearOff<SVGTransform> > wrapper = SVGPropertyTearOff<SVGTransform>::create(values.consolidate());
+ wrappers.append(wrapper);
+
+ ASSERT(values.size() == wrappers.size());
+ return wrapper.release();
+ }
+
+private:
+ SVGTransformListPropertyTearOff(AnimatedListPropertyTearOff* animatedProperty, SVGPropertyRole role)
+ : SVGListPropertyTearOff<SVGTransformList>(animatedProperty, role)
+ {
+ }
+
+};
+
+}
+
+#endif // ENABLE(SVG)
+#endif // SVGListPropertyTearOff_h
diff --git a/WebCore/webaudio/AudioNode.idl b/WebCore/webaudio/AudioNode.idl
index dad5454..8d903e2 100644
--- a/WebCore/webaudio/AudioNode.idl
+++ b/WebCore/webaudio/AudioNode.idl
@@ -30,7 +30,10 @@ module audio {
readonly attribute unsigned long numberOfInputs;
readonly attribute unsigned long numberOfOutputs;
- [Custom] void connect(in AudioNode destination, in unsigned long output, in unsigned long input);
- [Custom] void disconnect(in unsigned long output);
+ [Custom] void connect(in AudioNode destination, in unsigned long output, in unsigned long input)
+ raises(DOMException);
+
+ [Custom] void disconnect(in unsigned long output)
+ raises(DOMException);
};
}
diff --git a/WebCore/webaudio/AudioPannerNode.h b/WebCore/webaudio/AudioPannerNode.h
index 6d0d759..4d49bc8 100644
--- a/WebCore/webaudio/AudioPannerNode.h
+++ b/WebCore/webaudio/AudioPannerNode.h
@@ -46,12 +46,11 @@ namespace WebCore {
class AudioPannerNode : public AudioNode {
public:
+ // These must be defined as in the .idl file and must match those in the Panner class.
enum {
- PASSTHROUGH = 0,
- EQUALPOWER = 1,
- HRTF = 2,
- SOUNDFIELD = 3,
- MATRIXMIX = 4
+ EQUALPOWER = 0,
+ HRTF = 1,
+ SOUNDFIELD = 2,
};
static PassRefPtr<AudioPannerNode> create(AudioContext* context, double sampleRate)
diff --git a/WebCore/webaudio/AudioPannerNode.idl b/WebCore/webaudio/AudioPannerNode.idl
index 595a603..2db093d 100644
--- a/WebCore/webaudio/AudioPannerNode.idl
+++ b/WebCore/webaudio/AudioPannerNode.idl
@@ -29,10 +29,9 @@ module audio {
GenerateToJS
] AudioPannerNode : AudioNode {
// Panning model
- const unsigned short PASSTHROUGH = 0;
- const unsigned short EQUALPOWER = 1;
- const unsigned short HRTF = 2;
- const unsigned short SOUNDFIELD = 3;
+ const unsigned short EQUALPOWER = 0;
+ const unsigned short HRTF = 1;
+ const unsigned short SOUNDFIELD = 2;
// Default model for stereo is HRTF
attribute unsigned long panningModel; // FIXME: use unsigned short when glue generation supports it
diff --git a/WebCore/webaudio/JavaScriptAudioNode.cpp b/WebCore/webaudio/JavaScriptAudioNode.cpp
new file mode 100644
index 0000000..15a8cf7
--- /dev/null
+++ b/WebCore/webaudio/JavaScriptAudioNode.cpp
@@ -0,0 +1,272 @@
+/*
+ * 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"
+
+#if ENABLE(WEB_AUDIO)
+
+#include "JavaScriptAudioNode.h"
+
+#include "AudioBuffer.h"
+#include "AudioBus.h"
+#include "AudioContext.h"
+#include "AudioNodeInput.h"
+#include "AudioNodeOutput.h"
+#include "AudioProcessingEvent.h"
+#include "Document.h"
+#include "Float32Array.h"
+#include <wtf/MainThread.h>
+
+namespace WebCore {
+
+const size_t DefaultBufferSize = 4096;
+
+PassRefPtr<JavaScriptAudioNode> JavaScriptAudioNode::create(AudioContext* context, double sampleRate, size_t bufferSize, unsigned numberOfInputs, unsigned numberOfOutputs)
+{
+ return adoptRef(new JavaScriptAudioNode(context, sampleRate, bufferSize, numberOfInputs, numberOfOutputs));
+}
+
+JavaScriptAudioNode::JavaScriptAudioNode(AudioContext* context, double sampleRate, size_t bufferSize, unsigned numberOfInputs, unsigned numberOfOutputs)
+ : AudioNode(context, sampleRate)
+ , m_doubleBufferIndex(0)
+ , m_doubleBufferIndexForEvent(0)
+ , m_bufferSize(bufferSize)
+ , m_bufferReadWriteIndex(0)
+ , m_isRequestOutstanding(false)
+{
+ // Check for valid buffer size.
+ switch (bufferSize) {
+ case 256:
+ case 512:
+ case 1024:
+ case 2048:
+ case 4096:
+ case 8192:
+ case 16384:
+ m_bufferSize = bufferSize;
+ break;
+ default:
+ m_bufferSize = DefaultBufferSize;
+ }
+
+ // Regardless of the allowed buffer sizes above, we still need to process at the granularity of the AudioNode.
+ if (m_bufferSize < AudioNode::ProcessingSizeInFrames)
+ m_bufferSize = AudioNode::ProcessingSizeInFrames;
+
+ // FIXME: Right now we're hardcoded to single input and single output.
+ // Although the specification says this is OK for a simple implementation, multiple inputs and outputs would be good.
+ ASSERT_UNUSED(numberOfInputs, numberOfInputs == 1);
+ ASSERT_UNUSED(numberOfOutputs, numberOfOutputs == 1);
+ addInput(adoptPtr(new AudioNodeInput(this)));
+ addOutput(adoptPtr(new AudioNodeOutput(this, 2)));
+
+ setType(NodeTypeJavaScript);
+
+ initialize();
+}
+
+JavaScriptAudioNode::~JavaScriptAudioNode()
+{
+ uninitialize();
+}
+
+void JavaScriptAudioNode::initialize()
+{
+ if (isInitialized())
+ return;
+
+ double sampleRate = context()->sampleRate();
+
+ // Create double buffers on both the input and output sides.
+ // These AudioBuffers will be directly accessed in the main thread by JavaScript.
+ for (unsigned i = 0; i < 2; ++i) {
+ m_inputBuffers.append(AudioBuffer::create(2, bufferSize(), sampleRate));
+ m_outputBuffers.append(AudioBuffer::create(2, bufferSize(), sampleRate));
+ }
+
+ AudioNode::initialize();
+}
+
+void JavaScriptAudioNode::uninitialize()
+{
+ if (!isInitialized())
+ return;
+
+ m_inputBuffers.clear();
+ m_outputBuffers.clear();
+
+ AudioNode::uninitialize();
+}
+
+JavaScriptAudioNode* JavaScriptAudioNode::toJavaScriptAudioNode()
+{
+ return this;
+}
+
+void JavaScriptAudioNode::process(size_t framesToProcess)
+{
+ // Discussion about inputs and outputs:
+ // As in other AudioNodes, JavaScriptAudioNode uses an AudioBus for its input and output (see inputBus and outputBus below).
+ // Additionally, there is a double-buffering for input and output which is exposed directly to JavaScript (see inputBuffer and outputBuffer below).
+ // This node is the producer for inputBuffer and the consumer for outputBuffer.
+ // The JavaScript code is the consumer of inputBuffer and the producer for outputBuffer.
+
+ // Get input and output busses.
+ AudioBus* inputBus = this->input(0)->bus();
+ AudioBus* outputBus = this->output(0)->bus();
+
+ // Get input and output buffers. We double-buffer both the input and output sides.
+ unsigned doubleBufferIndex = this->doubleBufferIndex();
+ bool isDoubleBufferIndexGood = doubleBufferIndex < 2 && doubleBufferIndex < m_inputBuffers.size() && doubleBufferIndex < m_outputBuffers.size();
+ ASSERT(isDoubleBufferIndexGood);
+ if (!isDoubleBufferIndexGood)
+ return;
+
+ AudioBuffer* inputBuffer = m_inputBuffers[doubleBufferIndex].get();
+ AudioBuffer* outputBuffer = m_outputBuffers[doubleBufferIndex].get();
+
+ // Check the consistency of input and output buffers.
+ bool buffersAreGood = inputBuffer && outputBuffer && bufferSize() == inputBuffer->length() && bufferSize() == outputBuffer->length()
+ && m_bufferReadWriteIndex + framesToProcess <= bufferSize();
+ ASSERT(buffersAreGood);
+ if (!buffersAreGood)
+ return;
+
+ // We assume that bufferSize() is evenly divisible by framesToProcess - should always be true, but we should still check.
+ bool isFramesToProcessGood = framesToProcess && bufferSize() >= framesToProcess && !(bufferSize() % framesToProcess);
+ ASSERT(isFramesToProcessGood);
+ if (!isFramesToProcessGood)
+ return;
+
+ unsigned numberOfInputChannels = inputBus->numberOfChannels();
+
+ bool channelsAreGood = (numberOfInputChannels == 1 || numberOfInputChannels == 2) && outputBus->numberOfChannels() == 2;
+ ASSERT(channelsAreGood);
+ if (!channelsAreGood)
+ return;
+
+ float* sourceL = inputBus->channel(0)->data();
+ float* sourceR = numberOfInputChannels > 1 ? inputBus->channel(1)->data() : 0;
+ float* destinationL = outputBus->channel(0)->data();
+ float* destinationR = outputBus->channel(1)->data();
+
+ // Copy from the input to the input buffer. See "buffersAreGood" check above for safety.
+ size_t bytesToCopy = sizeof(float) * framesToProcess;
+ memcpy(inputBuffer->getChannelData(0)->data() + m_bufferReadWriteIndex, sourceL, bytesToCopy);
+
+ if (numberOfInputChannels == 2)
+ memcpy(inputBuffer->getChannelData(1)->data() + m_bufferReadWriteIndex, sourceR, bytesToCopy);
+ else if (numberOfInputChannels == 1) {
+ // If the input is mono, then also copy the mono input to the right channel of the AudioBuffer which the AudioProcessingEvent uses.
+ // FIXME: it is likely the audio API will evolve to present an AudioBuffer with the same number of channels as our input.
+ memcpy(inputBuffer->getChannelData(1)->data() + m_bufferReadWriteIndex, sourceL, bytesToCopy);
+ }
+
+ // Copy from the output buffer to the output. See "buffersAreGood" check above for safety.
+ memcpy(destinationL, outputBuffer->getChannelData(0)->data() + m_bufferReadWriteIndex, bytesToCopy);
+ memcpy(destinationR, outputBuffer->getChannelData(1)->data() + m_bufferReadWriteIndex, bytesToCopy);
+
+ // Update the buffering index.
+ m_bufferReadWriteIndex = (m_bufferReadWriteIndex + framesToProcess) % bufferSize();
+
+ // m_bufferReadWriteIndex will wrap back around to 0 when the current input and output buffers are full.
+ // When this happens, fire an event and swap buffers.
+ if (!m_bufferReadWriteIndex) {
+ // Avoid building up requests on the main thread to fire process events when they're not being handled.
+ // This could be a problem if the main thread is very busy doing other things and is being held up handling previous requests.
+ if (m_isRequestOutstanding) {
+ // We're late in handling the previous request. The main thread must be very busy.
+ // The best we can do is clear out the buffer ourself here.
+ outputBuffer->zero();
+ } else {
+ // Reference ourself so we don't accidentally get deleted before fireProcessEvent() gets called.
+ ref();
+
+ // Fire the event on the main thread, not this one (which is the realtime audio thread).
+ m_doubleBufferIndexForEvent = m_doubleBufferIndex;
+ callOnMainThread(fireProcessEventDispatch, this);
+ m_isRequestOutstanding = true;
+ }
+
+ swapBuffers();
+ }
+}
+
+void JavaScriptAudioNode::fireProcessEventDispatch(void* userData)
+{
+ JavaScriptAudioNode* jsAudioNode = static_cast<JavaScriptAudioNode*>(userData);
+ ASSERT(jsAudioNode);
+ if (!jsAudioNode)
+ return;
+
+ jsAudioNode->fireProcessEvent();
+
+ // De-reference to match the ref() call in process().
+ jsAudioNode->deref();
+}
+
+void JavaScriptAudioNode::fireProcessEvent()
+{
+ ASSERT(isMainThread() && m_isRequestOutstanding);
+
+ bool isIndexGood = m_doubleBufferIndexForEvent < 2;
+ ASSERT(isIndexGood);
+ if (!isIndexGood)
+ return;
+
+ AudioBuffer* inputBuffer = m_inputBuffers[m_doubleBufferIndexForEvent].get();
+ AudioBuffer* outputBuffer = m_outputBuffers[m_doubleBufferIndexForEvent].get();
+ ASSERT(inputBuffer && outputBuffer);
+ if (!inputBuffer || !outputBuffer)
+ return;
+
+ // Avoid firing the event if the document has already gone away.
+ if (context()->hasDocument()) {
+ // Let the audio thread know we've gotten to the point where it's OK for it to make another request.
+ m_isRequestOutstanding = false;
+
+ // Call the JavaScript event handler which will do the audio processing.
+ dispatchEvent(AudioProcessingEvent::create(inputBuffer, outputBuffer));
+ }
+}
+
+void JavaScriptAudioNode::reset()
+{
+ m_bufferReadWriteIndex = 0;
+ m_doubleBufferIndex = 0;
+
+ for (unsigned i = 0; i < 2; ++i) {
+ m_inputBuffers[i]->zero();
+ m_outputBuffers[i]->zero();
+ }
+}
+
+ScriptExecutionContext* JavaScriptAudioNode::scriptExecutionContext() const
+{
+ return const_cast<JavaScriptAudioNode*>(this)->context()->document();
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(WEB_AUDIO)
diff --git a/WebCore/webaudio/JavaScriptAudioNode.h b/WebCore/webaudio/JavaScriptAudioNode.h
new file mode 100644
index 0000000..e99a25d
--- /dev/null
+++ b/WebCore/webaudio/JavaScriptAudioNode.h
@@ -0,0 +1,104 @@
+/*
+ * 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.
+ */
+
+#ifndef JavaScriptAudioNode_h
+#define JavaScriptAudioNode_h
+
+#include "ActiveDOMObject.h"
+#include "AudioNode.h"
+#include "EventListener.h"
+#include "EventTarget.h"
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefPtr.h>
+#include <wtf/Vector.h>
+
+namespace WebCore {
+
+class AudioBuffer;
+class AudioContext;
+class AudioProcessingEvent;
+class Float32Array;
+
+// JavaScriptAudioNode is an AudioNode which allows for arbitrary synthesis or processing directly using JavaScript.
+// The API allows for a variable number of inputs and outputs, although it must have at least one input or output.
+// This basic implementation supports no more than one input and output.
+// The "onaudioprocess" attribute is an event listener which will get called periodically with an AudioProcessingEvent which has
+// AudioBuffers for each input and output.
+
+class JavaScriptAudioNode : public AudioNode, public EventTarget {
+public:
+ // bufferSize must be one of the following values: 256, 512, 1024, 2048, 4096, 8192, 16384.
+ // This value controls how frequently the onaudioprocess event handler is called and how many sample-frames need to be processed each call.
+ // Lower numbers for bufferSize will result in a lower (better) latency. Higher numbers will be necessary to avoid audio breakup and glitches.
+ // The value chosen must carefully balance between latency and audio quality.
+ static PassRefPtr<JavaScriptAudioNode> create(AudioContext*, double sampleRate, size_t bufferSize, unsigned numberOfInputs = 1, unsigned numberOfOutputs = 1);
+
+ virtual ~JavaScriptAudioNode();
+
+ // AudioNode
+ virtual void process(size_t framesToProcess);
+ virtual void reset();
+ virtual void initialize();
+ virtual void uninitialize();
+
+ // EventTarget
+ virtual ScriptExecutionContext* scriptExecutionContext() const;
+ virtual JavaScriptAudioNode* toJavaScriptAudioNode();
+ virtual EventTargetData* eventTargetData() { return &m_eventTargetData; }
+ virtual EventTargetData* ensureEventTargetData() { return &m_eventTargetData; }
+
+ size_t bufferSize() const { return m_bufferSize; }
+
+ DEFINE_ATTRIBUTE_EVENT_LISTENER(audioprocess);
+
+ // Reconcile ref/deref which are defined both in AudioNode and EventTarget.
+ using AudioNode::ref;
+ using AudioNode::deref;
+
+private:
+ JavaScriptAudioNode(AudioContext*, double sampleRate, size_t bufferSize, unsigned numberOfInputs, unsigned numberOfOutputs);
+
+ static void fireProcessEventDispatch(void* userData);
+ void fireProcessEvent();
+
+ // Double buffering
+ unsigned doubleBufferIndex() const { return m_doubleBufferIndex; }
+ void swapBuffers() { m_doubleBufferIndex = 1 - m_doubleBufferIndex; }
+ unsigned m_doubleBufferIndex;
+ unsigned m_doubleBufferIndexForEvent;
+ Vector<RefPtr<AudioBuffer> > m_inputBuffers;
+ Vector<RefPtr<AudioBuffer> > m_outputBuffers;
+
+ virtual void refEventTarget() { ref(); }
+ virtual void derefEventTarget() { deref(); }
+ EventTargetData m_eventTargetData;
+
+ size_t m_bufferSize;
+ unsigned m_bufferReadWriteIndex;
+ volatile bool m_isRequestOutstanding;
+};
+
+} // namespace WebCore
+
+#endif // JavaScriptAudioNode_h
diff --git a/WebCore/webaudio/JavaScriptAudioNode.idl b/WebCore/webaudio/JavaScriptAudioNode.idl
new file mode 100644
index 0000000..ef5359b
--- /dev/null
+++ b/WebCore/webaudio/JavaScriptAudioNode.idl
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+module audio {
+ // For real-time audio stream synthesis/processing in JavaScript
+ interface [
+ Conditional=WEB_AUDIO,
+ GenerateToJS,
+ CustomMarkFunction,
+#if defined(V8_BINDING) && V8_BINDING
+ EventTarget
+#endif
+ ] JavaScriptAudioNode : AudioNode {
+ // Rendering callback
+ attribute EventListener onaudioprocess;
+
+ readonly attribute long bufferSize;
+ };
+}
diff --git a/WebCore/wml/WMLDoElement.cpp b/WebCore/wml/WMLDoElement.cpp
index 899bee1..a8d4880 100644
--- a/WebCore/wml/WMLDoElement.cpp
+++ b/WebCore/wml/WMLDoElement.cpp
@@ -24,6 +24,7 @@
#include "WMLDoElement.h"
#include "Attribute.h"
+#include "BackForwardController.h"
#include "Event.h"
#include "EventNames.h"
#include "HTMLNames.h"
diff --git a/WebCore/wml/WMLDocument.cpp b/WebCore/wml/WMLDocument.cpp
index 440f8ee..9b29899 100644
--- a/WebCore/wml/WMLDocument.cpp
+++ b/WebCore/wml/WMLDocument.cpp
@@ -23,6 +23,7 @@
#if ENABLE(WML)
#include "WMLDocument.h"
+#include "BackForwardController.h"
#include "BackForwardList.h"
#include "Frame.h"
#include "Page.h"
diff --git a/WebCore/wml/WMLInputElement.cpp b/WebCore/wml/WMLInputElement.cpp
index 2165bd4..2d7310a 100644
--- a/WebCore/wml/WMLInputElement.cpp
+++ b/WebCore/wml/WMLInputElement.cpp
@@ -191,7 +191,7 @@ void WMLInputElement::restoreFormControlState(const String& state)
void WMLInputElement::select()
{
if (RenderTextControl* r = toRenderTextControl(renderer()))
- r->select();
+ setSelectionRange(this, 0, r->text().length());
}
void WMLInputElement::accessKeyAction(bool)
diff --git a/WebCore/wml/WMLPageState.cpp b/WebCore/wml/WMLPageState.cpp
index 5779e0e..a3c6243 100644
--- a/WebCore/wml/WMLPageState.cpp
+++ b/WebCore/wml/WMLPageState.cpp
@@ -24,6 +24,7 @@
#if ENABLE(WML)
#include "WMLPageState.h"
+#include "BackForwardController.h"
#include "BackForwardList.h"
#include "Document.h"
#include "Frame.h"
diff --git a/WebCore/wml/WMLPrevElement.cpp b/WebCore/wml/WMLPrevElement.cpp
index fccdc0b..c07f019 100644
--- a/WebCore/wml/WMLPrevElement.cpp
+++ b/WebCore/wml/WMLPrevElement.cpp
@@ -23,6 +23,7 @@
#if ENABLE(WML)
#include "WMLPrevElement.h"
+#include "BackForwardController.h"
#include "Page.h"
#include "WMLCardElement.h"
#include "WMLDocument.h"
diff --git a/WebCore/xml/XMLHttpRequest.cpp b/WebCore/xml/XMLHttpRequest.cpp
index 43ee8a8..782e159 100644
--- a/WebCore/xml/XMLHttpRequest.cpp
+++ b/WebCore/xml/XMLHttpRequest.cpp
@@ -178,7 +178,6 @@ XMLHttpRequest::XMLHttpRequest(ScriptExecutionContext* context)
, m_uploadEventsAllowed(true)
, m_uploadComplete(false)
, m_sameOriginRequest(true)
- , m_didTellLoaderAboutRequest(false)
, m_receivedLength(0)
, m_lastSendLineNumber(0)
, m_exceptionCode(0)
@@ -192,10 +191,6 @@ XMLHttpRequest::XMLHttpRequest(ScriptExecutionContext* context)
XMLHttpRequest::~XMLHttpRequest()
{
- if (m_didTellLoaderAboutRequest) {
- cache()->loader()->nonCacheRequestComplete(m_url);
- m_didTellLoaderAboutRequest = false;
- }
if (m_upload)
m_upload->disconnectXMLHttpRequest();
@@ -598,16 +593,6 @@ void XMLHttpRequest::createRequest(ExceptionCode& ec)
// a request is in progress because we need to keep the listeners alive,
// and they are referenced by the JavaScript wrapper.
setPendingActivity(this);
-
- // For now we should only balance the nonCached request count for main-thread XHRs and not
- // Worker XHRs, as the MemoryCache is not thread-safe.
- // This will become irrelevant after https://bugs.webkit.org/show_bug.cgi?id=27165 is resolved.
- if (!scriptExecutionContext()->isWorkerContext()) {
- ASSERT(isMainThread());
- ASSERT(!m_didTellLoaderAboutRequest);
- cache()->loader()->nonCacheRequestInFlight(m_url);
- m_didTellLoaderAboutRequest = true;
- }
}
} else
ThreadableLoader::loadResourceSynchronously(scriptExecutionContext(), request, *this, options);
@@ -899,10 +884,6 @@ String XMLHttpRequest::statusText(ExceptionCode& ec) const
void XMLHttpRequest::didFail(const ResourceError& error)
{
- if (m_didTellLoaderAboutRequest) {
- cache()->loader()->nonCacheRequestComplete(m_url);
- m_didTellLoaderAboutRequest = false;
- }
// If we are already in an error state, for instance we called abort(), bail out early.
if (m_error)
@@ -929,11 +910,6 @@ void XMLHttpRequest::didFailRedirectCheck()
void XMLHttpRequest::didFinishLoading(unsigned long identifier)
{
- if (m_didTellLoaderAboutRequest) {
- cache()->loader()->nonCacheRequestComplete(m_url);
- m_didTellLoaderAboutRequest = false;
- }
-
if (m_error)
return;
diff --git a/WebCore/xml/XMLHttpRequest.h b/WebCore/xml/XMLHttpRequest.h
index cb4e1cf..1b983e6 100644
--- a/WebCore/xml/XMLHttpRequest.h
+++ b/WebCore/xml/XMLHttpRequest.h
@@ -186,7 +186,6 @@ private:
bool m_uploadComplete;
bool m_sameOriginRequest;
- bool m_didTellLoaderAboutRequest;
// Used for onprogress tracking
long long m_receivedLength;
diff --git a/WebCore/xml/XPathNodeSet.cpp b/WebCore/xml/XPathNodeSet.cpp
index ba9423e..a8e4428 100644
--- a/WebCore/xml/XPathNodeSet.cpp
+++ b/WebCore/xml/XPathNodeSet.cpp
@@ -155,7 +155,7 @@ void NodeSet::sort() const
parentsVector.append(n);
containsAttributeNodes = true;
}
- while ((n = n->parent()))
+ while ((n = n->parentNode()))
parentsVector.append(n);
}
sortBlock(0, nodeCount, parentMatrix, containsAttributeNodes);
diff --git a/WebCore/xml/XPathStep.cpp b/WebCore/xml/XPathStep.cpp
index ddd8c3c..d82cd50 100644
--- a/WebCore/xml/XPathStep.cpp
+++ b/WebCore/xml/XPathStep.cpp
@@ -320,7 +320,7 @@ void Step::nodesInAxis(Node* context, NodeSet& nodes) const
context = static_cast<Attr*>(context)->ownerElement();
Node* n = context;
- while (Node* parent = n->parent()) {
+ while (ContainerNode* parent = n->parentNode()) {
for (n = n->traversePreviousNode(); n != parent; n = n->traversePreviousNode())
if (nodeMatches(n, PrecedingAxis, m_nodeTest))
nodes.append(n);
diff --git a/WebCore/xml/XSLTProcessor.cpp b/WebCore/xml/XSLTProcessor.cpp
index 5fd009c..59afd73 100644
--- a/WebCore/xml/XSLTProcessor.cpp
+++ b/WebCore/xml/XSLTProcessor.cpp
@@ -60,6 +60,12 @@ static inline void transformTextStringToXHTMLDocumentString(String& text)
"</html>\n";
}
+XSLTProcessor::~XSLTProcessor()
+{
+ // Stylesheet shouldn't outlive its root node.
+ ASSERT(!m_stylesheetRootNode || !m_stylesheet || m_stylesheet->hasOneRef());
+}
+
PassRefPtr<Document> XSLTProcessor::createDocumentFromSource(const String& sourceString,
const String& sourceEncoding, const String& sourceMIMEType, Node* sourceNode, Frame* frame)
{
diff --git a/WebCore/xml/XSLTProcessor.h b/WebCore/xml/XSLTProcessor.h
index 5be6b17..451e12c 100644
--- a/WebCore/xml/XSLTProcessor.h
+++ b/WebCore/xml/XSLTProcessor.h
@@ -44,6 +44,7 @@ class DocumentFragment;
class XSLTProcessor : public RefCounted<XSLTProcessor> {
public:
static PassRefPtr<XSLTProcessor> create() { return adoptRef(new XSLTProcessor); }
+ ~XSLTProcessor();
void setXSLStyleSheet(PassRefPtr<XSLStyleSheet> styleSheet) { m_stylesheet = styleSheet; }
bool transformToString(Node* source, String& resultMIMEType, String& resultString, String& resultEncoding);
diff --git a/WebCore/xml/XSLTProcessorLibxslt.cpp b/WebCore/xml/XSLTProcessorLibxslt.cpp
index a307c21..469cb64 100644
--- a/WebCore/xml/XSLTProcessorLibxslt.cpp
+++ b/WebCore/xml/XSLTProcessorLibxslt.cpp
@@ -224,7 +224,7 @@ static void freeXsltParamArray(const char** params)
static xsltStylesheetPtr xsltStylesheetPointer(RefPtr<XSLStyleSheet>& cachedStylesheet, Node* stylesheetRootNode)
{
if (!cachedStylesheet && stylesheetRootNode) {
- cachedStylesheet = XSLStyleSheet::create(stylesheetRootNode->parent() ? stylesheetRootNode->parent() : stylesheetRootNode,
+ cachedStylesheet = XSLStyleSheet::create(stylesheetRootNode->parentNode() ? stylesheetRootNode->parentNode() : stylesheetRootNode,
stylesheetRootNode->document()->url().string(),
stylesheetRootNode->document()->url()); // FIXME: Should we use baseURL here?
cachedStylesheet->parseString(createMarkup(stylesheetRootNode));
diff --git a/WebKit/CMakeLists.txt b/WebKit/CMakeLists.txt
index 0d3edca..57557e3 100644
--- a/WebKit/CMakeLists.txt
+++ b/WebKit/CMakeLists.txt
@@ -20,7 +20,6 @@ SET(WebKit_INCLUDE_DIRECTORIES
"${WEBCORE_DIR}/platform"
"${WEBCORE_DIR}/platform/animation"
"${WEBCORE_DIR}/platform/graphics"
- "${WEBCORE_DIR}/platform/graphics/cairo"
"${WEBCORE_DIR}/platform/graphics/transforms"
"${WEBCORE_DIR}/platform/network"
"${WEBCORE_DIR}/platform/sql"
diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index ff4ab64..9c29e83 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,21 @@
+2010-11-16 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [CMake] Remove platform dependent include directories
+ https://bugs.webkit.org/show_bug.cgi?id=49553
+
+ * CMakeLists.txt:
+
+2010-11-12 John Knottenbelt <jknotten@chromium.org>
+
+ Reviewed by Steve Block.
+
+ Rename GeolocationControllerClient to GeolocationClient.
+ https://bugs.webkit.org/show_bug.cgi?id=49259
+
+ * WebKit.xcodeproj/project.pbxproj:
+
2010-11-08 Leandro Pereira <leandro@profusion.mobi>
[EFL] Unreviewed. Build fix after r71496.
diff --git a/WebKit/WebKit.xcodeproj/project.pbxproj b/WebKit/WebKit.xcodeproj/project.pbxproj
index be3caeb..6878bb2 100644
--- a/WebKit/WebKit.xcodeproj/project.pbxproj
+++ b/WebKit/WebKit.xcodeproj/project.pbxproj
@@ -348,8 +348,8 @@
BC2E464E0FD8A96800A9D9DE /* WebViewData.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC2E464C0FD8A96800A9D9DE /* WebViewData.mm */; };
BC542C420FD7766F00D8AB5D /* WebDelegateImplementationCaching.h in Headers */ = {isa = PBXBuildFile; fileRef = BC542C400FD7766F00D8AB5D /* WebDelegateImplementationCaching.h */; };
BC542C430FD7766F00D8AB5D /* WebDelegateImplementationCaching.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC542C410FD7766F00D8AB5D /* WebDelegateImplementationCaching.mm */; };
- BC7F884B10C8775A00D6133D /* WebGeolocationControllerClient.h in Headers */ = {isa = PBXBuildFile; fileRef = BC7F884910C8775A00D6133D /* WebGeolocationControllerClient.h */; };
- BC7F884C10C8775A00D6133D /* WebGeolocationControllerClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC7F884A10C8775A00D6133D /* WebGeolocationControllerClient.mm */; };
+ BC7F884B10C8775A00D6133D /* WebGeolocationClient.h in Headers */ = {isa = PBXBuildFile; fileRef = BC7F884910C8775A00D6133D /* WebGeolocationClient.h */; };
+ BC7F884C10C8775A00D6133D /* WebGeolocationClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC7F884A10C8775A00D6133D /* WebGeolocationClient.mm */; };
BC7F889E10C9D30C00D6133D /* WebGeolocationPosition.h in Headers */ = {isa = PBXBuildFile; fileRef = BC7F889C10C9D30C00D6133D /* WebGeolocationPosition.h */; settings = {ATTRIBUTES = (Private, ); }; };
BC7F889F10C9D30C00D6133D /* WebGeolocationPosition.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC7F889D10C9D30C00D6133D /* WebGeolocationPosition.mm */; };
BC7F88A510C9D88B00D6133D /* WebGeolocationPositionInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = BC7F88A410C9D88B00D6133D /* WebGeolocationPositionInternal.h */; };
@@ -658,8 +658,8 @@
BC2E464C0FD8A96800A9D9DE /* WebViewData.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebViewData.mm; sourceTree = "<group>"; };
BC542C400FD7766F00D8AB5D /* WebDelegateImplementationCaching.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebDelegateImplementationCaching.h; sourceTree = "<group>"; };
BC542C410FD7766F00D8AB5D /* WebDelegateImplementationCaching.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebDelegateImplementationCaching.mm; sourceTree = "<group>"; };
- BC7F884910C8775A00D6133D /* WebGeolocationControllerClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebGeolocationControllerClient.h; sourceTree = "<group>"; };
- BC7F884A10C8775A00D6133D /* WebGeolocationControllerClient.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebGeolocationControllerClient.mm; sourceTree = "<group>"; };
+ BC7F884910C8775A00D6133D /* WebGeolocationClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebGeolocationClient.h; sourceTree = "<group>"; };
+ BC7F884A10C8775A00D6133D /* WebGeolocationClient.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebGeolocationClient.mm; sourceTree = "<group>"; };
BC7F889C10C9D30C00D6133D /* WebGeolocationPosition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebGeolocationPosition.h; sourceTree = "<group>"; };
BC7F889D10C9D30C00D6133D /* WebGeolocationPosition.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebGeolocationPosition.mm; sourceTree = "<group>"; };
BC7F88A410C9D88B00D6133D /* WebGeolocationPositionInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebGeolocationPositionInternal.h; sourceTree = "<group>"; };
@@ -1296,8 +1296,8 @@
931633EE0AEDFFAE0062B92D /* WebFrameLoaderClient.mm */,
9391F273121B38BD00EBF7E8 /* WebFrameNetworkingContext.h */,
9391F274121B38BD00EBF7E8 /* WebFrameNetworkingContext.mm */,
- BC7F884910C8775A00D6133D /* WebGeolocationControllerClient.h */,
- BC7F884A10C8775A00D6133D /* WebGeolocationControllerClient.mm */,
+ BC7F884910C8775A00D6133D /* WebGeolocationClient.h */,
+ BC7F884A10C8775A00D6133D /* WebGeolocationClient.mm */,
51494CD40C7EBDE0004178C5 /* WebIconDatabaseClient.h */,
51494CD50C7EBDE0004178C5 /* WebIconDatabaseClient.mm */,
9CE1F8A302A5C6F30ECA2ACD /* WebImageRendererFactory.m */,
@@ -1480,7 +1480,7 @@
9398106E0824BF01008DF038 /* WebFrameView.h in Headers */,
9398106F0824BF01008DF038 /* WebFrameViewInternal.h in Headers */,
939810AF0824BF01008DF038 /* WebFrameViewPrivate.h in Headers */,
- BC7F884B10C8775A00D6133D /* WebGeolocationControllerClient.h in Headers */,
+ BC7F884B10C8775A00D6133D /* WebGeolocationClient.h in Headers */,
BC7F889E10C9D30C00D6133D /* WebGeolocationPosition.h in Headers */,
BC7F88A510C9D88B00D6133D /* WebGeolocationPositionInternal.h in Headers */,
939810120824BF01008DF038 /* WebHistory.h in Headers */,
@@ -1892,7 +1892,7 @@
939810F20824BF01008DF038 /* WebFrame.mm in Sources */,
931633EF0AEDFFAE0062B92D /* WebFrameLoaderClient.mm in Sources */,
939811060824BF01008DF038 /* WebFrameView.mm in Sources */,
- BC7F884C10C8775A00D6133D /* WebGeolocationControllerClient.mm in Sources */,
+ BC7F884C10C8775A00D6133D /* WebGeolocationClient.mm in Sources */,
BC7F889F10C9D30C00D6133D /* WebGeolocationPosition.mm in Sources */,
939811130824BF01008DF038 /* WebHistory.mm in Sources */,
939810BD0824BF01008DF038 /* WebHistoryItem.mm in Sources */,
diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
index 6867714..2e3ce8e 100644
--- a/WebKit/chromium/ChangeLog
+++ b/WebKit/chromium/ChangeLog
@@ -1,4 +1,529 @@
-2010-11-08 Alexey Proskuryakov <ap@apple.com>
+2010-11-17 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r72228.
+ http://trac.webkit.org/changeset/72228
+ https://bugs.webkit.org/show_bug.cgi?id=49712
+
+ Caused many >10 regressions on Win and Linux gpu layout test
+ runs. (Requested by dave_levin on #webkit).
+
+ * src/WebGraphicsContext3DDefaultImpl.cpp:
+ (WebKit::bytesPerComponent):
+ (WebKit::componentsPerPixel):
+ (WebKit::imageSizeInBytes):
+ (WebKit::WebGraphicsContext3DDefaultImpl::texImage2D):
+
+2010-11-17 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Converge means of querying a parent node into one way, which is Node::parentNode.
+ https://bugs.webkit.org/show_bug.cgi?id=49686
+
+ * src/WebFrameImpl.cpp:
+ (WebKit::WebFrameImpl::insertStyleText): Changed to use parentNode.
+ (WebKit::WebFrameImpl::setFindEndstateFocusAndSelection): Ditto.
+
+2010-11-16 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ WebGLRenderingContext needs to zero textures and renderbuffers
+ https://bugs.webkit.org/show_bug.cgi?id=49355
+
+ * src/WebGraphicsContext3DDefaultImpl.cpp: Don't deal with texture initialization at this level.
+
+2010-11-17 Satish Sampath <satish@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ Clear the speech input mock explicitly before each test.
+ https://bugs.webkit.org/show_bug.cgi?id=49660
+
+ * public/WebSpeechInputControllerMock.h:
+ * src/WebSpeechInputControllerMockImpl.cpp:
+ (WebKit::WebSpeechInputControllerMockImpl::clearResults): Added method to clear results.
+ * src/WebSpeechInputControllerMockImpl.h:
+
+2010-11-17 Eric Uhrhane <ericu@chromium.org>
+
+ Reviewed by David Levin.
+
+ [Chromium] implementation of async FileWriter for workers
+ https://bugs.webkit.org/show_bug.cgi?id=47681
+
+ Tests are in a separate changelist.
+
+ Added new files.
+ * WebKit.gyp:
+
+ * src/WorkerAsyncFileSystemChromium.cpp: Added WorkerAsyncFileWriterChromium construction.
+ * src/WorkerAsyncFileWriterChromium.cpp: Added.
+ * src/WorkerAsyncFileWriterChromium.h: Added.
+
+ This class bridges between the context and main threads for the WorkerAsyncFileWriterChromium.
+ * src/WorkerFileWriterCallbacksBridge.cpp: Added.
+ * src/WorkerFileWriterCallbacksBridge.h: Added.
+
+2010-11-17 John Mellor <johnme@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [chromium] Expose frame flattening setting in WebSettings.
+ https://bugs.webkit.org/show_bug.cgi?id=49621
+
+ * public/WebSettings.h:
+ * src/WebSettingsImpl.cpp:
+ (WebKit::WebSettingsImpl::setFrameFlatteningEnabled):
+ * src/WebSettingsImpl.h:
+
+2010-11-17 Jonathan Backer <backer@chromium.org>
+
+ Reviewed by Kenneth Russell.
+
+ [Chromium] Resize initiated by renderer.
+ https://bugs.webkit.org/show_bug.cgi?id=49617
+
+ To address synchronization issues with resizing, make resize work like DARWIN.
+
+ * src/WebViewImpl.cpp:
+ (WebKit::WebViewImpl::resize):
+
+2010-11-17 Stuart Morgan <stuartmorgan@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Fix click count for mouse-up events.
+ - clickCount for mouse up was lost in conversion from NSEvent
+ - clickCount was also lost when disptaching events through the
+ plugin mouse capture event codepath.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49290
+
+ * src/WebViewImpl.cpp:
+ (WebKit::WebViewImpl::handleInputEvent):
+ * src/mac/WebInputEventFactory.mm:
+ (WebKit::WebInputEventFactory::mouseEvent):
+
+2010-11-11 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Implement UNPACK_COLORSPACE_CONVERSION_WEBGL
+ https://bugs.webkit.org/show_bug.cgi?id=47196
+
+ * src/WebImageDecoder.cpp:
+ (WebKit::WebImageDecoder::init): Add ignoreGammaAndColorProfile parameter.
+
+2010-11-12 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by Kenneth Russell.
+
+ Refactor GL backend flags
+ https://bugs.webkit.org/show_bug.cgi?id=49460
+
+ * public/WebGraphicsContext3D.h: Remove GL flag queries at this level.
+ * src/GraphicsContext3DChromium.cpp: Ditto.
+ * src/GraphicsContext3DInternal.h: Ditto.
+ * src/WebGraphicsContext3DDefaultImpl.cpp: Ditto.
+ * src/WebGraphicsContext3DDefaultImpl.h: Ditto.
+
+2010-11-16 Pavel Feldman <pfeldman@chromium.org>
+
+ Not reviewed. Chromium build fix.
+
+ * WebKit.gyp:
+ * scripts/concatenate_css_files.py: Renamed from WebKit/chromium/Build/concatenate_css_files.py.
+ * scripts/concatenate_js_files.py: Renamed from WebKit/chromium/Build/concatenate_js_files.py.
+ * scripts/generate_devtools_html.py: Renamed from WebKit/chromium/Build/generate_devtools_html.py.
+
+2010-11-16 Pavel Feldman <pfeldman@chromium.org>
+
+ Reviewed by Yury Semikhatsky.
+
+ Chrome DevTools: concatenate CSS files, do not link
+ missing JS files in release mode.
+ https://bugs.webkit.org/show_bug.cgi?id=49586
+
+ * Build/concatenate_css_files.py: Added.
+ * Build/concatenate_js_files.py: Added.
+ * Build/generate_devtools_html.py: Added.
+ * WebKit.gyp:
+
+2010-11-15 Nat Duca <nduca@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [chromium] Make WebWidget actively notify client when compositing enables.
+ https://bugs.webkit.org/show_bug.cgi?id=49396
+
+ * public/WebWidgetClient.h:
+ (WebKit::WebWidgetClient::didAcceleratedCompositingEnable):
+ * src/WebViewImpl.cpp:
+ (WebKit::WebViewImpl::resize):
+ (WebKit::WebViewImpl::paint):
+ (WebKit::WebViewImpl::setRootLayerNeedsDisplay):
+ (WebKit::WebViewImpl::scrollRootLayerRect):
+ (WebKit::WebViewImpl::invalidateRootLayerRect):
+ (WebKit::WebViewImpl::setIsAcceleratedCompositingActive):
+
+2010-11-15 Kenneth Russell <kbr@google.com>
+
+ Reviewed by James Robinson.
+
+ [chromium] Remove assumption that GL functions are function pointers
+ https://bugs.webkit.org/show_bug.cgi?id=49486
+
+ Added appropriate extension queries and no longer assume that GL
+ function names are function pointers which can be tested.
+
+ * src/WebGraphicsContext3DDefaultImpl.cpp:
+ (WebKit::WebGraphicsContext3DDefaultImpl::WebGraphicsContext3DDefaultImpl):
+ (WebKit::WebGraphicsContext3DDefaultImpl::initialize):
+ (WebKit::WebGraphicsContext3DDefaultImpl::validateAttributes):
+ (WebKit::WebGraphicsContext3DDefaultImpl::resolveMultisampledFramebuffer):
+ (WebKit::WebGraphicsContext3DDefaultImpl::reshape):
+ (WebKit::WebGraphicsContext3DDefaultImpl::generateMipmap):
+ (WebKit::WebGraphicsContext3DDefaultImpl::getString):
+ * src/WebGraphicsContext3DDefaultImpl.h:
+
+2010-11-15 Ilya Sherman <isherman@chromium.org>
+
+ Reviewed by Kent Tamura.
+
+ Add capability for displaying warnings to autofill popup
+ Warnings are displayed in dark gray italic.
+ https://bugs.webkit.org/show_bug.cgi?id=49291
+ http://code.google.com/p/chromium/issues/detail?id=58509
+
+ * src/AutoFillPopupMenuClient.cpp:
+ (WebKit::AutoFillPopupMenuClient::canRemoveSuggestionAtIndex):
+ Updated logic -- can only remove Autocomplete suggestions, which have unique ID 0.
+ (WebKit::AutoFillPopupMenuClient::itemIsEnabled): False for warnings.
+ (WebKit::AutoFillPopupMenuClient::itemStyle): Dark gray italic for warnings.
+ (WebKit::AutoFillPopupMenuClient::menuStyle): Variable name changed.
+ (WebKit::AutoFillPopupMenuClient::itemIsWarning): True for unique ID < 0.
+ (WebKit::AutoFillPopupMenuClient::initialize): Updated cached styles (see above).
+ * src/AutoFillPopupMenuClient.h: Added itemIsEnabled(), variable to cache warning style.
+ * src/WebViewImpl.cpp: Minor cleanup.
+ (WebKit::WebViewImpl::applyAutoFillSuggestions):
+
+2010-11-14 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Improve API for form validation message strings
+ https://bugs.webkit.org/show_bug.cgi?id=34945
+
+ * public/WebLocalizedString.h:
+ * src/LocalizedStrings.cpp:
+ (WebCore::validationMessageTypeMismatchForEmailText):
+ (WebCore::validationMessageTypeMismatchForMultipleEmailText):
+ (WebCore::validationMessageTypeMismatchForURLText):
+ (WebCore::validationMessageTooLongText):
+ (WebCore::validationMessageRangeUnderflowText):
+ (WebCore::validationMessageRangeOverflowText):
+ (WebCore::validationMessageStepMismatchText):
+
+2010-11-13 Shinichiro Hamaji <hamaji@chromium.org>
+
+ Reviewed by Kent Tamura.
+
+ [Chromium] print doesn't work on http://nodejs.org/api.html
+ https://bugs.webkit.org/show_bug.cgi?id=49304
+
+ * src/WebFrameImpl.cpp:
+ (WebKit::ChromePrintContext::begin):
+ (WebKit::WebFrameImpl::printBegin):
+
+2010-11-12 James Simonsen <simonjam@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [Web Timing] Rename interfaces:
+ - Navigation -> PerformanceNavigation
+ - Timing -> PerformanceTiming
+ https://bugs.webkit.org/show_bug.cgi?id=48919
+
+ * src/WebPerformance.cpp:
+ (WebKit::WebPerformance::navigationType):
+
+2010-11-12 Zhenyao Mo <zmo@google.com>
+
+ Reviewed by James Robinson.
+
+ WebGraphicsContext3DDefaultImpl does not run on top of OpenGL ES 2.0 implementations
+ https://bugs.webkit.org/show_bug.cgi?id=48282
+
+ Simple fix for a regression introduced in r71793.
+
+ * src/WebGraphicsContext3DDefaultImpl.cpp:
+ (WebKit::WebGraphicsContext3DDefaultImpl::initialize):
+
+2010-11-12 Ilya Sherman <isherman@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ Remove some trailing whitespace
+ https://bugs.webkit.org/show_bug.cgi?id=49433
+
+ * src/ChromeClientImpl.cpp:
+ (WebKit::ChromeClientImpl::createPopupMenu):
+ * src/WebViewImpl.cpp:
+ (WebKit::WebViewImpl::scrollRootLayerRect):
+ (WebKit::WebViewImpl::invalidateRootLayerRect):
+
+2010-11-11 MORITA Hajime <morrita@google.com>
+
+ Unreviewed another attempt to fx windows build.
+
+ * src/WebBindings.cpp:
+ (WebKit::makeStringArrayImpl):
+
+2010-11-11 MORITA Hajime <morrita@google.com>
+
+ Unreviewed attempt to fx windows build.
+
+ * src/WebBindings.cpp:
+ (WebKit::makeStringArrayImpl):
+
+2010-11-11 MORITA Hajime <morrita@google.com>
+
+ Reviewed by Kent Tamura.
+
+ editing/selection/context-menu-on-text.html fails on chromium
+ https://bugs.webkit.org/show_bug.cgi?id=45898
+
+ Added makeStringArray(), that is used by DumpRenderTree.
+
+ * public/WebBindings.h:
+ * src/WebBindings.cpp:
+ (WebKit::makeStringArrayImpl): Added.
+ (WebKit::WebBindings::makeStringArray): Added.
+
+2010-11-11 Tony Gentilcore <tonyg@chromium.org>
+
+ Reviewed by Nate Chapin.
+
+ [chromium] Convert WebPerformance doubles to seconds
+ https://bugs.webkit.org/show_bug.cgi?id=49232
+
+ This makes them suitable for passing to Time::FromDoubleT().
+
+ * src/WebPerformance.cpp:
+ (WebKit::millisecondsToSeconds):
+ (WebKit::WebPerformance::navigationStart):
+ (WebKit::WebPerformance::unloadEventEnd):
+ (WebKit::WebPerformance::redirectStart):
+ (WebKit::WebPerformance::redirectEnd):
+ (WebKit::WebPerformance::fetchStart):
+ (WebKit::WebPerformance::domainLookupStart):
+ (WebKit::WebPerformance::domainLookupEnd):
+ (WebKit::WebPerformance::connectStart):
+ (WebKit::WebPerformance::connectEnd):
+ (WebKit::WebPerformance::requestStart):
+ (WebKit::WebPerformance::requestEnd):
+ (WebKit::WebPerformance::responseStart):
+ (WebKit::WebPerformance::responseEnd):
+ (WebKit::WebPerformance::loadEventStart):
+ (WebKit::WebPerformance::loadEventEnd):
+
+2010-11-11 Hans Wennborg <hans@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ IndexedDB: signal IDBFactoryBackendInterface destruction to embedder
+ https://bugs.webkit.org/show_bug.cgi?id=49313
+
+ Implement ChromiumBridge::idbShutdown(), passing through to the
+ WebKitClient.
+
+ * public/WebKitClient.h:
+ (WebKit::WebKitClient::idbShutdown):
+ * src/ChromiumBridge.cpp:
+ (WebCore::ChromiumBridge::idbShutdown):
+
+2010-11-10 Kenneth Russell <kbr@google.com>
+
+ Reviewed by James Robinson.
+
+ [chromium] Clean up gfx::GetGLImplementation calls in WebGraphicsContext3DDefaultImpl
+ https://bugs.webkit.org/show_bug.cgi?id=49336
+
+ * src/WebGraphicsContext3DDefaultImpl.cpp:
+ (WebKit::WebGraphicsContext3DDefaultImpl::initialize):
+ (WebKit::WebGraphicsContext3DDefaultImpl::reshape):
+ (WebKit::WebGraphicsContext3DDefaultImpl::readBackFramebuffer):
+ (WebKit::WebGraphicsContext3DDefaultImpl::getIntegerv):
+
+2010-11-10 Evan Stade <estade@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ [chromium] menu key doesn't work when capslock or numslock is on
+ https://bugs.webkit.org/show_bug.cgi?id=49289
+
+ Add a special bitmask for the "input" modifier keys (shift, alt, crtl, meta). The Modifier
+ enum has grown to something that might be better termed State, but changing the nomenclature
+ now is difficult. The bitmask gets its name from the related function getWebInputModifiers.
+
+ * public/WebInputEvent.h: add InputModifiers mask for true modifier keys
+ * src/WebViewImpl.cpp: disregard non-modifier keys
+ (WebKit::WebViewImpl::keyEvent):
+
+2010-11-10 Csaba Osztrogonác <ossy@webkit.org>
+
+ Reviewed by David Hyatt.
+
+ HTML5 Ruby support should be mandatory feature
+ https://bugs.webkit.org/show_bug.cgi?id=49272
+
+ Remove Ruby as optional feature.
+
+ * features.gypi:
+
+2010-11-10 Tony Chang <tony@chromium.org>
+
+ Unreviewed, add libvpx as a chromium dependency.
+
+ This should fix the chromium linux build.
+
+ * DEPS:
+
+2010-11-10 Peter Rybin <peter.rybin@gmail.com>
+
+ Reviewed by Adam Barth.
+
+ HTML parser should provide script column position within HTML document to JavaScript engine
+ https://bugs.webkit.org/show_bug.cgi?id=45271
+
+ Replaces script line number with TextPosition structure.
+
+ * src/WebFrameImpl.cpp:
+ (WebKit::WebFrameImpl::executeScript):
+ (WebKit::WebFrameImpl::executeScriptInIsolatedWorld):
+ (WebKit::WebFrameImpl::executeScriptAndReturnValue):
+
+2010-11-09 Kenneth Russell <kbr@google.com>
+
+ Reviewed by James Robinson.
+
+ WebGraphicsContext3DDefaultImpl does not run on top of OpenGL ES 2.0 implementations
+ https://bugs.webkit.org/show_bug.cgi?id=48282
+
+ Fixed assumptions in WebGraphicsContext3DDefaultImpl that it was
+ running on top of desktop GL.
+
+ Tested various WebGL demos on Windows with ANGLE and
+ --in-process-webgl --disable-accelerated-compositing; all are now
+ working. Verified that --use-gl=desktop continues to work in the
+ same configuration.
+
+ * src/WebGraphicsContext3DDefaultImpl.cpp:
+ (WebKit::WebGraphicsContext3DDefaultImpl::WebGraphicsContext3DDefaultImpl):
+ (WebKit::WebGraphicsContext3DDefaultImpl::initialize):
+ (WebKit::WebGraphicsContext3DDefaultImpl::validateAttributes):
+ (WebKit::WebGraphicsContext3DDefaultImpl::resolveMultisampledFramebuffer):
+ (WebKit::WebGraphicsContext3DDefaultImpl::isGLES2Compliant):
+ (WebKit::WebGraphicsContext3DDefaultImpl::reshape):
+ (WebKit::WebGraphicsContext3DDefaultImpl::readBackFramebuffer):
+ (WebKit::WebGraphicsContext3DDefaultImpl::getIntegerv):
+ (WebKit::WebGraphicsContext3DDefaultImpl::angleValidateShaderSource):
+ * src/WebGraphicsContext3DDefaultImpl.h:
+
+2010-11-09 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ [Chromium] Add form validation message support to WebLocalizedString.h
+ https://bugs.webkit.org/show_bug.cgi?id=49239
+
+ * DEPS: Roll Chromium revision to r65502 to have crrev.com/65502
+ * public/WebLocalizedString.h: Add new symbols
+ * src/LocalizedStrings.cpp: Call query() with the new symbols in the following functions.
+ (WebCore::validationMessageValueMissingText):
+ (WebCore::validationMessageTypeMismatchText):
+ (WebCore::validationMessagePatternMismatchText):
+ (WebCore::validationMessageTooLongText):
+ (WebCore::validationMessageRangeUnderflowText):
+ (WebCore::validationMessageRangeOverflowText):
+ (WebCore::validationMessageStepMismatchText):
+
+2010-11-09 Tony Chang <tony@chromium.org>
+
+ Unreviewed, rolling chromium DEPS.
+
+ * DEPS: Roll to r65462.
+
+2010-11-09 Mihai Parparita <mihaip@chromium.org>
+
+ Unreviewed Chromium Windows build fix.
+
+ Add isDisplayNone to the PopupMenuStyle constructor call in
+ PopupMenuTest (necessary after r71618).
+
+ * tests/PopupMenuTest.cpp:
+ (WebKit::TestPopupMenuClient::itemStyle):
+
+2010-11-09 Shinichiro Hamaji <hamaji@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ [Chromium] display:none has no effect on <option> element
+ https://bugs.webkit.org/show_bug.cgi?id=49169
+
+ * src/AutoFillPopupMenuClient.cpp:
+ (WebKit::AutoFillPopupMenuClient::initialize):
+
+2010-11-09 James Simonsen <simonjam@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ [Web Timing] Remove requestEnd
+ https://bugs.webkit.org/show_bug.cgi?id=48924
+
+ * public/WebPerformance.h:
+ * src/WebPerformance.cpp:
+
+2010-11-08 John Knottenbelt <jknotten@chromium.org>
+
+ Reviewed by Steve Block.
+
+ Convert to and from DOMTimeStamp with converter functions
+ https://bugs.webkit.org/show_bug.cgi?id=49066
+
+ * src/WebDataSourceImpl.cpp:
+ (WebKit::WebDataSourceImpl::triggeringEventTime):
+
+
+2010-11-08 Pierre-Antoine LaFayette <pierre.lafayette@gmail.com>
+
+ Reviewed by Darin Fisher.
+
+ [chromium] Adding hasUserGesture flag to the ResourceRequest
+ https://bugs.webkit.org/show_bug.cgi?id=37057
+
+ This flag is to be used on the browser side to indicate when a
+ download has been user initiated.
+
+ * public/WebURLRequest.h:
+ * src/WebURLRequest.cpp:
+ (WebKit::WebURLRequest::hasUserGesture):
+ (WebKit::WebURLRequest::setHasUserGesture):
+
+2010-11-08 Jay Civelli <jcivelli@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ Add an API to WebViewClient that report the load progress for a frame.
+ https://bugs.webkit.org/show_bug.cgi?id=49137
+
+ * public/WebViewClient.h:
+ (WebKit::WebViewClient::didChangeLoadProgress):
+ * src/FrameLoaderClientImpl.cpp:
+ (WebKit::FrameLoaderClientImpl::postProgressEstimateChangedNotification):
+
+ 2010-11-08 Alexey Proskuryakov <ap@apple.com>
Reviewed by Darin Adler.
diff --git a/WebKit/chromium/DEPS b/WebKit/chromium/DEPS
index 4fc0372..f5d56dd 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': '65229'
+ 'chromium_rev': '65502'
}
deps = {
@@ -95,6 +95,8 @@ deps = {
Var('chromium_svn')+'/ppapi@'+Var('chromium_rev'),
'third_party/angle': # needed by the gpu process
From('chromium_deps', 'src/third_party/angle'),
+ 'third_party/libvpx': # needed by webkit/media
+ From('chromium_deps', 'src/third_party/libvpx'),
'third_party/ffmpeg': # needed by webkit/media
From('chromium_deps', 'src/third_party/ffmpeg'),
'third_party/libwebp':
diff --git a/WebKit/chromium/WebKit.gyp b/WebKit/chromium/WebKit.gyp
index 4dcc61a..a95b88f 100644
--- a/WebKit/chromium/WebKit.gyp
+++ b/WebKit/chromium/WebKit.gyp
@@ -547,8 +547,12 @@
'src/WebWorkerImpl.h',
'src/WorkerAsyncFileSystemChromium.cpp',
'src/WorkerAsyncFileSystemChromium.h',
+ 'src/WorkerAsyncFileWriterChromium.cpp',
+ 'src/WorkerAsyncFileWriterChromium.h',
'src/WorkerFileSystemCallbacksBridge.cpp',
'src/WorkerFileSystemCallbacksBridge.h',
+ 'src/WorkerFileWriterCallbacksBridge.cpp',
+ 'src/WorkerFileWriterCallbacksBridge.h',
'src/WrappedResourceRequest.h',
'src/WrappedResourceResponse.h',
'src/win/WebInputEventFactory.cpp',
@@ -671,7 +675,8 @@
],
'conditions': [
['debug_devtools==0', {
- 'dependencies': ['concatenated_devtools_js'],
+ 'dependencies': ['concatenated_devtools_js',
+ 'concatenated_devtools_css'],
}],
],
'copies': [
@@ -684,7 +689,7 @@
],
'conditions': [
['debug_devtools==0', {
- 'files/': [['exclude', '\\.js$']],
+ 'files/': [['exclude', '\\.(js|css|html)$']],
}],
],
},
@@ -704,13 +709,13 @@
'actions': [{
'action_name': 'devtools_html',
'inputs': [
- '<(chromium_src_dir)/webkit/build/generate_devtools_html.py',
+ 'scripts/generate_devtools_html.py',
# See issue 29695: WebKit.gypi is a source file for devtools.html.
'WebKit.gypi',
'../../WebCore/inspector/front-end/inspector.html',
],
'outputs': ['<(PRODUCT_DIR)/resources/inspector/devtools.html'],
- 'action': ['python', '<@(_inputs)', '<@(_outputs)', '<@(devtools_files)'],
+ 'action': ['python', '<@(_inputs)', '<@(_outputs)', '<@(debug_devtools)', '<@(devtools_files)'],
}],
},
{
@@ -723,26 +728,50 @@
'sources': ['<(PRODUCT_DIR)/resources/inspector/DevTools.js'],
'actions': [{
'action_name': 'concatenate_devtools_js',
- 'script_name': '<(chromium_src_dir)/webkit/build/concatenate_js_files.py',
- 'input_page': '<(PRODUCT_DIR)/resources/inspector/devtools.html',
+ 'script_name': 'scripts/concatenate_js_files.py',
+ 'input_page': '../../WebCore/inspector/front-end/inspector.html',
'inputs': [
'<@(_script_name)',
'<@(_input_page)',
'<@(webinspector_files)',
'<@(devtools_files)',
- '<(SHARED_INTERMEDIATE_DIR)/webcore/InspectorBackendStub.js',
+ '<(SHARED_INTERMEDIATE_DIR)/webcore/InspectorBackendStub.js'
],
'search_path': [
'../../WebCore/inspector/front-end',
'src/js',
'<(SHARED_INTERMEDIATE_DIR)/webcore',
- '<(chromium_src_dir)/v8/tools',
],
'outputs': ['<(PRODUCT_DIR)/resources/inspector/DevTools.js'],
'action': ['python', '<@(_script_name)', '<@(_input_page)', '<@(_search_path)', '<@(_outputs)'],
}],
},
{
+ 'target_name': 'concatenated_devtools_css',
+ 'type': 'none',
+ 'dependencies': [
+ 'devtools_html'
+ ],
+ 'sources': ['<(PRODUCT_DIR)/resources/inspector/devTools.css'],
+ 'actions': [{
+ 'action_name': 'concatenate_devtools_css',
+ 'script_name': 'scripts/concatenate_css_files.py',
+ 'input_page': '../../WebCore/inspector/front-end/inspector.html',
+ 'inputs': [
+ '<@(_script_name)',
+ '<@(_input_page)',
+ '<@(webinspector_files)',
+ '<@(devtools_files)'
+ ],
+ 'search_path': [
+ '../../WebCore/inspector/front-end',
+ 'src/js',
+ ],
+ 'outputs': ['<(PRODUCT_DIR)/resources/inspector/devTools.css'],
+ 'action': ['python', '<@(_script_name)', '<@(_input_page)', '<@(_search_path)', '<@(_outputs)'],
+ }],
+ },
+ {
'target_name': 'webkit_unit_tests',
'type': 'executable',
'msvs_guid': '7CEFE800-8403-418A-AD6A-2D52C6FC3EAD',
diff --git a/WebKit/chromium/features.gypi b/WebKit/chromium/features.gypi
index cd6bf20..03e6ce4 100644
--- a/WebKit/chromium/features.gypi
+++ b/WebKit/chromium/features.gypi
@@ -68,7 +68,6 @@
'ENABLE_OPENTYPE_SANITIZER=1',
'ENABLE_ORIENTATION_EVENTS=0',
'ENABLE_PROGRESS_TAG=1',
- 'ENABLE_RUBY=1',
'ENABLE_SHARED_WORKERS=1',
'ENABLE_SVG=1',
'ENABLE_SVG_ANIMATION=1',
diff --git a/WebKit/chromium/public/WebBindings.h b/WebKit/chromium/public/WebBindings.h
index 147ce45..cb33781 100644
--- a/WebKit/chromium/public/WebBindings.h
+++ b/WebKit/chromium/public/WebBindings.h
@@ -32,6 +32,7 @@
#define WebBindings_h
#include "WebCommon.h"
+#include "WebString.h"
#include "WebVector.h"
#include <bindings/npruntime.h>
@@ -146,6 +147,7 @@ public:
WEBKIT_API static bool getElement(NPObject* element, WebElement*);
WEBKIT_API static NPObject* makeIntArray(const WebVector<int>&);
+ WEBKIT_API static NPObject* makeStringArray(const WebVector<WebString>&);
// Exceptions -------------------------------------------------------------
diff --git a/WebKit/chromium/public/WebGraphicsContext3D.h b/WebKit/chromium/public/WebGraphicsContext3D.h
index 9656887..932004c 100644
--- a/WebKit/chromium/public/WebGraphicsContext3D.h
+++ b/WebKit/chromium/public/WebGraphicsContext3D.h
@@ -105,11 +105,6 @@ public:
// Query whether it is built on top of compliant GLES2 implementation.
virtual bool isGLES2Compliant() = 0;
- // Query whether it is built on top of GLES2 NPOT strict implementation.
- virtual bool isGLES2NPOTStrict() = 0;
- // Query whether it is built on top of implementation that generates errors
- // on out-of-bounds buffer accesses.
- virtual bool isErrorGeneratedOnOutOfBoundsAccesses() = 0;
// Helper for software compositing path. Reads back the frame buffer into
// the memory region pointed to by "pixels" with size "bufferSize". It is
diff --git a/WebKit/chromium/public/WebInputEvent.h b/WebKit/chromium/public/WebInputEvent.h
index 26e41a4..581e76c 100644
--- a/WebKit/chromium/public/WebInputEvent.h
+++ b/WebKit/chromium/public/WebInputEvent.h
@@ -130,6 +130,8 @@ public:
NumLockOn = 1 << 10,
};
+ static const int InputModifiers = ShiftKey | ControlKey | AltKey | MetaKey;
+
unsigned size; // The size of this structure, for serialization.
Type type;
int modifiers;
diff --git a/WebKit/chromium/public/WebKitClient.h b/WebKit/chromium/public/WebKitClient.h
index 09c79c5..7ced7ad 100644
--- a/WebKit/chromium/public/WebKitClient.h
+++ b/WebKit/chromium/public/WebKitClient.h
@@ -141,6 +141,7 @@ public:
// Indexed Database ----------------------------------------------------
virtual WebIDBFactory* idbFactory() { return 0; }
+ virtual void idbShutdown() { };
virtual void createIDBKeysFromSerializedValuesAndKeyPath(const WebVector<WebSerializedScriptValue>& values, const WebString& keyPath, WebVector<WebIDBKey>& keys) { }
diff --git a/WebKit/chromium/public/WebLocalizedString.h b/WebKit/chromium/public/WebLocalizedString.h
index 99a7d23..8ab5f8d 100644
--- a/WebKit/chromium/public/WebLocalizedString.h
+++ b/WebKit/chromium/public/WebLocalizedString.h
@@ -58,6 +58,16 @@ struct WebLocalizedString {
AXLinkActionVerb,
KeygenMenuHighGradeKeySize,
KeygenMenuMediumGradeKeySize,
+ ValidationValueMissing,
+ ValidationTypeMismatch,
+ ValidationTypeMismatchForEmail,
+ ValidationTypeMismatchForMultipleEmail,
+ ValidationTypeMismatchForURL,
+ ValidationPatternMismatch,
+ ValidationTooLong,
+ ValidationRangeUnderflow,
+ ValidationRangeOverflow,
+ ValidationStepMismatch,
};
};
diff --git a/WebKit/chromium/public/WebPerformance.h b/WebKit/chromium/public/WebPerformance.h
index 012f2fd..f096ac6 100644
--- a/WebKit/chromium/public/WebPerformance.h
+++ b/WebKit/chromium/public/WebPerformance.h
@@ -71,7 +71,6 @@ public:
WEBKIT_API double connectStart() const;
WEBKIT_API double connectEnd() const;
WEBKIT_API double requestStart() const;
- WEBKIT_API double requestEnd() const;
WEBKIT_API double responseStart() const;
WEBKIT_API double responseEnd() const;
WEBKIT_API double loadEventStart() const;
diff --git a/WebKit/chromium/public/WebSettings.h b/WebKit/chromium/public/WebSettings.h
index 469db05..fa21551 100644
--- a/WebKit/chromium/public/WebSettings.h
+++ b/WebKit/chromium/public/WebSettings.h
@@ -82,6 +82,7 @@ public:
virtual void setXSSAuditorEnabled(bool) = 0;
virtual void setLocalStorageEnabled(bool) = 0;
virtual void setEditableLinkBehaviorNeverLive() = 0;
+ virtual void setFrameFlatteningEnabled(bool) = 0;
virtual void setFontRenderingModeNormal() = 0;
virtual void setShouldPaintCustomScrollbars(bool) = 0;
virtual void setAllowUniversalAccessFromFileURLs(bool) = 0;
diff --git a/WebKit/chromium/public/WebSpeechInputControllerMock.h b/WebKit/chromium/public/WebSpeechInputControllerMock.h
index 0a7f6f9..31672ba 100644
--- a/WebKit/chromium/public/WebSpeechInputControllerMock.h
+++ b/WebKit/chromium/public/WebSpeechInputControllerMock.h
@@ -45,6 +45,8 @@ public:
virtual ~WebSpeechInputControllerMock() { }
virtual void setMockRecognitionResult(const WebString& result, const WebString& language) = 0;
+
+ virtual void clearResults() = 0;
};
} // namespace WebKit
diff --git a/WebKit/chromium/public/WebURLRequest.h b/WebKit/chromium/public/WebURLRequest.h
index c800452..7dd97ca 100644
--- a/WebKit/chromium/public/WebURLRequest.h
+++ b/WebKit/chromium/public/WebURLRequest.h
@@ -140,6 +140,10 @@ public:
WEBKIT_API TargetType targetType() const;
WEBKIT_API void setTargetType(TargetType);
+ // True if the request was user initiated.
+ WEBKIT_API bool hasUserGesture() const;
+ WEBKIT_API void setHasUserGesture(bool);
+
// A consumer controlled value intended to be used to identify the
// requestor.
WEBKIT_API int requestorID() const;
diff --git a/WebKit/chromium/public/WebView.h b/WebKit/chromium/public/WebView.h
index ce8e512..d9d72c7 100644
--- a/WebKit/chromium/public/WebView.h
+++ b/WebKit/chromium/public/WebView.h
@@ -289,7 +289,11 @@ public:
// Notifies the WebView that AutoFill suggestions are available for a node.
// |uniqueIDs| is a vector of IDs that represent the unique ID of each
- // AutoFill profile in the suggestions popup.
+ // AutoFill profile in the suggestions popup. If a unique ID is 0, then the
+ // corresponding suggestion comes from Autocomplete rather than AutoFill.
+ // If a unique ID is negative, then the corresponding "suggestion" is
+ // actually a user-facing warning, e.g. explaining why AutoFill is
+ // unavailable for the current form.
virtual void applyAutoFillSuggestions(
const WebNode&,
const WebVector<WebString>& names,
diff --git a/WebKit/chromium/public/WebViewClient.h b/WebKit/chromium/public/WebViewClient.h
index edd9579..7ce1483 100644
--- a/WebKit/chromium/public/WebViewClient.h
+++ b/WebKit/chromium/public/WebViewClient.h
@@ -117,6 +117,10 @@ public:
virtual void didStartLoading() { }
virtual void didStopLoading() { }
+ // Notification that some progress was made loading the current page.
+ // loadProgress is a value between 0 (nothing loaded) and 1.0 (frame fully
+ // loaded).
+ virtual void didChangeLoadProgress(WebFrame*, double loadProgress) { }
// Editing -------------------------------------------------------------
@@ -305,11 +309,13 @@ public:
const WebString& value) { }
// Informs the browser that the user has accepted an AutoFill suggestion for
- // a WebNode. |name| and |label| form a key into the set of AutoFill
- // profiles. |index| is an index of the selected suggestion in the list of
- // suggestions provided by the client
+ // a WebNode. |uniqueID| is used as a key into the set of AutoFill profiles,
+ // and should never be negative. If it is 0, then the suggestion is an
+ // Autocomplete suggestion; and |value| stores the suggested text. |index|
+ // is an index of the selected suggestion in the list of suggestions provided
+ // by the client.
virtual void didAcceptAutoFillSuggestion(const WebNode&,
- const WebString& name,
+ const WebString& value,
const WebString& label,
int uniqueID,
unsigned index) { }
diff --git a/WebKit/chromium/public/WebWidgetClient.h b/WebKit/chromium/public/WebWidgetClient.h
index 9bd553f..373426d 100644
--- a/WebKit/chromium/public/WebWidgetClient.h
+++ b/WebKit/chromium/public/WebWidgetClient.h
@@ -50,6 +50,9 @@ public:
// scrolled by the specified dx and dy amounts.
virtual void didScrollRect(int dx, int dy, const WebRect& clipRect) { }
+ // Called when the compositor enables or disables.
+ virtual void didActivateAcceleratedCompositing(bool active) { }
+
// Called when a call to WebWidget::composite is required
virtual void scheduleComposite() { }
diff --git a/WebKit/chromium/scripts/concatenate_css_files.py b/WebKit/chromium/scripts/concatenate_css_files.py
new file mode 100644
index 0000000..0aa5ef3
--- /dev/null
+++ b/WebKit/chromium/scripts/concatenate_css_files.py
@@ -0,0 +1,117 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2010 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * 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 concatenates in place CSS files in the order specified
+# using <link> tags in a given 'order.html' file.
+
+from HTMLParser import HTMLParser
+from cStringIO import StringIO
+import os.path
+import sys
+
+
+class OrderedCSSFilesExtractor(HTMLParser):
+
+ def __init__(self, order_html_name):
+ HTMLParser.__init__(self)
+ self.ordered_css_files = []
+ order_html = open(order_html_name, 'r')
+ self.feed(order_html.read())
+
+ def handle_starttag(self, tag, attrs):
+ if tag == 'link':
+ attrs_dict = dict(attrs)
+ if ('type' in attrs_dict and attrs_dict['type'] == 'text/css' and
+ 'href' in attrs_dict):
+ self.ordered_css_files.append(attrs_dict['href'])
+
+
+class PathExpander:
+
+ def __init__(self, paths):
+ self.paths = paths
+
+ def expand(self, filename):
+ last_path = None
+ expanded_name = None
+ for path in self.paths:
+ fname = "%s/%s" % (path, filename)
+ if (os.access(fname, os.F_OK)):
+ if (last_path != None):
+ raise Exception('Ambiguous file %s: found in %s and %s' %
+ (filename, last_path, path))
+ expanded_name = fname
+ last_path = path
+ return expanded_name
+
+
+def main(argv):
+
+ if len(argv) < 3:
+ print('usage: %s order.html input_source_dir_1 input_source_dir_2 ... '
+ 'output_file' % argv[0])
+ return 1
+
+ output_file_name = argv.pop()
+ input_order_file_name = argv[1]
+ extractor = OrderedCSSFilesExtractor(input_order_file_name)
+ # Unconditionally append devTools.css. It will contain concatenated files.
+ extractor.ordered_css_files.append('devTools.css')
+
+ expander = PathExpander(argv[2:])
+ output = StringIO()
+
+ for input_file_name in extractor.ordered_css_files:
+ full_path = expander.expand(input_file_name)
+ if (full_path is None):
+ raise Exception('File %s referenced in %s not found on any source paths, '
+ 'check source tree for consistency' %
+ (input_file_name, input_order_file_name))
+ output.write('/* %s */\n\n' % input_file_name)
+ input_file = open(full_path, 'r')
+ output.write(input_file.read())
+ output.write('\n')
+ input_file.close()
+
+ output_file = open(output_file_name, 'w')
+ output_file.write(output.getvalue())
+ output_file.close()
+ output.close()
+
+ # Touch output file directory to make sure that Xcode will copy
+ # modified resource files.
+ if sys.platform == 'darwin':
+ output_dir_name = os.path.dirname(output_file_name)
+ os.utime(output_dir_name, None)
+
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))
diff --git a/WebKit/chromium/scripts/concatenate_js_files.py b/WebKit/chromium/scripts/concatenate_js_files.py
new file mode 100644
index 0000000..1393f48
--- /dev/null
+++ b/WebKit/chromium/scripts/concatenate_js_files.py
@@ -0,0 +1,115 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2010 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * 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 concatenates in place JS files in the order specified
+# using <script> tags in a given 'order.html' file.
+
+from HTMLParser import HTMLParser
+from cStringIO import StringIO
+import os.path
+import sys
+
+
+class OrderedJSFilesExtractor(HTMLParser):
+
+ def __init__(self, order_html_name):
+ HTMLParser.__init__(self)
+ self.ordered_js_files = []
+ order_html = open(order_html_name, 'r')
+ self.feed(order_html.read())
+
+ def handle_starttag(self, tag, attrs):
+ if tag == 'script':
+ attrs_dict = dict(attrs)
+ if ('type' in attrs_dict and attrs_dict['type'] == 'text/javascript' and 'src' in attrs_dict):
+ self.ordered_js_files.append(attrs_dict['src'])
+
+
+class PathExpander:
+
+ def __init__(self, paths):
+ self.paths = paths
+
+ def expand(self, filename):
+ last_path = None
+ expanded_name = None
+ for path in self.paths:
+ fname = "%s/%s" % (path, filename)
+ if (os.access(fname, os.F_OK)):
+ if (last_path != None):
+ raise Exception('Ambiguous file %s: found in %s and %s' %
+ (filename, last_path, path))
+ expanded_name = fname
+ last_path = path
+ return expanded_name
+
+
+def main(argv):
+
+ if len(argv) < 3:
+ print('usage: %s order.html input_source_dir_1 input_source_dir_2 ... '
+ 'output_file' % argv[0])
+ return 1
+
+ output_file_name = argv.pop()
+ input_order_file_name = argv[1]
+ extractor = OrderedJSFilesExtractor(input_order_file_name)
+ extractor.ordered_js_files.append('DevTools.js')
+ extractor.ordered_js_files.append('Tests.js')
+
+ expander = PathExpander(argv[2:])
+ output = StringIO()
+
+ for input_file_name in extractor.ordered_js_files:
+ full_path = expander.expand(input_file_name)
+ if (full_path is None):
+ raise Exception('File %s referenced in %s not found on any source paths, '
+ 'check source tree for consistency' %
+ (input_file_name, input_order_file_name))
+ output.write('/* %s */\n\n' % input_file_name)
+ input_file = open(full_path, 'r')
+ output.write(input_file.read())
+ output.write('\n')
+ input_file.close()
+
+ output_file = open(output_file_name, 'w')
+ output_file.write(output.getvalue())
+ output_file.close()
+ output.close()
+
+ # Touch output file directory to make sure that Xcode will copy
+ # modified resource files.
+ if sys.platform == 'darwin':
+ output_dir_name = os.path.dirname(output_file_name)
+ os.utime(output_dir_name, None)
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))
diff --git a/WebKit/chromium/scripts/generate_devtools_html.py b/WebKit/chromium/scripts/generate_devtools_html.py
new file mode 100644
index 0000000..b9b5fff
--- /dev/null
+++ b/WebKit/chromium/scripts/generate_devtools_html.py
@@ -0,0 +1,86 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2010 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+import os.path
+import sys
+
+
+def GenerateIncludeTag(resource_path):
+ (dir_name, file_name) = os.path.split(resource_path)
+ if (file_name.endswith('.js')):
+ return ' <script type="text/javascript" src="%s"></script>\n' % file_name
+ elif (file_name.endswith('.css')):
+ return ' <link rel="stylesheet" type="text/css" href="%s">\n' % file_name
+ else:
+ assert resource_path
+
+
+def main(argv):
+
+ if len(argv) < 5:
+ print('usage: %s ignored inspector_html devtools_html debug'
+ ' css_and_js_files_list' % argv[0])
+ return 1
+
+ # The first argument is ignored. We put 'webkit.gyp' in the inputs list
+ # for this script, so every time the list of script gets changed, our html
+ # file is rebuilt.
+ inspector_html_name = argv[2]
+ devtools_html_name = argv[3]
+ debug = argv[4] != '0'
+ inspector_html = open(inspector_html_name, 'r')
+ devtools_html = open(devtools_html_name, 'w')
+
+ for line in inspector_html:
+ if not debug and '<script ' in line:
+ continue
+ if not debug and '<link ' in line:
+ continue
+ if '</head>' in line:
+ if debug:
+ for resource in argv[5:]:
+ devtools_html.write(GenerateIncludeTag(resource))
+ else:
+ devtools_html.write(GenerateIncludeTag("devTools.css"))
+ devtools_html.write(GenerateIncludeTag("DevTools.js"))
+ devtools_html.write(line)
+
+ devtools_html.close()
+ inspector_html.close()
+
+ # Touch output file directory to make sure that Xcode will copy
+ # modified resource files.
+ if sys.platform == 'darwin':
+ output_dir_name = os.path.dirname(devtools_html_name)
+ os.utime(output_dir_name, None)
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))
diff --git a/WebKit/chromium/src/AutoFillPopupMenuClient.cpp b/WebKit/chromium/src/AutoFillPopupMenuClient.cpp
index b14840c..32abd6f 100644
--- a/WebKit/chromium/src/AutoFillPopupMenuClient.cpp
+++ b/WebKit/chromium/src/AutoFillPopupMenuClient.cpp
@@ -115,10 +115,10 @@ void AutoFillPopupMenuClient::removeSuggestionAtIndex(unsigned listIndex)
bool AutoFillPopupMenuClient::canRemoveSuggestionAtIndex(unsigned listIndex)
{
- // Only allow deletion of items before the separator and those that don't
- // have a label (autocomplete).
+ // Only allow deletion of items before the separator that have unique id 0
+ // (i.e. are autocomplete rather than autofill items).
int index = convertListIndexToInternalIndex(listIndex);
- return m_labels[index].isEmpty() && (m_separatorIndex == -1 || listIndex < static_cast<unsigned>(m_separatorIndex));
+ return !m_uniqueIDs[index] && (m_separatorIndex == -1 || listIndex < static_cast<unsigned>(m_separatorIndex));
}
void AutoFillPopupMenuClient::valueChanged(unsigned listIndex, bool fireEvents)
@@ -194,14 +194,19 @@ String AutoFillPopupMenuClient::itemIcon(unsigned listIndex) const
return getIcon(listIndex);
}
+bool AutoFillPopupMenuClient::itemIsEnabled(unsigned listIndex) const
+{
+ return !itemIsWarning(listIndex);
+}
+
PopupMenuStyle AutoFillPopupMenuClient::itemStyle(unsigned listIndex) const
{
- return *m_style;
+ return itemIsWarning(listIndex) ? *m_warningStyle : *m_regularStyle;
}
PopupMenuStyle AutoFillPopupMenuClient::menuStyle() const
{
- return *m_style;
+ return *m_regularStyle;
}
int AutoFillPopupMenuClient::clientPaddingLeft() const
@@ -239,6 +244,16 @@ bool AutoFillPopupMenuClient::itemIsSeparator(unsigned listIndex) const
return (m_separatorIndex != -1 && static_cast<unsigned>(m_separatorIndex) == listIndex);
}
+bool AutoFillPopupMenuClient::itemIsWarning(unsigned listIndex) const
+{
+ int index = convertListIndexToInternalIndex(listIndex);
+ if (index == -1)
+ return false;
+
+ ASSERT(index >= 0 && static_cast<size_t>(index) < m_uniqueIDs.size());
+ return m_uniqueIDs[index] < 0;
+}
+
void AutoFillPopupMenuClient::setTextFromItem(unsigned listIndex)
{
m_textField->setValue(getSuggestion(listIndex));
@@ -282,19 +297,31 @@ void AutoFillPopupMenuClient::initialize(
// AutoFillPopupMenuClient.
setSuggestions(names, labels, icons, uniqueIDs, separatorIndex);
- FontDescription fontDescription;
+ FontDescription regularFontDescription;
RenderTheme::defaultTheme()->systemFont(CSSValueWebkitControl,
- fontDescription);
+ regularFontDescription);
RenderStyle* style = m_textField->computedStyle();
- fontDescription.setComputedSize(style->fontDescription().computedSize());
+ regularFontDescription.setComputedSize(style->fontDescription().computedSize());
- Font font(fontDescription, 0, 0);
- font.update(textField->document()->styleSelector()->fontSelector());
+ Font regularFont(regularFontDescription, 0, 0);
+ regularFont.update(textField->document()->styleSelector()->fontSelector());
// The direction of text in popup menu is set the same as the direction of
// the input element: textField.
- m_style.set(new PopupMenuStyle(Color::black, Color::white, font, true,
- Length(WebCore::Fixed),
- textField->renderer()->style()->direction()));
+ m_regularStyle.set(new PopupMenuStyle(Color::black, Color::white, regularFont,
+ true, false, Length(WebCore::Fixed),
+ textField->renderer()->style()->direction()));
+
+ FontDescription warningFontDescription = regularFont.fontDescription();
+ warningFontDescription.setItalic(true);
+ Font warningFont(warningFontDescription, regularFont.letterSpacing(), regularFont.wordSpacing());
+ warningFont.update(regularFont.fontSelector());
+ m_warningStyle.set(new PopupMenuStyle(Color::darkGray,
+ m_regularStyle->backgroundColor(),
+ warningFont,
+ m_regularStyle->isVisible(),
+ m_regularStyle->isDisplayNone(),
+ m_regularStyle->textIndent(),
+ m_regularStyle->textDirection()));
}
void AutoFillPopupMenuClient::setSuggestions(const WebVector<WebString>& names,
diff --git a/WebKit/chromium/src/AutoFillPopupMenuClient.h b/WebKit/chromium/src/AutoFillPopupMenuClient.h
index a946e34..e3edfd3 100644
--- a/WebKit/chromium/src/AutoFillPopupMenuClient.h
+++ b/WebKit/chromium/src/AutoFillPopupMenuClient.h
@@ -78,7 +78,7 @@ public:
virtual WTF::String itemIcon(unsigned listIndex) const;
virtual WTF::String itemToolTip(unsigned lastIndex) const { return WTF::String(); }
virtual WTF::String itemAccessibilityText(unsigned lastIndex) const { return WTF::String(); }
- virtual bool itemIsEnabled(unsigned listIndex) const { return true; }
+ virtual bool itemIsEnabled(unsigned listIndex) const;
virtual WebCore::PopupMenuStyle itemStyle(unsigned listIndex) const;
virtual WebCore::PopupMenuStyle menuStyle() const;
virtual int clientInsetLeft() const { return 0; }
@@ -130,6 +130,8 @@ private:
int getSelectedIndex() const { return m_selectedIndex; }
void setSelectedIndex(int index) { m_selectedIndex = index; }
+ bool itemIsWarning(unsigned listIndex) const;
+
// The names, labels and icons that make up the contents of the menu items.
Vector<WTF::String> m_names;
Vector<WTF::String> m_labels;
@@ -143,7 +145,8 @@ private:
int m_selectedIndex;
RefPtr<WebCore::HTMLInputElement> m_textField;
- OwnPtr<WebCore::PopupMenuStyle> m_style;
+ OwnPtr<WebCore::PopupMenuStyle> m_regularStyle;
+ OwnPtr<WebCore::PopupMenuStyle> m_warningStyle;
// DEPRECATED: Will be removed once Autocomplete and AutoFill merge is
// complete.
diff --git a/WebKit/chromium/src/ChromeClientImpl.cpp b/WebKit/chromium/src/ChromeClientImpl.cpp
index 18f7a02..c43a0b0 100644
--- a/WebKit/chromium/src/ChromeClientImpl.cpp
+++ b/WebKit/chromium/src/ChromeClientImpl.cpp
@@ -841,7 +841,7 @@ PassRefPtr<PopupMenu> ChromeClientImpl::createPopupMenu(PopupMenuClient* client)
{
if (WebViewImpl::useExternalPopupMenus())
return adoptRef(new ExternalPopupMenu(client, m_webView->client()));
-
+
return adoptRef(new PopupMenuChromium(client));
}
diff --git a/WebKit/chromium/src/ChromiumBridge.cpp b/WebKit/chromium/src/ChromiumBridge.cpp
index 39d2566..074c982 100644
--- a/WebKit/chromium/src/ChromiumBridge.cpp
+++ b/WebKit/chromium/src/ChromiumBridge.cpp
@@ -514,6 +514,12 @@ PassRefPtr<IDBFactoryBackendInterface> ChromiumBridge::idbFactory()
return IDBFactoryBackendProxy::create();
}
+void ChromiumBridge::idbShutdown()
+{
+ // In the browser process, this shuts down the utility process. In the renderer process, it does nothing.
+ webKitClient()->idbShutdown();
+}
+
void ChromiumBridge::createIDBKeysFromSerializedValuesAndKeyPath(const Vector<RefPtr<SerializedScriptValue> >& values, const String& keyPath, Vector<RefPtr<IDBKey> >& keys)
{
WebVector<WebSerializedScriptValue> webValues = values;
diff --git a/WebKit/chromium/src/FrameLoaderClientImpl.cpp b/WebKit/chromium/src/FrameLoaderClientImpl.cpp
index ef28981..9d79599 100644
--- a/WebKit/chromium/src/FrameLoaderClientImpl.cpp
+++ b/WebKit/chromium/src/FrameLoaderClientImpl.cpp
@@ -51,6 +51,7 @@
#include "PlatformString.h"
#include "PluginData.h"
#include "PluginDataChromium.h"
+#include "ProgressTracker.h"
#include "Settings.h"
#include "StringExtras.h"
#include "WebDataSourceImpl.h"
@@ -1010,7 +1011,12 @@ void FrameLoaderClientImpl::postProgressStartedNotification()
void FrameLoaderClientImpl::postProgressEstimateChangedNotification()
{
- // FIXME
+ WebViewImpl* webview = m_webFrame->viewImpl();
+ if (webview && webview->client()) {
+ webview->client()->didChangeLoadProgress(
+ m_webFrame, m_webFrame->frame()->page()->progress()->estimatedProgress());
+ }
+
}
void FrameLoaderClientImpl::postProgressFinishedNotification()
diff --git a/WebKit/chromium/src/GraphicsContext3DChromium.cpp b/WebKit/chromium/src/GraphicsContext3DChromium.cpp
index 4d9e40b..8cfe8c0 100644
--- a/WebKit/chromium/src/GraphicsContext3DChromium.cpp
+++ b/WebKit/chromium/src/GraphicsContext3DChromium.cpp
@@ -365,16 +365,6 @@ bool GraphicsContext3DInternal::isGLES2Compliant() const
return m_impl->isGLES2Compliant();
}
-bool GraphicsContext3DInternal::isGLES2NPOTStrict() const
-{
- return m_impl->isGLES2NPOTStrict();
-}
-
-bool GraphicsContext3DInternal::isErrorGeneratedOnOutOfBoundsAccesses() const
-{
- return m_impl->isErrorGeneratedOnOutOfBoundsAccesses();
-}
-
DELEGATE_TO_IMPL_1(activeTexture, unsigned long)
DELEGATE_TO_IMPL_2(attachShader, Platform3DObject, Platform3DObject)
@@ -1051,16 +1041,6 @@ bool GraphicsContext3D::isGLES2Compliant() const
return m_internal->isGLES2Compliant();
}
-bool GraphicsContext3D::isGLES2NPOTStrict() const
-{
- return m_internal->isGLES2NPOTStrict();
-}
-
-bool GraphicsContext3D::isErrorGeneratedOnOutOfBoundsAccesses() const
-{
- return m_internal->isErrorGeneratedOnOutOfBoundsAccesses();
-}
-
} // namespace WebCore
#endif // ENABLE(3D_CANVAS)
diff --git a/WebKit/chromium/src/GraphicsContext3DInternal.h b/WebKit/chromium/src/GraphicsContext3DInternal.h
index 17163a4..4453d28 100644
--- a/WebKit/chromium/src/GraphicsContext3DInternal.h
+++ b/WebKit/chromium/src/GraphicsContext3DInternal.h
@@ -75,8 +75,6 @@ public:
WebGLLayerChromium* platformLayer() const;
#endif
bool isGLES2Compliant() const;
- bool isGLES2NPOTStrict() const;
- bool isErrorGeneratedOnOutOfBoundsAccesses() const;
//----------------------------------------------------------------------
// Entry points for WebGL.
diff --git a/WebKit/chromium/src/LocalizedStrings.cpp b/WebKit/chromium/src/LocalizedStrings.cpp
index fbc35ce..947e732 100644
--- a/WebKit/chromium/src/LocalizedStrings.cpp
+++ b/WebKit/chromium/src/LocalizedStrings.cpp
@@ -296,44 +296,56 @@ String localizedMediaTimeDescription(float /*time*/)
String validationMessageValueMissingText()
{
- notImplemented();
- return String();
+ return query(WebLocalizedString::ValidationValueMissing);
}
String validationMessageTypeMismatchText()
{
- notImplemented();
- return String();
+ return query(WebLocalizedString::ValidationTypeMismatch);
+}
+
+String validationMessageTypeMismatchForEmailText()
+{
+ return query(WebLocalizedString::ValidationTypeMismatchForEmail);
+}
+
+String validationMessageTypeMismatchForMultipleEmailText()
+{
+ return query(WebLocalizedString::ValidationTypeMismatchForMultipleEmail);
+}
+
+String validationMessageTypeMismatchForURLText()
+{
+ return query(WebLocalizedString::ValidationTypeMismatchForURL);
}
String validationMessagePatternMismatchText()
{
- notImplemented();
- return String();
+ return query(WebLocalizedString::ValidationPatternMismatch);
}
-String validationMessageTooLongText()
+String validationMessageTooLongText(int, int)
{
- notImplemented();
- return String();
+ // FIXME: pass the arguments.
+ return query(WebLocalizedString::ValidationTooLong);
}
-String validationMessageRangeUnderflowText()
+String validationMessageRangeUnderflowText(const String&)
{
- notImplemented();
- return String();
+ // FIXME: pass the arguments.
+ return query(WebLocalizedString::ValidationRangeUnderflow);
}
-String validationMessageRangeOverflowText()
+String validationMessageRangeOverflowText(const String&)
{
- notImplemented();
- return String();
+ // FIXME: pass the arguments.
+ return query(WebLocalizedString::ValidationRangeOverflow);
}
-String validationMessageStepMismatchText()
+String validationMessageStepMismatchText(const String&, const String&)
{
- notImplemented();
- return String();
+ // FIXME: pass the arguments.
+ return query(WebLocalizedString::ValidationStepMismatch);
}
} // namespace WebCore
diff --git a/WebKit/chromium/src/WebBindings.cpp b/WebKit/chromium/src/WebBindings.cpp
index c25c31b..d0a20d3 100644
--- a/WebKit/chromium/src/WebBindings.cpp
+++ b/WebKit/chromium/src/WebBindings.cpp
@@ -323,6 +323,17 @@ static NPObject* makeIntArrayImpl(const WebVector<int>& data)
return npCreateV8ScriptObject(0, result, window);
}
+static NPObject* makeStringArrayImpl(const WebVector<WebString>& data)
+{
+ v8::HandleScope handleScope;
+ v8::Handle<v8::Array> result = v8::Array::New(data.size());
+ for (size_t i = 0; i < data.size(); ++i)
+ result->Set(i, data[i].data() ? v8::String::New(reinterpret_cast<const uint16_t*>((data[i].data()))) : v8::String::New(""));
+
+ WebCore::DOMWindow* window = WebCore::V8Proxy::retrieveWindow(WebCore::V8Proxy::currentContext());
+ return npCreateV8ScriptObject(0, result, window);
+}
+
#endif
bool WebBindings::getDragData(NPObject* event, int* eventId, WebDragData* data)
@@ -371,6 +382,16 @@ NPObject* WebBindings::makeIntArray(const WebVector<int> & data)
#endif
}
+NPObject* WebBindings::makeStringArray(const WebVector<WebString>& data)
+{
+#if USE(V8)
+ return makeStringArrayImpl(data);
+#else
+ // Not supported on other ports (JSC, etc.).
+ return 0;
+#endif
+}
+
void WebBindings::pushExceptionHandler(ExceptionHandler handler, void* data)
{
WebCore::pushExceptionHandler(handler, data);
diff --git a/WebKit/chromium/src/WebDataSourceImpl.cpp b/WebKit/chromium/src/WebDataSourceImpl.cpp
index d5b1d79..65147fa 100644
--- a/WebKit/chromium/src/WebDataSourceImpl.cpp
+++ b/WebKit/chromium/src/WebDataSourceImpl.cpp
@@ -96,7 +96,7 @@ double WebDataSourceImpl::triggeringEventTime() const
return 0.0;
// DOMTimeStamp uses units of milliseconds.
- return triggeringAction().event()->timeStamp() / 1000.0;
+ return convertDOMTimeStampToSeconds(triggeringAction().event()->timeStamp());
}
WebDataSource::ExtraData* WebDataSourceImpl::extraData() const
diff --git a/WebKit/chromium/src/WebFrameImpl.cpp b/WebKit/chromium/src/WebFrameImpl.cpp
index 41b8321..adaab61 100644
--- a/WebKit/chromium/src/WebFrameImpl.cpp
+++ b/WebKit/chromium/src/WebFrameImpl.cpp
@@ -287,11 +287,11 @@ public:
{
}
- virtual void begin(float width)
+ virtual void begin(float width, float height)
{
ASSERT(!m_printedPageWidth);
m_printedPageWidth = width;
- PrintContext::begin(m_printedPageWidth);
+ PrintContext::begin(m_printedPageWidth, height);
}
virtual void end()
@@ -753,8 +753,9 @@ void WebFrameImpl::bindToWindowObject(const WebString& name, NPObject* object)
void WebFrameImpl::executeScript(const WebScriptSource& source)
{
+ TextPosition1 position(WTF::OneBasedNumber::fromOneBasedInt(source.startLine), WTF::OneBasedNumber::base());
m_frame->script()->executeScript(
- ScriptSourceCode(source.code, source.url, source.startLine));
+ ScriptSourceCode(source.code, source.url, position));
}
void WebFrameImpl::executeScriptInIsolatedWorld(
@@ -764,8 +765,9 @@ void WebFrameImpl::executeScriptInIsolatedWorld(
Vector<ScriptSourceCode> sources;
for (unsigned i = 0; i < numSources; ++i) {
+ TextPosition1 position(WTF::OneBasedNumber::fromOneBasedInt(sourcesIn[i].startLine), WTF::OneBasedNumber::base());
sources.append(ScriptSourceCode(
- sourcesIn[i].code, sourcesIn[i].url, sourcesIn[i].startLine));
+ sourcesIn[i].code, sourcesIn[i].url, position));
}
m_frame->script()->evaluateInIsolatedWorld(worldId, sources, extensionGroup);
@@ -817,8 +819,9 @@ void WebFrameImpl::collectGarbage()
v8::Handle<v8::Value> WebFrameImpl::executeScriptAndReturnValue(
const WebScriptSource& source)
{
+ TextPosition1 position(WTF::OneBasedNumber::fromOneBasedInt(source.startLine), WTF::OneBasedNumber::base());
return m_frame->script()->executeScript(
- ScriptSourceCode(source.code, source.url, source.startLine)).v8Value();
+ ScriptSourceCode(source.code, source.url, position)).v8Value();
}
// Returns the V8 context for this frame, or an empty handle if there is none.
@@ -845,7 +848,7 @@ bool WebFrameImpl::insertStyleText(
if (!id.isEmpty()) {
Element* oldElement = document->getElementById(id);
if (oldElement) {
- Node* parent = oldElement->parent();
+ Node* parent = oldElement->parentNode();
if (!parent)
return false;
parent->removeChild(oldElement, err);
@@ -1283,7 +1286,7 @@ int WebFrameImpl::printBegin(const WebSize& pageSize, int printerDPI, bool *useB
FloatRect rect(0, 0, static_cast<float>(pageSize.width),
static_cast<float>(pageSize.height));
- m_printContext->begin(rect.width());
+ m_printContext->begin(rect.width(), rect.height());
float pageHeight;
// We ignore the overlays calculation for now since they are generated in the
// browser. pageHeight is actually an output parameter.
@@ -2003,7 +2006,7 @@ void WebFrameImpl::setFindEndstateFocusAndSelection()
// example, focus links if we have found text within the link.
Node* node = m_activeMatch->firstNode();
while (node && !node->isFocusable() && node != frame()->document())
- node = node->parent();
+ node = node->parentNode();
if (node && node != frame()->document()) {
// Found a focusable parent node. Set focus to it.
diff --git a/WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp b/WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp
index 4cb701f..bd070c6 100644
--- a/WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp
+++ b/WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp
@@ -36,6 +36,7 @@
#include "app/gfx/gl/gl_bindings.h"
#include "app/gfx/gl/gl_context.h"
+#include "app/gfx/gl/gl_implementation.h"
#include "NotImplemented.h"
#include "WebView.h"
#include <wtf/OwnArrayPtr.h>
@@ -69,6 +70,10 @@ WebGraphicsContext3DDefaultImpl::VertexAttribPointerState::VertexAttribPointerSt
WebGraphicsContext3DDefaultImpl::WebGraphicsContext3DDefaultImpl()
: m_initialized(false)
, m_renderDirectlyToWebView(false)
+ , m_isGLES2(false)
+ , m_haveEXTFramebufferObject(false)
+ , m_haveEXTFramebufferMultisample(false)
+ , m_haveANGLEFramebufferMultisample(false)
, m_texture(0)
, m_fbo(0)
, m_depthStencilBuffer(0)
@@ -166,10 +171,18 @@ bool WebGraphicsContext3DDefaultImpl::initialize(WebGraphicsContext3D::Attribute
if (renderDirectlyToWebView)
m_attributes.antialias = false;
+ m_isGLES2 = gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2;
+ const char* extensions = reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS));
+ m_haveEXTFramebufferObject = strstr(extensions, "GL_EXT_framebuffer_object");
+ m_haveEXTFramebufferMultisample = strstr(extensions, "GL_EXT_framebuffer_multisample");
+ m_haveANGLEFramebufferMultisample = strstr(extensions, "GL_ANGLE_framebuffer_multisample");
+
validateAttributes();
- glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
- glEnable(GL_POINT_SPRITE);
+ if (!m_isGLES2) {
+ glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
+ glEnable(GL_POINT_SPRITE);
+ }
if (!angleCreateCompilers()) {
angleDestroyCompilers();
@@ -187,7 +200,8 @@ void WebGraphicsContext3DDefaultImpl::validateAttributes()
const char* extensions = reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS));
if (m_attributes.stencil) {
- if (strstr(extensions, "GL_EXT_packed_depth_stencil")) {
+ if (strstr(extensions, "GL_OES_packed_depth_stencil")
+ || strstr(extensions, "GL_EXT_packed_depth_stencil")) {
if (!m_attributes.depth)
m_attributes.depth = true;
} else
@@ -201,7 +215,9 @@ void WebGraphicsContext3DDefaultImpl::validateAttributes()
if (!strstr(vendor, "NVIDIA"))
isValidVendor = false;
#endif
- if (!isValidVendor || !strstr(extensions, "GL_EXT_framebuffer_multisample"))
+ if (!(isValidVendor
+ && (m_haveEXTFramebufferMultisample
+ || (m_haveANGLEFramebufferMultisample && strstr(extensions, "GL_OES_rgb8_rgba8")))))
m_attributes.antialias = false;
// Don't antialias when using Mesa to ensure more reliable testing and
@@ -220,7 +236,12 @@ void WebGraphicsContext3DDefaultImpl::resolveMultisampledFramebuffer(unsigned x,
if (m_attributes.antialias) {
glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, m_multisampleFBO);
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, m_fbo);
- glBlitFramebufferEXT(x, y, x + width, y + height, x, y, x + width, y + height, GL_COLOR_BUFFER_BIT, GL_LINEAR);
+ if (m_haveEXTFramebufferMultisample)
+ glBlitFramebufferEXT(x, y, x + width, y + height, x, y, x + width, y + height, GL_COLOR_BUFFER_BIT, GL_NEAREST);
+ else {
+ ASSERT(m_haveANGLEFramebufferMultisample);
+ glBlitFramebufferANGLE(x, y, x + width, y + height, x, y, x + width, y + height, GL_COLOR_BUFFER_BIT, GL_NEAREST);
+ }
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_boundFBO);
}
}
@@ -263,17 +284,7 @@ int WebGraphicsContext3DDefaultImpl::sizeInBytes(int type)
bool WebGraphicsContext3DDefaultImpl::isGLES2Compliant()
{
- return false;
-}
-
-bool WebGraphicsContext3DDefaultImpl::isGLES2NPOTStrict()
-{
- return false;
-}
-
-bool WebGraphicsContext3DDefaultImpl::isErrorGeneratedOnOutOfBoundsAccesses()
-{
- return false;
+ return m_isGLES2;
}
unsigned int WebGraphicsContext3DDefaultImpl::getPlatformTextureId()
@@ -328,12 +339,16 @@ void WebGraphicsContext3DDefaultImpl::reshape(int width, int height)
}
}
- GLint internalColorFormat, colorFormat, internalDepthStencilFormat = 0;
+ GLint internalMultisampledColorFormat, internalColorFormat, colorFormat, internalDepthStencilFormat = 0;
if (m_attributes.alpha) {
- internalColorFormat = GL_RGBA8;
+ // GL_RGBA8_OES == GL_RGBA8
+ internalMultisampledColorFormat = GL_RGBA8;
+ internalColorFormat = m_isGLES2 ? GL_RGBA : GL_RGBA8;
colorFormat = GL_RGBA;
} else {
- internalColorFormat = GL_RGB8;
+ // GL_RGB8_OES == GL_RGB8
+ internalMultisampledColorFormat = GL_RGB8;
+ internalColorFormat = m_isGLES2 ? GL_RGB : GL_RGB8;
colorFormat = GL_RGB;
}
if (m_attributes.stencil || m_attributes.depth) {
@@ -341,8 +356,12 @@ void WebGraphicsContext3DDefaultImpl::reshape(int width, int height)
// See GraphicsContext3DInternal constructor.
if (m_attributes.stencil && m_attributes.depth)
internalDepthStencilFormat = GL_DEPTH24_STENCIL8_EXT;
- else
- internalDepthStencilFormat = GL_DEPTH_COMPONENT;
+ else {
+ if (m_isGLES2)
+ internalDepthStencilFormat = GL_DEPTH_COMPONENT16;
+ else
+ internalDepthStencilFormat = GL_DEPTH_COMPONENT;
+ }
}
bool mustRestoreFBO = false;
@@ -357,11 +376,21 @@ void WebGraphicsContext3DDefaultImpl::reshape(int width, int height)
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_multisampleFBO);
}
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, m_multisampleColorBuffer);
- glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, sampleCount, internalColorFormat, width, height);
+ if (m_haveEXTFramebufferMultisample)
+ glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, sampleCount, internalMultisampledColorFormat, width, height);
+ else {
+ ASSERT(m_haveANGLEFramebufferMultisample);
+ glRenderbufferStorageMultisampleANGLE(GL_RENDERBUFFER_EXT, sampleCount, internalMultisampledColorFormat, width, height);
+ }
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, m_multisampleColorBuffer);
if (m_attributes.stencil || m_attributes.depth) {
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, m_multisampleDepthStencilBuffer);
- glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, sampleCount, internalDepthStencilFormat, width, height);
+ if (m_haveEXTFramebufferMultisample)
+ glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, sampleCount, internalDepthStencilFormat, width, height);
+ else {
+ ASSERT(m_haveANGLEFramebufferMultisample);
+ glRenderbufferStorageMultisampleANGLE(GL_RENDERBUFFER_EXT, sampleCount, internalDepthStencilFormat, width, height);
+ }
if (m_attributes.stencil)
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, m_multisampleDepthStencilBuffer);
if (m_attributes.depth)
@@ -508,9 +537,15 @@ bool WebGraphicsContext3DDefaultImpl::readBackFramebuffer(unsigned char* pixels,
mustRestorePackAlignment = true;
}
- // FIXME: OpenGL ES 2 does not support GL_BGRA so this fails when
- // using that backend.
- glReadPixels(0, 0, m_cachedWidth, m_cachedHeight, GL_BGRA, GL_UNSIGNED_BYTE, pixels);
+ if (m_isGLES2) {
+ // FIXME: consider testing for presence of GL_OES_read_format
+ // and GL_EXT_read_format_bgra, and using GL_BGRA_EXT here
+ // directly.
+ glReadPixels(0, 0, m_cachedWidth, m_cachedHeight, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
+ for (size_t i = 0; i < bufferSize; i += 4)
+ std::swap(pixels[i], pixels[i + 2]);
+ } else
+ glReadPixels(0, 0, m_cachedWidth, m_cachedHeight, GL_BGRA, GL_UNSIGNED_BYTE, pixels);
if (mustRestorePackAlignment)
glPixelStorei(GL_PACK_ALIGNMENT, packAlignment);
@@ -845,7 +880,7 @@ DELEGATE_TO_GL_1(frontFace, FrontFace, unsigned long)
void WebGraphicsContext3DDefaultImpl::generateMipmap(unsigned long target)
{
makeContextCurrent();
- if (glGenerateMipmapEXT)
+ if (m_isGLES2 || m_haveEXTFramebufferObject)
glGenerateMipmapEXT(target);
// FIXME: provide alternative code path? This will be unpleasant
// to implement if glGenerateMipmapEXT is not available -- it will
@@ -951,11 +986,15 @@ void WebGraphicsContext3DDefaultImpl::getFramebufferAttachmentParameteriv(unsign
void WebGraphicsContext3DDefaultImpl::getIntegerv(unsigned long pname, int* value)
{
+ makeContextCurrent();
+ if (m_isGLES2) {
+ glGetIntegerv(pname, value);
+ return;
+ }
// Need to emulate MAX_FRAGMENT/VERTEX_UNIFORM_VECTORS and MAX_VARYING_VECTORS
// because desktop GL's corresponding queries return the number of components
// whereas GLES2 return the number of vectors (each vector has 4 components).
// Therefore, the value returned by desktop GL needs to be divided by 4.
- makeContextCurrent();
switch (pname) {
case MAX_FRAGMENT_UNIFORM_VECTORS:
glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, value);
@@ -1096,10 +1135,10 @@ WebString WebGraphicsContext3DDefaultImpl::getString(unsigned long name)
StringBuilder result;
result.append(reinterpret_cast<const char*>(glGetString(name)));
if (name == GL_EXTENSIONS) {
- // GL_CHROMIUM_copy_texture_to_parent_texture requires this
- // desktopGL-only function (GLES2 doesn't support it), so
- // check for its existence here.
- if (glGetTexLevelParameteriv)
+ // GL_CHROMIUM_copy_texture_to_parent_texture requires the
+ // desktopGL-only function glGetTexLevelParameteriv (GLES2
+ // doesn't support it).
+ if (!m_isGLES2)
result.append(" GL_CHROMIUM_copy_texture_to_parent_texture");
}
return WebString(result.toString());
@@ -1551,11 +1590,21 @@ bool WebGraphicsContext3DDefaultImpl::angleValidateShaderSource(ShaderSourceEntr
}
int length = 0;
- ShGetInfo(compiler, SH_OBJECT_CODE_LENGTH, &length);
+ if (m_isGLES2) {
+ // ANGLE does not yet have a GLSL ES backend. Therefore if the
+ // compile succeeds we send the original source down.
+ length = strlen(entry.source);
+ if (length > 0)
+ ++length; // Add null terminator
+ } else
+ ShGetInfo(compiler, SH_OBJECT_CODE_LENGTH, &length);
if (length > 1) {
if (!tryFastMalloc(length * sizeof(char)).getValue(entry.translatedSource))
return false;
- ShGetObjectCode(compiler, entry.translatedSource);
+ if (m_isGLES2)
+ strncpy(entry.translatedSource, entry.source, length);
+ else
+ ShGetObjectCode(compiler, entry.translatedSource);
}
entry.isValid = true;
return true;
diff --git a/WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.h b/WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.h
index c1de77c..e865710 100644
--- a/WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.h
+++ b/WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.h
@@ -70,8 +70,6 @@ public:
virtual int sizeInBytes(int type);
virtual bool isGLES2Compliant();
- virtual bool isGLES2NPOTStrict();
- virtual bool isErrorGeneratedOnOutOfBoundsAccesses();
virtual void reshape(int width, int height);
@@ -271,6 +269,10 @@ private:
WebGraphicsContext3D::Attributes m_attributes;
bool m_initialized;
bool m_renderDirectlyToWebView;
+ bool m_isGLES2;
+ bool m_haveEXTFramebufferObject;
+ bool m_haveEXTFramebufferMultisample;
+ bool m_haveANGLEFramebufferMultisample;
unsigned int m_texture;
unsigned int m_fbo;
diff --git a/WebKit/chromium/src/WebImageDecoder.cpp b/WebKit/chromium/src/WebImageDecoder.cpp
index 160deee..0cfd458 100644
--- a/WebKit/chromium/src/WebImageDecoder.cpp
+++ b/WebKit/chromium/src/WebImageDecoder.cpp
@@ -56,10 +56,10 @@ void WebImageDecoder::init(Type type)
{
switch (type) {
case TypeBMP:
- m_private = new BMPImageDecoder(true);
+ m_private = new BMPImageDecoder(true, false);
break;
case TypeICO:
- m_private = new ICOImageDecoder(true);
+ m_private = new ICOImageDecoder(true, false);
break;
}
}
diff --git a/WebKit/chromium/src/WebPerformance.cpp b/WebKit/chromium/src/WebPerformance.cpp
index f019793..de9c1f6 100644
--- a/WebKit/chromium/src/WebPerformance.cpp
+++ b/WebKit/chromium/src/WebPerformance.cpp
@@ -37,6 +37,11 @@ using namespace WebCore;
namespace WebKit {
+static double millisecondsToSeconds(unsigned long long milliseconds)
+{
+ return static_cast<double>(milliseconds / 1000.0);
+}
+
void WebPerformance::reset()
{
m_private.reset();
@@ -50,11 +55,11 @@ void WebPerformance::assign(const WebPerformance& other)
WebNavigationType WebPerformance::navigationType() const
{
switch (m_private->navigation()->type()) {
- case Navigation::NAVIGATE:
+ case PerformanceNavigation::NAVIGATE:
return WebNavigationTypeOther;
- case Navigation::RELOAD:
+ case PerformanceNavigation::RELOAD:
return WebNavigationTypeReload;
- case Navigation::BACK_FORWARD:
+ case PerformanceNavigation::BACK_FORWARD:
return WebNavigationTypeBackForward;
}
ASSERT_NOT_REACHED();
@@ -63,22 +68,22 @@ WebNavigationType WebPerformance::navigationType() const
double WebPerformance::navigationStart() const
{
- return static_cast<double>(m_private->timing()->navigationStart());
+ return millisecondsToSeconds(m_private->timing()->navigationStart());
}
double WebPerformance::unloadEventEnd() const
{
- return static_cast<double>(m_private->timing()->unloadEventEnd());
+ return millisecondsToSeconds(m_private->timing()->unloadEventEnd());
}
double WebPerformance::redirectStart() const
{
- return static_cast<double>(m_private->timing()->redirectStart());
+ return millisecondsToSeconds(m_private->timing()->redirectStart());
}
double WebPerformance::redirectEnd() const
{
- return static_cast<double>(m_private->timing()->redirectEnd());
+ return millisecondsToSeconds(m_private->timing()->redirectEnd());
}
unsigned short WebPerformance::redirectCount() const
@@ -88,57 +93,52 @@ unsigned short WebPerformance::redirectCount() const
double WebPerformance::fetchStart() const
{
- return static_cast<double>(m_private->timing()->fetchStart());
+ return millisecondsToSeconds(m_private->timing()->fetchStart());
}
double WebPerformance::domainLookupStart() const
{
- return static_cast<double>(m_private->timing()->domainLookupStart());
+ return millisecondsToSeconds(m_private->timing()->domainLookupStart());
}
double WebPerformance::domainLookupEnd() const
{
- return static_cast<double>(m_private->timing()->domainLookupEnd());
+ return millisecondsToSeconds(m_private->timing()->domainLookupEnd());
}
double WebPerformance::connectStart() const
{
- return static_cast<double>(m_private->timing()->connectStart());
+ return millisecondsToSeconds(m_private->timing()->connectStart());
}
double WebPerformance::connectEnd() const
{
- return static_cast<double>(m_private->timing()->connectEnd());
+ return millisecondsToSeconds(m_private->timing()->connectEnd());
}
double WebPerformance::requestStart() const
{
- return static_cast<double>(m_private->timing()->requestStart());
-}
-
-double WebPerformance::requestEnd() const
-{
- return static_cast<double>(m_private->timing()->requestEnd());
+ return millisecondsToSeconds(m_private->timing()->requestStart());
}
double WebPerformance::responseStart() const
{
- return static_cast<double>(m_private->timing()->responseStart());
+ return millisecondsToSeconds(m_private->timing()->responseStart());
}
double WebPerformance::responseEnd() const
{
- return static_cast<double>(m_private->timing()->responseEnd());
+ return millisecondsToSeconds(m_private->timing()->responseEnd());
}
double WebPerformance::loadEventStart() const
{
- return static_cast<double>(m_private->timing()->loadEventStart());
+ return millisecondsToSeconds(m_private->timing()->loadEventStart());
}
double WebPerformance::loadEventEnd() const
{
- return static_cast<double>(m_private->timing()->loadEventEnd());
+ return millisecondsToSeconds(m_private->timing()->loadEventEnd());
}
WebPerformance::WebPerformance(const PassRefPtr<Performance>& performance)
diff --git a/WebKit/chromium/src/WebSettingsImpl.cpp b/WebKit/chromium/src/WebSettingsImpl.cpp
index 9953b5c..1bea259 100644
--- a/WebKit/chromium/src/WebSettingsImpl.cpp
+++ b/WebKit/chromium/src/WebSettingsImpl.cpp
@@ -223,6 +223,11 @@ void WebSettingsImpl::setEditableLinkBehaviorNeverLive()
m_settings->setEditableLinkBehavior(WebCore::EditableLinkNeverLive);
}
+void WebSettingsImpl::setFrameFlatteningEnabled(bool enabled)
+{
+ m_settings->setFrameFlatteningEnabled(enabled);
+}
+
void WebSettingsImpl::setFontRenderingModeNormal()
{
// FIXME: If you ever need more behaviors than this, then we should probably
diff --git a/WebKit/chromium/src/WebSettingsImpl.h b/WebKit/chromium/src/WebSettingsImpl.h
index 6d40b4f..081188f 100644
--- a/WebKit/chromium/src/WebSettingsImpl.h
+++ b/WebKit/chromium/src/WebSettingsImpl.h
@@ -77,6 +77,7 @@ public:
virtual void setXSSAuditorEnabled(bool);
virtual void setLocalStorageEnabled(bool);
virtual void setEditableLinkBehaviorNeverLive();
+ virtual void setFrameFlatteningEnabled(bool);
virtual void setFontRenderingModeNormal();
virtual void setShouldPaintCustomScrollbars(bool);
virtual void setAllowUniversalAccessFromFileURLs(bool);
diff --git a/WebKit/chromium/src/WebSpeechInputControllerMockImpl.cpp b/WebKit/chromium/src/WebSpeechInputControllerMockImpl.cpp
index ce8eba6..8cf7848 100644
--- a/WebKit/chromium/src/WebSpeechInputControllerMockImpl.cpp
+++ b/WebKit/chromium/src/WebSpeechInputControllerMockImpl.cpp
@@ -60,6 +60,11 @@ void WebSpeechInputControllerMockImpl::setMockRecognitionResult(const WebString&
m_webcoreMock->setRecognitionResult(result, language);
}
+void WebSpeechInputControllerMockImpl::clearResults()
+{
+ m_webcoreMock->clearResults();
+}
+
void WebSpeechInputControllerMockImpl::didCompleteRecording(int requestId)
{
m_listener->didCompleteRecording(requestId);
diff --git a/WebKit/chromium/src/WebSpeechInputControllerMockImpl.h b/WebKit/chromium/src/WebSpeechInputControllerMockImpl.h
index 7b50a8b..7680873 100644
--- a/WebKit/chromium/src/WebSpeechInputControllerMockImpl.h
+++ b/WebKit/chromium/src/WebSpeechInputControllerMockImpl.h
@@ -63,6 +63,7 @@ public:
// WebSpeechInputControllerMock methods.
void setMockRecognitionResult(const WebString& result, const WebString& language);
+ void clearResults();
private:
OwnPtr<WebCore::SpeechInputClientMock> m_webcoreMock;
diff --git a/WebKit/chromium/src/WebURLRequest.cpp b/WebKit/chromium/src/WebURLRequest.cpp
index b243420..7a77ca3 100644
--- a/WebKit/chromium/src/WebURLRequest.cpp
+++ b/WebKit/chromium/src/WebURLRequest.cpp
@@ -221,6 +221,16 @@ WebURLRequest::TargetType WebURLRequest::targetType() const
return static_cast<TargetType>(m_private->m_resourceRequest->targetType());
}
+bool WebURLRequest::hasUserGesture() const
+{
+ return m_private->m_resourceRequest->hasUserGesture();
+}
+
+void WebURLRequest::setHasUserGesture(bool hasUserGesture)
+{
+ m_private->m_resourceRequest->setHasUserGesture(hasUserGesture);
+}
+
void WebURLRequest::setTargetType(TargetType targetType)
{
m_private->m_resourceRequest->setTargetType(
diff --git a/WebKit/chromium/src/WebViewImpl.cpp b/WebKit/chromium/src/WebViewImpl.cpp
index 490c620..6625949 100644
--- a/WebKit/chromium/src/WebViewImpl.cpp
+++ b/WebKit/chromium/src/WebViewImpl.cpp
@@ -178,7 +178,7 @@ static const PopupContainerSettings autoFillPopupSettings = {
false, // acceptOnAbandon
true, // loopSelectionNavigation
false, // restrictWidthOfListBox (For security reasons show the entire entry
- // so the user doesn't enter information it did not intend to.)
+ // so the user doesn't enter information he did not intend to.)
// For suggestions, we use the direction of the input field as the direction
// of the popup items. The main reason is to keep the display of items in
// drop-down the same as the items in the input field.
@@ -571,13 +571,13 @@ bool WebViewImpl::keyEvent(const WebKeyboardEvent& event)
WebInputEvent::RawKeyDown;
#endif
- if (((!event.modifiers && (event.windowsKeyCode == VKEY_APPS))
- || ((event.modifiers == WebInputEvent::ShiftKey) && (event.windowsKeyCode == VKEY_F10)))
- && event.type == contextMenuTriggeringEventType) {
+ bool isUnmodifiedMenuKey = !(event.modifiers & WebInputEvent::InputModifiers) && event.windowsKeyCode == VKEY_APPS;
+ bool isShiftF10 = event.modifiers == WebInputEvent::ShiftKey && event.windowsKeyCode == VKEY_F10;
+ if ((isUnmodifiedMenuKey || isShiftF10) && event.type == contextMenuTriggeringEventType) {
sendContextMenuEvent(event);
return true;
}
-#endif
+#endif // OS(WINDOWS) || OS(LINUX) || OS(FREEBSD)
// It's not clear if we should continue after detecting a capslock keypress.
// I'll err on the side of continuing, which is the pre-existing behaviour.
@@ -936,10 +936,10 @@ void WebViewImpl::resize(const WebSize& newSize)
m_client->didInvalidateRect(damagedRect);
}
-#if USE(ACCELERATED_COMPOSITING) && OS(DARWIN)
+#if USE(ACCELERATED_COMPOSITING)
if (m_layerRenderer) {
- m_layerRenderer->resizeOnscreenContent(WebCore::IntSize(std::max(1, m_size.width),
- std::max(1, m_size.height)));
+ m_layerRenderer->resizeOnscreenContent(IntSize(std::max(1, m_size.width),
+ std::max(1, m_size.height)));
}
#endif
}
@@ -1016,10 +1016,6 @@ void WebViewImpl::paint(WebCanvas* canvas, const WebRect& rect)
resizeRect.intersect(IntRect(IntPoint(), m_layerRenderer->rootLayerTextureSize()));
doPixelReadbackToCanvas(canvas, resizeRect);
}
-
- // Temporarily present so the downstream Chromium renderwidget still renders.
- // FIXME: remove this call once the changes to Chromium's renderwidget have landed.
- m_layerRenderer->present();
#endif
} else {
WebFrameImpl* webframe = mainFrameImpl();
@@ -1100,7 +1096,7 @@ bool WebViewImpl::handleInputEvent(const WebInputEvent& inputEvent)
node->dispatchMouseEvent(
PlatformMouseEventBuilder(mainFrameImpl()->frameView(), *static_cast<const WebMouseEvent*>(&inputEvent)),
- eventType);
+ eventType, static_cast<const WebMouseEvent*>(&inputEvent)->clickCount);
m_currentInputEvent = 0;
return true;
}
@@ -1943,12 +1939,9 @@ void WebViewImpl::applyAutoFillSuggestions(
}
if (m_autoFillPopupShowing) {
- m_autoFillPopupClient->setSuggestions(
- names, labels, icons, uniqueIDs, separatorIndex);
refreshAutoFillPopup();
} else {
- m_autoFillPopup->show(focusedNode->getRect(),
- focusedNode->ownerDocument()->view(), 0);
+ m_autoFillPopup->show(focusedNode->getRect(), focusedNode->ownerDocument()->view(), 0);
m_autoFillPopupShowing = true;
}
@@ -2274,22 +2267,11 @@ void WebViewImpl::setRootGraphicsLayer(WebCore::PlatformLayer* layer)
void WebViewImpl::setRootLayerNeedsDisplay()
{
m_client->scheduleComposite();
- // FIXME: To avoid breaking the downstream Chrome render_widget while downstream
- // changes land, we also have to pass a 1x1 invalidate up to the client
- {
- WebRect damageRect(0, 0, 1, 1);
- m_client->didInvalidateRect(damageRect);
- }
}
void WebViewImpl::scrollRootLayerRect(const IntSize& scrollDelta, const IntRect& clipRect)
{
- // FIXME: To avoid breaking the Chrome render_widget when the new compositor render
- // path is not checked in, we must still pass scroll damage up to the client. This
- // code will be backed out in a followup CL once the Chromium changes have landed.
- m_client->didScrollRect(scrollDelta.width(), scrollDelta.height(), clipRect);
-
ASSERT(m_layerRenderer);
// Compute the damage rect in viewport space.
WebFrameImpl* webframe = mainFrameImpl();
@@ -2346,7 +2328,7 @@ void WebViewImpl::scrollRootLayerRect(const IntSize& scrollDelta, const IntRect&
// Move the damage
innerDamage.move(scrollDelta.width(), scrollDelta.height());
-
+
// Merge it back into the damaged rect
m_rootLayerDirtyRect.unite(innerDamage);
}
@@ -2356,17 +2338,12 @@ void WebViewImpl::scrollRootLayerRect(const IntSize& scrollDelta, const IntRect&
void WebViewImpl::invalidateRootLayerRect(const IntRect& rect)
{
- // FIXME: To avoid breaking the Chrome render_widget when the new compositor render
- // path is not checked in, we must still pass damage up to the client. This
- // code will be backed out in a followup CL once the Chromium changes have landed.
- m_client->didInvalidateRect(rect);
-
ASSERT(m_layerRenderer);
if (!page())
return;
- // FIXME: add a smarter damage aggregation logic and/or unify with
+ // FIXME: add a smarter damage aggregation logic and/or unify with
// LayerChromium's damage logic
m_rootLayerDirtyRect.unite(rect);
setRootLayerNeedsDisplay();
@@ -2380,16 +2357,23 @@ void WebViewImpl::setIsAcceleratedCompositingActive(bool active)
if (!active) {
m_isAcceleratedCompositingActive = false;
+ m_layerRenderer->finish(); // finish all GL rendering before we hide the window?
+ m_client->didActivateAcceleratedCompositing(false);
return;
}
if (m_layerRenderer) {
m_isAcceleratedCompositingActive = true;
+ m_layerRenderer->resizeOnscreenContent(WebCore::IntSize(std::max(1, m_size.width),
+ std::max(1, m_size.height)));
+
+ m_client->didActivateAcceleratedCompositing(true);
return;
}
RefPtr<GraphicsContext3D> context = m_temporaryOnscreenGraphicsContext3D.release();
if (!context) {
+ m_client->didActivateAcceleratedCompositing(true);
context = GraphicsContext3D::create(GraphicsContext3D::Attributes(), m_page->chrome(), GraphicsContext3D::RenderDirectlyToHostWindow);
if (context)
context->reshape(std::max(1, m_size.width), std::max(1, m_size.height));
@@ -2400,6 +2384,7 @@ void WebViewImpl::setIsAcceleratedCompositingActive(bool active)
m_compositorCreationFailed = false;
} else {
m_isAcceleratedCompositingActive = false;
+ m_client->didActivateAcceleratedCompositing(false);
m_compositorCreationFailed = true;
}
}
diff --git a/WebKit/chromium/src/WorkerAsyncFileSystemChromium.cpp b/WebKit/chromium/src/WorkerAsyncFileSystemChromium.cpp
index 1e70619..058e947 100644
--- a/WebKit/chromium/src/WorkerAsyncFileSystemChromium.cpp
+++ b/WebKit/chromium/src/WorkerAsyncFileSystemChromium.cpp
@@ -34,13 +34,16 @@
#if ENABLE(FILE_SYSTEM)
#include "AsyncFileSystemCallbacks.h"
+#include "FileMetadata.h"
#include "FileSystem.h"
#include "NotImplemented.h"
#include "WebFileSystem.h"
#include "WebFileSystemCallbacksImpl.h"
+#include "WebFileWriter.h"
#include "WebKit.h"
#include "WebKitClient.h"
#include "WebWorkerBase.h"
+#include "WorkerAsyncFileWriterChromium.h"
#include "WorkerContext.h"
#include "WorkerFileSystemCallbacksBridge.h"
#include "WorkerScriptController.h"
@@ -134,9 +137,76 @@ void WorkerAsyncFileSystemChromium::readDirectory(const String& path, PassOwnPtr
createWorkerFileSystemCallbacksBridge(callbacks)->postReadDirectoryToMainThread(m_webFileSystem, path, m_modeForCurrentOperation);
}
-void WorkerAsyncFileSystemChromium::createWriter(AsyncFileWriterClient*, const String&, PassOwnPtr<AsyncFileSystemCallbacks>)
+class WorkerFileWriterHelperCallbacks : public AsyncFileSystemCallbacks {
+public:
+ static PassOwnPtr<WorkerFileWriterHelperCallbacks> create(AsyncFileWriterClient* client, const String& path, WebKit::WebFileSystem* webFileSystem, PassOwnPtr<WebCore::AsyncFileSystemCallbacks> callbacks, WorkerContext* workerContext)
+ {
+ return adoptPtr(new WorkerFileWriterHelperCallbacks(client, path, webFileSystem, callbacks, workerContext));
+ }
+
+ virtual void didSucceed()
+ {
+ ASSERT_NOT_REACHED();
+ }
+
+ virtual void didReadMetadata(const FileMetadata& metadata)
+ {
+ ASSERT(m_callbacks);
+ if (metadata.type != FileMetadata::TypeFile || metadata.length < 0)
+ m_callbacks->didFail(WebKit::WebFileErrorInvalidState);
+ else {
+ OwnPtr<WorkerAsyncFileWriterChromium> asyncFileWriterChromium = WorkerAsyncFileWriterChromium::create(m_webFileSystem, m_path, m_workerContext, m_client, WorkerAsyncFileWriterChromium::Asynchronous);
+ m_callbacks->didCreateFileWriter(asyncFileWriterChromium.release(), metadata.length);
+ }
+ }
+
+ virtual void didReadDirectoryEntry(const String& name, bool isDirectory)
+ {
+ ASSERT_NOT_REACHED();
+ }
+
+ virtual void didReadDirectoryEntries(bool hasMore)
+ {
+ ASSERT_NOT_REACHED();
+ }
+
+ virtual void didOpenFileSystem(const String&, PassOwnPtr<AsyncFileSystem>)
+ {
+ ASSERT_NOT_REACHED();
+ }
+
+ // Called when an AsyncFileWrter has been created successfully.
+ virtual void didCreateFileWriter(PassOwnPtr<AsyncFileWriter>, long long)
+ {
+ ASSERT_NOT_REACHED();
+ }
+
+ virtual void didFail(int code)
+ {
+ ASSERT(m_callbacks);
+ m_callbacks->didFail(code);
+ }
+
+private:
+ WorkerFileWriterHelperCallbacks(AsyncFileWriterClient* client, const String& path, WebKit::WebFileSystem* webFileSystem, PassOwnPtr<WebCore::AsyncFileSystemCallbacks> callbacks, WorkerContext* workerContext)
+ : m_client(client)
+ , m_path(path)
+ , m_webFileSystem(webFileSystem)
+ , m_callbacks(callbacks)
+ , m_workerContext(workerContext)
+ {
+ }
+
+ AsyncFileWriterClient* m_client;
+ String m_path;
+ WebKit::WebFileSystem* m_webFileSystem;
+ OwnPtr<WebCore::AsyncFileSystemCallbacks> m_callbacks;
+ WorkerContext* m_workerContext;
+};
+
+void WorkerAsyncFileSystemChromium::createWriter(AsyncFileWriterClient* client, const String& path, PassOwnPtr<AsyncFileSystemCallbacks> callbacks)
{
- notImplemented();
+ createWorkerFileSystemCallbacksBridge(WorkerFileWriterHelperCallbacks::create(client, path, m_webFileSystem, callbacks, m_workerContext))->postReadMetadataToMainThread(m_webFileSystem, path, m_modeForCurrentOperation);
}
PassRefPtr<WorkerFileSystemCallbacksBridge> WorkerAsyncFileSystemChromium::createWorkerFileSystemCallbacksBridge(PassOwnPtr<AsyncFileSystemCallbacks> callbacks)
diff --git a/WebKit/chromium/src/WorkerAsyncFileWriterChromium.cpp b/WebKit/chromium/src/WorkerAsyncFileWriterChromium.cpp
new file mode 100644
index 0000000..8d8e469
--- /dev/null
+++ b/WebKit/chromium/src/WorkerAsyncFileWriterChromium.cpp
@@ -0,0 +1,84 @@
+/*
+ * 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 "WorkerAsyncFileWriterChromium.h"
+
+#if ENABLE(FILE_SYSTEM)
+
+#include "AsyncFileSystem.h"
+#include "Blob.h"
+#include "ScriptExecutionContext.h"
+#include "WebFileSystem.h"
+#include "WebFileWriter.h"
+#include "WebURL.h"
+#include "WebWorkerBase.h"
+#include "WorkerContext.h"
+#include "WorkerFileWriterCallbacksBridge.h"
+#include "WorkerLoaderProxy.h"
+#include "WorkerThread.h"
+#include <wtf/Assertions.h>
+
+using namespace WebKit;
+
+namespace WebCore {
+
+WorkerAsyncFileWriterChromium::WorkerAsyncFileWriterChromium(WebFileSystem* webFileSystem, const String& path, WorkerContext* workerContext, AsyncFileWriterClient* client, WriterType type)
+ : m_type(type)
+{
+ ASSERT(m_type == Asynchronous); // Synchronous is not implemented yet.
+
+ WorkerLoaderProxy* proxy = &workerContext->thread()->workerLoaderProxy();
+ m_bridge = WorkerFileWriterCallbacksBridge::create(path, proxy, workerContext, client);
+}
+
+WorkerAsyncFileWriterChromium::~WorkerAsyncFileWriterChromium()
+{
+ m_bridge->postShutdownToMainThread(m_bridge);
+}
+
+void WorkerAsyncFileWriterChromium::write(long long position, Blob* data)
+{
+ m_bridge->postWriteToMainThread(position, data->url());
+}
+
+void WorkerAsyncFileWriterChromium::truncate(long long length)
+{
+ m_bridge->postTruncateToMainThread(length);
+}
+
+void WorkerAsyncFileWriterChromium::abort()
+{
+ m_bridge->postAbortToMainThread();
+}
+
+}
+
+#endif // ENABLE(FILE_SYSTEM)
diff --git a/WebKit/chromium/src/WorkerAsyncFileWriterChromium.h b/WebKit/chromium/src/WorkerAsyncFileWriterChromium.h
new file mode 100644
index 0000000..55d8d24
--- /dev/null
+++ b/WebKit/chromium/src/WorkerAsyncFileWriterChromium.h
@@ -0,0 +1,86 @@
+/*
+ * 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 WorkerAsyncFileWriterChromium_h
+#define WorkerAsyncFileWriterChromium_h
+
+#if ENABLE(FILE_SYSTEM)
+
+#include "AsyncFileWriter.h"
+#include <wtf/PassOwnPtr.h>
+
+namespace WebKit {
+ class WebFileSystem;
+ class WebFileWriter;
+ class WorkerFileWriterCallbacksBridge;
+}
+
+namespace WTF {
+ class String;
+}
+using WTF::String;
+
+namespace WebCore {
+
+class AsyncFileSystem;
+class AsyncFileWriterClient;
+class Blob;
+class WorkerContext;
+
+class WorkerAsyncFileWriterChromium : public AsyncFileWriter {
+public:
+ enum WriterType {
+ Asynchronous,
+ Synchronous,
+ };
+
+ static PassOwnPtr<WorkerAsyncFileWriterChromium> create(WebKit::WebFileSystem* webFileSystem, const String& path, WorkerContext* workerContext, AsyncFileWriterClient* client, WriterType type)
+ {
+ return adoptPtr(new WorkerAsyncFileWriterChromium(webFileSystem, path, workerContext, client, type));
+ }
+ ~WorkerAsyncFileWriterChromium();
+
+ // FileWriter
+ virtual void write(long long position, Blob* data);
+ virtual void truncate(long long length);
+ virtual void abort();
+
+private:
+
+ WorkerAsyncFileWriterChromium(WebKit::WebFileSystem*, const String& path, WorkerContext*, AsyncFileWriterClient*, WriterType);
+ RefPtr<WebKit::WorkerFileWriterCallbacksBridge> m_bridge;
+ WriterType m_type;
+};
+
+} // namespace
+
+#endif // ENABLE(FILE_SYSTEM)
+
+#endif // AsyncFileWriterChromium_h
diff --git a/WebKit/chromium/src/WorkerFileWriterCallbacksBridge.cpp b/WebKit/chromium/src/WorkerFileWriterCallbacksBridge.cpp
new file mode 100644
index 0000000..827c011
--- /dev/null
+++ b/WebKit/chromium/src/WorkerFileWriterCallbacksBridge.cpp
@@ -0,0 +1,193 @@
+/*
+ * 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 "WorkerFileWriterCallbacksBridge.h"
+
+#if ENABLE(FILE_SYSTEM)
+
+#include "AsyncFileWriterClient.h"
+#include "CrossThreadTask.h"
+#include "WebCString.h"
+#include "WebFileSystem.h"
+#include "WebFileWriter.h"
+#include "WebKit.h"
+#include "WebKitClient.h"
+#include "WebWorkerBase.h"
+#include "WorkerContext.h"
+#include "WorkerLoaderProxy.h"
+#include "WorkerThread.h"
+#include <wtf/MainThread.h>
+#include <wtf/Threading.h>
+
+using namespace WebCore;
+
+namespace WebKit {
+
+void WorkerFileWriterCallbacksBridge::notifyStop()
+{
+ ASSERT(m_workerContext->isContextThread());
+ m_clientOnWorkerThread = 0;
+}
+
+void WorkerFileWriterCallbacksBridge::postWriteToMainThread(long long position, const KURL& data)
+{
+ dispatchTaskToMainThread(createCallbackTask(&writeOnMainThread, this, position, data));
+}
+
+void WorkerFileWriterCallbacksBridge::postTruncateToMainThread(long long length)
+{
+ dispatchTaskToMainThread(createCallbackTask(&truncateOnMainThread, this, length));
+}
+
+void WorkerFileWriterCallbacksBridge::postAbortToMainThread()
+{
+ dispatchTaskToMainThread(createCallbackTask(&abortOnMainThread, this));
+}
+
+void WorkerFileWriterCallbacksBridge::postShutdownToMainThread(PassRefPtr<WorkerFileWriterCallbacksBridge> bridge)
+{
+ ASSERT(m_workerContext->isContextThread());
+ m_clientOnWorkerThread = 0;
+ dispatchTaskToMainThread(createCallbackTask(&shutdownOnMainThread, bridge));
+}
+
+void WorkerFileWriterCallbacksBridge::writeOnMainThread(ScriptExecutionContext*, PassRefPtr<WorkerFileWriterCallbacksBridge> bridge, long long position, const KURL& data)
+{
+ bridge->m_writer->write(position, WebURL(data));
+}
+
+void WorkerFileWriterCallbacksBridge::truncateOnMainThread(ScriptExecutionContext*, PassRefPtr<WorkerFileWriterCallbacksBridge> bridge, long long length)
+{
+ bridge->m_writer->truncate(length);
+}
+
+void WorkerFileWriterCallbacksBridge::abortOnMainThread(ScriptExecutionContext*, PassRefPtr<WorkerFileWriterCallbacksBridge> bridge)
+{
+ bridge->m_writer->cancel();
+}
+
+void WorkerFileWriterCallbacksBridge::initOnMainThread(ScriptExecutionContext*, PassRefPtr<WorkerFileWriterCallbacksBridge> bridge, const String& path)
+{
+ ASSERT(!bridge->m_writer);
+ bridge->m_writer = webKitClient()->fileSystem()->createFileWriter(path, bridge.get());
+}
+
+void WorkerFileWriterCallbacksBridge::shutdownOnMainThread(ScriptExecutionContext*, PassRefPtr<WorkerFileWriterCallbacksBridge> bridge)
+{
+ bridge->m_writerDeleted = true;
+ bridge->m_writer.clear();
+}
+
+void WorkerFileWriterCallbacksBridge::didWrite(long long bytes, bool complete)
+{
+ dispatchTaskToWorkerThread(createCallbackTask(&didWriteOnWorkerThread, this, bytes, complete));
+}
+
+void WorkerFileWriterCallbacksBridge::didFail(WebFileError error)
+{
+ dispatchTaskToWorkerThread(createCallbackTask(&didFailOnWorkerThread, this, error));
+}
+
+void WorkerFileWriterCallbacksBridge::didTruncate()
+{
+ dispatchTaskToWorkerThread(createCallbackTask(&didTruncateOnWorkerThread, this));
+}
+
+WorkerFileWriterCallbacksBridge::WorkerFileWriterCallbacksBridge(const String& path, WorkerLoaderProxy* proxy, ScriptExecutionContext* scriptExecutionContext, AsyncFileWriterClient* client)
+ : WorkerContext::Observer(static_cast<WorkerContext*>(scriptExecutionContext))
+ , m_proxy(proxy)
+ , m_workerContext(scriptExecutionContext)
+ , m_clientOnWorkerThread(client)
+ , m_writerDeleted(false)
+{
+ ASSERT(m_workerContext->isContextThread());
+ postInitToMainThread(path);
+}
+
+void WorkerFileWriterCallbacksBridge::postInitToMainThread(const String& path)
+{
+ dispatchTaskToMainThread(createCallbackTask(&initOnMainThread, this, path));
+}
+
+WorkerFileWriterCallbacksBridge::~WorkerFileWriterCallbacksBridge()
+{
+ ASSERT(!m_clientOnWorkerThread);
+ ASSERT(!m_writer);
+}
+
+// We know m_clientOnWorkerThread is still valid because it is only cleared on the context thread, and because we check in runTaskOnWorkerThread before calling any of these methods.
+void WorkerFileWriterCallbacksBridge::didWriteOnWorkerThread(ScriptExecutionContext*, PassRefPtr<WorkerFileWriterCallbacksBridge> bridge, long long length, bool complete)
+{
+ ASSERT(bridge->m_workerContext->isContextThread());
+ bridge->m_clientOnWorkerThread->didWrite(length, complete);
+}
+
+void WorkerFileWriterCallbacksBridge::didFailOnWorkerThread(ScriptExecutionContext*, PassRefPtr<WorkerFileWriterCallbacksBridge> bridge, WebFileError error)
+{
+ ASSERT(bridge->m_workerContext->isContextThread());
+ bridge->m_clientOnWorkerThread->didFail(static_cast<FileError::ErrorCode>(error));
+}
+
+void WorkerFileWriterCallbacksBridge::didTruncateOnWorkerThread(ScriptExecutionContext*, PassRefPtr<WorkerFileWriterCallbacksBridge> bridge)
+{
+ ASSERT(bridge->m_workerContext->isContextThread());
+ bridge->m_clientOnWorkerThread->didTruncate();
+}
+
+void WorkerFileWriterCallbacksBridge::runTaskOnMainThread(ScriptExecutionContext* scriptExecutionContext, PassRefPtr<WorkerFileWriterCallbacksBridge> bridge, PassOwnPtr<ScriptExecutionContext::Task> taskToRun)
+{
+ ASSERT(isMainThread());
+ if (!bridge->m_writerDeleted)
+ taskToRun->performTask(scriptExecutionContext);
+}
+
+void WorkerFileWriterCallbacksBridge::runTaskOnWorkerThread(ScriptExecutionContext* scriptExecutionContext, PassRefPtr<WorkerFileWriterCallbacksBridge> bridge, PassOwnPtr<ScriptExecutionContext::Task> taskToRun)
+{
+ ASSERT(bridge->m_workerContext->isContextThread());
+ if (bridge->m_clientOnWorkerThread)
+ taskToRun->performTask(scriptExecutionContext);
+}
+
+void WorkerFileWriterCallbacksBridge::dispatchTaskToMainThread(PassOwnPtr<ScriptExecutionContext::Task> task)
+{
+ ASSERT(m_workerContext->isContextThread());
+ WebWorkerBase::dispatchTaskToMainThread(createCallbackTask(&runTaskOnMainThread, this, task));
+}
+
+void WorkerFileWriterCallbacksBridge::dispatchTaskToWorkerThread(PassOwnPtr<ScriptExecutionContext::Task> task)
+{
+ ASSERT(isMainThread());
+ m_proxy->postTaskForModeToWorkerContext(createCallbackTask(&runTaskOnWorkerThread, this, task), WorkerRunLoop::defaultMode());
+}
+
+}
+
+#endif // ENABLE(FILE_SYSTEM)
diff --git a/WebKit/chromium/src/WorkerFileWriterCallbacksBridge.h b/WebKit/chromium/src/WorkerFileWriterCallbacksBridge.h
new file mode 100644
index 0000000..d2e416e
--- /dev/null
+++ b/WebKit/chromium/src/WorkerFileWriterCallbacksBridge.h
@@ -0,0 +1,156 @@
+/*
+ * 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 WorkerFileWriterCallbacksBridge_h
+#define WorkerFileWriterCallbacksBridge_h
+
+#if ENABLE(FILE_SYSTEM)
+
+#include "WebFileError.h"
+#include "WebFileWriterClient.h"
+#include "WorkerContext.h"
+#include <wtf/PassOwnPtr.h>
+#include <wtf/PassRefPtr.h>
+#include <wtf/ThreadSafeShared.h>
+
+namespace WebCore {
+ class AsyncFileWriterClient;
+ class KURL;
+ class WorkerLoaderProxy;
+}
+
+namespace WTF {
+ class String;
+}
+using WTF::String;
+
+namespace WebKit {
+
+class WebFileSystem;
+class WebFileWriter;
+class WebFileWriterClient;
+class WebWorkerBase;
+
+// This class is used as a mechanism to bridge calls between threads.
+// Calls to a WebFileWriter must happen on the main thread, but they come from
+// the context thread. The responses through the WebFileWriterClient interface
+// start on the main thread, but must be sent via the worker context thread.
+//
+// A typical flow for write would look like this:
+// Bridge::postWriteToMainThread() on WorkerThread
+// --> Bridge::writeOnMainThread() is called on MainThread
+// --> WebFileWriter::write()
+// This makes an IPC; the actual operation is down in the browser.
+// --> Bridge::didWrite is called on MainThread
+// --> Bridge::didWriteOnWorkerThread is called on WorkerThread
+// This calls the original client (m_clientOnWorkerThread).
+//
+// The bridge object is refcounted, so that it doesn't get deleted while there
+// are cross-thread calls in flight. Each CrossThreadTask carries a reference
+// to the bridge, which guarantees that the bridge will still be valid when the
+// task is executed. In order to shut down the bridge, the WebFileWriterClient
+// should call postShutdownToMainThread before dropping its reference to the
+// bridge. This ensures that the WebFileWriter will be cleared on the main
+// thread and that no further calls to the WebFileWriterClient will be made.
+class WorkerFileWriterCallbacksBridge : public ThreadSafeShared<WorkerFileWriterCallbacksBridge>, public WebCore::WorkerContext::Observer, public WebFileWriterClient {
+public:
+ ~WorkerFileWriterCallbacksBridge();
+
+ // WorkerContext::Observer method.
+ virtual void notifyStop();
+
+ static PassRefPtr<WorkerFileWriterCallbacksBridge> create(const String& path, WebCore::WorkerLoaderProxy* proxy, WebCore::ScriptExecutionContext* workerContext, WebCore::AsyncFileWriterClient* client)
+ {
+ return adoptRef(new WorkerFileWriterCallbacksBridge(path, proxy, workerContext, client));
+ }
+
+ // Methods that create an instance and post an initial request task to the main thread. They must be called on the worker thread.
+ void postWriteToMainThread(long long position, const WebCore::KURL& data);
+ void postTruncateToMainThread(long long length);
+ void postAbortToMainThread();
+
+ // The owning WorkerAsyncFileWriterChromium should call this method before dropping its last reference to the bridge, on the context thread.
+ // The actual deletion of the WorkerFileWriterCallbacksBridge may happen on either the main or context thread, depending on where the last reference goes away; that's safe as long as this is called first.
+ void postShutdownToMainThread(PassRefPtr<WorkerFileWriterCallbacksBridge>);
+
+ // Callback methods that are called on the main thread.
+ // These are the implementation of WebKit::WebFileWriterClient.
+ void didWrite(long long bytes, bool complete);
+ void didFail(WebFileError);
+ void didTruncate();
+
+private:
+ WorkerFileWriterCallbacksBridge(const String& path, WebCore::WorkerLoaderProxy*, WebCore::ScriptExecutionContext*, WebCore::AsyncFileWriterClient*);
+
+ void postInitToMainThread(const String& path);
+
+ // Methods that are to be called on the main thread.
+ static void writeOnMainThread(WebCore::ScriptExecutionContext*, PassRefPtr<WorkerFileWriterCallbacksBridge>, long long position, const WebCore::KURL& data);
+ static void truncateOnMainThread(WebCore::ScriptExecutionContext*, PassRefPtr<WorkerFileWriterCallbacksBridge>, long long length);
+ static void abortOnMainThread(WebCore::ScriptExecutionContext*, PassRefPtr<WorkerFileWriterCallbacksBridge>);
+ static void initOnMainThread(WebCore::ScriptExecutionContext*, PassRefPtr<WorkerFileWriterCallbacksBridge>, const String& path);
+ static void shutdownOnMainThread(WebCore::ScriptExecutionContext*, PassRefPtr<WorkerFileWriterCallbacksBridge>);
+
+ // Methods that dispatch to AsyncFileWriterClient on the worker threads.
+ static void didWriteOnWorkerThread(WebCore::ScriptExecutionContext*, PassRefPtr<WorkerFileWriterCallbacksBridge>, long long length, bool complete);
+ static void didFailOnWorkerThread(WebCore::ScriptExecutionContext*, PassRefPtr<WorkerFileWriterCallbacksBridge>, WebFileError);
+ static void didTruncateOnWorkerThread(WebCore::ScriptExecutionContext*, PassRefPtr<WorkerFileWriterCallbacksBridge>);
+
+ // Called on the main thread to run the supplied task.
+ static void runTaskOnMainThread(WebCore::ScriptExecutionContext*, PassRefPtr<WorkerFileWriterCallbacksBridge>, PassOwnPtr<WebCore::ScriptExecutionContext::Task>);
+ // Called on the worker thread to run the supplied task.
+ static void runTaskOnWorkerThread(WebCore::ScriptExecutionContext*, PassRefPtr<WorkerFileWriterCallbacksBridge>, PassOwnPtr<WebCore::ScriptExecutionContext::Task>);
+
+ // Called on the worker thread to dispatch to the main thread.
+ void dispatchTaskToMainThread(PassOwnPtr<WebCore::ScriptExecutionContext::Task>);
+ // Called on the main thread to dispatch to the worker thread.
+ void dispatchTaskToWorkerThread(PassOwnPtr<WebCore::ScriptExecutionContext::Task>);
+
+ // Used from the main thread to post tasks to the context thread.
+ WebCore::WorkerLoaderProxy* m_proxy;
+
+ // Used on the context thread, only to check that we're running on the context thread.
+ WebCore::ScriptExecutionContext* m_workerContext;
+
+ // Created and destroyed from the main thread.
+ OwnPtr<WebKit::WebFileWriter> m_writer;
+
+ // Used on the context thread to call back into the client.
+ WebCore::AsyncFileWriterClient* m_clientOnWorkerThread;
+
+ // Used to indicate that shutdown has started on the main thread, and hence the writer has been deleted.
+ bool m_writerDeleted;
+};
+
+} // namespace WebCore
+
+#endif
+
+#endif // WorkerFileWriterCallbacksBridge_h
diff --git a/WebKit/chromium/src/mac/WebInputEventFactory.mm b/WebKit/chromium/src/mac/WebInputEventFactory.mm
index 015409e..55883c9 100644
--- a/WebKit/chromium/src/mac/WebInputEventFactory.mm
+++ b/WebKit/chromium/src/mac/WebInputEventFactory.mm
@@ -1016,14 +1016,17 @@ WebMouseEvent WebInputEventFactory::mouseEvent(NSEvent* event, NSView* view)
break;
case NSLeftMouseUp:
result.type = WebInputEvent::MouseUp;
+ result.clickCount = [event clickCount];
result.button = WebMouseEvent::ButtonLeft;
break;
case NSOtherMouseUp:
result.type = WebInputEvent::MouseUp;
+ result.clickCount = [event clickCount];
result.button = WebMouseEvent::ButtonMiddle;
break;
case NSRightMouseUp:
result.type = WebInputEvent::MouseUp;
+ result.clickCount = [event clickCount];
result.button = WebMouseEvent::ButtonRight;
break;
case NSMouseMoved:
diff --git a/WebKit/chromium/tests/PopupMenuTest.cpp b/WebKit/chromium/tests/PopupMenuTest.cpp
index aef29cf..b68980f 100644
--- a/WebKit/chromium/tests/PopupMenuTest.cpp
+++ b/WebKit/chromium/tests/PopupMenuTest.cpp
@@ -76,7 +76,7 @@ public:
virtual PopupMenuStyle itemStyle(unsigned listIndex) const
{
Font font(FontPlatformData(12.0, false, false), false);
- return PopupMenuStyle(Color::black, Color::white, font, true, Length(), TextDirection());
+ return PopupMenuStyle(Color::black, Color::white, font, true, false, Length(), TextDirection());
}
virtual PopupMenuStyle menuStyle() const { return itemStyle(0); }
virtual int clientInsetLeft() const { return 0; }
diff --git a/WebKit/efl/CMakeListsEfl.txt b/WebKit/efl/CMakeListsEfl.txt
index 1964d15..7abbc17 100644
--- a/WebKit/efl/CMakeListsEfl.txt
+++ b/WebKit/efl/CMakeListsEfl.txt
@@ -11,6 +11,7 @@ LIST(APPEND WebKit_INCLUDE_DIRECTORIES
"${WEBKIT_DIR}/efl/ewk"
"${WEBKIT_DIR}/efl/WebCoreSupport"
"${WEBCORE_DIR}/platform/efl"
+ "${WEBCORE_DIR}/platform/graphics/cairo"
${Cairo_INCLUDE_DIRS}
${ECORE_X_INCLUDE_DIRS}
${EDJE_INCLUDE_DIRS}
@@ -31,6 +32,22 @@ LIST(APPEND WebKit_INCLUDE_DIRECTORIES
)
ENDIF()
+IF (WTF_USE_FREETYPE)
+ LIST(APPEND WebKit_INCLUDE_DIRECTORIES
+ "${WEBCORE_DIR}/platform/graphics/freetype"
+ )
+ENDIF ()
+
+IF (WTF_USE_PANGO)
+ LIST(APPEND WebKit_INCLUDE_DIRECTORIES
+ "${WEBCORE_DIR}/platform/graphics/pango"
+ ${Pango_INCLUDE_DIRS}
+ )
+ LIST(APPEND WebKit_LIBRARIES
+ ${Pango_LIBRARIES}
+ )
+ENDIF ()
+
LIST(APPEND WebKit_SOURCES
efl/WebCoreSupport/ChromeClientEfl.cpp
efl/WebCoreSupport/ContextMenuClientEfl.cpp
@@ -58,7 +75,6 @@ LIST(APPEND WebKit_LIBRARIES
${EFLDEPS_LIBRARIES}
${Freetype_LIBRARIES}
${LIBXML2_LIBRARIES}
- ${Pango_LIBRARIES}
${SQLITE_LIBRARIES}
${FONTCONFIG_LIBRARIES}
${PNG_LIBRARY}
diff --git a/WebKit/efl/ChangeLog b/WebKit/efl/ChangeLog
index b436e58..bb2cf79 100644
--- a/WebKit/efl/ChangeLog
+++ b/WebKit/efl/ChangeLog
@@ -1,3 +1,56 @@
+2010-11-16 Leandro Pereira <leandro@profusion.mobi>
+
+ [EFL] Unreviewed. Build fix.
+
+ * WebCoreSupport/FrameLoaderClientEfl.h: Also include
+ ResourceError.h.
+
+2010-11-16 Patrick Gansterer <paroga@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [CMake] Add platform dependent include directories
+ https://bugs.webkit.org/show_bug.cgi?id=49553
+
+ * CMakeListsEfl.txt:
+
+2010-11-14 Ryuan Choi <ryuan.choi@samsung.com>
+
+ Reviewed by Martin Robinson.
+
+ [EFL] add pango support
+ https://bugs.webkit.org/show_bug.cgi?id=46029
+
+ Add pango in include and libs.
+
+ * CMakeListsEfl.txt:
+
+2010-11-11 Ryuan Choi <ryuan.choi@samsung.com>
+
+ Reviewed by Adam Barth.
+
+ [GTK] Move font related files.
+ https://bugs.webkit.org/show_bug.cgi?id=48116
+
+ Add freetype/ to include path.
+
+ * CMakeListsEfl.txt:
+
+2010-11-08 Rafael Antognolli <antognolli@profusion.mobi>
+
+ Reviewed by Antonio Gomes.
+
+ [EFL] Change the usage of eina_iterator_next due to latest EFL changes.
+ https://bugs.webkit.org/show_bug.cgi?id=49082
+
+ A change on how the iterator for a tiler is used in EFL needs to be
+ reflected in WebKit-EFL. The iterator now receives a pointer to an
+ Eina_Rectangle and makes it point to its internal structure. The old
+ usage was to receive a reference to a pre-allocated Eina_Rectangle.
+
+ * ewk/ewk_view_single.c:
+ (_ewk_view_single_smart_repaints_process):
+
2010-11-08 Alexey Proskuryakov <ap@apple.com>
Reviewed by Darin Adler.
diff --git a/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.h b/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.h
index a9dd8c1..e138139 100644
--- a/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.h
+++ b/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.h
@@ -36,6 +36,7 @@
#include "EWebKit.h"
#include "FrameLoaderClient.h"
#include "PluginView.h"
+#include "ResourceError.h"
#include "ResourceResponse.h"
namespace WebCore {
diff --git a/WebKit/efl/ewk/ewk_view_single.c b/WebKit/efl/ewk/ewk_view_single.c
index 85e5339..6d965d0 100644
--- a/WebKit/efl/ewk/ewk_view_single.c
+++ b/WebKit/efl/ewk/ewk_view_single.c
@@ -358,7 +358,7 @@ static Eina_Bool _ewk_view_single_smart_repaints_process(Ewk_View_Smart_Data *sd
Ewk_View_Paint_Context *ctxt;
Evas_Coord ow, oh;
void *pixels;
- Eina_Rectangle r = {0, 0, 0, 0};
+ Eina_Rectangle *r;
const Eina_Rectangle *pr;
const Eina_Rectangle *pr_end;
Eina_Tiler *tiler;
@@ -446,8 +446,8 @@ static Eina_Bool _ewk_view_single_smart_repaints_process(Ewk_View_Smart_Data *sd
EINA_ITERATOR_FOREACH(itr, r) {
Eina_Rectangle scrolled_rect = {
- r.x + sx, r.y + sy,
- r.w, r.h
+ r->x + sx, r->y + sy,
+ r->w, r->h
};
ewk_view_paint_context_save(ctxt);
@@ -460,7 +460,7 @@ static Eina_Bool _ewk_view_single_smart_repaints_process(Ewk_View_Smart_Data *sd
ewk_view_paint_context_restore(ctxt);
evas_object_image_data_update_add
- (sd->backing_store, r.x, r.y, r.w, r.h);
+ (sd->backing_store, r->x, r->y, r->w, r->h);
}
eina_iterator_free(itr);
diff --git a/WebKit/gtk/ChangeLog b/WebKit/gtk/ChangeLog
index 3a7e381..ae266e4 100644
--- a/WebKit/gtk/ChangeLog
+++ b/WebKit/gtk/ChangeLog
@@ -1,3 +1,90 @@
+2010-11-17 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
+
+ Reviewed by Martin Robinson.
+
+ Fix a typo that leads to emitting the wrong signal if it is done
+ by using the signals array.
+
+ * webkit/webkitwebview.cpp:
+ (webkit_web_view_class_init):
+
+2010-11-16 Carlos Garcia Campos <cgarcia@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Some key-press events can't be handled by WebView
+ https://bugs.webkit.org/show_bug.cgi?id=48986
+
+ The problem is that "popup-menu" and "show-help" signals are
+ handled by GtkTextView, as they are added to the key bindings set
+ of every widget in gtk_widget_class_init(). For all other bindings
+ handled by GtkTextView we are stopping the signal emission in
+ their callbacks, so we only need to do the same for "popup-menu"
+ and "show-help" signals.
+
+ * WebCoreSupport/EditorClientGtk.cpp:
+ (WebKit::toggleOverwriteCallback):
+ (WebKit::popupMenuCallback):
+ (WebKit::showHelpCallback):
+ (WebKit::EditorClient::EditorClient):
+
+2010-11-16 Carlos Garcia Campos <cgarcia@igalia.com>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Show default context menu for the currently focused element when activated with keyboard
+ https://bugs.webkit.org/show_bug.cgi?id=49376
+
+ * webkit/webkitwebview.cpp:
+ (webkit_web_view_popup_menu_handler):
+
+2010-11-11 Joone Hur <joone@kldp.org>
+
+ Reviewed by Antonio Gomes.
+
+ [GTK][DRT] Implement LayoutTestController::nodesFromRect
+ https://bugs.webkit.org/show_bug.cgi?id=46598
+
+ Support nodesFromRect in DRT
+
+ * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
+ (DumpRenderTreeSupportGtk::nodesFromRect): Added.
+ * WebCoreSupport/DumpRenderTreeSupportGtk.h:
+
+2010-11-11 Chang Shu <chang.shu@nokia.com>
+
+ Reviewed by Antonio Gomes.
+
+ [GTK] Replace "MoveForward"/"MoveBackward" with "MoveRight"/"MoveLeft"
+ to make spatial navigation work on input/textarea.
+ https://bugs.webkit.org/show_bug.cgi?id=49056
+
+ * WebCoreSupport/EditorClientGtk.cpp:
+ (WebKit::moveCursorCallback):
+
+2010-11-08 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Link with target name set does not work
+ https://bugs.webkit.org/show_bug.cgi?id=48865
+
+ When a new page is created with a name (target=myFrame), the new
+ mainFrame could not be found because they where not stored in the
+ same PageGroup. As PageGroup are not exposed externally so the
+ simpliest solution is to use a global page group name. This also fixes
+ issue with visited link coloration across pages. After this change the
+ private function webkit_web_view_set_group_name() was no longer used
+ so it was removed completly.
+
+ * WebCoreSupport/ChromeClientGtk.cpp:
+ (WebKit::ChromeClient::closeWindowSoon):
+ * WebCoreSupport/InspectorClientGtk.cpp:
+ (WebKit::InspectorClient::openInspectorFrontend):
+ * webkit/webkitprivate.h:
+ * webkit/webkitwebview.cpp:
+ (webkit_web_view_init):
+
2010-11-08 Alexey Proskuryakov <ap@apple.com>
Reviewed by Darin Adler.
diff --git a/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp b/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
index d4ab7ab..d63317c 100644
--- a/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
+++ b/WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
@@ -255,10 +255,6 @@ void ChromeClient::closeWindowSoon()
if (isHandled)
return;
-
- // FIXME: should we clear the frame group name here explicitly? Mac does it.
- // But this gets cleared in Page's destructor anyway.
- // webkit_web_view_set_group_name(m_webView, "");
}
bool ChromeClient::canTakeFocus(FocusDirection)
diff --git a/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp b/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp
index 8296206..f237e9d 100644
--- a/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp
+++ b/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp
@@ -19,9 +19,17 @@
#include "config.h"
#include "DumpRenderTreeSupportGtk.h"
-#include "webkitwebview.h"
+#include "APICast.h"
+#include "Document.h"
+#include "JSDocument.h"
+#include "JSLock.h"
+#include "JSNodeList.h"
+#include "JSValue.h"
+#include "NodeList.h"
#include "webkitprivate.h"
+#include "webkitwebview.h"
+using namespace JSC;
using namespace WebCore;
bool DumpRenderTreeSupportGtk::s_drtRun = false;
@@ -54,3 +62,18 @@ bool DumpRenderTreeSupportGtk::linksIncludedInFocusChain()
return s_linksIncludedInTabChain;
}
+JSValueRef DumpRenderTreeSupportGtk::nodesFromRect(JSContextRef context, JSValueRef value, int x, int y, unsigned top, unsigned right, unsigned bottom, unsigned left, bool ignoreClipping)
+{
+ JSLock lock(SilenceAssertionsOnly);
+ ExecState* exec = toJS(context);
+ if (!value)
+ return JSValueMakeUndefined(context);
+ JSValue jsValue = toJS(exec, value);
+ if (!jsValue.inherits(&JSDocument::s_info))
+ return JSValueMakeUndefined(context);
+
+ JSDocument* jsDocument = static_cast<JSDocument*>(asObject(jsValue));
+ Document* document = jsDocument->impl();
+ RefPtr<NodeList> nodes = document->nodesFromRect(x, y, top, right, bottom, left, ignoreClipping);
+ return toRef(exec, toJS(exec, jsDocument->globalObject(), nodes.get()));
+}
diff --git a/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.h b/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.h
index 5b494ff..17e9f6d 100644
--- a/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.h
+++ b/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.h
@@ -19,6 +19,8 @@
#ifndef DumpRenderTreeSupportGtk_h
#define DumpRenderTreeSupportGtk_h
+#include "JSStringRef.h"
+
class DumpRenderTreeSupportGtk {
public:
@@ -30,6 +32,7 @@ public:
static void setLinksIncludedInFocusChain(bool);
static bool linksIncludedInFocusChain();
+ static JSValueRef nodesFromRect(JSContextRef context, JSValueRef value, int x, int y, unsigned top, unsigned right, unsigned bottom, unsigned left, bool ignoreClipping);
private:
static bool s_drtRun;
diff --git a/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp b/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp
index 749efe9..e04b5f9 100644
--- a/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp
+++ b/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp
@@ -122,13 +122,25 @@ static void pasteClipboardCallback(GtkWidget* widget, EditorClient* client)
client->addPendingEditorCommand("Paste");
}
-static void toggleOverwriteCallback(GtkWidget* widget, EditorClient* client)
+static void toggleOverwriteCallback(GtkWidget* widget, EditorClient*)
{
// We don't support toggling the overwrite mode, but the default callback expects
// the GtkTextView to have a layout, so we handle this signal just to stop it.
g_signal_stop_emission_by_name(widget, "toggle-overwrite");
}
+// GTK+ will still send these signals to the web view. So we can safely stop signal
+// emission without breaking accessibility.
+static void popupMenuCallback(GtkWidget* widget, EditorClient*)
+{
+ g_signal_stop_emission_by_name(widget, "popup-menu");
+}
+
+static void showHelpCallback(GtkWidget* widget, EditorClient*)
+{
+ g_signal_stop_emission_by_name(widget, "show-help");
+}
+
static const char* const gtkDeleteCommands[][2] = {
{ "DeleteBackward", "DeleteForward" }, // Characters
{ "DeleteWordBackward", "DeleteWordForward" }, // Word ends
@@ -213,6 +225,13 @@ static void moveCursorCallback(GtkWidget* widget, GtkMovementStep step, gint cou
if (!rawCommand)
return;
+ if (isSpatialNavigationEnabled(core(client->webView())->focusController()->focusedOrMainFrame()) && step == 1) {
+ if (direction == 1)
+ rawCommand = "MoveRight";
+ else if (!direction)
+ rawCommand = "MoveLeft";
+ }
+
for (int i = 0; i < abs(count); i++)
client->addPendingEditorCommand(rawCommand);
}
@@ -782,6 +801,8 @@ EditorClient::EditorClient(WebKitWebView* webView)
g_signal_connect(m_nativeWidget.get(), "move-cursor", G_CALLBACK(moveCursorCallback), this);
g_signal_connect(m_nativeWidget.get(), "delete-from-cursor", G_CALLBACK(deleteFromCursorCallback), this);
g_signal_connect(m_nativeWidget.get(), "toggle-overwrite", G_CALLBACK(toggleOverwriteCallback), this);
+ g_signal_connect(m_nativeWidget.get(), "popup-menu", G_CALLBACK(popupMenuCallback), this);
+ g_signal_connect(m_nativeWidget.get(), "show-help", G_CALLBACK(showHelpCallback), this);
}
EditorClient::~EditorClient()
diff --git a/WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp b/WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp
index 2c1ffab..312b8c8 100644
--- a/WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp
+++ b/WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp
@@ -78,7 +78,7 @@ void InspectorClient::openInspectorFrontend(InspectorController* controller)
}
webkit_web_inspector_set_web_view(webInspector, inspectorWebView);
-
+
GOwnPtr<gchar> inspectorPath(g_build_filename(inspectorFilesPath(), "inspector.html", NULL));
GOwnPtr<gchar> inspectorURI(g_filename_to_uri(inspectorPath.get(), 0, 0));
webkit_web_view_load_uri(inspectorWebView, inspectorURI.get());
@@ -88,6 +88,9 @@ void InspectorClient::openInspectorFrontend(InspectorController* controller)
m_frontendPage = core(inspectorWebView);
m_frontendClient = new InspectorFrontendClient(m_inspectedWebView, inspectorWebView, webInspector, m_frontendPage, this);
m_frontendPage->inspectorController()->setInspectorFrontendClient(m_frontendClient);
+
+ // The inspector must be in it's own PageGroup to avoid deadlock while debugging.
+ m_frontendPage->setGroupName("");
}
void InspectorClient::releaseFrontendPage()
diff --git a/WebKit/gtk/webkit/webkitprivate.h b/WebKit/gtk/webkit/webkitprivate.h
index 3ac3563..7385677 100644
--- a/WebKit/gtk/webkit/webkitprivate.h
+++ b/WebKit/gtk/webkit/webkitprivate.h
@@ -388,9 +388,6 @@ extern "C" {
webkit_web_view_get_selected_text (WebKitWebView* web_view);
WEBKIT_API void
- webkit_web_view_set_group_name(WebKitWebView* web_view, const gchar* group_name);
-
- WEBKIT_API void
webkit_web_settings_add_extra_plugin_directory (WebKitWebView *web_view, const gchar* directory);
GSList*
diff --git a/WebKit/gtk/webkit/webkitwebview.cpp b/WebKit/gtk/webkit/webkitwebview.cpp
index 314da16..0dc19f3 100644
--- a/WebKit/gtk/webkit/webkitwebview.cpp
+++ b/WebKit/gtk/webkit/webkitwebview.cpp
@@ -245,6 +245,13 @@ static void PopupMenuPositionFunc(GtkMenu* menu, gint *x, gint *y, gboolean *pus
*pushIn = FALSE;
}
+static Node* getFocusedNode(Frame* frame)
+{
+ if (Document* doc = frame->document())
+ return doc->focusedNode();
+ return 0;
+}
+
static gboolean webkit_web_view_forward_context_menu_event(WebKitWebView* webView, const PlatformMouseEvent& event)
{
Page* page = core(webView);
@@ -340,9 +347,14 @@ static gboolean webkit_web_view_popup_menu_handler(GtkWidget* widget)
IntPoint location;
if (!start.node() || !end.node()
- || (frame->selection()->selection().isCaret() && !frame->selection()->selection().isContentEditable()))
- location = IntPoint(rightAligned ? view->contentsWidth() - contextMenuMargin : contextMenuMargin, contextMenuMargin);
- else {
+ || (frame->selection()->selection().isCaret() && !frame->selection()->selection().isContentEditable())) {
+ // If there's a focused elment, use its location.
+ if (Node* focusedNode = getFocusedNode(frame)) {
+ IntRect focusedNodeRect = focusedNode->getRect();
+ location = IntPoint(rightAligned ? focusedNodeRect.right() : focusedNodeRect.x(), focusedNodeRect.bottom());
+ } else
+ location = IntPoint(rightAligned ? view->contentsWidth() - contextMenuMargin : contextMenuMargin, contextMenuMargin);
+ } else {
RenderObject* renderer = start.node()->renderer();
if (!renderer)
return FALSE;
@@ -2057,7 +2069,7 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
*
* When a #WebKitWebFrame receives an onload event this signal is emitted.
*/
- webkit_web_view_signals[LOAD_STARTED] = g_signal_new("onload-event",
+ webkit_web_view_signals[ONLOAD_EVENT] = g_signal_new("onload-event",
G_TYPE_FROM_CLASS(webViewClass),
(GSignalFlags)G_SIGNAL_RUN_LAST,
0,
@@ -3248,6 +3260,12 @@ static void webkit_web_view_init(WebKitWebView* webView)
pageClients.inspectorClient = new WebKit::InspectorClient(webView);
priv->corePage = new Page(pageClients);
+ // Pages within a same session need to be linked together otherwise some functionalities such
+ // as visited link coloration (across pages) and changing popup window location will not work.
+ // To keep the default behavior simple (and because no PageGroup API exist in WebKitGTK at the
+ // time of writing this comment), we simply set all the pages to the same group.
+ priv->corePage->setGroupName("org.webkit.gtk.WebKitGTK");
+
// We also add a simple wrapper class to provide the public
// interface for the Web Inspector.
priv->webInspector = adoptPlatformRef(WEBKIT_WEB_INSPECTOR(g_object_new(WEBKIT_TYPE_WEB_INSPECTOR, NULL)));
@@ -4513,18 +4531,6 @@ void webkit_web_view_move_cursor(WebKitWebView* webView, GtkMovementStep step, g
g_signal_emit(webView, webkit_web_view_signals[MOVE_CURSOR], 0, step, count, &handled);
}
-void webkit_web_view_set_group_name(WebKitWebView* webView, const gchar* groupName)
-{
- g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
-
- WebKitWebViewPrivate* priv = webView->priv;
-
- if (!priv->corePage)
- return;
-
- priv->corePage->setGroupName(String::fromUTF8(groupName));
-}
-
/**
* webkit_web_view_can_undo:
* @webView: a #WebKitWebView
diff --git a/WebKit/mac/ChangeLog b/WebKit/mac/ChangeLog
index 8d54870..4acd7e5 100644
--- a/WebKit/mac/ChangeLog
+++ b/WebKit/mac/ChangeLog
@@ -1,3 +1,144 @@
+2010-11-16 Stephanie Lewis <slewis@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ <rdar://problem/8624267> Leak creating offscreen webview running fast/dom tests
+
+ Make a static provider for WebDeviceOrientationProviderMock. The old code allocated a new WebDeviceOrientationProviderMock for
+ every WebView, and the WebKit API doesn't support that ownership model.
+
+ * WebView/WebDeviceOrientationProviderMock.h:
+ * WebView/WebDeviceOrientationProviderMock.mm:
+ (+[WebDeviceOrientationProviderMock shared]):
+
+2010-11-16 Dave Hyatt <hyatt@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=11004
+
+ font-size:0 is ignored. Remove the minimum font size of 1 in CSSStyleSelector.
+ Change the pref value for minimum font size from 1 to 0. Make sure to never use the NSFont's size,
+ since it doesn't honor a size of 0. Instead pass the size in to the FontPlatformData(NSFont*) version
+ of the constructor rather than using [NSFont pointSize].
+
+ https://bugs.webkit.org/show_bug.cgi?id=49582
+
+ Negative leading is not handled correctly. There are two bugs here. The first is that
+ maxAscent and maxDescent can be negative, so we need a notion of whether or not we have
+ set them before so that we can allow them to be < 0.
+
+ The second issue is that we should understand where fonts will end up relative to
+ our baseline (excluding line height), and only allow those boxes to impact ascent and
+ descent if the actual font box (without factoring in line height) is above or below the
+ root line box baseline.
+
+ Added fast/css/negative-leading.html
+
+ These two bug fixes have to land together to keep the Acid 3 test rendering correctly.
+
+ * Misc/WebKitNSStringExtras.mm:
+ (-[NSString _web_drawAtPoint:font:textColor:allowingFontSmoothing:]):
+ (-[NSString _web_widthWithFont:]):
+ * Misc/WebStringTruncator.mm:
+ (fontFromNSFont):
+ * WebView/WebPreferences.mm:
+ (+[WebPreferences initialize]):
+
+2010-11-16 Anders Carlsson <andersca@apple.com>
+
+ Fix clang++ build.
+
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+
+2010-11-14 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Andreas Kling.
+
+ KeyboardEvent::keyIdentifier() should return "const String&"
+ https://bugs.webkit.org/show_bug.cgi?id=49426
+
+ * WebCoreSupport/WebEditorClient.mm:
+ (selectorForKeyEvent):
+ Change the type of a variable to have keyIdentifier(); String -> const String&
+
+2010-11-12 John Knottenbelt <jknotten@chromium.org>
+
+ Reviewed by Steve Block.
+
+ Rename GeolocationControllerClient to GeolocationClient.
+ https://bugs.webkit.org/show_bug.cgi?id=49259
+
+ * WebCoreSupport/WebGeolocationClient.h: Renamed from WebKit/mac/WebCoreSupport/WebGeolocationControllerClient.h.
+ (WebGeolocationClient::webView):
+ (WebGeolocationClient::setEnableHighAccuracy):
+ * WebCoreSupport/WebGeolocationClient.mm: Renamed from WebKit/mac/WebCoreSupport/WebGeolocationControllerClient.mm.
+ (WebGeolocationClient::WebGeolocationClient):
+ (WebGeolocationClient::geolocationDestroyed):
+ (WebGeolocationClient::startUpdating):
+ (WebGeolocationClient::stopUpdating):
+ (WebGeolocationClient::lastPosition):
+ * WebKit.order:
+ * WebView/WebView.mm:
+ (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
+
+2010-11-10 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ Fix for https://bugs.webkit.org/show_bug.cgi?id=49356
+ -[WebView _scaleWebView:] should take and origin and scroll the
+ document
+ -and corresponding-
+ <rdar://problem/8643921>
+
+ * WebView/WebView.mm:
+ (-[WebView _scaleWebView:atOrigin:]):
+ * WebView/WebViewPrivate.h:
+
+2010-11-10 Csaba Osztrogonác <ossy@webkit.org>
+
+ Reviewed by David Hyatt.
+
+ HTML5 Ruby support should be mandatory feature
+ https://bugs.webkit.org/show_bug.cgi?id=49272
+
+ Remove Ruby as optional feature.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2010-11-08 Ned Holbrook <nholbrook@apple.com>
+
+ Reviewed by Adam Barth.
+
+ Avoid CFAttributedString creation in ComplexTextController by adopting UniChar provider SPI.
+ https://bugs.webkit.org/show_bug.cgi?id=48886
+
+ * WebCoreSupport/WebSystemInterface.mm:
+ (InitWebCoreSystemInterface):
+
+2010-11-08 Nate Chapin <japhet@chromium.org>
+
+ Unreviewed, build fix.
+
+ Clumsy typo in r71562.
+
+ * Plugins/Hosted/HostedNetscapePluginStream.mm:
+ (WebKit::HostedNetscapePluginStream::start):
+
+2010-11-08 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Interface changes in https://bugs.webkit.org/show_bug.cgi?id=27165
+
+ * Plugins/Hosted/HostedNetscapePluginStream.mm:
+ (WebKit::HostedNetscapePluginStream::start): Move duplicate code into NetscapePluginStreamLoader
+ * Plugins/WebNetscapePluginStream.mm:
+ (WebNetscapePluginStream::start): Move duplicate code into NetscapePluginStreamLoader
+ * WebView/WebView.mm:
+ (-[WebView _dispatchPendingLoadRequests]): Use resourceLoadScheduler() instead of cache()->loader().
+
2010-11-08 Anders Carlsson <andersca@apple.com>
Reviewed by Dan Bernstein.
diff --git a/WebKit/mac/Configurations/FeatureDefines.xcconfig b/WebKit/mac/Configurations/FeatureDefines.xcconfig
index d08fadf..46d5de4 100644
--- a/WebKit/mac/Configurations/FeatureDefines.xcconfig
+++ b/WebKit/mac/Configurations/FeatureDefines.xcconfig
@@ -91,9 +91,6 @@ ENABLE_NOTIFICATIONS = ;
ENABLE_OFFLINE_WEB_APPLICATIONS = ENABLE_OFFLINE_WEB_APPLICATIONS;
ENABLE_PROGRESS_TAG = ENABLE_PROGRESS_TAG;
-ENABLE_RUBY = $(ENABLE_RUBY_$(REAL_PLATFORM_NAME));
-ENABLE_RUBY_macosx = ENABLE_RUBY;
-
ENABLE_SHARED_WORKERS = $(ENABLE_SHARED_WORKERS_$(REAL_PLATFORM_NAME));
ENABLE_SHARED_WORKERS_macosx = ENABLE_SHARED_WORKERS;
@@ -124,4 +121,4 @@ ENABLE_XHTMLMP = ;
ENABLE_XPATH = ENABLE_XPATH;
ENABLE_XSLT = ENABLE_XSLT;
-FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_3D_CANVAS) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PROGRESS_TAG) $(ENABLE_RUBY) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);
+FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_3D_CANVAS) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_SYSTEM) $(ENABLE_FULLSCREEN_API) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PROGRESS_TAG) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT);
diff --git a/WebKit/mac/Configurations/Version.xcconfig b/WebKit/mac/Configurations/Version.xcconfig
index 56baf78..e0ce9cb 100644
--- a/WebKit/mac/Configurations/Version.xcconfig
+++ b/WebKit/mac/Configurations/Version.xcconfig
@@ -22,7 +22,7 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
MAJOR_VERSION = 534;
-MINOR_VERSION = 12;
+MINOR_VERSION = 13;
TINY_VERSION = 0;
FULL_VERSION = $(MAJOR_VERSION).$(MINOR_VERSION);
diff --git a/WebKit/mac/Misc/WebKitNSStringExtras.mm b/WebKit/mac/Misc/WebKitNSStringExtras.mm
index 4785de5..4bf268c 100644
--- a/WebKit/mac/Misc/WebKitNSStringExtras.mm
+++ b/WebKit/mac/Misc/WebKitNSStringExtras.mm
@@ -88,7 +88,7 @@ static BOOL canUseFastRenderer(const UniChar *buffer, unsigned length)
if (!flipped)
CGContextScaleCTM(cgContext, 1, -1);
- Font webCoreFont(FontPlatformData(font), ![nsContext isDrawingToScreen], fontSmoothingIsAllowed ? AutoSmoothing : Antialiased);
+ Font webCoreFont(FontPlatformData(font, [font pointSize]), ![nsContext isDrawingToScreen], fontSmoothingIsAllowed ? AutoSmoothing : Antialiased);
TextRun run(buffer.data(), length);
run.disableRoundingHacks();
@@ -134,7 +134,7 @@ static BOOL canUseFastRenderer(const UniChar *buffer, unsigned length)
[self getCharacters:buffer.data()];
if (canUseFastRenderer(buffer.data(), length)) {
- Font webCoreFont(FontPlatformData(font), ![[NSGraphicsContext currentContext] isDrawingToScreen]);
+ Font webCoreFont(FontPlatformData(font, [font pointSize]), ![[NSGraphicsContext currentContext] isDrawingToScreen]);
TextRun run(buffer.data(), length);
run.disableRoundingHacks();
return webCoreFont.floatWidth(run);
diff --git a/WebKit/mac/Misc/WebStringTruncator.mm b/WebKit/mac/Misc/WebStringTruncator.mm
index fb31bbb..8081b92 100644
--- a/WebKit/mac/Misc/WebStringTruncator.mm
+++ b/WebKit/mac/Misc/WebStringTruncator.mm
@@ -58,7 +58,7 @@ static Font& fontFromNSFont(NSFont *font)
CFRelease(currentFont);
currentFont = font;
CFRetain(currentFont);
- FontPlatformData f(font);
+ FontPlatformData f(font, [font pointSize]);
currentRenderer = Font(f, ![[NSGraphicsContext currentContext] isDrawingToScreen]);
return currentRenderer;
}
diff --git a/WebKit/mac/Plugins/Hosted/HostedNetscapePluginStream.mm b/WebKit/mac/Plugins/Hosted/HostedNetscapePluginStream.mm
index 876a556..8ac1389 100644
--- a/WebKit/mac/Plugins/Hosted/HostedNetscapePluginStream.mm
+++ b/WebKit/mac/Plugins/Hosted/HostedNetscapePluginStream.mm
@@ -39,6 +39,7 @@
#import <WebCore/DocumentLoader.h>
#import <WebCore/Frame.h>
#import <WebCore/FrameLoader.h>
+#import <WebCore/ResourceLoadScheduler.h>
#import <WebCore/SecurityOrigin.h>
#import <WebCore/WebCoreURLResponse.h>
#import <wtf/RefCountedLeakCounter.h>
@@ -213,11 +214,7 @@ void HostedNetscapePluginStream::start()
ASSERT(!m_frameLoader);
ASSERT(!m_loader);
- m_loader = NetscapePlugInStreamLoader::create(core([m_instance->pluginView() webFrame]), this);
- m_loader->setShouldBufferData(false);
-
- m_loader->documentLoader()->addPlugInStreamLoader(m_loader.get());
- m_loader->load(m_request.get());
+ m_loader = resourceLoadScheduler()->schedulePluginStreamLoad(core([m_instance->pluginView() webFrame]), this, m_request.get());
}
void HostedNetscapePluginStream::stop()
diff --git a/WebKit/mac/Plugins/WebNetscapePluginStream.mm b/WebKit/mac/Plugins/WebNetscapePluginStream.mm
index f39b104..c677973 100644
--- a/WebKit/mac/Plugins/WebNetscapePluginStream.mm
+++ b/WebKit/mac/Plugins/WebNetscapePluginStream.mm
@@ -42,6 +42,7 @@
#import <WebCore/DocumentLoader.h>
#import <WebCore/Frame.h>
#import <WebCore/FrameLoader.h>
+#import <WebCore/ResourceLoadScheduler.h>
#import <WebCore/SecurityOrigin.h>
#import <WebCore/WebCoreObjCExtras.h>
#import <WebCore/WebCoreURLResponse.h>
@@ -282,11 +283,7 @@ void WebNetscapePluginStream::start()
ASSERT(!m_frameLoader);
ASSERT(!m_loader);
- m_loader = NetscapePlugInStreamLoader::create(core([m_pluginView.get() webFrame]), this);
- m_loader->setShouldBufferData(false);
-
- m_loader->documentLoader()->addPlugInStreamLoader(m_loader.get());
- m_loader->load(m_request.get());
+ m_loader = resourceLoadScheduler()->schedulePluginStreamLoad(core([m_pluginView.get() webFrame]), this, m_request.get());
}
void WebNetscapePluginStream::stop()
diff --git a/WebKit/mac/WebCoreSupport/WebEditorClient.mm b/WebKit/mac/WebCoreSupport/WebEditorClient.mm
index 39b511e..9efa766 100644
--- a/WebKit/mac/WebCoreSupport/WebEditorClient.mm
+++ b/WebKit/mac/WebCoreSupport/WebEditorClient.mm
@@ -643,7 +643,7 @@ static SEL selectorForKeyEvent(KeyboardEvent* event)
// Eventually, we should move all of the auto-fill code down to WebKit and remove the need for this function by
// not relying on the selector in the new implementation.
// The key identifiers are from <http://www.w3.org/TR/DOM-Level-3-Events/keyset.html#KeySet-Set>
- String key = event->keyIdentifier();
+ const String& key = event->keyIdentifier();
if (key == "Up")
return @selector(moveUp:);
if (key == "Down")
diff --git a/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm b/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
index 7ca27c0..5968084 100644
--- a/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
+++ b/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
@@ -1767,7 +1767,7 @@ PassRefPtr<Widget> WebFrameLoaderClient::createJavaAppletWidget(const IntSize& s
loadManually:NO
element:element] autorelease];
if (view)
- return adoptRef(new NetscapePluginWidget(view));
+ return adoptRef(new NetscapePluginWidget(static_cast<WebBaseNetscapePluginView *>(view)));
} else {
ASSERT_NOT_REACHED();
}
diff --git a/WebKit/mac/WebCoreSupport/WebGeolocationControllerClient.h b/WebKit/mac/WebCoreSupport/WebGeolocationClient.h
index 34d6a29..5ea3369 100644
--- a/WebKit/mac/WebCoreSupport/WebGeolocationControllerClient.h
+++ b/WebKit/mac/WebCoreSupport/WebGeolocationClient.h
@@ -23,7 +23,7 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#import <WebCore/GeolocationControllerClient.h>
+#import <WebCore/GeolocationClient.h>
namespace WebCore {
class GeolocationPosition;
@@ -31,9 +31,9 @@ namespace WebCore {
@class WebView;
-class WebGeolocationControllerClient : public WebCore::GeolocationControllerClient {
+class WebGeolocationClient : public WebCore::GeolocationClient {
public:
- WebGeolocationControllerClient(WebView *);
+ WebGeolocationClient(WebView *);
WebView *webView() { return m_webView; }
void geolocationDestroyed();
diff --git a/WebKit/mac/WebCoreSupport/WebGeolocationControllerClient.mm b/WebKit/mac/WebCoreSupport/WebGeolocationClient.mm
index 98ffc72..a635b44 100644
--- a/WebKit/mac/WebCoreSupport/WebGeolocationControllerClient.mm
+++ b/WebKit/mac/WebCoreSupport/WebGeolocationClient.mm
@@ -23,34 +23,34 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#import "WebGeolocationControllerClient.h"
+#import "WebGeolocationClient.h"
#import "WebGeolocationPositionInternal.h"
#import "WebViewInternal.h"
using namespace WebCore;
-WebGeolocationControllerClient::WebGeolocationControllerClient(WebView *webView)
+WebGeolocationClient::WebGeolocationClient(WebView *webView)
: m_webView(webView)
{
}
-void WebGeolocationControllerClient::geolocationDestroyed()
+void WebGeolocationClient::geolocationDestroyed()
{
delete this;
}
-void WebGeolocationControllerClient::startUpdating()
+void WebGeolocationClient::startUpdating()
{
[[m_webView _geolocationProvider] registerWebView:m_webView];
}
-void WebGeolocationControllerClient::stopUpdating()
+void WebGeolocationClient::stopUpdating()
{
[[m_webView _geolocationProvider] unregisterWebView:m_webView];
}
-GeolocationPosition* WebGeolocationControllerClient::lastPosition()
+GeolocationPosition* WebGeolocationClient::lastPosition()
{
#if ENABLE(CLIENT_BASED_GEOLOCATION)
return core([[m_webView _geolocationProvider] lastPosition]);
diff --git a/WebKit/mac/WebCoreSupport/WebSystemInterface.mm b/WebKit/mac/WebCoreSupport/WebSystemInterface.mm
index df3ea4d..2c57646 100644
--- a/WebKit/mac/WebCoreSupport/WebSystemInterface.mm
+++ b/WebKit/mac/WebCoreSupport/WebSystemInterface.mm
@@ -118,5 +118,10 @@ void InitWebCoreSystemInterface(void)
INIT(GetHyphenationLocationBeforeIndex);
#endif
+ INIT(CreateCTLineWithUniCharProvider);
+#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
+ INIT(CreateCTTypesetterWithUniCharProviderAndOptions);
+#endif
+
didInit = true;
}
diff --git a/WebKit/mac/WebKit.order b/WebKit/mac/WebKit.order
index c2b5f5d..e566942 100644
--- a/WebKit/mac/WebKit.order
+++ b/WebKit/mac/WebKit.order
@@ -90,8 +90,8 @@ __ZN24WebDatabaseTrackerClient30sharedWebDatabaseTrackerClientEv
__ZN24WebDatabaseTrackerClientC1Ev
__ZN24WebDatabaseTrackerClientC2Ev
__ZL47WebKitInitializeApplicationCachePathIfNecessaryv
-__ZN30WebGeolocationControllerClientC1EP7WebView
-__ZN30WebGeolocationControllerClientC2EP7WebView
+__ZN30WebGeolocationClientC1EP7WebView
+__ZN30WebGeolocationClientC2EP7WebView
__ZN15WebChromeClientC1EP7WebView
__ZN15WebChromeClientC2EP7WebView
__ZN20WebContextMenuClientC1EP7WebView
@@ -744,8 +744,8 @@ __ZN20WebFrameLoaderClient20frameLoaderDestroyedEv
__ZN20WebFrameLoaderClientD0Ev
-[WebFrame dealloc]
-[WebFramePrivate dealloc]
-__ZN30WebGeolocationControllerClient20geolocationDestroyedEv
-__ZN30WebGeolocationControllerClientD0Ev
+__ZN30WebGeolocationClient20geolocationDestroyedEv
+__ZN30WebGeolocationClientD0Ev
__ZN20WebContextMenuClient20contextMenuDestroyedEv
__ZN20WebContextMenuClientD0Ev
__ZN13WebDragClient23dragControllerDestroyedEv
diff --git a/WebKit/mac/WebView/WebDeviceOrientationProviderMock.h b/WebKit/mac/WebView/WebDeviceOrientationProviderMock.h
index be5a764..8f33691 100644
--- a/WebKit/mac/WebView/WebDeviceOrientationProviderMock.h
+++ b/WebKit/mac/WebView/WebDeviceOrientationProviderMock.h
@@ -32,6 +32,8 @@
WebDeviceOrientationProviderMockInternal* m_internal;
}
++ (WebDeviceOrientationProviderMock *)shared;
+
- (id)init;
- (void)setOrientation:(WebDeviceOrientation*)orientation;
diff --git a/WebKit/mac/WebView/WebDeviceOrientationProviderMock.mm b/WebKit/mac/WebView/WebDeviceOrientationProviderMock.mm
index 0435264..9600b7d 100644
--- a/WebKit/mac/WebView/WebDeviceOrientationProviderMock.mm
+++ b/WebKit/mac/WebView/WebDeviceOrientationProviderMock.mm
@@ -78,6 +78,12 @@ using namespace WebCore;
@implementation WebDeviceOrientationProviderMock
++ (WebDeviceOrientationProviderMock *)shared
+{
+ static WebDeviceOrientationProviderMock *provider = [[WebDeviceOrientationProviderMock alloc] init];
+ return provider;
+}
+
- (id)init
{
self = [super init];
diff --git a/WebKit/mac/WebView/WebPreferences.mm b/WebKit/mac/WebView/WebPreferences.mm
index ed06188..1bacb85 100644
--- a/WebKit/mac/WebView/WebPreferences.mm
+++ b/WebKit/mac/WebView/WebPreferences.mm
@@ -305,7 +305,7 @@ static WebCacheModel cacheModelForMainBundle(void)
@"Helvetica", WebKitSansSerifFontPreferenceKey,
@"Apple Chancery", WebKitCursiveFontPreferenceKey,
@"Papyrus", WebKitFantasyFontPreferenceKey,
- @"1", WebKitMinimumFontSizePreferenceKey,
+ @"0", WebKitMinimumFontSizePreferenceKey,
@"9", WebKitMinimumLogicalFontSizePreferenceKey,
@"16", WebKitDefaultFontSizePreferenceKey,
@"13", WebKitDefaultFixedFontSizePreferenceKey,
diff --git a/WebKit/mac/WebView/WebView.mm b/WebKit/mac/WebView/WebView.mm
index 49bb451..0498554 100644
--- a/WebKit/mac/WebView/WebView.mm
+++ b/WebKit/mac/WebView/WebView.mm
@@ -60,7 +60,7 @@
#import "WebFormDelegatePrivate.h"
#import "WebFrameInternal.h"
#import "WebFrameViewInternal.h"
-#import "WebGeolocationControllerClient.h"
+#import "WebGeolocationClient.h"
#import "WebGeolocationPositionInternal.h"
#import "WebHTMLRepresentation.h"
#import "WebHTMLViewInternal.h"
@@ -147,6 +147,7 @@
#import <WebCore/RenderView.h>
#import <WebCore/RenderWidget.h>
#import <WebCore/ResourceHandle.h>
+#import <WebCore/ResourceLoadScheduler.h>
#import <WebCore/RuntimeApplicationChecks.h>
#import <WebCore/SchemeRegistry.h>
#import <WebCore/ScriptController.h>
@@ -621,7 +622,7 @@ static bool shouldEnableLoadDeferring()
- (void)_dispatchPendingLoadRequests
{
- cache()->loader()->servePendingRequests();
+ resourceLoadScheduler()->servePendingRequests();
}
- (void)_registerDraggedTypes
@@ -706,7 +707,7 @@ static NSString *leakMailQuirksUserScriptPath()
pageClients.inspectorClient = new WebInspectorClient(self);
pageClients.pluginHalterClient = new WebPluginHalterClient(self);
#if ENABLE(CLIENT_BASED_GEOLOCATION)
- pageClients.geolocationControllerClient = new WebGeolocationControllerClient(self);
+ pageClients.geolocationClient = new WebGeolocationClient(self);
#endif
#if ENABLE(DEVICE_ORIENTATION)
pageClients.deviceOrientationClient = new WebDeviceOrientationClient(self);
@@ -2626,13 +2627,13 @@ static PassOwnPtr<Vector<String> > toStringVector(NSArray* patterns)
SchemeRegistry::registerURLSchemeAsSecure(scheme);
}
-- (void)_scaleWebView:(float)scale
+- (void)_scaleWebView:(float)scale atOrigin:(NSPoint)origin
{
Frame* coreFrame = [self _mainCoreFrame];
if (!coreFrame)
return;
- coreFrame->scalePage(scale);
+ coreFrame->scalePage(scale, IntPoint(origin));
}
- (float)_viewScaleFactor
diff --git a/WebKit/mac/WebView/WebViewPrivate.h b/WebKit/mac/WebView/WebViewPrivate.h
index b951689..af594d9 100644
--- a/WebKit/mac/WebView/WebViewPrivate.h
+++ b/WebKit/mac/WebView/WebViewPrivate.h
@@ -542,7 +542,7 @@ Could be worth adding to the API.
+ (void)_setDomainRelaxationForbidden:(BOOL)forbidden forURLScheme:(NSString *)scheme;
+ (void)_registerURLSchemeAsSecure:(NSString *)scheme;
-- (void)_scaleWebView:(float)scale;
+- (void)_scaleWebView:(float)scale atOrigin:(NSPoint)origin;
- (float)_viewScaleFactor;
@end
diff --git a/WebKit/qt/Api/qgraphicswebview.cpp b/WebKit/qt/Api/qgraphicswebview.cpp
index f026827..6cc2aa0 100644
--- a/WebKit/qt/Api/qgraphicswebview.cpp
+++ b/WebKit/qt/Api/qgraphicswebview.cpp
@@ -141,6 +141,7 @@ void QGraphicsWebViewPrivate::updateResizesToContentsForPage()
q, SLOT(_q_contentsSizeChanged(const QSize&)));
}
page->d->page->settings()->setShouldDelegateScrolling(resizesToContents);
+ page->d->page->mainFrame()->view()->setPaintsEntireContents(resizesToContents);
}
void QGraphicsWebViewPrivate::_q_contentsSizeChanged(const QSize& size)
diff --git a/WebKit/qt/Api/qwebelement.cpp b/WebKit/qt/Api/qwebelement.cpp
index 8121111..8f40c0f 100644
--- a/WebKit/qt/Api/qwebelement.cpp
+++ b/WebKit/qt/Api/qwebelement.cpp
@@ -1092,11 +1092,11 @@ void QWebElement::prependOutside(const QWebElement &element)
if (!m_element || element.isNull())
return;
- if (!m_element->parent())
+ if (!m_element->parentNode())
return;
ExceptionCode exception = 0;
- m_element->parent()->insertBefore(element.m_element, m_element, exception);
+ m_element->parentNode()->insertBefore(element.m_element, m_element, exception);
}
/*!
@@ -1111,7 +1111,7 @@ void QWebElement::prependOutside(const QString &markup)
if (!m_element)
return;
- if (!m_element->parent())
+ if (!m_element->parentNode())
return;
if (!m_element->isHTMLElement())
@@ -1121,7 +1121,7 @@ void QWebElement::prependOutside(const QString &markup)
RefPtr<DocumentFragment> fragment = htmlElement->deprecatedCreateContextualFragment(markup);
ExceptionCode exception = 0;
- m_element->parent()->insertBefore(fragment, m_element, exception);
+ m_element->parentNode()->insertBefore(fragment, m_element, exception);
}
/*!
@@ -1139,14 +1139,14 @@ void QWebElement::appendOutside(const QWebElement &element)
if (!m_element || element.isNull())
return;
- if (!m_element->parent())
+ if (!m_element->parentNode())
return;
ExceptionCode exception = 0;
if (!m_element->nextSibling())
- m_element->parent()->appendChild(element.m_element, exception);
+ m_element->parentNode()->appendChild(element.m_element, exception);
else
- m_element->parent()->insertBefore(element.m_element, m_element->nextSibling(), exception);
+ m_element->parentNode()->insertBefore(element.m_element, m_element->nextSibling(), exception);
}
/*!
@@ -1161,7 +1161,7 @@ void QWebElement::appendOutside(const QString &markup)
if (!m_element)
return;
- if (!m_element->parent())
+ if (!m_element->parentNode())
return;
if (!m_element->isHTMLElement())
@@ -1172,9 +1172,9 @@ void QWebElement::appendOutside(const QString &markup)
ExceptionCode exception = 0;
if (!m_element->nextSibling())
- m_element->parent()->appendChild(fragment, exception);
+ m_element->parentNode()->appendChild(fragment, exception);
else
- m_element->parent()->insertBefore(fragment, m_element->nextSibling(), exception);
+ m_element->parentNode()->insertBefore(fragment, m_element->nextSibling(), exception);
}
/*!
@@ -1308,7 +1308,7 @@ void QWebElement::encloseContentsWith(const QString &markup)
if (!m_element)
return;
- if (!m_element->parent())
+ if (!m_element->parentNode())
return;
if (!m_element->isHTMLElement())
@@ -1360,16 +1360,16 @@ void QWebElement::encloseWith(const QWebElement &element)
// wrapping it in the fragment. The reason for doing it in this order is
// that once the fragment has been added to the document it is empty, so
// we no longer have access to the nodes it contained.
- Node* parentNode = m_element->parent();
+ Node* parent = m_element->parentNode();
Node* siblingNode = m_element->nextSibling();
ExceptionCode exception = 0;
insertionPoint->appendChild(m_element, exception);
if (!siblingNode)
- parentNode->appendChild(element.m_element, exception);
+ parent->appendChild(element.m_element, exception);
else
- parentNode->insertBefore(element.m_element, siblingNode, exception);
+ parent->insertBefore(element.m_element, siblingNode, exception);
}
/*!
@@ -1383,7 +1383,7 @@ void QWebElement::encloseWith(const QString &markup)
if (!m_element)
return;
- if (!m_element->parent())
+ if (!m_element->parentNode())
return;
if (!m_element->isHTMLElement())
@@ -1404,16 +1404,16 @@ void QWebElement::encloseWith(const QString &markup)
// wrapping it in the fragment. The reason for doing it in this order is
// that once the fragment has been added to the document it is empty, so
// we no longer have access to the nodes it contained.
- Node* parentNode = m_element->parent();
+ Node* parent = m_element->parentNode();
Node* siblingNode = m_element->nextSibling();
ExceptionCode exception = 0;
insertionPoint->appendChild(m_element, exception);
if (!siblingNode)
- parentNode->appendChild(fragment, exception);
+ parent->appendChild(fragment, exception);
else
- parentNode->insertBefore(fragment, siblingNode, exception);
+ parent->insertBefore(fragment, siblingNode, exception);
}
/*!
diff --git a/WebKit/qt/Api/qwebframe.cpp b/WebKit/qt/Api/qwebframe.cpp
index 7d423d5..203bd60 100644
--- a/WebKit/qt/Api/qwebframe.cpp
+++ b/WebKit/qt/Api/qwebframe.cpp
@@ -1189,7 +1189,7 @@ void QWebFrame::setTextSizeMultiplier(qreal factor)
*/
qreal QWebFrame::textSizeMultiplier() const
{
- return d->zoomTextOnly ? d->frame->textZoomFactor() : d->frame->pageZoomFactor();
+ return page()->settings()->testAttribute(QWebSettings::ZoomTextOnly) ? d->frame->textZoomFactor() : d->frame->pageZoomFactor();
}
/*!
@@ -1200,7 +1200,7 @@ qreal QWebFrame::textSizeMultiplier() const
void QWebFrame::setZoomFactor(qreal factor)
{
- if (d->zoomTextOnly)
+ if (page()->settings()->testAttribute(QWebSettings::ZoomTextOnly))
d->frame->setTextZoomFactor(factor);
else
d->frame->setPageZoomFactor(factor);
@@ -1208,7 +1208,7 @@ void QWebFrame::setZoomFactor(qreal factor)
qreal QWebFrame::zoomFactor() const
{
- return d->zoomTextOnly ? d->frame->textZoomFactor() : d->frame->pageZoomFactor();
+ return page()->settings()->testAttribute(QWebSettings::ZoomTextOnly) ? d->frame->textZoomFactor() : d->frame->pageZoomFactor();
}
/*!
diff --git a/WebKit/qt/Api/qwebframe_p.h b/WebKit/qt/Api/qwebframe_p.h
index 7c0d235..1af1c95 100644
--- a/WebKit/qt/Api/qwebframe_p.h
+++ b/WebKit/qt/Api/qwebframe_p.h
@@ -80,7 +80,6 @@ public:
#if USE(ACCELERATED_COMPOSITING) && USE(TEXTURE_MAPPER)
, rootGraphicsLayer(0)
#endif
- , zoomTextOnly(false)
{}
void init(QWebFrame* qframe, QWebFrameData* frameData);
void setPage(QWebPage*);
@@ -115,7 +114,6 @@ public:
WebCore::TextureMapperContentLayer* rootGraphicsLayer;
OwnPtr<WebCore::TextureMapper> textureMapper;
#endif
- bool zoomTextOnly;
};
class QWebHitTestResultPrivate {
diff --git a/WebKit/qt/Api/qwebpage.cpp b/WebKit/qt/Api/qwebpage.cpp
index a6ca65a..a29d417 100644
--- a/WebKit/qt/Api/qwebpage.cpp
+++ b/WebKit/qt/Api/qwebpage.cpp
@@ -1311,6 +1311,7 @@ void QWebPagePrivate::adjustPointForClicking(QGraphicsSceneMouseEvent* ev)
bool QWebPagePrivate::touchEvent(QTouchEvent* event)
{
+#if ENABLE(TOUCH_EVENTS)
WebCore::Frame* frame = QWebFramePrivate::core(mainFrame);
if (!frame->view())
return false;
@@ -1320,6 +1321,10 @@ bool QWebPagePrivate::touchEvent(QTouchEvent* event)
// Return whether the default action was cancelled in the JS event handler
return frame->eventHandler()->handleTouchEvent(PlatformTouchEvent(event));
+#else
+ event->ignore();
+ return false;
+#endif
}
/*!
@@ -2118,7 +2123,7 @@ void QWebPage::setUserPermission(QWebFrame* frame, PermissionDomain domain, Perm
case NotificationsPermissionDomain:
#if ENABLE(NOTIFICATIONS)
if (policy == PermissionGranted)
- NotificationPresenterClientQt::notificationPresenter()->allowNotificationForFrame(frame);
+ NotificationPresenterClientQt::notificationPresenter()->allowNotificationForFrame(frame->d->frame);
#endif
break;
case GeolocationPermissionDomain:
@@ -2535,6 +2540,26 @@ void QWebPage::setPreferredContentsSize(const QSize& size) const
view->layout();
}
+/*
+ This function is to be called after any (animated) scroll/pan has ended, in the case the application handles the
+ scrolling/panning of the web contents. This is commonly used in combination with tiling where is it common for
+ the application to pan the actual view, which then resizes itself to the size of the contents.
+
+ \note Calling this function makes WebKit stop trying to calculate the visibleContentRect. To turn that on
+ again, call this method with an empty rect.
+
+ \sa QGraphicsWebView::resizesToContents, QWebSettings::TiledBackingStoreEnabled
+*/
+void QWebPage::setActualVisibleContentRect(const QRect& rect) const
+{
+ QWebFrame* frame = mainFrame();
+ if (!frame->d->frame || !frame->d->frame->view())
+ return;
+
+ WebCore::FrameView* view = frame->d->frame->view();
+ view->setActualVisibleContentRect(rect);
+}
+
/*!
\fn bool QWebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, QWebPage::NavigationType type)
diff --git a/WebKit/qt/Api/qwebpage.h b/WebKit/qt/Api/qwebpage.h
index 15d2432..9fa3518 100644
--- a/WebKit/qt/Api/qwebpage.h
+++ b/WebKit/qt/Api/qwebpage.h
@@ -280,6 +280,7 @@ public:
QSize preferredContentsSize() const;
void setPreferredContentsSize(const QSize &size) const;
+ void setActualVisibleContentRect(const QRect& rect) const;
virtual bool event(QEvent*);
bool focusNextPrevChild(bool next);
@@ -393,7 +394,6 @@ Q_SIGNALS:
void viewportChangeRequested();
void requestPermissionFromUser(QWebFrame* frame, QWebPage::PermissionDomain domain);
- void checkPermissionFromUser(QWebFrame* frame, QWebPage::PermissionDomain domain, QWebPage::PermissionPolicy& policy);
void cancelRequestsForPermission(QWebFrame* frame, QWebPage::PermissionDomain domain);
protected:
diff --git a/WebKit/qt/Api/qwebscriptworld.cpp b/WebKit/qt/Api/qwebscriptworld.cpp
index 74ab651..7a44813 100644
--- a/WebKit/qt/Api/qwebscriptworld.cpp
+++ b/WebKit/qt/Api/qwebscriptworld.cpp
@@ -50,7 +50,7 @@ QWebScriptWorld &QWebScriptWorld::operator=(const QWebScriptWorld& other)
DOMWrapperWorld* QWebScriptWorld::world() const
{
- return d->world.get();
+ return d ? d->world.get() : 0;
}
/*!
diff --git a/WebKit/qt/ChangeLog b/WebKit/qt/ChangeLog
index fdfa41f..04c7125 100644
--- a/WebKit/qt/ChangeLog
+++ b/WebKit/qt/ChangeLog
@@ -1,3 +1,175 @@
+2010-11-17 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Converge means of querying a parent node into one way, which is Node::parentNode.
+ https://bugs.webkit.org/show_bug.cgi?id=49686
+
+ * Api/qwebelement.cpp:
+ (QWebElement::prependOutside): Changed to use parentNode.
+ (QWebElement::appendOutside): Ditto.
+ (QWebElement::encloseContentsWith): Ditto.
+ (QWebElement::encloseWith): Ditto.
+
+2010-11-16 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Remove synchronous QWebPage::checkPermissions signal
+ https://bugs.webkit.org/show_bug.cgi?id=46810
+
+ As decided in the API review, we remove this signal and replace its only use currently
+ with cached credentials.
+
+ * Api/qwebpage.cpp:
+ (QWebPage::setUserPermission): Pass the WebCore frame instead of the QWebFrame.
+ * Api/qwebpage.h:
+ * WebCoreSupport/NotificationPresenterClientQt.cpp:
+ (WebCore::NotificationPresenterClientQt::checkPermission): Replaced explicit
+ signal emission with hash lookup of previously granted permission (or not).
+ (WebCore::NotificationPresenterClientQt::cancelRequestsForPermission): Remove
+ any previously cached/granted permission for the given script execution context.
+ (WebCore::NotificationPresenterClientQt::allowNotificationForFrame): Do not
+ only serve pending permission requests but before calling the JS callbacks, remember
+ the permission for subsequent synchronous checkPermission() calls.
+ * WebCoreSupport/NotificationPresenterClientQt.h: Add cache for permissions.
+
+2010-11-15 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY build fix.
+
+ Fix test broken by earlier patch.
+
+ * tests/qwebframe/tst_qwebframe.cpp:
+
+2010-11-15 Yi Shen <yi.4.shen@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] ZoomTextOnly doesn't work
+ https://bugs.webkit.org/show_bug.cgi?id=49568
+
+ Check QWebSettings::ZoomTextOnly attribute before applying zoom
+
+ * Api/qwebframe.cpp:
+ (QWebFrame::textSizeMultiplier):
+ (QWebFrame::setZoomFactor):
+ (QWebFrame::zoomFactor):
+ * Api/qwebframe_p.h:
+ (QWebFramePrivate::QWebFramePrivate):
+
+2010-11-14 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Antonio Gomes.
+
+ REGRESSION(r71895): API test javaScriptWindowObjectCleared fails
+ https://bugs.webkit.org/show_bug.cgi?id=49466
+
+ As of r71895 empty inline scripts are no longer executed and so
+ the javaScriptWindowObjectCleared() signal is no longer triggered
+ by <script></script>.
+
+ * tests/qwebframe/tst_qwebframe.cpp:
+
+2010-11-12 Jacob Dinu <dinu.jacob@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Update .def file for Symbian
+ https://bugs.webkit.org/show_bug.cgi?id=49456
+
+ Added missing symbols from revisions r69825, r70470, r71806
+
+ * symbian/eabi/QtWebKitu.def:
+
+2010-11-12 Benjamin Poulain <benjamin.poulain@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Need to implement WebKit::pluginWillHandleLoadError for WebKit2
+ https://bugs.webkit.org/show_bug.cgi?id=48764
+
+ Add the missing error.
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::pluginWillHandleLoadError):
+
+2010-11-11 Yi Shen <yi.4.shen@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] QWebScriptWorld::world() may crash
+ https://bugs.webkit.org/show_bug.cgi?id=49342
+
+ * Api/qwebscriptworld.cpp:
+ (QWebScriptWorld::world):
+
+2010-11-11 Kenneth Rohde Christiansen <kenneth@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Add an API for overriding the actual visible content rect in WebCore
+ https://bugs.webkit.org/show_bug.cgi?id=49373
+
+ * Api/qwebpage.cpp:
+ (QWebPage::setActualVisibleContentRect):
+ * Api/qwebpage.h:
+
+2010-11-11 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ FrameView: Don't clip to visibleContentRect in paintEntireContents mode
+ https://bugs.webkit.org/show_bug.cgi?id=49375
+
+ Use paintEntireContents in combination with tiling, allowing to
+ actually set visibleContentRect to something different from
+ the actual contents size.
+
+ * Api/qgraphicswebview.cpp:
+ (QGraphicsWebViewPrivate::updateResizesToContentsForPage):
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):
+
+2010-11-10 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r71733.
+ http://trac.webkit.org/changeset/71733
+ https://bugs.webkit.org/show_bug.cgi?id=49319
+
+ made qt bot crashy and sad (Requested by kling on #webkit).
+
+ * Api/qgraphicswebview.cpp:
+ (QGraphicsWebViewPrivate::updateResizesToContentsForPage):
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):
+
+2010-11-10 Kenneth Rohde Christiansen <kenneth@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ Use paintEntireContents in combination with tiling, allowing to
+ actually set visibleContentRect to something different from
+ the actual contents size.
+
+ * Api/qgraphicswebview.cpp:
+ (QGraphicsWebViewPrivate::updateResizesToContentsForPage):
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):
+
+2010-11-08 Benjamin Poulain <benjamin.poulain@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] build error in WebKit/qt/Api/qwebpage.cpp in Qt 4.7.0
+ https://bugs.webkit.org/show_bug.cgi?id=47427
+
+ Add a missing guard in order to be able to compile when
+ ENABLE(TOUCH_EVENTS) is not defined.
+
+ * Api/qwebpage.cpp:
+ (QWebPagePrivate::touchEvent):
+
2010-11-08 Alexey Proskuryakov <ap@apple.com>
Reviewed by Darin Adler.
diff --git a/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp b/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
index 1b57138..5c6364e 100644
--- a/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
+++ b/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
@@ -280,6 +280,10 @@ void FrameLoaderClientQt::transitionToCommittedForNewPage()
preferredLayoutSize.isValid(),
hScrollbar, hLock,
vScrollbar, vLock);
+
+ bool isMainFrame = m_frame == m_frame->page()->mainFrame();
+ if (isMainFrame && page->d->client)
+ m_frame->view()->setPaintsEntireContents(page->d->client->viewResizesToContentsEnabled());
}
void FrameLoaderClientQt::dispatchDidBecomeFrameset(bool)
@@ -892,6 +896,7 @@ enum {
WebKitErrorCannotFindPlugIn = 200,
WebKitErrorCannotLoadPlugIn = 201,
WebKitErrorJavaUnavailable = 202,
+ WebKitErrorPluginWillHandleLoad = 203
};
WebCore::ResourceError FrameLoaderClientQt::blockedError(const WebCore::ResourceRequest& request)
@@ -925,10 +930,10 @@ WebCore::ResourceError FrameLoaderClientQt::fileDoesNotExistError(const WebCore:
QCoreApplication::translate("QWebFrame", "File does not exist", 0, QCoreApplication::UnicodeUTF8));
}
-WebCore::ResourceError FrameLoaderClientQt::pluginWillHandleLoadError(const WebCore::ResourceResponse&)
+WebCore::ResourceError FrameLoaderClientQt::pluginWillHandleLoadError(const WebCore::ResourceResponse& response)
{
- notImplemented();
- return ResourceError();
+ return ResourceError("WebKit", WebKitErrorPluginWillHandleLoad, response.url().string(),
+ QCoreApplication::translate("QWebFrame", "Loading is handled by the media engine", 0, QCoreApplication::UnicodeUTF8));
}
bool FrameLoaderClientQt::shouldFallBack(const WebCore::ResourceError&)
diff --git a/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp b/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp
index 0324c0d..e58829b 100644
--- a/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp
+++ b/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp
@@ -335,24 +335,13 @@ void NotificationPresenterClientQt::requestPermission(ScriptExecutionContext* co
NotificationPresenter::Permission NotificationPresenterClientQt::checkPermission(ScriptExecutionContext* context)
{
- QWebPage::PermissionPolicy policy = QWebPage::PermissionUnknown;
- if (toPage(context) && toFrame(context))
- emit toPage(context)->checkPermissionFromUser(toFrame(context), QWebPage::NotificationsPermissionDomain, policy);
-
- switch (policy) {
- case QWebPage::PermissionGranted:
- return NotificationPresenter::PermissionAllowed;
- case QWebPage::PermissionUnknown:
- return NotificationPresenter::PermissionNotAllowed;
- case QWebPage::PermissionDenied:
- return NotificationPresenter::PermissionDenied;
- }
- ASSERT_NOT_REACHED();
- return NotificationPresenter::PermissionNotAllowed;
+ return m_cachedPermissions.value(context, NotificationPresenter::PermissionNotAllowed);
}
void NotificationPresenterClientQt::cancelRequestsForPermission(ScriptExecutionContext* context)
{
+ m_cachedPermissions.remove(context);
+
QHash<ScriptExecutionContext*, CallbacksInfo >::iterator iter = m_pendingPermissionRequests.find(context);
if (iter == m_pendingPermissionRequests.end())
return;
@@ -372,11 +361,13 @@ void NotificationPresenterClientQt::cancelRequestsForPermission(ScriptExecutionC
emit page->cancelRequestsForPermission(frame, QWebPage::NotificationsPermissionDomain);
}
-void NotificationPresenterClientQt::allowNotificationForFrame(QWebFrame* frame)
+void NotificationPresenterClientQt::allowNotificationForFrame(Frame* frame)
{
+ m_cachedPermissions.insert(frame->document(), NotificationPresenter::PermissionAllowed);
+
QHash<ScriptExecutionContext*, CallbacksInfo>::iterator iter = m_pendingPermissionRequests.begin();
while (iter != m_pendingPermissionRequests.end()) {
- if (toFrame(iter.key()) == frame)
+ if (iter.key() == frame->document())
break;
}
diff --git a/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h b/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h
index 2520f6c..a501247 100644
--- a/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h
+++ b/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h
@@ -48,6 +48,7 @@ class QWebPage;
namespace WebCore {
class Document;
+class Frame;
class ScriptExecutionContext;
class NotificationWrapper : public QObject, public QWebNotificationData {
@@ -95,7 +96,7 @@ public:
void cancel(NotificationWrapper*);
- void allowNotificationForFrame(QWebFrame*);
+ void allowNotificationForFrame(Frame*);
static bool dumpNotification;
@@ -123,6 +124,7 @@ private:
QList<RefPtr<VoidCallback> > m_callbacks;
};
QHash<ScriptExecutionContext*, CallbacksInfo > m_pendingPermissionRequests;
+ QHash<ScriptExecutionContext*, NotificationPresenter::Permission> m_cachedPermissions;
NotificationsQueue m_notifications;
QtPlatformPlugin m_platformPlugin;
diff --git a/WebKit/qt/symbian/eabi/QtWebKitu.def b/WebKit/qt/symbian/eabi/QtWebKitu.def
index 2aa30cc..77ff7b1 100644
--- a/WebKit/qt/symbian/eabi/QtWebKitu.def
+++ b/WebKit/qt/symbian/eabi/QtWebKitu.def
@@ -827,4 +827,9 @@ EXPORTS
_ZN8QWebPage18ViewportAttributesD1Ev @ 826 NONAME
_ZN8QWebPage18ViewportAttributesD2Ev @ 827 NONAME
_ZN8QWebPage18ViewportAttributesaSERKS0_ @ 828 NONAME
+ _ZN23DumpRenderTreeSupportQt13nodesFromRectERK11QWebElementiijjjjb @ 829 NONAME
+ _ZN23DumpRenderTreeSupportQt28dumpUserGestureInFrameLoaderEb @ 830 NONAME
+ _ZNK8QWebPage19supportsContentTypeERK7QString @ 831 NONAME
+ _ZNK8QWebPage21supportedContentTypesEv @ 832 NONAME
+ _ZNK8QWebPage27setActualVisibleContentRectERK5QRect @ 833 NONAME
diff --git a/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp b/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
index d74b631..2f07f5b 100644
--- a/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
+++ b/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
@@ -1566,26 +1566,26 @@ void tst_QWebFrame::connectAndDisconnect()
QString type;
QString ret = evalJS("(function() { }).connect()", type);
QCOMPARE(type, sError);
- QCOMPARE(ret, QLatin1String("TypeError: Result of expression '(function() { }).connect' [undefined] is not a function."));
+ QCOMPARE(ret, QLatin1String("TypeError: 'undefined' is not a function (evaluating '(function() { }).connect()')"));
}
{
QString type;
QString ret = evalJS("var o = { }; o.connect = Function.prototype.connect; o.connect()", type);
QCOMPARE(type, sError);
- QCOMPARE(ret, QLatin1String("TypeError: Result of expression 'o.connect' [undefined] is not a function."));
+ QCOMPARE(ret, QLatin1String("TypeError: 'undefined' is not a function (evaluating 'o.connect()')"));
}
{
QString type;
QString ret = evalJS("(function() { }).connect(123)", type);
QCOMPARE(type, sError);
- QCOMPARE(ret, QLatin1String("TypeError: Result of expression '(function() { }).connect' [undefined] is not a function."));
+ QCOMPARE(ret, QLatin1String("TypeError: 'undefined' is not a function (evaluating '(function() { }).connect(123)')"));
}
{
QString type;
QString ret = evalJS("var o = { }; o.connect = Function.prototype.connect; o.connect(123)", type);
QCOMPARE(type, sError);
- QCOMPARE(ret, QLatin1String("TypeError: Result of expression 'o.connect' [undefined] is not a function."));
+ QCOMPARE(ret, QLatin1String("TypeError: 'undefined' is not a function (evaluating 'o.connect(123)')"));
}
{
@@ -2389,7 +2389,9 @@ void tst_QWebFrame::javaScriptWindowObjectCleared_data()
{
QTest::addColumn<QString>("html");
QTest::addColumn<int>("signalCount");
- QTest::newRow("with <script>") << "<html><body><script></script><p>hello world</p></body></html>" << 1;
+ QTest::newRow("with <script>") << "<html><body><script>i=0</script><p>hello world</p></body></html>" << 1;
+ // NOTE: Empty scripts no longer cause this signal to be emitted.
+ QTest::newRow("with empty <script>") << "<html><body><script></script><p>hello world</p></body></html>" << 0;
QTest::newRow("without <script>") << "<html><body><p>hello world</p></body></html>" << 0;
}
diff --git a/WebKit/win/ChangeLog b/WebKit/win/ChangeLog
index e816b34..3fd58ec 100644
--- a/WebKit/win/ChangeLog
+++ b/WebKit/win/ChangeLog
@@ -1,3 +1,93 @@
+2010-11-16 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Disable LTCG for Windows Release builds. Add new Release_LTCG configuration.
+ https://bugs.webkit.org/show_bug.cgi?id=49632
+
+ * WebKit.vcproj/Interfaces.vcproj:
+ * WebKit.vcproj/WebKit.make:
+ * WebKit.vcproj/WebKit.sln:
+ * WebKit.vcproj/WebKit.submit.sln:
+ * WebKit.vcproj/WebKit.vcproj:
+ * WebKit.vcproj/WebKitGUID.vcproj:
+
+2010-11-16 Dave Hyatt <hyatt@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=11004
+
+ font-size:0 is ignored. Remove the minimum font size of 1 in CSSStyleSelector.
+ Change the pref value for minimum font size from 1 to 0. Make sure to never use the NSFont's size,
+ since it doesn't honor a size of 0. Instead pass the size in to the FontPlatformData(NSFont*) version
+ of the constructor rather than using [NSFont pointSize].
+
+ https://bugs.webkit.org/show_bug.cgi?id=49582
+
+ Negative leading is not handled correctly. There are two bugs here. The first is that
+ maxAscent and maxDescent can be negative, so we need a notion of whether or not we have
+ set them before so that we can allow them to be < 0.
+
+ The second issue is that we should understand where fonts will end up relative to
+ our baseline (excluding line height), and only allow those boxes to impact ascent and
+ descent if the actual font box (without factoring in line height) is above or below the
+ root line box baseline.
+
+ Added fast/css/negative-leading.html
+
+ These two bug fixes have to land together to keep the Acid 3 test rendering correctly.
+
+ * WebPreferences.cpp:
+ (WebPreferences::initializeDefaultSettings):
+
+2010-11-16 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Use vsprops files for common settings in Windows WebKit
+ https://bugs.webkit.org/show_bug.cgi?id=49622
+
+ * WebKit.vcproj/WebKit.vcproj:
+ * WebKit.vcproj/WebKitCommon.vsprops: Added.
+
+2010-11-16 Steve Falkenburg <sfalken@apple.com>
+
+ Rubber stamped by Adam Roben.
+
+ Remove unnecessary def file, remove outdated def files from vcproj.
+
+ * WebKit.vcproj/WebKit.vcproj:
+ * WebKit.vcproj/WebKit_debug.def: Removed.
+
+2010-11-12 John Knottenbelt <jknotten@chromium.org>
+
+ Reviewed by Steve Block.
+
+ Rename GeolocationControllerClient to GeolocationClient.
+ https://bugs.webkit.org/show_bug.cgi?id=49259
+
+ * WebCoreSupport/WebGeolocationClient.cpp: Renamed from WebKit/win/WebCoreSupport/WebGeolocationControllerClient.cpp.
+ (WebGeolocationClient::WebGeolocationClient):
+ (WebGeolocationClient::geolocationDestroyed):
+ (WebGeolocationClient::startUpdating):
+ (WebGeolocationClient::stopUpdating):
+ (WebGeolocationClient::lastPosition):
+ * WebCoreSupport/WebGeolocationClient.h: Renamed from WebKit/win/WebCoreSupport/WebGeolocationControllerClient.h.
+ (WebGeolocationClient::setEnableHighAccuracy):
+ * WebKit.vcproj/WebKit.vcproj:
+ * WebView.cpp:
+ (WebView::initWithFrame):
+
+2010-11-10 Csaba Osztrogonác <ossy@webkit.org>
+
+ Reviewed by David Hyatt.
+
+ HTML5 Ruby support should be mandatory feature
+ https://bugs.webkit.org/show_bug.cgi?id=49272
+
+ * WebKitPrefix.h: Touch it to avoid incremental build failure on Windows.
+
2010-11-08 Alexey Proskuryakov <ap@apple.com>
Windows build fix.
diff --git a/WebKit/win/WebCoreSupport/WebGeolocationControllerClient.cpp b/WebKit/win/WebCoreSupport/WebGeolocationClient.cpp
index daacd6c..8a526c4 100644
--- a/WebKit/win/WebCoreSupport/WebGeolocationControllerClient.cpp
+++ b/WebKit/win/WebCoreSupport/WebGeolocationClient.cpp
@@ -25,24 +25,24 @@
#include "config.h"
#include "WebKitDLL.h"
-#include "WebGeolocationControllerClient.h"
+#include "WebGeolocationClient.h"
#include "WebGeolocationPosition.h"
#include "WebView.h"
using namespace WebCore;
-WebGeolocationControllerClient::WebGeolocationControllerClient(WebView* webView)
+WebGeolocationClient::WebGeolocationClient(WebView* webView)
: m_webView(webView)
{
}
-void WebGeolocationControllerClient::geolocationDestroyed()
+void WebGeolocationClient::geolocationDestroyed()
{
delete this;
}
-void WebGeolocationControllerClient::startUpdating()
+void WebGeolocationClient::startUpdating()
{
COMPtr<IWebGeolocationProvider> provider;
if (FAILED(m_webView->geolocationProvider(&provider)))
@@ -50,7 +50,7 @@ void WebGeolocationControllerClient::startUpdating()
provider->registerWebView(m_webView.get());
}
-void WebGeolocationControllerClient::stopUpdating()
+void WebGeolocationClient::stopUpdating()
{
COMPtr<IWebGeolocationProvider> provider;
if (FAILED(m_webView->geolocationProvider(&provider)))
@@ -58,7 +58,7 @@ void WebGeolocationControllerClient::stopUpdating()
provider->unregisterWebView(m_webView.get());
}
-GeolocationPosition* WebGeolocationControllerClient::lastPosition()
+GeolocationPosition* WebGeolocationClient::lastPosition()
{
#if ENABLE(CLIENT_BASED_GEOLOCATION)
COMPtr<IWebGeolocationProvider> provider;
diff --git a/WebKit/win/WebCoreSupport/WebGeolocationControllerClient.h b/WebKit/win/WebCoreSupport/WebGeolocationClient.h
index ed73454..2422ae5 100644
--- a/WebKit/win/WebCoreSupport/WebGeolocationControllerClient.h
+++ b/WebKit/win/WebCoreSupport/WebGeolocationClient.h
@@ -23,11 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef WebGeolocationControllerClient_h
-#define WebGeolocationControllerClient_h
+#ifndef WebGeolocationClient_h
+#define WebGeolocationClient_h
#include "COMPtr.h"
-#include <WebCore/GeolocationControllerClient.h>
+#include <WebCore/GeolocationClient.h>
namespace WebCore {
class GeolocationPosition;
@@ -35,9 +35,9 @@ namespace WebCore {
class WebView;
-class WebGeolocationControllerClient : public WebCore::GeolocationControllerClient {
+class WebGeolocationClient : public WebCore::GeolocationClient {
public:
- WebGeolocationControllerClient(WebView*);
+ WebGeolocationClient(WebView*);
virtual void geolocationDestroyed();
virtual void startUpdating();
@@ -49,4 +49,4 @@ private:
COMPtr<WebView> m_webView;
};
-#endif // WebGeolocationControllerClient_h
+#endif // WebGeolocationClient_h
diff --git a/WebKit/win/WebKit.vcproj/Interfaces.vcproj b/WebKit/win/WebKit.vcproj/Interfaces.vcproj
index 0f3b6a7..9b0a385 100644
--- a/WebKit/win/WebKit.vcproj/Interfaces.vcproj
+++ b/WebKit/win/WebKit.vcproj/Interfaces.vcproj
@@ -88,6 +88,70 @@
ConfigurationType="4"
InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.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)\obj\WebKit\$(ProjectName)&quot;&#x0D;&#x0A;bash &quot;$(WebKitLibrariesDir)\tools\scripts\auto-version.sh&quot; &quot;$(IntDir)&quot;&#x0D;&#x0A;"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;;..\Interfaces;&quot;$(IntDir)\include&quot;"
+ TypeLibraryName="$(WebKitOutputDir)\lib\WebKit.tlb"
+ OutputDirectory="$(WebKitOutputDir)\obj\WebKit\$(ProjectName)"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="%SystemDrive%\cygwin\bin\which.exe bash&#x0D;&#x0A;if errorlevel 1 set PATH=%SystemDrive%\cygwin\bin;%PATH%&#x0D;&#x0A;cmd /c&#x0D;&#x0A;&#x0D;&#x0A;perl FixMIDLHeaders.pl &quot;$(WebkitOutputDir)/include/webkit/&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ OutputDirectory="$(WebKitOutputDir)\include\WebKit"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops"
+ CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
@@ -170,6 +234,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\DOMCore.idl"
@@ -190,6 +262,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\DOMCSS.idl"
@@ -210,6 +290,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\DOMEvents.idl"
@@ -230,6 +318,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\DOMExtensions.idl"
@@ -250,6 +346,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\DOMHTML.idl"
@@ -270,6 +374,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\DOMPrivate.idl"
@@ -290,6 +402,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\DOMRange.idl"
@@ -310,6 +430,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\DOMWindow.idl"
@@ -330,6 +458,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IGEN_DOMObject.idl"
@@ -350,6 +486,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebArchive.idl"
@@ -370,6 +514,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebBackForwardList.idl"
@@ -390,6 +542,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebBackForwardListPrivate.idl"
@@ -410,6 +570,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebCache.idl"
@@ -430,6 +598,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebCookieManager.idl"
@@ -450,6 +626,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebCoreStatistics.idl"
@@ -470,6 +654,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebDatabaseManager.idl"
@@ -490,6 +682,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebDataSource.idl"
@@ -510,6 +710,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebDesktopNotificationsDelegate.idl"
@@ -542,6 +750,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebDownload.idl"
@@ -562,6 +778,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebEditingDelegate.idl"
@@ -582,6 +806,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebEmbeddedView.idl"
@@ -602,6 +834,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebError.idl"
@@ -622,6 +862,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebErrorPrivate.idl"
@@ -642,6 +890,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebFormDelegate.idl"
@@ -662,6 +918,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebFrame.idl"
@@ -682,6 +946,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebFrameLoadDelegate.idl"
@@ -702,6 +974,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebFrameLoadDelegatePrivate.idl"
@@ -722,6 +1002,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebFrameLoadDelegatePrivate2.idl"
@@ -742,6 +1030,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebFramePrivate.idl"
@@ -762,6 +1058,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebFrameView.idl"
@@ -782,6 +1086,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebGeolocationPolicyListener.idl"
@@ -802,6 +1114,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebGeolocationPosition.idl"
@@ -822,6 +1142,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebGeolocationProvider.idl"
@@ -842,6 +1170,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebHistory.idl"
@@ -862,6 +1198,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebHistoryDelegate.idl"
@@ -882,6 +1226,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebHistoryItem.idl"
@@ -902,6 +1254,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebHistoryItemPrivate.idl"
@@ -922,6 +1282,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebHistoryPrivate.idl"
@@ -942,6 +1310,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebHTMLRepresentation.idl"
@@ -962,6 +1338,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebHTTPURLResponse.idl"
@@ -982,6 +1366,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebIconDatabase.idl"
@@ -1002,6 +1394,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebInspector.idl"
@@ -1022,6 +1422,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebInspectorPrivate.idl"
@@ -1042,6 +1450,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebJavaScriptCollector.idl"
@@ -1062,6 +1478,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebKitStatistics.idl"
@@ -1082,6 +1506,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebMutableURLRequest.idl"
@@ -1102,6 +1534,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebMutableURLRequestPrivate.idl"
@@ -1122,6 +1562,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebNavigationData.idl"
@@ -1142,6 +1590,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebNotification.idl"
@@ -1162,6 +1618,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebNotificationCenter.idl"
@@ -1182,6 +1646,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebNotificationObserver.idl"
@@ -1202,6 +1674,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebPluginHalterDelegate.idl"
@@ -1222,6 +1702,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebPolicyDelegate.idl"
@@ -1242,6 +1730,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebPolicyDelegatePrivate.idl"
@@ -1262,6 +1758,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebPreferences.idl"
@@ -1282,6 +1786,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebPreferencesPrivate.idl"
@@ -1302,6 +1814,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebResource.idl"
@@ -1322,6 +1842,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebResourceLoadDelegate.idl"
@@ -1342,6 +1870,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebResourceLoadDelegatePrivate.idl"
@@ -1362,6 +1898,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebScriptObject.idl"
@@ -1382,6 +1926,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebScriptWorld.idl"
@@ -1402,6 +1954,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebScrollBarDelegatePrivate.idl"
@@ -1422,6 +1982,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebScrollBarPrivate.idl"
@@ -1442,6 +2010,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebSecurityOrigin.idl"
@@ -1462,6 +2038,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebSerializedJSValue.idl"
@@ -1482,6 +2066,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebSerializedJSValuePrivate.idl"
@@ -1502,6 +2094,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebTextRenderer.idl"
@@ -1522,6 +2122,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebUIDelegate.idl"
@@ -1542,6 +2150,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebUIDelegatePrivate.idl"
@@ -1562,6 +2178,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebUndoManager.idl"
@@ -1582,6 +2206,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebUndoTarget.idl"
@@ -1602,6 +2234,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebURLAuthenticationChallenge.idl"
@@ -1622,6 +2262,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebURLRequest.idl"
@@ -1642,6 +2290,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebURLResponse.idl"
@@ -1662,6 +2318,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebURLResponsePrivate.idl"
@@ -1682,6 +2346,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebUserContentURLPattern.idl"
@@ -1702,6 +2374,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebView.idl"
@@ -1722,6 +2402,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebViewPrivate.idl"
@@ -1742,6 +2430,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\IWebWorkersPrivate.idl"
@@ -1762,6 +2458,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\JavaScriptCoreAPITypes.idl"
@@ -1782,6 +2486,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\WebKit.idl"
@@ -1802,6 +2514,14 @@
GenerateTypeLibrary="true"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ GenerateTypeLibrary="true"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\Interfaces\WebScrollbarTypes.idl"
@@ -1822,6 +2542,14 @@
Name="VCMIDLTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ />
+ </FileConfiguration>
</File>
</Files>
<Globals>
diff --git a/WebKit/win/WebKit.vcproj/WebKit.make b/WebKit/win/WebKit.vcproj/WebKit.make
index eda85bd..d954342 100755
--- a/WebKit/win/WebKit.vcproj/WebKit.make
+++ b/WebKit/win/WebKit.vcproj/WebKit.make
@@ -1,7 +1,7 @@
-!IF !defined(BUILDSTYLE)
-BUILDSTYLE=Release
-!ELSEIF "$(BUILDSTYLE)"=="DEBUG"
+!IF "$(BUILDSTYLE)"=="DEBUG"
BUILDSTYLE=Debug_All
+!ELSE
+BUILDSTYLE=Release_LTCG
!ENDIF
install:
diff --git a/WebKit/win/WebKit.vcproj/WebKit.sln b/WebKit/win/WebKit.vcproj/WebKit.sln
index 787650f..53ade97 100644
--- a/WebKit/win/WebKit.vcproj/WebKit.sln
+++ b/WebKit/win/WebKit.vcproj/WebKit.sln
@@ -150,399 +150,228 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestWebKitAPIGenerated", ".
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
- all|Win32 = all|Win32
- Debug_All|Win32 = Debug_All|Win32
Debug_Cairo|Win32 = Debug_Cairo|Win32
- Debug_Internal|Win32 = Debug_Internal|Win32
Debug|Win32 = Debug|Win32
Release_Cairo|Win32 = Release_Cairo|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.all|Win32.ActiveCfg = Debug_All|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.all|Win32.Build.0 = Debug_All|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug_All|Win32.Build.0 = Debug_All|Win32
{011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug_Cairo|Win32.ActiveCfg = Debug_CFLite|Win32
{011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug_Cairo|Win32.Build.0 = Debug_CFLite|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
- {011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug|Win32.ActiveCfg = Debug|Win32
{011D10F1-B656-4A1B-A0C3-3842F02122C5}.Debug|Win32.Build.0 = Debug|Win32
{011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_Cairo|Win32.ActiveCfg = Release_CFLite|Win32
{011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release_Cairo|Win32.Build.0 = Release_CFLite|Win32
{011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release|Win32.ActiveCfg = Release|Win32
{011D10F1-B656-4A1B-A0C3-3842F02122C5}.Release|Win32.Build.0 = Release|Win32
- {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.all|Win32.ActiveCfg = Debug_All|Win32
- {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.all|Win32.Build.0 = Debug_All|Win32
- {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Debug_All|Win32.Build.0 = Debug_All|Win32
{1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Debug_Cairo|Win32.ActiveCfg = Debug_Cairo|Win32
{1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Debug_Cairo|Win32.Build.0 = Debug_Cairo|Win32
- {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
- {1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Debug|Win32.ActiveCfg = Debug|Win32
{1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Debug|Win32.Build.0 = Debug|Win32
{1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Release_Cairo|Win32.ActiveCfg = Release_Cairo|Win32
{1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Release_Cairo|Win32.Build.0 = Release_Cairo|Win32
{1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Release|Win32.ActiveCfg = Release|Win32
{1C16337B-ACF3-4D03-AA90-851C5B5EADA6}.Release|Win32.Build.0 = Release|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.all|Win32.ActiveCfg = Debug_All|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.all|Win32.Build.0 = Debug_All|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug_All|Win32.Build.0 = Debug_All|Win32
{AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug_Cairo|Win32.ActiveCfg = Debug|Win32
{AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug_Cairo|Win32.Build.0 = Debug|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
- {AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug|Win32.ActiveCfg = Debug|Win32
{AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Debug|Win32.Build.0 = Debug|Win32
{AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_Cairo|Win32.ActiveCfg = Release|Win32
{AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release_Cairo|Win32.Build.0 = Release|Win32
{AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release|Win32.ActiveCfg = Release|Win32
{AA8A5A85-592B-4357-BC60-E0E91E026AF6}.Release|Win32.Build.0 = Release|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.all|Win32.ActiveCfg = Debug_All|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.all|Win32.Build.0 = Debug_All|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Debug_All|Win32.Build.0 = Debug_All|Win32
{C59E5129-B453-49B7-A52B-1E104715F76E}.Debug_Cairo|Win32.ActiveCfg = Debug_CFLite|Win32
{C59E5129-B453-49B7-A52B-1E104715F76E}.Debug_Cairo|Win32.Build.0 = Debug_CFLite|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
- {C59E5129-B453-49B7-A52B-1E104715F76E}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{C59E5129-B453-49B7-A52B-1E104715F76E}.Debug|Win32.ActiveCfg = Debug|Win32
{C59E5129-B453-49B7-A52B-1E104715F76E}.Debug|Win32.Build.0 = Debug|Win32
{C59E5129-B453-49B7-A52B-1E104715F76E}.Release_Cairo|Win32.ActiveCfg = Release|Win32
{C59E5129-B453-49B7-A52B-1E104715F76E}.Release_Cairo|Win32.Build.0 = Release|Win32
{C59E5129-B453-49B7-A52B-1E104715F76E}.Release|Win32.ActiveCfg = Release|Win32
{C59E5129-B453-49B7-A52B-1E104715F76E}.Release|Win32.Build.0 = Release|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.all|Win32.ActiveCfg = all|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.all|Win32.Build.0 = all|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug_All|Win32.ActiveCfg = all|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug_All|Win32.Build.0 = all|Win32
{4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug_Cairo|Win32.ActiveCfg = all|Win32
{4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug_Cairo|Win32.Build.0 = all|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug_Internal|Win32.ActiveCfg = all|Win32
- {4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug_Internal|Win32.Build.0 = all|Win32
{4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug|Win32.ActiveCfg = all|Win32
{4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Debug|Win32.Build.0 = all|Win32
{4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_Cairo|Win32.ActiveCfg = all|Win32
{4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release_Cairo|Win32.Build.0 = all|Win32
{4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release|Win32.ActiveCfg = all|Win32
{4FF5BA11-59EC-4C24-8F52-F235C2E7D43A}.Release|Win32.Build.0 = all|Win32
- {0A324352-B3B6-496C-9E5B-4C7E923E628B}.all|Win32.ActiveCfg = all|Win32
- {0A324352-B3B6-496C-9E5B-4C7E923E628B}.all|Win32.Build.0 = all|Win32
- {0A324352-B3B6-496C-9E5B-4C7E923E628B}.Debug_All|Win32.ActiveCfg = cairo|Win32
- {0A324352-B3B6-496C-9E5B-4C7E923E628B}.Debug_All|Win32.Build.0 = cairo|Win32
{0A324352-B3B6-496C-9E5B-4C7E923E628B}.Debug_Cairo|Win32.ActiveCfg = cairo|Win32
{0A324352-B3B6-496C-9E5B-4C7E923E628B}.Debug_Cairo|Win32.Build.0 = cairo|Win32
- {0A324352-B3B6-496C-9E5B-4C7E923E628B}.Debug_Internal|Win32.ActiveCfg = all|Win32
- {0A324352-B3B6-496C-9E5B-4C7E923E628B}.Debug_Internal|Win32.Build.0 = all|Win32
{0A324352-B3B6-496C-9E5B-4C7E923E628B}.Debug|Win32.ActiveCfg = all|Win32
{0A324352-B3B6-496C-9E5B-4C7E923E628B}.Debug|Win32.Build.0 = all|Win32
{0A324352-B3B6-496C-9E5B-4C7E923E628B}.Release_Cairo|Win32.ActiveCfg = cairo|Win32
{0A324352-B3B6-496C-9E5B-4C7E923E628B}.Release_Cairo|Win32.Build.0 = cairo|Win32
{0A324352-B3B6-496C-9E5B-4C7E923E628B}.Release|Win32.ActiveCfg = all|Win32
{0A324352-B3B6-496C-9E5B-4C7E923E628B}.Release|Win32.Build.0 = all|Win32
- {E498CA9D-3BD2-4D52-8E37-C8DC76526325}.all|Win32.ActiveCfg = Debug_All|Win32
- {E498CA9D-3BD2-4D52-8E37-C8DC76526325}.all|Win32.Build.0 = Debug_All|Win32
- {E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Debug_All|Win32.Build.0 = Debug_All|Win32
{E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Debug_Cairo|Win32.ActiveCfg = Debug|Win32
- {E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
- {E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Debug|Win32.ActiveCfg = Debug|Win32
{E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Debug|Win32.Build.0 = Debug|Win32
{E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Release_Cairo|Win32.ActiveCfg = Release|Win32
{E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Release|Win32.ActiveCfg = Release|Win32
{E498CA9D-3BD2-4D52-8E37-C8DC76526325}.Release|Win32.Build.0 = Release|Win32
- {1AFD081F-1AC7-4A97-8EFA-6DF97761A3A2}.all|Win32.ActiveCfg = Debug_All|Win32
- {1AFD081F-1AC7-4A97-8EFA-6DF97761A3A2}.all|Win32.Build.0 = Debug_All|Win32
- {1AFD081F-1AC7-4A97-8EFA-6DF97761A3A2}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {1AFD081F-1AC7-4A97-8EFA-6DF97761A3A2}.Debug_All|Win32.Build.0 = Debug_All|Win32
{1AFD081F-1AC7-4A97-8EFA-6DF97761A3A2}.Debug_Cairo|Win32.ActiveCfg = Debug_CFLite|Win32
{1AFD081F-1AC7-4A97-8EFA-6DF97761A3A2}.Debug_Cairo|Win32.Build.0 = Debug_CFLite|Win32
- {1AFD081F-1AC7-4A97-8EFA-6DF97761A3A2}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
- {1AFD081F-1AC7-4A97-8EFA-6DF97761A3A2}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{1AFD081F-1AC7-4A97-8EFA-6DF97761A3A2}.Debug|Win32.ActiveCfg = Debug|Win32
{1AFD081F-1AC7-4A97-8EFA-6DF97761A3A2}.Debug|Win32.Build.0 = Debug|Win32
{1AFD081F-1AC7-4A97-8EFA-6DF97761A3A2}.Release_Cairo|Win32.ActiveCfg = Release_CFLite|Win32
{1AFD081F-1AC7-4A97-8EFA-6DF97761A3A2}.Release_Cairo|Win32.Build.0 = Release_CFLite|Win32
{1AFD081F-1AC7-4A97-8EFA-6DF97761A3A2}.Release|Win32.ActiveCfg = Release|Win32
{1AFD081F-1AC7-4A97-8EFA-6DF97761A3A2}.Release|Win32.Build.0 = Release|Win32
- {2E51ABE8-76CB-485B-A66C-46AEF4DF8ACD}.all|Win32.ActiveCfg = Debug_All|Win32
- {2E51ABE8-76CB-485B-A66C-46AEF4DF8ACD}.all|Win32.Build.0 = Debug_All|Win32
- {2E51ABE8-76CB-485B-A66C-46AEF4DF8ACD}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {2E51ABE8-76CB-485B-A66C-46AEF4DF8ACD}.Debug_All|Win32.Build.0 = Debug_All|Win32
{2E51ABE8-76CB-485B-A66C-46AEF4DF8ACD}.Debug_Cairo|Win32.ActiveCfg = Debug_Cairo|Win32
{2E51ABE8-76CB-485B-A66C-46AEF4DF8ACD}.Debug_Cairo|Win32.Build.0 = Debug_Cairo|Win32
- {2E51ABE8-76CB-485B-A66C-46AEF4DF8ACD}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
- {2E51ABE8-76CB-485B-A66C-46AEF4DF8ACD}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{2E51ABE8-76CB-485B-A66C-46AEF4DF8ACD}.Debug|Win32.ActiveCfg = Debug|Win32
{2E51ABE8-76CB-485B-A66C-46AEF4DF8ACD}.Debug|Win32.Build.0 = Debug|Win32
{2E51ABE8-76CB-485B-A66C-46AEF4DF8ACD}.Release_Cairo|Win32.ActiveCfg = Release_Cairo|Win32
{2E51ABE8-76CB-485B-A66C-46AEF4DF8ACD}.Release_Cairo|Win32.Build.0 = Release_Cairo|Win32
{2E51ABE8-76CB-485B-A66C-46AEF4DF8ACD}.Release|Win32.ActiveCfg = Release|Win32
{2E51ABE8-76CB-485B-A66C-46AEF4DF8ACD}.Release|Win32.Build.0 = Release|Win32
- {2EDAD637-CBA8-4E55-97ED-7D2BBC336FDB}.all|Win32.ActiveCfg = all|Win32
- {2EDAD637-CBA8-4E55-97ED-7D2BBC336FDB}.all|Win32.Build.0 = all|Win32
- {2EDAD637-CBA8-4E55-97ED-7D2BBC336FDB}.Debug_All|Win32.ActiveCfg = all|Win32
- {2EDAD637-CBA8-4E55-97ED-7D2BBC336FDB}.Debug_All|Win32.Build.0 = all|Win32
{2EDAD637-CBA8-4E55-97ED-7D2BBC336FDB}.Debug_Cairo|Win32.ActiveCfg = all|Win32
{2EDAD637-CBA8-4E55-97ED-7D2BBC336FDB}.Debug_Cairo|Win32.Build.0 = all|Win32
- {2EDAD637-CBA8-4E55-97ED-7D2BBC336FDB}.Debug_Internal|Win32.ActiveCfg = all|Win32
- {2EDAD637-CBA8-4E55-97ED-7D2BBC336FDB}.Debug_Internal|Win32.Build.0 = all|Win32
{2EDAD637-CBA8-4E55-97ED-7D2BBC336FDB}.Debug|Win32.ActiveCfg = all|Win32
{2EDAD637-CBA8-4E55-97ED-7D2BBC336FDB}.Debug|Win32.Build.0 = all|Win32
{2EDAD637-CBA8-4E55-97ED-7D2BBC336FDB}.Release_Cairo|Win32.ActiveCfg = all|Win32
{2EDAD637-CBA8-4E55-97ED-7D2BBC336FDB}.Release_Cairo|Win32.Build.0 = all|Win32
{2EDAD637-CBA8-4E55-97ED-7D2BBC336FDB}.Release|Win32.ActiveCfg = all|Win32
{2EDAD637-CBA8-4E55-97ED-7D2BBC336FDB}.Release|Win32.Build.0 = all|Win32
- {AAE88FEF-509E-4D49-870B-7357922C276F}.all|Win32.ActiveCfg = Debug_CFLite|Win32
- {AAE88FEF-509E-4D49-870B-7357922C276F}.all|Win32.Build.0 = Debug_CFLite|Win32
- {AAE88FEF-509E-4D49-870B-7357922C276F}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {AAE88FEF-509E-4D49-870B-7357922C276F}.Debug_All|Win32.Build.0 = Debug_All|Win32
{AAE88FEF-509E-4D49-870B-7357922C276F}.Debug_Cairo|Win32.ActiveCfg = Debug_CFLite|Win32
{AAE88FEF-509E-4D49-870B-7357922C276F}.Debug_Cairo|Win32.Build.0 = Debug_CFLite|Win32
- {AAE88FEF-509E-4D49-870B-7357922C276F}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
- {AAE88FEF-509E-4D49-870B-7357922C276F}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{AAE88FEF-509E-4D49-870B-7357922C276F}.Debug|Win32.ActiveCfg = Debug|Win32
{AAE88FEF-509E-4D49-870B-7357922C276F}.Debug|Win32.Build.0 = Debug|Win32
{AAE88FEF-509E-4D49-870B-7357922C276F}.Release_Cairo|Win32.ActiveCfg = Release|Win32
{AAE88FEF-509E-4D49-870B-7357922C276F}.Release_Cairo|Win32.Build.0 = Release|Win32
{AAE88FEF-509E-4D49-870B-7357922C276F}.Release|Win32.ActiveCfg = Release|Win32
{AAE88FEF-509E-4D49-870B-7357922C276F}.Release|Win32.Build.0 = Release|Win32
- {91762BE2-87EF-4F5A-A480-48B90EB3F406}.all|Win32.ActiveCfg = Release|Win32
- {91762BE2-87EF-4F5A-A480-48B90EB3F406}.all|Win32.Build.0 = Release|Win32
- {91762BE2-87EF-4F5A-A480-48B90EB3F406}.Debug_All|Win32.ActiveCfg = Debug|Win32
- {91762BE2-87EF-4F5A-A480-48B90EB3F406}.Debug_All|Win32.Build.0 = Debug|Win32
{91762BE2-87EF-4F5A-A480-48B90EB3F406}.Debug_Cairo|Win32.ActiveCfg = Debug|Win32
{91762BE2-87EF-4F5A-A480-48B90EB3F406}.Debug_Cairo|Win32.Build.0 = Debug|Win32
- {91762BE2-87EF-4F5A-A480-48B90EB3F406}.Debug_Internal|Win32.ActiveCfg = Debug|Win32
- {91762BE2-87EF-4F5A-A480-48B90EB3F406}.Debug_Internal|Win32.Build.0 = Debug|Win32
{91762BE2-87EF-4F5A-A480-48B90EB3F406}.Debug|Win32.ActiveCfg = Debug|Win32
{91762BE2-87EF-4F5A-A480-48B90EB3F406}.Debug|Win32.Build.0 = Debug|Win32
{91762BE2-87EF-4F5A-A480-48B90EB3F406}.Release_Cairo|Win32.ActiveCfg = Release|Win32
{91762BE2-87EF-4F5A-A480-48B90EB3F406}.Release_Cairo|Win32.Build.0 = Release|Win32
{91762BE2-87EF-4F5A-A480-48B90EB3F406}.Release|Win32.ActiveCfg = Release|Win32
{91762BE2-87EF-4F5A-A480-48B90EB3F406}.Release|Win32.Build.0 = Release|Win32
- {0662A8A9-82A3-4638-97D8-EC425D8D87C9}.all|Win32.ActiveCfg = Debug_All|Win32
- {0662A8A9-82A3-4638-97D8-EC425D8D87C9}.all|Win32.Build.0 = Debug_All|Win32
- {0662A8A9-82A3-4638-97D8-EC425D8D87C9}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {0662A8A9-82A3-4638-97D8-EC425D8D87C9}.Debug_All|Win32.Build.0 = Debug_All|Win32
{0662A8A9-82A3-4638-97D8-EC425D8D87C9}.Debug_Cairo|Win32.ActiveCfg = Debug_Cairo|Win32
{0662A8A9-82A3-4638-97D8-EC425D8D87C9}.Debug_Cairo|Win32.Build.0 = Debug_Cairo|Win32
- {0662A8A9-82A3-4638-97D8-EC425D8D87C9}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
- {0662A8A9-82A3-4638-97D8-EC425D8D87C9}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{0662A8A9-82A3-4638-97D8-EC425D8D87C9}.Debug|Win32.ActiveCfg = Debug|Win32
{0662A8A9-82A3-4638-97D8-EC425D8D87C9}.Debug|Win32.Build.0 = Debug|Win32
{0662A8A9-82A3-4638-97D8-EC425D8D87C9}.Release_Cairo|Win32.ActiveCfg = Release_Cairo|Win32
{0662A8A9-82A3-4638-97D8-EC425D8D87C9}.Release_Cairo|Win32.Build.0 = Release_Cairo|Win32
{0662A8A9-82A3-4638-97D8-EC425D8D87C9}.Release|Win32.ActiveCfg = Release|Win32
{0662A8A9-82A3-4638-97D8-EC425D8D87C9}.Release|Win32.Build.0 = Release|Win32
- {B8437A41-67BC-4769-9452-45203827F821}.all|Win32.ActiveCfg = Debug_All|Win32
- {B8437A41-67BC-4769-9452-45203827F821}.all|Win32.Build.0 = Debug_All|Win32
- {B8437A41-67BC-4769-9452-45203827F821}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {B8437A41-67BC-4769-9452-45203827F821}.Debug_All|Win32.Build.0 = Debug_All|Win32
{B8437A41-67BC-4769-9452-45203827F821}.Debug_Cairo|Win32.ActiveCfg = Debug|Win32
{B8437A41-67BC-4769-9452-45203827F821}.Debug_Cairo|Win32.Build.0 = Debug|Win32
- {B8437A41-67BC-4769-9452-45203827F821}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
- {B8437A41-67BC-4769-9452-45203827F821}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{B8437A41-67BC-4769-9452-45203827F821}.Debug|Win32.ActiveCfg = Debug|Win32
{B8437A41-67BC-4769-9452-45203827F821}.Debug|Win32.Build.0 = Debug|Win32
{B8437A41-67BC-4769-9452-45203827F821}.Release_Cairo|Win32.ActiveCfg = Release|Win32
{B8437A41-67BC-4769-9452-45203827F821}.Release_Cairo|Win32.Build.0 = Release|Win32
{B8437A41-67BC-4769-9452-45203827F821}.Release|Win32.ActiveCfg = Release|Win32
{B8437A41-67BC-4769-9452-45203827F821}.Release|Win32.Build.0 = Release|Win32
- {6567DFD4-D6DE-4CD5-825D-17E353D160E1}.all|Win32.ActiveCfg = Debug_All|Win32
- {6567DFD4-D6DE-4CD5-825D-17E353D160E1}.all|Win32.Build.0 = Debug_All|Win32
- {6567DFD4-D6DE-4CD5-825D-17E353D160E1}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {6567DFD4-D6DE-4CD5-825D-17E353D160E1}.Debug_All|Win32.Build.0 = Debug_All|Win32
{6567DFD4-D6DE-4CD5-825D-17E353D160E1}.Debug_Cairo|Win32.ActiveCfg = Debug_Cairo|Win32
{6567DFD4-D6DE-4CD5-825D-17E353D160E1}.Debug_Cairo|Win32.Build.0 = Debug_Cairo|Win32
- {6567DFD4-D6DE-4CD5-825D-17E353D160E1}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
- {6567DFD4-D6DE-4CD5-825D-17E353D160E1}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{6567DFD4-D6DE-4CD5-825D-17E353D160E1}.Debug|Win32.ActiveCfg = Debug|Win32
{6567DFD4-D6DE-4CD5-825D-17E353D160E1}.Debug|Win32.Build.0 = Debug|Win32
{6567DFD4-D6DE-4CD5-825D-17E353D160E1}.Release_Cairo|Win32.ActiveCfg = Release_Cairo|Win32
{6567DFD4-D6DE-4CD5-825D-17E353D160E1}.Release_Cairo|Win32.Build.0 = Release_Cairo|Win32
{6567DFD4-D6DE-4CD5-825D-17E353D160E1}.Release|Win32.ActiveCfg = Release|Win32
{6567DFD4-D6DE-4CD5-825D-17E353D160E1}.Release|Win32.Build.0 = Release|Win32
- {59CC0547-70AC-499C-9B19-EC01C6F61137}.all|Win32.ActiveCfg = Debug_Cairo|Win32
- {59CC0547-70AC-499C-9B19-EC01C6F61137}.all|Win32.Build.0 = Debug_Cairo|Win32
- {59CC0547-70AC-499C-9B19-EC01C6F61137}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {59CC0547-70AC-499C-9B19-EC01C6F61137}.Debug_All|Win32.Build.0 = Debug_All|Win32
{59CC0547-70AC-499C-9B19-EC01C6F61137}.Debug_Cairo|Win32.ActiveCfg = Debug_Cairo|Win32
{59CC0547-70AC-499C-9B19-EC01C6F61137}.Debug_Cairo|Win32.Build.0 = Debug_Cairo|Win32
- {59CC0547-70AC-499C-9B19-EC01C6F61137}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
- {59CC0547-70AC-499C-9B19-EC01C6F61137}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{59CC0547-70AC-499C-9B19-EC01C6F61137}.Debug|Win32.ActiveCfg = Debug|Win32
{59CC0547-70AC-499C-9B19-EC01C6F61137}.Debug|Win32.Build.0 = Debug|Win32
{59CC0547-70AC-499C-9B19-EC01C6F61137}.Release_Cairo|Win32.ActiveCfg = Release|Win32
{59CC0547-70AC-499C-9B19-EC01C6F61137}.Release_Cairo|Win32.Build.0 = Release|Win32
{59CC0547-70AC-499C-9B19-EC01C6F61137}.Release|Win32.ActiveCfg = Release|Win32
{59CC0547-70AC-499C-9B19-EC01C6F61137}.Release|Win32.Build.0 = Release|Win32
- {DA31DA52-6675-48D4-89E0-333A7144397C}.all|Win32.ActiveCfg = all|Win32
- {DA31DA52-6675-48D4-89E0-333A7144397C}.all|Win32.Build.0 = all|Win32
- {DA31DA52-6675-48D4-89E0-333A7144397C}.Debug_All|Win32.ActiveCfg = all|Win32
- {DA31DA52-6675-48D4-89E0-333A7144397C}.Debug_All|Win32.Build.0 = all|Win32
{DA31DA52-6675-48D4-89E0-333A7144397C}.Debug_Cairo|Win32.ActiveCfg = all|Win32
{DA31DA52-6675-48D4-89E0-333A7144397C}.Debug_Cairo|Win32.Build.0 = all|Win32
- {DA31DA52-6675-48D4-89E0-333A7144397C}.Debug_Internal|Win32.ActiveCfg = all|Win32
- {DA31DA52-6675-48D4-89E0-333A7144397C}.Debug_Internal|Win32.Build.0 = all|Win32
{DA31DA52-6675-48D4-89E0-333A7144397C}.Debug|Win32.ActiveCfg = all|Win32
{DA31DA52-6675-48D4-89E0-333A7144397C}.Debug|Win32.Build.0 = all|Win32
{DA31DA52-6675-48D4-89E0-333A7144397C}.Release_Cairo|Win32.ActiveCfg = all|Win32
{DA31DA52-6675-48D4-89E0-333A7144397C}.Release_Cairo|Win32.Build.0 = all|Win32
{DA31DA52-6675-48D4-89E0-333A7144397C}.Release|Win32.ActiveCfg = all|Win32
{DA31DA52-6675-48D4-89E0-333A7144397C}.Release|Win32.Build.0 = all|Win32
- {44B9C152-1870-4035-B94D-7B3285AA0C12}.all|Win32.ActiveCfg = Release|Win32
- {44B9C152-1870-4035-B94D-7B3285AA0C12}.all|Win32.Build.0 = Release|Win32
- {44B9C152-1870-4035-B94D-7B3285AA0C12}.Debug_All|Win32.ActiveCfg = Release|Win32
- {44B9C152-1870-4035-B94D-7B3285AA0C12}.Debug_All|Win32.Build.0 = Release|Win32
{44B9C152-1870-4035-B94D-7B3285AA0C12}.Debug_Cairo|Win32.ActiveCfg = Release|Win32
{44B9C152-1870-4035-B94D-7B3285AA0C12}.Debug_Cairo|Win32.Build.0 = Release|Win32
- {44B9C152-1870-4035-B94D-7B3285AA0C12}.Debug_Internal|Win32.ActiveCfg = Release|Win32
- {44B9C152-1870-4035-B94D-7B3285AA0C12}.Debug_Internal|Win32.Build.0 = Release|Win32
{44B9C152-1870-4035-B94D-7B3285AA0C12}.Debug|Win32.ActiveCfg = Release|Win32
{44B9C152-1870-4035-B94D-7B3285AA0C12}.Debug|Win32.Build.0 = Release|Win32
{44B9C152-1870-4035-B94D-7B3285AA0C12}.Release_Cairo|Win32.ActiveCfg = Release|Win32
{44B9C152-1870-4035-B94D-7B3285AA0C12}.Release_Cairo|Win32.Build.0 = Release|Win32
{44B9C152-1870-4035-B94D-7B3285AA0C12}.Release|Win32.ActiveCfg = Release|Win32
{44B9C152-1870-4035-B94D-7B3285AA0C12}.Release|Win32.Build.0 = Release|Win32
- {C0737398-3565-439E-A2B8-AB2BE4D5430C}.all|Win32.ActiveCfg = Debug_All|Win32
- {C0737398-3565-439E-A2B8-AB2BE4D5430C}.all|Win32.Build.0 = Debug_All|Win32
- {C0737398-3565-439E-A2B8-AB2BE4D5430C}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {C0737398-3565-439E-A2B8-AB2BE4D5430C}.Debug_All|Win32.Build.0 = Debug_All|Win32
{C0737398-3565-439E-A2B8-AB2BE4D5430C}.Debug_Cairo|Win32.ActiveCfg = Debug_Cairo|Win32
{C0737398-3565-439E-A2B8-AB2BE4D5430C}.Debug_Cairo|Win32.Build.0 = Debug_Cairo|Win32
- {C0737398-3565-439E-A2B8-AB2BE4D5430C}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
- {C0737398-3565-439E-A2B8-AB2BE4D5430C}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{C0737398-3565-439E-A2B8-AB2BE4D5430C}.Debug|Win32.ActiveCfg = Debug|Win32
{C0737398-3565-439E-A2B8-AB2BE4D5430C}.Debug|Win32.Build.0 = Debug|Win32
{C0737398-3565-439E-A2B8-AB2BE4D5430C}.Release_Cairo|Win32.ActiveCfg = Release|Win32
{C0737398-3565-439E-A2B8-AB2BE4D5430C}.Release_Cairo|Win32.Build.0 = Release|Win32
{C0737398-3565-439E-A2B8-AB2BE4D5430C}.Release|Win32.ActiveCfg = Release|Win32
{C0737398-3565-439E-A2B8-AB2BE4D5430C}.Release|Win32.Build.0 = Release|Win32
- {626089A3-25D3-4883-A96C-B8C66E036397}.all|Win32.ActiveCfg = Debug_Cairo|Win32
- {626089A3-25D3-4883-A96C-B8C66E036397}.all|Win32.Build.0 = Debug_Cairo|Win32
- {626089A3-25D3-4883-A96C-B8C66E036397}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {626089A3-25D3-4883-A96C-B8C66E036397}.Debug_All|Win32.Build.0 = Debug_All|Win32
{626089A3-25D3-4883-A96C-B8C66E036397}.Debug_Cairo|Win32.ActiveCfg = Debug_Cairo|Win32
{626089A3-25D3-4883-A96C-B8C66E036397}.Debug_Cairo|Win32.Build.0 = Debug_Cairo|Win32
- {626089A3-25D3-4883-A96C-B8C66E036397}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
- {626089A3-25D3-4883-A96C-B8C66E036397}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{626089A3-25D3-4883-A96C-B8C66E036397}.Debug|Win32.ActiveCfg = Debug|Win32
{626089A3-25D3-4883-A96C-B8C66E036397}.Debug|Win32.Build.0 = Debug|Win32
{626089A3-25D3-4883-A96C-B8C66E036397}.Release_Cairo|Win32.ActiveCfg = Debug_Cairo|Win32
{626089A3-25D3-4883-A96C-B8C66E036397}.Release_Cairo|Win32.Build.0 = Debug_Cairo|Win32
{626089A3-25D3-4883-A96C-B8C66E036397}.Release|Win32.ActiveCfg = Debug|Win32
{626089A3-25D3-4883-A96C-B8C66E036397}.Release|Win32.Build.0 = Debug|Win32
- {D09806DB-E58B-4646-8C9B-61101906C1E2}.all|Win32.ActiveCfg = Release|Win32
- {D09806DB-E58B-4646-8C9B-61101906C1E2}.all|Win32.Build.0 = Release|Win32
- {D09806DB-E58B-4646-8C9B-61101906C1E2}.Debug_All|Win32.ActiveCfg = Release|Win32
- {D09806DB-E58B-4646-8C9B-61101906C1E2}.Debug_All|Win32.Build.0 = Release|Win32
{D09806DB-E58B-4646-8C9B-61101906C1E2}.Debug_Cairo|Win32.ActiveCfg = Release|Win32
{D09806DB-E58B-4646-8C9B-61101906C1E2}.Debug_Cairo|Win32.Build.0 = Release|Win32
- {D09806DB-E58B-4646-8C9B-61101906C1E2}.Debug_Internal|Win32.ActiveCfg = Release|Win32
- {D09806DB-E58B-4646-8C9B-61101906C1E2}.Debug_Internal|Win32.Build.0 = Release|Win32
{D09806DB-E58B-4646-8C9B-61101906C1E2}.Debug|Win32.ActiveCfg = Release|Win32
{D09806DB-E58B-4646-8C9B-61101906C1E2}.Debug|Win32.Build.0 = Release|Win32
{D09806DB-E58B-4646-8C9B-61101906C1E2}.Release_Cairo|Win32.ActiveCfg = Release|Win32
{D09806DB-E58B-4646-8C9B-61101906C1E2}.Release_Cairo|Win32.Build.0 = Release|Win32
{D09806DB-E58B-4646-8C9B-61101906C1E2}.Release|Win32.ActiveCfg = Release|Win32
{D09806DB-E58B-4646-8C9B-61101906C1E2}.Release|Win32.Build.0 = Release|Win32
- {114FCA11-216B-4C8C-957E-30A75AE80443}.all|Win32.ActiveCfg = Debug_All|Win32
- {114FCA11-216B-4C8C-957E-30A75AE80443}.all|Win32.Build.0 = Debug_All|Win32
- {114FCA11-216B-4C8C-957E-30A75AE80443}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {114FCA11-216B-4C8C-957E-30A75AE80443}.Debug_All|Win32.Build.0 = Debug_All|Win32
{114FCA11-216B-4C8C-957E-30A75AE80443}.Debug_Cairo|Win32.ActiveCfg = Debug_Cairo|Win32
{114FCA11-216B-4C8C-957E-30A75AE80443}.Debug_Cairo|Win32.Build.0 = Debug_Cairo|Win32
- {114FCA11-216B-4C8C-957E-30A75AE80443}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
- {114FCA11-216B-4C8C-957E-30A75AE80443}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{114FCA11-216B-4C8C-957E-30A75AE80443}.Debug|Win32.ActiveCfg = Debug|Win32
{114FCA11-216B-4C8C-957E-30A75AE80443}.Debug|Win32.Build.0 = Debug|Win32
{114FCA11-216B-4C8C-957E-30A75AE80443}.Release_Cairo|Win32.ActiveCfg = Release|Win32
{114FCA11-216B-4C8C-957E-30A75AE80443}.Release_Cairo|Win32.Build.0 = Release|Win32
{114FCA11-216B-4C8C-957E-30A75AE80443}.Release|Win32.ActiveCfg = Release|Win32
{114FCA11-216B-4C8C-957E-30A75AE80443}.Release|Win32.Build.0 = Release|Win32
- {CBC3391C-F060-4BF5-A66E-81404168816B}.all|Win32.ActiveCfg = Release_CFLite|Win32
- {CBC3391C-F060-4BF5-A66E-81404168816B}.all|Win32.Build.0 = Release_CFLite|Win32
- {CBC3391C-F060-4BF5-A66E-81404168816B}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {CBC3391C-F060-4BF5-A66E-81404168816B}.Debug_All|Win32.Build.0 = Debug_All|Win32
{CBC3391C-F060-4BF5-A66E-81404168816B}.Debug_Cairo|Win32.ActiveCfg = Debug_CFLite|Win32
{CBC3391C-F060-4BF5-A66E-81404168816B}.Debug_Cairo|Win32.Build.0 = Debug_CFLite|Win32
- {CBC3391C-F060-4BF5-A66E-81404168816B}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
- {CBC3391C-F060-4BF5-A66E-81404168816B}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{CBC3391C-F060-4BF5-A66E-81404168816B}.Debug|Win32.ActiveCfg = Debug|Win32
{CBC3391C-F060-4BF5-A66E-81404168816B}.Debug|Win32.Build.0 = Debug|Win32
{CBC3391C-F060-4BF5-A66E-81404168816B}.Release_Cairo|Win32.ActiveCfg = Release_CFLite|Win32
{CBC3391C-F060-4BF5-A66E-81404168816B}.Release_Cairo|Win32.Build.0 = Release_CFLite|Win32
{CBC3391C-F060-4BF5-A66E-81404168816B}.Release|Win32.ActiveCfg = Release|Win32
{CBC3391C-F060-4BF5-A66E-81404168816B}.Release|Win32.Build.0 = Release|Win32
- {4343BC0B-A2E0-4B48-8277-F33CFBFA83CD}.all|Win32.ActiveCfg = all|Win32
- {4343BC0B-A2E0-4B48-8277-F33CFBFA83CD}.all|Win32.Build.0 = all|Win32
- {4343BC0B-A2E0-4B48-8277-F33CFBFA83CD}.Debug_All|Win32.ActiveCfg = all|Win32
- {4343BC0B-A2E0-4B48-8277-F33CFBFA83CD}.Debug_All|Win32.Build.0 = all|Win32
{4343BC0B-A2E0-4B48-8277-F33CFBFA83CD}.Debug_Cairo|Win32.ActiveCfg = all|Win32
{4343BC0B-A2E0-4B48-8277-F33CFBFA83CD}.Debug_Cairo|Win32.Build.0 = all|Win32
- {4343BC0B-A2E0-4B48-8277-F33CFBFA83CD}.Debug_Internal|Win32.ActiveCfg = all|Win32
- {4343BC0B-A2E0-4B48-8277-F33CFBFA83CD}.Debug_Internal|Win32.Build.0 = all|Win32
{4343BC0B-A2E0-4B48-8277-F33CFBFA83CD}.Debug|Win32.ActiveCfg = all|Win32
{4343BC0B-A2E0-4B48-8277-F33CFBFA83CD}.Debug|Win32.Build.0 = all|Win32
{4343BC0B-A2E0-4B48-8277-F33CFBFA83CD}.Release_Cairo|Win32.ActiveCfg = all|Win32
{4343BC0B-A2E0-4B48-8277-F33CFBFA83CD}.Release_Cairo|Win32.Build.0 = all|Win32
{4343BC0B-A2E0-4B48-8277-F33CFBFA83CD}.Release|Win32.ActiveCfg = all|Win32
{4343BC0B-A2E0-4B48-8277-F33CFBFA83CD}.Release|Win32.Build.0 = all|Win32
- {3B99669B-1817-443B-BCBE-835580146668}.all|Win32.ActiveCfg = Release_CFLite|Win32
- {3B99669B-1817-443B-BCBE-835580146668}.all|Win32.Build.0 = Release_CFLite|Win32
- {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_Cairo|Win32.ActiveCfg = Debug_CFLite|Win32
{3B99669B-1817-443B-BCBE-835580146668}.Debug_Cairo|Win32.Build.0 = Debug_CFLite|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_Cairo|Win32.ActiveCfg = Release_CFLite|Win32
{3B99669B-1817-443B-BCBE-835580146668}.Release_Cairo|Win32.Build.0 = Release_CFLite|Win32
{3B99669B-1817-443B-BCBE-835580146668}.Release|Win32.ActiveCfg = Release|Win32
{3B99669B-1817-443B-BCBE-835580146668}.Release|Win32.Build.0 = Release|Win32
- {1480CF5F-4160-47B5-A0E6-96AEC8258FB5}.all|Win32.ActiveCfg = Release_CFLite|Win32
- {1480CF5F-4160-47B5-A0E6-96AEC8258FB5}.all|Win32.Build.0 = Release_CFLite|Win32
- {1480CF5F-4160-47B5-A0E6-96AEC8258FB5}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {1480CF5F-4160-47B5-A0E6-96AEC8258FB5}.Debug_All|Win32.Build.0 = Debug_All|Win32
{1480CF5F-4160-47B5-A0E6-96AEC8258FB5}.Debug_Cairo|Win32.ActiveCfg = Debug_CFLite|Win32
{1480CF5F-4160-47B5-A0E6-96AEC8258FB5}.Debug_Cairo|Win32.Build.0 = Debug_CFLite|Win32
- {1480CF5F-4160-47B5-A0E6-96AEC8258FB5}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
- {1480CF5F-4160-47B5-A0E6-96AEC8258FB5}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{1480CF5F-4160-47B5-A0E6-96AEC8258FB5}.Debug|Win32.ActiveCfg = Debug|Win32
{1480CF5F-4160-47B5-A0E6-96AEC8258FB5}.Debug|Win32.Build.0 = Debug|Win32
{1480CF5F-4160-47B5-A0E6-96AEC8258FB5}.Release_Cairo|Win32.ActiveCfg = Release_CFLite|Win32
{1480CF5F-4160-47B5-A0E6-96AEC8258FB5}.Release_Cairo|Win32.Build.0 = Release_CFLite|Win32
{1480CF5F-4160-47B5-A0E6-96AEC8258FB5}.Release|Win32.ActiveCfg = Release|Win32
{1480CF5F-4160-47B5-A0E6-96AEC8258FB5}.Release|Win32.Build.0 = Release|Win32
- {3E48AB23-D249-488F-A1C4-43CDF52FBD28}.all|Win32.ActiveCfg = Debug_All|Win32
- {3E48AB23-D249-488F-A1C4-43CDF52FBD28}.all|Win32.Build.0 = Debug_All|Win32
- {3E48AB23-D249-488F-A1C4-43CDF52FBD28}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
- {3E48AB23-D249-488F-A1C4-43CDF52FBD28}.Debug_All|Win32.Build.0 = Debug_All|Win32
{3E48AB23-D249-488F-A1C4-43CDF52FBD28}.Debug_Cairo|Win32.ActiveCfg = Debug_CFLite|Win32
{3E48AB23-D249-488F-A1C4-43CDF52FBD28}.Debug_Cairo|Win32.Build.0 = Debug_CFLite|Win32
- {3E48AB23-D249-488F-A1C4-43CDF52FBD28}.Debug_Internal|Win32.ActiveCfg = Debug_Internal|Win32
- {3E48AB23-D249-488F-A1C4-43CDF52FBD28}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{3E48AB23-D249-488F-A1C4-43CDF52FBD28}.Debug|Win32.ActiveCfg = Debug|Win32
{3E48AB23-D249-488F-A1C4-43CDF52FBD28}.Debug|Win32.Build.0 = Debug|Win32
{3E48AB23-D249-488F-A1C4-43CDF52FBD28}.Release_Cairo|Win32.ActiveCfg = Release_CFLite|Win32
{3E48AB23-D249-488F-A1C4-43CDF52FBD28}.Release_Cairo|Win32.Build.0 = Release_CFLite|Win32
{3E48AB23-D249-488F-A1C4-43CDF52FBD28}.Release|Win32.ActiveCfg = Release|Win32
{3E48AB23-D249-488F-A1C4-43CDF52FBD28}.Release|Win32.Build.0 = Release|Win32
- {45C45411-7F0E-404D-919A-4EE9BB60BE86}.all|Win32.ActiveCfg = all|Win32
- {45C45411-7F0E-404D-919A-4EE9BB60BE86}.all|Win32.Build.0 = all|Win32
- {45C45411-7F0E-404D-919A-4EE9BB60BE86}.Debug_All|Win32.ActiveCfg = all|Win32
- {45C45411-7F0E-404D-919A-4EE9BB60BE86}.Debug_All|Win32.Build.0 = all|Win32
{45C45411-7F0E-404D-919A-4EE9BB60BE86}.Debug_Cairo|Win32.ActiveCfg = all|Win32
{45C45411-7F0E-404D-919A-4EE9BB60BE86}.Debug_Cairo|Win32.Build.0 = all|Win32
- {45C45411-7F0E-404D-919A-4EE9BB60BE86}.Debug_Internal|Win32.ActiveCfg = all|Win32
- {45C45411-7F0E-404D-919A-4EE9BB60BE86}.Debug_Internal|Win32.Build.0 = all|Win32
{45C45411-7F0E-404D-919A-4EE9BB60BE86}.Debug|Win32.ActiveCfg = all|Win32
{45C45411-7F0E-404D-919A-4EE9BB60BE86}.Debug|Win32.Build.0 = all|Win32
{45C45411-7F0E-404D-919A-4EE9BB60BE86}.Release_Cairo|Win32.ActiveCfg = all|Win32
diff --git a/WebKit/win/WebKit.vcproj/WebKit.submit.sln b/WebKit/win/WebKit.vcproj/WebKit.submit.sln
index dbbc8e0..75d79de 100644
--- a/WebKit/win/WebKit.vcproj/WebKit.submit.sln
+++ b/WebKit/win/WebKit.vcproj/WebKit.submit.sln
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WebKit", "WebKit.vcproj", "{0662A8A9-82A3-4638-97D8-EC425D8D87C9}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WebKitLib", "WebKit.vcproj", "{0662A8A9-82A3-4638-97D8-EC425D8D87C9}"
ProjectSection(ProjectDependencies) = postProject
{91762BE2-87EF-4F5A-A480-48B90EB3F406} = {91762BE2-87EF-4F5A-A480-48B90EB3F406}
{B8437A41-67BC-4769-9452-45203827F821} = {B8437A41-67BC-4769-9452-45203827F821}
@@ -19,6 +19,7 @@ Global
Debug_All|Win32 = Debug_All|Win32
Debug_Internal|Win32 = Debug_Internal|Win32
Debug|Win32 = Debug|Win32
+ Release_LTCG|Win32 = Release_LTCG|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
@@ -28,6 +29,8 @@ Global
{0662A8A9-82A3-4638-97D8-EC425D8D87C9}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{0662A8A9-82A3-4638-97D8-EC425D8D87C9}.Debug|Win32.ActiveCfg = Debug|Win32
{0662A8A9-82A3-4638-97D8-EC425D8D87C9}.Debug|Win32.Build.0 = Debug|Win32
+ {0662A8A9-82A3-4638-97D8-EC425D8D87C9}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
+ {0662A8A9-82A3-4638-97D8-EC425D8D87C9}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
{0662A8A9-82A3-4638-97D8-EC425D8D87C9}.Release|Win32.ActiveCfg = Release|Win32
{0662A8A9-82A3-4638-97D8-EC425D8D87C9}.Release|Win32.Build.0 = Release|Win32
{B8437A41-67BC-4769-9452-45203827F821}.Debug_All|Win32.ActiveCfg = Debug_All|Win32
@@ -36,6 +39,8 @@ Global
{B8437A41-67BC-4769-9452-45203827F821}.Debug_Internal|Win32.Build.0 = Debug_Internal|Win32
{B8437A41-67BC-4769-9452-45203827F821}.Debug|Win32.ActiveCfg = Debug|Win32
{B8437A41-67BC-4769-9452-45203827F821}.Debug|Win32.Build.0 = Debug|Win32
+ {B8437A41-67BC-4769-9452-45203827F821}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
+ {B8437A41-67BC-4769-9452-45203827F821}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
{B8437A41-67BC-4769-9452-45203827F821}.Release|Win32.ActiveCfg = Release|Win32
{B8437A41-67BC-4769-9452-45203827F821}.Release|Win32.Build.0 = Release|Win32
{91762BE2-87EF-4F5A-A480-48B90EB3F406}.Debug_All|Win32.ActiveCfg = Debug|Win32
@@ -44,6 +49,8 @@ Global
{91762BE2-87EF-4F5A-A480-48B90EB3F406}.Debug_Internal|Win32.Build.0 = Debug|Win32
{91762BE2-87EF-4F5A-A480-48B90EB3F406}.Debug|Win32.ActiveCfg = Debug|Win32
{91762BE2-87EF-4F5A-A480-48B90EB3F406}.Debug|Win32.Build.0 = Debug|Win32
+ {91762BE2-87EF-4F5A-A480-48B90EB3F406}.Release_LTCG|Win32.ActiveCfg = Release_LTCG|Win32
+ {91762BE2-87EF-4F5A-A480-48B90EB3F406}.Release_LTCG|Win32.Build.0 = Release_LTCG|Win32
{91762BE2-87EF-4F5A-A480-48B90EB3F406}.Release|Win32.ActiveCfg = Release|Win32
{91762BE2-87EF-4F5A-A480-48B90EB3F406}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
diff --git a/WebKit/win/WebKit.vcproj/WebKit.vcproj b/WebKit/win/WebKit.vcproj/WebKit.vcproj
index 9740947..c5392ee 100644
--- a/WebKit/win/WebKit.vcproj/WebKit.vcproj
+++ b/WebKit/win/WebKit.vcproj/WebKit.vcproj
@@ -17,14 +17,12 @@
<Configurations>
<Configuration
Name="Debug|Win32"
- OutputDirectory="$(WebKitOutputDir)\lib"
ConfigurationType="4"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;.\WebKitLibCommon.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;touch &quot;$(WebKitOutputDir)\tmp.cpp&quot;&#x0D;&#x0A;cl /analyze /nologo /c &quot;$(WebKitOutputDir)\tmp.cpp&quot; /Fo&quot;$(IntDir)\tmp.obj&quot; 2&gt;&amp;1 | findstr D9040&#x0D;&#x0A;if ERRORLEVEL 1 (set EnablePREfast=&quot;true&quot;) else (set EnablePREfast=&quot;false&quot;)&#x0D;&#x0A;if ERRORLEVEL 1 (set AnalyzeWithLargeStack=&quot;/analyze:65536&quot;) else (set AnalyzeWithLargeStack=&quot;&quot;)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\include\JavaScriptCore\*&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;bash &quot;$(WebKitLibrariesDir)\tools\scripts\auto-version.sh&quot; &quot;$(IntDir)&quot;&#x0D;&#x0A;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -40,24 +38,15 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include\WebKit&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\private&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include\private&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)&quot;;&quot;$(ProjectDir)\..\WebCoreSupport&quot;;&quot;$(IntDir)\include&quot;;&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;"
- PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit"
- UsePrecompiledHeader="2"
- PrecompiledHeaderThrough="WebKitPrefix.h"
- ProgramDataBaseFileName="$(OutDir)\$(TargetName).vc80.pdb"
- DisableSpecificWarnings="4819"
- ForcedIncludeFiles="WebKitPrefix.h;ICUVersion.h"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
- AdditionalIncludeDirectories="$(WebKitOutputDir)\obj\WebKit\"
/>
<Tool
Name="VCPreLinkEventTool"
- CommandLine=""
/>
<Tool
Name="VCLibrarianTool"
@@ -76,20 +65,16 @@
/>
<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)\..\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"
- OutputDirectory="$(WebKitOutputDir)\lib"
ConfigurationType="4"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\WebKitLibCommon.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;touch &quot;$(WebKitOutputDir)\tmp.cpp&quot;&#x0D;&#x0A;cl /analyze /nologo /c &quot;$(WebKitOutputDir)\tmp.cpp&quot; /Fo&quot;$(IntDir)\tmp.obj&quot; 2&gt;&amp;1 | findstr D9040&#x0D;&#x0A;if ERRORLEVEL 1 (set EnablePREfast=&quot;true&quot;) else (set EnablePREfast=&quot;false&quot;)&#x0D;&#x0A;if ERRORLEVEL 1 (set AnalyzeWithLargeStack=&quot;/analyze:65536&quot;) else (set AnalyzeWithLargeStack=&quot;&quot;)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\include\JavaScriptCore\*&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;bash &quot;$(WebKitLibrariesDir)\tools\scripts\auto-version.sh&quot; &quot;$(IntDir)&quot;&#x0D;&#x0A;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -105,24 +90,15 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include\WebKit&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\private&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include\private&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)&quot;;&quot;$(ProjectDir)\..\WebCoreSupport&quot;;&quot;$(IntDir)\include&quot;;&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;"
- PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit"
- UsePrecompiledHeader="2"
- PrecompiledHeaderThrough="WebKitPrefix.h"
- ProgramDataBaseFileName="$(OutDir)\$(TargetName).vc80.pdb"
- DisableSpecificWarnings="4819"
- ForcedIncludeFiles="WebKitPrefix.h;ICUVersion.h"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
- AdditionalIncludeDirectories="$(WebKitOutputDir)\obj\WebKit\"
/>
<Tool
Name="VCPreLinkEventTool"
- CommandLine=""
/>
<Tool
Name="VCLibrarianTool"
@@ -141,19 +117,16 @@
/>
<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)\..\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"
- 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"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_internal.vsprops;.\WebKitLibCommon.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;touch &quot;$(WebKitOutputDir)\tmp.cpp&quot;&#x0D;&#x0A;cl /analyze /nologo /c &quot;$(WebKitOutputDir)\tmp.cpp&quot; /Fo&quot;$(IntDir)\tmp.obj&quot; 2&gt;&amp;1 | findstr D9040&#x0D;&#x0A;if ERRORLEVEL 1 (set EnablePREfast=&quot;true&quot;) else (set EnablePREfast=&quot;false&quot;)&#x0D;&#x0A;if ERRORLEVEL 1 (set AnalyzeWithLargeStack=&quot;/analyze:65536&quot;) else (set AnalyzeWithLargeStack=&quot;&quot;)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\include\JavaScriptCore\*&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;bash &quot;$(WebKitLibrariesDir)\tools\scripts\auto-version.sh&quot; &quot;$(IntDir)&quot;&#x0D;&#x0A;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -169,25 +142,15 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include\WebKit&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\private&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include\private&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)&quot;;&quot;$(ProjectDir)\..\WebCoreSupport&quot;;&quot;$(IntDir)\include&quot;;&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;"
- PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit"
- UsePrecompiledHeader="2"
- PrecompiledHeaderThrough="WebKitPrefix.h"
- ProgramDataBaseFileName="$(OutDir)\$(TargetName).vc80.pdb"
- Detect64BitPortabilityProblems="false"
- DisableSpecificWarnings="4819"
- ForcedIncludeFiles="WebKitPrefix.h;ICUVersion.h"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
- AdditionalIncludeDirectories="$(WebKitOutputDir)\obj\WebKit\"
/>
<Tool
Name="VCPreLinkEventTool"
- CommandLine=""
/>
<Tool
Name="VCLibrarianTool"
@@ -206,19 +169,16 @@
/>
<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)\..\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"
- 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"
+ 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;.\WebKitLibCommon.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;touch &quot;$(WebKitOutputDir)\tmp.cpp&quot;&#x0D;&#x0A;cl /analyze /nologo /c &quot;$(WebKitOutputDir)\tmp.cpp&quot; /Fo&quot;$(IntDir)\tmp.obj&quot; 2&gt;&amp;1 | findstr D9040&#x0D;&#x0A;if ERRORLEVEL 1 (set EnablePREfast=&quot;true&quot;) else (set EnablePREfast=&quot;false&quot;)&#x0D;&#x0A;if ERRORLEVEL 1 (set AnalyzeWithLargeStack=&quot;/analyze:65536&quot;) else (set AnalyzeWithLargeStack=&quot;&quot;)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\include\JavaScriptCore\*&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;bash &quot;$(WebKitLibrariesDir)\tools\scripts\auto-version.sh&quot; &quot;$(IntDir)&quot;&#x0D;&#x0A;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -234,24 +194,15 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include\WebKit&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\private&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include\private&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)&quot;;&quot;$(ProjectDir)\..\WebCoreSupport&quot;;&quot;$(IntDir)\include&quot;;&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;"
- PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit"
- UsePrecompiledHeader="2"
- PrecompiledHeaderThrough="WebKitPrefix.h"
- ProgramDataBaseFileName="$(OutDir)\$(TargetName).vc80.pdb"
- DisableSpecificWarnings="4819"
- ForcedIncludeFiles="WebKitPrefix.h;ICUVersion.h"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
- AdditionalIncludeDirectories="$(WebKitOutputDir)\obj\WebKit\"
/>
<Tool
Name="VCPreLinkEventTool"
- CommandLine=""
/>
<Tool
Name="VCLibrarianTool"
@@ -270,21 +221,17 @@
/>
<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)\..\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)\lib"
- IntermediateDirectory="$(WebKitOutputDir)\obj\$(ProjectName)\$(ConfigurationName)"
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"
+ 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;.\WebKitLibCommon.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;touch &quot;$(WebKitOutputDir)\tmp.cpp&quot;&#x0D;&#x0A;cl /analyze /nologo /c &quot;$(WebKitOutputDir)\tmp.cpp&quot; /Fo&quot;$(IntDir)\tmp.obj&quot; 2&gt;&amp;1 | findstr D9040&#x0D;&#x0A;if ERRORLEVEL 1 (set EnablePREfast=&quot;true&quot;) else (set EnablePREfast=&quot;false&quot;)&#x0D;&#x0A;if ERRORLEVEL 1 (set AnalyzeWithLargeStack=&quot;/analyze:65536&quot;) else (set AnalyzeWithLargeStack=&quot;&quot;)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\include\JavaScriptCore\*&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;bash &quot;$(WebKitLibrariesDir)\tools\scripts\auto-version.sh&quot; &quot;$(IntDir)&quot;&#x0D;&#x0A;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -300,24 +247,15 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include\WebKit&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\private&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include\private&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)&quot;;&quot;$(ProjectDir)\..\WebCoreSupport&quot;;&quot;$(IntDir)\include&quot;;&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;"
- PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit"
- UsePrecompiledHeader="2"
- PrecompiledHeaderThrough="WebKitPrefix.h"
- ProgramDataBaseFileName="$(OutDir)\$(TargetName).vc80.pdb"
- DisableSpecificWarnings="4819"
- ForcedIncludeFiles="WebKitPrefix.h;ICUVersion.h"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
- AdditionalIncludeDirectories="$(WebKitOutputDir)\obj\WebKit\"
/>
<Tool
Name="VCPreLinkEventTool"
- CommandLine=""
/>
<Tool
Name="VCLibrarianTool"
@@ -336,19 +274,69 @@
/>
<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)\..\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"
- 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"
+ 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;.\WebKitLibCommon.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\WebKitLibCommon.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;touch &quot;$(WebKitOutputDir)\tmp.cpp&quot;&#x0D;&#x0A;cl /analyze /nologo /c &quot;$(WebKitOutputDir)\tmp.cpp&quot; /Fo&quot;$(IntDir)\tmp.obj&quot; 2&gt;&amp;1 | findstr D9040&#x0D;&#x0A;if ERRORLEVEL 1 (set EnablePREfast=&quot;true&quot;) else (set EnablePREfast=&quot;false&quot;)&#x0D;&#x0A;if ERRORLEVEL 1 (set AnalyzeWithLargeStack=&quot;/analyze:65536&quot;) else (set AnalyzeWithLargeStack=&quot;&quot;)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\include\JavaScriptCore\*&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;bash &quot;$(WebKitLibrariesDir)\tools\scripts\auto-version.sh&quot; &quot;$(IntDir)&quot;&#x0D;&#x0A;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -364,25 +352,15 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include\WebKit&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\private&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include\private&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)&quot;;&quot;$(ProjectDir)\..\WebCoreSupport&quot;;&quot;$(IntDir)\include&quot;;&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;"
- PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit"
- UsePrecompiledHeader="2"
- PrecompiledHeaderThrough="WebKitPrefix.h"
- ProgramDataBaseFileName="$(OutDir)\$(TargetName).vc80.pdb"
- Detect64BitPortabilityProblems="false"
- DisableSpecificWarnings="4819"
- ForcedIncludeFiles="WebKitPrefix.h;ICUVersion.h"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
- AdditionalIncludeDirectories="$(WebKitOutputDir)\obj\WebKit\"
/>
<Tool
Name="VCPreLinkEventTool"
- CommandLine=""
/>
<Tool
Name="VCLibrarianTool"
@@ -401,7 +379,6 @@
/>
<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)\..\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>
@@ -910,6 +887,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\WebCoreStatistics.cpp"
@@ -986,6 +971,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\WebDropSource.cpp"
@@ -1162,6 +1155,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\WebURLCredential.cpp"
@@ -1192,14 +1193,6 @@
Name="API"
>
<File
- RelativePath=".\WebKit.def"
- >
- </File>
- <File
- RelativePath=".\WebKit_debug.def"
- >
- </File>
- <File
RelativePath="..\WebKitCOMAPI.cpp"
>
</File>
@@ -1296,11 +1289,11 @@
>
</File>
<File
- RelativePath="..\WebCoreSupport\WebGeolocationControllerClient.cpp"
+ RelativePath="..\WebCoreSupport\WebGeolocationClient.cpp"
>
</File>
<File
- RelativePath="..\WebCoreSupport\WebGeolocationControllerClient.h"
+ RelativePath="..\WebCoreSupport\WebGeolocationClient.h"
>
</File>
<File
@@ -1393,6 +1386,14 @@
PrecompiledHeaderThrough="WebKitPrefix.h"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\WebKitPrefix.h"
diff --git a/WebKit/win/WebKit.vcproj/WebKitGUID.vcproj b/WebKit/win/WebKit.vcproj/WebKitGUID.vcproj
index b2b708e..0064840 100644
--- a/WebKit/win/WebKit.vcproj/WebKitGUID.vcproj
+++ b/WebKit/win/WebKit.vcproj/WebKitGUID.vcproj
@@ -17,14 +17,12 @@
<Configurations>
<Configuration
Name="Debug|Win32"
- OutputDirectory="$(WebKitOutputDir)\lib"
ConfigurationType="4"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;.\WebKitGUIDCommon.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;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -37,14 +35,10 @@
/>
<Tool
Name="VCMIDLTool"
- AdditionalIncludeDirectories="Interfaces"
OutputDirectory="Debug"
- HeaderFileName="$(InputName).h"
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="$(WebKitOutputDir)\$(ConfigurationName)\WebKit"
- PreprocessorDefinitions="_USRDLL;WEBKITGUID_EXPORTS"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -72,20 +66,16 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;"
/>
</Configuration>
<Configuration
Name="Release|Win32"
- OutputDirectory="$(WebKitOutputDir)\lib"
ConfigurationType="4"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\WebKitGUIDCommon.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;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -98,14 +88,10 @@
/>
<Tool
Name="VCMIDLTool"
- AdditionalIncludeDirectories="Interfaces"
OutputDirectory="Release"
- HeaderFileName="$(InputName).h"
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="$(WebKitOutputDir)\$(ConfigurationName)\WebKit"
- PreprocessorDefinitions="_USRDLL;WEBKITGUID_EXPORTS"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -133,19 +119,16 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;"
/>
</Configuration>
<Configuration
Name="Debug_Internal|Win32"
- 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"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_internal.vsprops;.\WebKitGUIDCommon.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;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -158,14 +141,10 @@
/>
<Tool
Name="VCMIDLTool"
- AdditionalIncludeDirectories="Interfaces"
OutputDirectory="Debug"
- HeaderFileName="$(InputName).h"
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="$(WebKitOutputDir)\$(ConfigurationName)\WebKit"
- PreprocessorDefinitions="_USRDLL;WEBKITGUID_EXPORTS"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -193,19 +172,16 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;"
/>
</Configuration>
<Configuration
Name="Debug_All|Win32"
- 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"
+ 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;.\WebKitGUIDCommon.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;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -218,14 +194,10 @@
/>
<Tool
Name="VCMIDLTool"
- AdditionalIncludeDirectories="Interfaces"
OutputDirectory="Debug"
- HeaderFileName="$(InputName).h"
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="$(WebKitOutputDir)\$(ConfigurationName)\WebKit"
- PreprocessorDefinitions="_USRDLL;WEBKITGUID_EXPORTS"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -253,7 +225,60 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\WebKitGUIDCommon.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ OutputDirectory="Release"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
diff --git a/WebKit/win/WebKit.vcproj/WebKitGUIDCommon.vsprops b/WebKit/win/WebKit.vcproj/WebKitGUIDCommon.vsprops
new file mode 100644
index 0000000..422c8bd
--- /dev/null
+++ b/WebKit/win/WebKit.vcproj/WebKitGUIDCommon.vsprops
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="WebKitGUIDCommon"
+ OutputDirectory="$(WebKitOutputDir)\lib"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(WebKitOutputDir)\$(ConfigurationName)\WebKit"
+ PreprocessorDefinitions="_USRDLL;WEBKITGUID_EXPORTS"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;"
+ />
+ <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;"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ AdditionalIncludeDirectories="Interfaces"
+ HeaderFileName="$(InputName).h"
+ />
+
+</VisualStudioPropertySheet>
diff --git a/WebKit/win/WebKit.vcproj/WebKitLibCommon.vsprops b/WebKit/win/WebKit.vcproj/WebKitLibCommon.vsprops
new file mode 100644
index 0000000..f2fb761
--- /dev/null
+++ b/WebKit/win/WebKit.vcproj/WebKitLibCommon.vsprops
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="WebKitLibCommon"
+ OutputDirectory="$(WebKitOutputDir)\lib"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include\WebKit&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\private&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include\private&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\private\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)&quot;;&quot;$(ProjectDir)\..\WebCoreSupport&quot;;&quot;$(IntDir)\include&quot;;&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;"
+ PreprocessorDefinitions="_USRDLL;WEBKIT_EXPORTS;FRAMEWORK_NAME=WebKit"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="WebKitPrefix.h"
+ ProgramDataBaseFileName="$(OutDir)\$(TargetName).vc80.pdb"
+ DisableSpecificWarnings="4819"
+ ForcedIncludeFiles="WebKitPrefix.h;ICUVersion.h"
+ />
+ <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)\..\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;"
+ />
+ <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;touch &quot;$(WebKitOutputDir)\tmp.cpp&quot;&#x0D;&#x0A;cl /analyze /nologo /c &quot;$(WebKitOutputDir)\tmp.cpp&quot; /Fo&quot;$(IntDir)\tmp.obj&quot; 2&gt;&amp;1 | findstr D9040&#x0D;&#x0A;if ERRORLEVEL 1 (set EnablePREfast=&quot;true&quot;) else (set EnablePREfast=&quot;false&quot;)&#x0D;&#x0A;if ERRORLEVEL 1 (set AnalyzeWithLargeStack=&quot;/analyze:65536&quot;) else (set AnalyzeWithLargeStack=&quot;&quot;)&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitLibrariesDir)\include\JavaScriptCore\*&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;bash &quot;$(WebKitLibrariesDir)\tools\scripts\auto-version.sh&quot; &quot;$(IntDir)&quot;&#x0D;&#x0A;"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ AdditionalIncludeDirectories="$(WebKitOutputDir)\obj\WebKit\"
+ />
+</VisualStudioPropertySheet>
diff --git a/WebKit/win/WebKit.vcproj/WebKit_debug.def b/WebKit/win/WebKit.vcproj/WebKit_debug.def
deleted file mode 100644
index c15957a..0000000
--- a/WebKit/win/WebKit.vcproj/WebKit_debug.def
+++ /dev/null
@@ -1,136 +0,0 @@
-LIBRARY "WebKit_debug"
-
-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/WebKitPrefix.h b/WebKit/win/WebKitPrefix.h
index 5c2001f..3086f0b 100644
--- a/WebKit/win/WebKitPrefix.h
+++ b/WebKit/win/WebKitPrefix.h
@@ -24,7 +24,7 @@
* 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 _WIN32_WINNT
#define _WIN32_WINNT 0x0500
@@ -49,3 +49,4 @@
#include <CoreFoundation/CoreFoundation.h>
#include <WebKit/WebKit.h>
+
diff --git a/WebKit/win/WebPreferences.cpp b/WebKit/win/WebPreferences.cpp
index d4bfd3e..0854ac8 100644
--- a/WebKit/win/WebPreferences.cpp
+++ b/WebKit/win/WebPreferences.cpp
@@ -190,7 +190,7 @@ void WebPreferences::initializeDefaultSettings()
CFDictionaryAddValue(defaults, CFSTR(WebKitSansSerifFontPreferenceKey), CFSTR("Arial"));
CFDictionaryAddValue(defaults, CFSTR(WebKitCursiveFontPreferenceKey), CFSTR("Comic Sans MS"));
CFDictionaryAddValue(defaults, CFSTR(WebKitFantasyFontPreferenceKey), CFSTR("Comic Sans MS"));
- CFDictionaryAddValue(defaults, CFSTR(WebKitMinimumFontSizePreferenceKey), CFSTR("1"));
+ CFDictionaryAddValue(defaults, CFSTR(WebKitMinimumFontSizePreferenceKey), CFSTR("0"));
CFDictionaryAddValue(defaults, CFSTR(WebKitMinimumLogicalFontSizePreferenceKey), CFSTR("9"));
CFDictionaryAddValue(defaults, CFSTR(WebKitDefaultFontSizePreferenceKey), CFSTR("16"));
CFDictionaryAddValue(defaults, CFSTR(WebKitDefaultFixedFontSizePreferenceKey), CFSTR("13"));
diff --git a/WebKit/win/WebView.cpp b/WebKit/win/WebView.cpp
index 7ce7812..20c8d17 100644
--- a/WebKit/win/WebView.cpp
+++ b/WebKit/win/WebView.cpp
@@ -42,7 +42,7 @@
#include "WebEditorClient.h"
#include "WebElementPropertyBag.h"
#include "WebFrame.h"
-#include "WebGeolocationControllerClient.h"
+#include "WebGeolocationClient.h"
#include "WebGeolocationPosition.h"
#include "WebIconDatabase.h"
#include "WebInspector.h"
@@ -2594,7 +2594,7 @@ HRESULT STDMETHODCALLTYPE WebView::initWithFrame(
pageClients.inspectorClient = new WebInspectorClient(this);
pageClients.pluginHalterClient = new WebPluginHalterClient(this);
#if ENABLE(CLIENT_BASED_GEOLOCATION)
- pageClients.geolocationControllerClient = new WebGeolocationControllerClient(this);
+ pageClients.geolocationClient = new WebGeolocationClient(this);
#endif
m_page = new Page(pageClients);
diff --git a/WebKit/wince/ChangeLog b/WebKit/wince/ChangeLog
index 0cbd925..0b99bf7 100644
--- a/WebKit/wince/ChangeLog
+++ b/WebKit/wince/ChangeLog
@@ -1,3 +1,9 @@
+2010-11-13 Patrick Gansterer <paroga@webkit.org>
+
+ Unreviewed, build fix after r71541.
+
+ * WebCoreSupport/ChromeClientWinCE.h:
+
2010-11-08 Alexey Proskuryakov <ap@apple.com>
Reviewed by Darin Adler.
diff --git a/WebKit/wince/WebCoreSupport/ChromeClientWinCE.h b/WebKit/wince/WebCoreSupport/ChromeClientWinCE.h
index 7219934..3069472 100644
--- a/WebKit/wince/WebCoreSupport/ChromeClientWinCE.h
+++ b/WebKit/wince/WebCoreSupport/ChromeClientWinCE.h
@@ -51,7 +51,7 @@ public:
virtual void takeFocus(WebCore::FocusDirection);
virtual void focusedNodeChanged(WebCore::Node*);
- virtual void focusedFrameChanged(Frame*);
+ virtual void focusedFrameChanged(WebCore::Frame*);
// The Frame pointer provides the ChromeClient with context about which
// Frame wants to create the new Page. Also, the newly created window
diff --git a/WebKitLibraries/ChangeLog b/WebKitLibraries/ChangeLog
index 767d09a..bfd54bc 100644
--- a/WebKitLibraries/ChangeLog
+++ b/WebKitLibraries/ChangeLog
@@ -1,3 +1,33 @@
+2010-11-17 Steve Falkenburg <sfalken@apple.com>
+
+ Rubber-stamped by Adam Roben.
+
+ Update WebKitSystemInterfaceWin.
+
+ * win/lib/WebKitSystemInterface.lib:
+ * win/lib/WebKitSystemInterface_debug.lib:
+
+2010-11-16 Adam Roben <aroben@apple.com>
+
+ Ignore files from libdispatch/zlib
+
+ Rubber-stamped by Eric Seidel.
+
+ * win/include: Modified property svn:ignore.
+ * win/lib: Modified property svn:ignore.
+
+2010-11-10 Csaba Osztrogonác <ossy@webkit.org>
+
+ Reviewed by David Hyatt.
+
+ HTML5 Ruby support should be mandatory feature
+ https://bugs.webkit.org/show_bug.cgi?id=49272
+
+ Remove Ruby as optional feature.
+
+ * win/tools/vsprops/FeatureDefines.vsprops:
+ * win/tools/vsprops/FeatureDefinesCairo.vsprops:
+
2010-10-29 Dan Bernstein <mitz@apple.com>
Snow Leopard PowerPC build fix.
diff --git a/WebKitLibraries/win/lib/WebKitSystemInterface.lib b/WebKitLibraries/win/lib/WebKitSystemInterface.lib
index 1938e9d..686a355 100644
--- a/WebKitLibraries/win/lib/WebKitSystemInterface.lib
+++ b/WebKitLibraries/win/lib/WebKitSystemInterface.lib
Binary files differ
diff --git a/WebKitLibraries/win/lib/WebKitSystemInterface_debug.lib b/WebKitLibraries/win/lib/WebKitSystemInterface_debug.lib
index fe4a228..f0257a0 100644
--- a/WebKitLibraries/win/lib/WebKitSystemInterface_debug.lib
+++ b/WebKitLibraries/win/lib/WebKitSystemInterface_debug.lib
Binary files differ
diff --git a/WebKitLibraries/win/tools/vsprops/FeatureDefines.vsprops b/WebKitLibraries/win/tools/vsprops/FeatureDefines.vsprops
index addcae2..eaa660b 100644
--- a/WebKitLibraries/win/tools/vsprops/FeatureDefines.vsprops
+++ b/WebKitLibraries/win/tools/vsprops/FeatureDefines.vsprops
@@ -9,7 +9,7 @@
>
<Tool
Name="VCCLCompilerTool"
- PreprocessorDefinitions="$(ENABLE_3D_CANVAS);$(ENABLE_3D_RENDERING);$(ENABLE_ACCELERATED_2D_CANVAS);$(ENABLE_BLOB);$(ENABLE_CHANNEL_MESSAGING);$(ENABLE_CLIENT_BASED_GEOLOCATION);$(ENABLE_DATABASE);$(ENABLE_DATAGRID);$(ENABLE_DATALIST);$(ENABLE_DEVICE_ORIENTATION);$(ENABLE_DIRECTORY_UPLOAD);$(ENABLE_DOM_STORAGE);$(ENABLE_EVENTSOURCE);$(ENABLE_FILTERS);$(ENABLE_FILE_SYSTEM);$(ENABLE_FULLSCREEN_API);$(ENABLE_GEOLOCATION);$(ENABLE_ICONDATABASE);$(ENABLE_IMAGE_RESIZER);$(ENABLE_INDEXED_DATABASE);$(ENABLE_INPUT_SPEECH);$(ENABLE_JAVASCRIPT_DEBUGGER);$(ENABLE_LINK_PREFETCH);$(ENABLE_MATHML);$(ENABLE_METER_TAG);$(ENABLE_NOTIFICATIONS);$(ENABLE_OFFLINE_WEB_APPLICATIONS);$(ENABLE_PROGRESS_TAG);$(ENABLE_RUBY);$(ENABLE_SHARED_WORKERS);$(ENABLE_SVG);$(ENABLE_SVG_ANIMATION);$(ENABLE_SVG_AS_IMAGE);$(ENABLE_SVG_DOM_OBJC_BINDINGS);$(ENABLE_SVG_FONTS);$(ENABLE_SVG_FOREIGN_OBJECT);$(ENABLE_SVG_USE);$(ENABLE_VIDEO);$(ENABLE_WEB_SOCKETS);$(ENABLE_WEB_TIMING);$(ENABLE_WML);$(ENABLE_WORKERS);$(ENABLE_XHTMLMP);$(ENABLE_XPATH);$(ENABLE_XSLT)"
+ PreprocessorDefinitions="$(ENABLE_3D_CANVAS);$(ENABLE_3D_RENDERING);$(ENABLE_ACCELERATED_2D_CANVAS);$(ENABLE_BLOB);$(ENABLE_CHANNEL_MESSAGING);$(ENABLE_CLIENT_BASED_GEOLOCATION);$(ENABLE_DATABASE);$(ENABLE_DATAGRID);$(ENABLE_DATALIST);$(ENABLE_DEVICE_ORIENTATION);$(ENABLE_DIRECTORY_UPLOAD);$(ENABLE_DOM_STORAGE);$(ENABLE_EVENTSOURCE);$(ENABLE_FILTERS);$(ENABLE_FILE_SYSTEM);$(ENABLE_FULLSCREEN_API);$(ENABLE_GEOLOCATION);$(ENABLE_ICONDATABASE);$(ENABLE_IMAGE_RESIZER);$(ENABLE_INDEXED_DATABASE);$(ENABLE_INPUT_SPEECH);$(ENABLE_JAVASCRIPT_DEBUGGER);$(ENABLE_LINK_PREFETCH);$(ENABLE_MATHML);$(ENABLE_METER_TAG);$(ENABLE_NOTIFICATIONS);$(ENABLE_OFFLINE_WEB_APPLICATIONS);$(ENABLE_PROGRESS_TAG);$(ENABLE_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)"
/>
<UserMacro
Name="ENABLE_3D_CANVAS"
@@ -152,11 +152,6 @@
PerformEnvironmentSet="true"
/>
<UserMacro
- Name="ENABLE_RUBY"
- Value="ENABLE_RUBY"
- PerformEnvironmentSet="true"
- />
- <UserMacro
Name="ENABLE_SHARED_WORKERS"
Value="ENABLE_SHARED_WORKERS"
PerformEnvironmentSet="true"
diff --git a/WebKitLibraries/win/tools/vsprops/FeatureDefinesCairo.vsprops b/WebKitLibraries/win/tools/vsprops/FeatureDefinesCairo.vsprops
index f9ffafc..1dd6532 100644
--- a/WebKitLibraries/win/tools/vsprops/FeatureDefinesCairo.vsprops
+++ b/WebKitLibraries/win/tools/vsprops/FeatureDefinesCairo.vsprops
@@ -9,7 +9,7 @@
>
<Tool
Name="VCCLCompilerTool"
- PreprocessorDefinitions="$(ENABLE_3D_CANVAS);$(ENABLE_3D_RENDERING);$(ENABLE_ACCELERATED_2D_CANVAS);$(ENABLE_BLOB);$(ENABLE_CHANNEL_MESSAGING);$(ENABLE_CLIENT_BASED_GEOLOCATION);$(ENABLE_DATABASE);$(ENABLE_DATAGRID);$(ENABLE_DATALIST);$(ENABLE_DEVICE_ORIENTATION);$(ENABLE_DIRECTORY_UPLOAD);$(ENABLE_DOM_STORAGE);$(ENABLE_EVENTSOURCE);$(ENABLE_FILTERS);$(ENABLE_FILE_SYSTEM);$(ENABLE_FULLSCREEN_API);$(ENABLE_GEOLOCATION);$(ENABLE_ICONDATABASE);$(ENABLE_IMAGE_RESIZER);$(ENABLE_INDEXED_DATABASE);$(ENABLE_INPUT_SPEECH);$(ENABLE_JAVASCRIPT_DEBUGGER);$(ENABLE_LINK_PREFETCH);$(ENABLE_MATHML);$(ENABLE_METER_TAG);$(ENABLE_NOTIFICATIONS);$(ENABLE_OFFLINE_WEB_APPLICATIONS);$(ENABLE_PROGRESS_TAG);$(ENABLE_RUBY);$(ENABLE_SHARED_WORKERS);$(ENABLE_SVG);$(ENABLE_SVG_ANIMATION);$(ENABLE_SVG_AS_IMAGE);$(ENABLE_SVG_DOM_OBJC_BINDINGS);$(ENABLE_SVG_FONTS);$(ENABLE_SVG_FOREIGN_OBJECT);$(ENABLE_SVG_USE);$(ENABLE_VIDEO);$(ENABLE_WEB_SOCKETS);$(ENABLE_WEB_TIMING);$(ENABLE_WML);$(ENABLE_WORKERS);$(ENABLE_XHTMLMP);$(ENABLE_XPATH);$(ENABLE_XSLT)"
+ PreprocessorDefinitions="$(ENABLE_3D_CANVAS);$(ENABLE_3D_RENDERING);$(ENABLE_ACCELERATED_2D_CANVAS);$(ENABLE_BLOB);$(ENABLE_CHANNEL_MESSAGING);$(ENABLE_CLIENT_BASED_GEOLOCATION);$(ENABLE_DATABASE);$(ENABLE_DATAGRID);$(ENABLE_DATALIST);$(ENABLE_DEVICE_ORIENTATION);$(ENABLE_DIRECTORY_UPLOAD);$(ENABLE_DOM_STORAGE);$(ENABLE_EVENTSOURCE);$(ENABLE_FILTERS);$(ENABLE_FILE_SYSTEM);$(ENABLE_FULLSCREEN_API);$(ENABLE_GEOLOCATION);$(ENABLE_ICONDATABASE);$(ENABLE_IMAGE_RESIZER);$(ENABLE_INDEXED_DATABASE);$(ENABLE_INPUT_SPEECH);$(ENABLE_JAVASCRIPT_DEBUGGER);$(ENABLE_LINK_PREFETCH);$(ENABLE_MATHML);$(ENABLE_METER_TAG);$(ENABLE_NOTIFICATIONS);$(ENABLE_OFFLINE_WEB_APPLICATIONS);$(ENABLE_PROGRESS_TAG);$(ENABLE_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)"
/>
<UserMacro
Name="ENABLE_3D_CANVAS"
@@ -152,11 +152,6 @@
PerformEnvironmentSet="true"
/>
<UserMacro
- Name="ENABLE_RUBY"
- Value="ENABLE_RUBY"
- PerformEnvironmentSet="true"
- />
- <UserMacro
Name="ENABLE_SHARED_WORKERS"
Value="ENABLE_SHARED_WORKERS"
PerformEnvironmentSet="true"
diff --git a/WebKitTools/BuildSlaveSupport/build.webkit.org-config/config.json b/WebKitTools/BuildSlaveSupport/build.webkit.org-config/config.json
index f39e10c..868ee0d 100644
--- a/WebKitTools/BuildSlaveSupport/build.webkit.org-config/config.json
+++ b/WebKitTools/BuildSlaveSupport/build.webkit.org-config/config.json
@@ -95,9 +95,9 @@
"slavenames": ["apple-windows-2", "test-slave"]
},
{
- "name": "Windows Release (Tests)", "type": "Test", "builddir": "win-release-tests",
+ "name": "Windows 7 Release (Tests)", "type": "Test", "builddir": "win-release-tests",
"platform": "win", "configuration": "release", "architectures": ["i386"],
- "slavenames": ["apple-windows-3", "apple-windows-5", "test-slave"]
+ "slavenames": ["apple-windows-5", "apple-windows-6", "test-slave"]
},
{
"name": "Windows Debug (Build)", "type": "Build", "builddir": "win-debug",
@@ -106,11 +106,11 @@
"slavenames": ["apple-windows-1", "test-slave"]
},
{
- "name": "Windows Debug (Tests)", "type": "Test", "builddir": "win-debug-tests",
+ "name": "Windows XP Debug (Tests)", "type": "Test", "builddir": "win-debug-tests",
"platform": "win", "configuration": "debug", "architectures": ["i386"],
- "slavenames": ["apple-windows-4", "apple-windows-6", "test-slave"]
+ "slavenames": ["apple-windows-3", "apple-windows-4", "test-slave"]
},
- { "name": "Windows Release (WebKit2 Tests)", "type": "TestWebKit2", "builddir": "win-release-tests-wk2",
+ { "name": "Windows 7 Release (WebKit2 Tests)", "type": "TestWebKit2", "builddir": "win-release-tests-wk2",
"platform": "win", "configuration": "release", "architectures": ["i386"],
"slavenames": ["apple-windows-7", "test-slave"]
},
@@ -214,7 +214,6 @@
"schedulers": [ { "type": "AnyBranchScheduler", "name": "trunk", "change_filter": "trunk_filter", "treeStableTimer": 45.0,
"builderNames": ["Leopard Intel Release (Build)", "Leopard Intel Debug (Build)",
"SnowLeopard Intel Release (Build)", "SnowLeopard Intel Leaks",
- "Windows Release (Build)", "Windows Debug (Build)",
"GTK Linux 32-bit Release", "GTK Linux 32-bit Debug", "GTK Linux 64-bit Debug", "GTK Linux 64-bit Release",
"Qt Linux Release", "Qt Linux Release minimal", "Qt Linux ARMv5 Release", "Qt Linux ARMv7 Release",
"Qt Windows 32-bit Release", "Qt Windows 32-bit Debug",
@@ -222,6 +221,9 @@
"Chromium Win Release (Tests)", "Chromium Mac Release (Tests)", "Chromium Linux Release (Tests)",
"WinCairo Debug (Build)", "EFL Linux Release (Build)"]
},
+ { "type": "PlatformSpecificScheduler", "platform": "win", "branch": "trunk", "treeStableTimer": 45.0,
+ "builderNames": ["Windows Release (Build)", "Windows Debug (Build)"]
+ },
{ "type": "Triggerable", "name": "leopard-intel-release-tests",
"builderNames": ["Leopard Intel Release (Tests)"]
},
@@ -235,13 +237,13 @@
"builderNames": ["SnowLeopard Intel Release (WebKit2 Tests)"]
},
{ "type": "Triggerable", "name": "win-release-tests",
- "builderNames": ["Windows Release (Tests)"]
+ "builderNames": ["Windows 7 Release (Tests)"]
},
{ "type": "Triggerable", "name": "win-debug-tests",
- "builderNames": ["Windows Debug (Tests)"]
+ "builderNames": ["Windows XP Debug (Tests)"]
},
{ "type": "Triggerable", "name": "win-release-tests-wk2",
- "builderNames": ["Windows Release (WebKit2 Tests)"]
+ "builderNames": ["Windows 7 Release (WebKit2 Tests)"]
}
]
}
diff --git a/WebKitTools/BuildSlaveSupport/build.webkit.org-config/master.cfg b/WebKitTools/BuildSlaveSupport/build.webkit.org-config/master.cfg
index 97641bf..c28abb6 100644
--- a/WebKitTools/BuildSlaveSupport/build.webkit.org-config/master.cfg
+++ b/WebKitTools/BuildSlaveSupport/build.webkit.org-config/master.cfg
@@ -17,6 +17,7 @@ from twisted.internet import defer
import re
import simplejson
+from webkitpy.common.config import build as wkbuild
from webkitpy.common.net.buildbot import BuildBot as wkbuildbot
WithProperties = properties.WithProperties
@@ -478,6 +479,15 @@ class NewBuildAndTestFactory(BuildAndTestFactory):
class TestWebKit2Factory(TestFactory):
TestClass = RunWebKit2Tests
+class PlatformSpecificScheduler(AnyBranchScheduler):
+ def __init__(self, platform, branch, **kwargs):
+ self.platform = platform
+ filter = ChangeFilter(branch=[branch, None], filter_fn=self.filter)
+ AnyBranchScheduler.__init__(self, name=platform, change_filter=filter, **kwargs)
+
+ def filter(self, change):
+ return wkbuild.should_build(self.platform, change.files)
+
trunk_filter = ChangeFilter(branch=["trunk", None])
def loadBuilderConfig(c):
diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index a5e6893..ae0aa79 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,3 +1,1200 @@
+2010-11-17 Adam Roben <aroben@apple.com>
+
+ Don't trigger Windows builds when chromium-win test results change
+
+ Reviewed by Mark Rowe.
+
+ * Scripts/webkitpy/common/config/build.py:
+ (_should_file_trigger_build): Changed the regular expression used to
+ search for directory names to only consider full directory names,
+ rather than matching directory names where the string we care about is
+ a suffix of the name.
+
+ * Scripts/webkitpy/common/config/build_unittest.py:
+ (ShouldBuildTest): Added a test.
+
+2010-11-17 Hayato Ito <hayato@chromium.org>
+
+ Reviewed by Shinichiro Hamaji.
+
+ Remove a uri member from TestInput class.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49691
+
+ * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
+ * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
+
+2010-11-17 Adam Roben <aroben@apple.com>
+
+ Move FindSafari's settings into a vsprops file
+
+ Fixes <http://webkit.org/b/49699> FindSafari should use a vsprops file
+
+ Reviewed by Steve Falkenburg.
+
+ * FindSafari/FindSafari.vcproj:
+ * FindSafari/FindSafariCommon.vsprops: Added.
+
+2010-11-17 Adam Roben <aroben@apple.com>
+
+ Use a minimum font size of 0 in DRT on Windows
+
+ This is the Windows equivalent of r72164.
+
+ Rubber-stamped by Dave Hyatt.
+
+ * DumpRenderTree/win/DumpRenderTree.cpp:
+ (resetDefaultsToConsistentValues):
+
+2010-11-17 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Andreas Kling.
+
+ webkit-patch pretty-diff shouldn't need to be run from a checkout root in git
+ https://bugs.webkit.org/show_bug.cgi?id=49639
+
+ * Scripts/webkitpy/common/checkout/scm.py:
+
+2010-11-17 Mihai Parparita <mihaip@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ Rebaseline server: add loupe for image diffs
+ https://bugs.webkit.org/show_bug.cgi?id=49692
+
+ Add a loupe (magnifiying glass) for inspecting image diffs. Shows an
+ enlarged area of the expected, actual and diff images side by side.
+
+ * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html:
+ * Scripts/webkitpy/tool/commands/data/rebaselineserver/loupe.js: Added.
+ * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:
+ * Scripts/webkitpy/tool/commands/rebaselineserver.py:
+
+2010-11-17 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Adam Roben.
+
+ WebKitLauncherWin should use vsprops for shared build settings
+ https://bugs.webkit.org/show_bug.cgi?id=49696
+
+ * WebKitLauncherWin/WebKitLauncherWin.vcproj:
+ * WebKitLauncherWin/WebKitLauncherWinCommon.vsprops: Added.
+
+2010-11-17 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Adam Roben.
+
+ WinLauncher should use vsprops for shared build settings
+ https://bugs.webkit.org/show_bug.cgi?id=49695
+
+ * WinLauncher/WinLauncher.cpp:
+ (_tWinMain):
+ (PrintView):
+ (WndProc):
+ (MyEditProc):
+ * WinLauncher/WinLauncher.vcproj:
+ * WinLauncher/WinLauncherCommon.vsprops: Added.
+
+2010-11-17 Steve Falkenburg <sfalken@apple.com>
+
+ Delete unused file unintentionally added in last change.
+
+ * DumpRenderTree/win/DumpRenderTreeCURL.vsprops: Removed.
+
+2010-11-17 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Adam Roben.
+
+ DumpRenderTree on Windows should use a vsprops file for shared project settings
+ https://bugs.webkit.org/show_bug.cgi?id=49690
+
+ * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
+ * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginCommon.vsprops: Added.
+ * DumpRenderTree/win/DumpRenderTree.vcproj:
+ * DumpRenderTree/win/DumpRenderTreeApple.vsprops: Added.
+ * DumpRenderTree/win/DumpRenderTreeCFLite.vsprops: Added.
+ * DumpRenderTree/win/DumpRenderTreeCURL.vsprops: Added.
+ * DumpRenderTree/win/DumpRenderTreeCairo.vsprops: Added.
+ * DumpRenderTree/win/DumpRenderTreeCommon.vsprops: Added.
+ * DumpRenderTree/win/ImageDiff.vcproj:
+ * DumpRenderTree/win/ImageDiffCommon.vsprops: Added.
+
+2010-11-17 Hayato Ito <hayato@chromium.org>
+
+ Refactor TestTypeBase.compare_output().
+
+ Introduce a TestOutput class and update compare_output() of each test
+ types so that they can take both actual and expected TestOutput objects.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49431
+
+ * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
+ * Scripts/webkitpy/layout_tests/layout_package/test_output.py: Added.
+ * Scripts/webkitpy/layout_tests/port/base.py:
+ * Scripts/webkitpy/layout_tests/port/chromium.py:
+ * Scripts/webkitpy/layout_tests/port/dryrun.py:
+ * Scripts/webkitpy/layout_tests/port/test.py:
+ * Scripts/webkitpy/layout_tests/port/webkit.py:
+ * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
+ * Scripts/webkitpy/layout_tests/test_types/image_diff.py:
+ * Scripts/webkitpy/layout_tests/test_types/test_type_base.py:
+ * Scripts/webkitpy/layout_tests/test_types/text_diff.py:
+
+2010-11-17 Adam Roben <aroben@apple.com>
+
+ Make each Windows Test builder use the same OS for all its slaves
+
+ Currently each WebKit1 Windows Test builder has one Windows XP slave
+ and one Windows 7 slave. Having different OSes in a single builder
+ meant that the builders would alternate between red and green when
+ there were OS-specific failures.
+
+ Fixes <http://webkit.org/b/49688> Windows Test builders alternate
+ between red and green because of multiple OS versions
+
+ Reviewed by Mark Rowe.
+
+ * BuildSlaveSupport/build.webkit.org-config/config.json: Renamed
+ "Windows Release (Tests)" to "Windows 7 Release (Tests)", "Windows
+ Debug (Tests)" to "Windows XP Debug (Tests)", and "Windows Release
+ (WebKit2 Tests)" to "Windows 7 Release (WebKit2 Tests)". Updated the
+ builders for the two WebKit1 builders so that they would all use the
+ appropriate OS.
+
+2010-11-17 James Robinson <jamesr@chromium.org>
+
+ Reviewed by Dan Bernstein.
+
+ [chromium] Set minimum font size to 0 for DRT
+ https://bugs.webkit.org/show_bug.cgi?id=49677
+
+ Followup for http://trac.webkit.org/changeset/72141.
+
+ Test: http/tests/misc/acid3.html
+
+ * DumpRenderTree/chromium/WebPreferences.cpp:
+ (WebPreferences::reset):
+
+2010-11-17 Andras Becsi <abecsi@webkit.org>
+
+ Unreviewed build fix.
+
+ [Qt] Add missing file I forgot in r72220.
+
+ * MiniBrowser/MiniBrowser.qrc: Added.
+
+2010-11-17 Andras Becsi <abecsi@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt][WK2] Make it possible to set custom user agent strings in MiniBrowser.
+ https://bugs.webkit.org/show_bug.cgi?id=49627
+
+ Add a user agent dialog and a resource file for useragentlist.txt to MiniBrowser.
+
+ * MiniBrowser/MiniBrowser.qrc: Added.
+ Add it here to prevent qmake from detecting it
+ since it needs to be copied to the build directory.
+ * MiniBrowser/qt/BrowserWindow.cpp:
+ (BrowserWindow::BrowserWindow):
+ (BrowserWindow::updateUserAgentList):
+ (BrowserWindow::showUserAgentDialog):
+ * MiniBrowser/qt/BrowserWindow.h:
+ * MiniBrowser/qt/MiniBrowser.pro:
+
+2010-11-17 Adam Roben <aroben@apple.com>
+
+ Make changes to the Mac WebKit2 Skipped file trigger Windows builds
+
+ We use that file on Windows!
+
+ Fixes <http://webkit.org/b/49643> Changes to
+ LayoutTests/platform/mac-wk2 should trigger a Windows build, but don't
+
+ Reviewed by Steve Falkenburg.
+
+ * Scripts/webkitpy/common/config/build.py:
+ (_should_file_trigger_build): Added the mac-wk2 directory and make it
+ trigger builds on SnowLeopard and Windows.
+
+ * Scripts/webkitpy/common/config/build_unittest.py:
+ (ShouldBuildTest.test_should_build): Added a test.
+
+2010-11-17 Satish Sampath <satish@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ Clear the speech input mock explicitly before each test.
+ https://bugs.webkit.org/show_bug.cgi?id=49660
+
+ * DumpRenderTree/chromium/LayoutTestController.cpp:
+ (LayoutTestController::setMockSpeechInputResult):
+ * DumpRenderTree/chromium/LayoutTestController.h:
+ * DumpRenderTree/chromium/WebViewHost.cpp:
+ (WebViewHost::speechInputController):
+ (WebViewHost::reset): Invoke speech input mock's clearResults method.
+ * DumpRenderTree/chromium/WebViewHost.h:
+ (WebViewHost::speechInputControllerMock): Moved mock from LayoutTestController.
+
+2010-11-17 Alexander Pavlov <apavlov@chromium.org>
+
+ Unreviewed, specify IRC nickname in committers.py.
+
+ * Scripts/webkitpy/common/config/committers.py:
+
+2010-11-17 Gabor Rapcsanyi <rgabor@inf.u-szeged.hu>
+
+ Reviewed by Tony Chang.
+
+ [NRWT] Make http locking similar to perl implementation
+ https://bugs.webkit.org/show_bug.cgi?id=49187
+
+ * Scripts/webkitpy/common/system/file_lock.py: Added.
+ * Scripts/webkitpy/common/system/file_lock_unittest.py: Added.
+ * Scripts/webkitpy/layout_tests/port/http_lock.py:
+
+2010-11-17 MORITA Hajime <morrita@google.com>
+
+ Reviewed by Kent Tamura.
+
+ [Chromium][DRT] EventSender.contextClick() should aware spellchecking
+ https://bugs.webkit.org/show_bug.cgi?id=49366
+
+ - EvenSender: Checked WebContextMenuData.misspelledWord and added extra context menu entries
+ according to the spellchecker suggestion
+ - MockSpellCheck: add fillSuggestionList to provide fake suggestions.
+
+ test_expectations.txt will be changed after this change is ported to test_shell.
+
+ * DumpRenderTree/chromium/EventSender.cpp:
+ (makeMenuItemStringsFor):
+ (EventSender::contextClick):
+ * DumpRenderTree/chromium/MockSpellCheck.cpp:
+ (MockSpellCheck::fillSuggestionList):
+ (MockSpellCheck::initializeIfNeeded):
+ * DumpRenderTree/chromium/MockSpellCheck.h:
+ * DumpRenderTree/chromium/WebViewHost.cpp:
+ (WebViewHost::mockSpellCheck):
+ * DumpRenderTree/chromium/WebViewHost.h:
+
+2010-11-16 Dave Hyatt <hyatt@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Make sure the pref for minimum font size is just explicitly set to 0 every time,
+ since the bots have 1 stuck in their plist otherwise.
+
+ * DumpRenderTree/mac/DumpRenderTree.mm:
+ (resetDefaultsToConsistentValues):
+
+2010-11-16 Mihai Parparita <mihaip@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ Rebaseline server: compute diffs client-side
+ https://bugs.webkit.org/show_bug.cgi?id=49640
+
+ The image diff output from the DRT is pretty bad on some ports (at
+ least the Mac one), so it's better to compute diffs on the client by
+ using <canvas>.
+
+ * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html:
+ * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css:
+ * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:
+
+2010-11-16 Mihai Parparita <mihaip@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ Rebaseline server: display test results
+ https://bugs.webkit.org/show_bug.cgi?id=49626
+
+ Adds basic result display to the rebaseline server. On the Python side
+ this involves:
+ - Parsing the unexpected_results.json into a dictionary.
+ - Serving it as JSON under /results.json.
+ (the JSON -> dict -> JSON transform isn't strictly necessary right now,
+ but I'll need to have access to the parsed results on the Python side
+ for follow-up changes).
+
+ On the web UI side this adds:
+ - Markup for display image and text results (expected, actual, diff),
+ and JS for populating it.
+ - Markup for breaking down test results by failure type and directory,
+ and JS for populating it.
+
+ * Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html:
+ * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css:
+ * Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js:
+ * Scripts/webkitpy/tool/commands/data/rebaselineserver/util.js: Added.
+ * Scripts/webkitpy/tool/commands/rebaselineserver.py:
+
+2010-11-16 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Ojan Vafai.
+
+ See Chromium issue http://codereview.chromium.org/5133001/ - we
+ are modifying the build bots to pass in the builder name with
+ the "GPU" string appended instead of appending it in the code.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49636
+
+ * Scripts/webkitpy/layout_tests/port/chromium_gpu.py:
+
+2010-11-16 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Disable LTCG for Windows Release builds. Add new Release_LTCG configuration.
+ https://bugs.webkit.org/show_bug.cgi?id=49632
+
+ * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
+ * DumpRenderTree/win/DumpRenderTree.vcproj:
+ * DumpRenderTree/win/ImageDiff.vcproj:
+ * MiniBrowser/MiniBrowser.vcproj:
+ * TestWebKitAPI/win/TestWebKitAPI.vcproj:
+ * WebKitLauncherWin/WebKitLauncherWin.vcproj:
+ * WebKitTestRunner/win/InjectedBundle.vcproj:
+ * WebKitTestRunner/win/WebKitTestRunner.vcproj:
+ * WinLauncher/WinLauncher.vcproj:
+ * record-memory-win/record-memory-win.vcproj:
+
+2010-11-16 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Ojan Vafai.
+
+ new-run-webkit-tests: rename TestInfo to TestInput, move image hash to work thread
+
+ Rename the TestInfo class to TestInput to be clearer about its
+ function, and move the checksum-reading code into dump_render_tree_thread
+ to avoid cross-thread access.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49573
+
+ * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:
+ * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
+ * Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:
+
+2010-11-16 Dave Hyatt <hyatt@apple.com>
+
+ Fix bustage. Remove the minimum font size pref setting in DumpRenderTree.
+
+ * DumpRenderTree/mac/DumpRenderTree.mm:
+ (resetDefaultsToConsistentValues):
+
+2010-11-16 Stephanie Lewis <slewis@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ <rdar://problem/8624267> Leak creating offscreen webview running fast/dom tests
+
+ Use shared DeviceOrientationProviderMock. The old allocation method created a new WebDeviceOrientationProviderMock
+ for every WebView, and the WebKit API doesn't support that ownership model.
+
+ I also fixed a leak in setMockDeviceOrientation by adding a missing release.
+
+ * DumpRenderTree/mac/DumpRenderTree.mm:
+ (createWebViewAndOffscreenWindow):
+ * DumpRenderTree/mac/LayoutTestControllerMac.mm:
+ (LayoutTestController::setMockDeviceOrientation):
+
+2010-11-16 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Ojan Vafai.
+
+ new-run-webkit-tests: log the process id in --verbose mode
+
+ As part of the switch to multi-process mode, we should log the
+ process id when running w/ --verbose.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49571
+
+ * Scripts/webkitpy/layout_tests/layout_package/printing.py:
+
+2010-11-16 Adam Roben <aroben@apple.com>
+
+ Only trigger Windows builds when files that we actually use on Windows
+ are changed
+
+ A new Scheduler subclass, PlatformSpecificScheduler, has been added.
+ It uses the new webkitpy.common.config.build module to determine
+ whether a particular change should trigger a build on a particular
+ platform. The Windows builders have been switched to use a
+ PlatformSpecificScheduler.
+
+ The logic to determine whether or not a particular change should
+ trigger a build on a given platform has only been implemented/tested
+ for Windows. I tried to make it easy to add more platforms in the
+ future, but I don't have enough familiarity with all platforms to be
+ able to implement it for them.
+
+ Fixes <http://webkit.org/b/49407> Windows builders kick off builds for
+ lots irrelevant changes (e.g., rebaselining Chromium test results)
+
+ Reviewed by Eric Seidel.
+
+ * BuildSlaveSupport/build.webkit.org-config/config.json: Use a
+ PlatformSpecificScheduler for the Windows builders.
+
+ * BuildSlaveSupport/build.webkit.org-config/master.cfg:
+ (PlatformSpecificScheduler.__init__): Added. Stores our platform, sets
+ up a ChangeFilter that filters to our branch and will call through to
+ our filter method, and calls up to our base class.
+ (PlatformSpecificScheduler.filter): Calls through to
+ build.should_build to find out whether we should trigger a build for
+ this change.
+
+ * Scripts/webkitpy/common/net/build.py: Added.
+ (_should_file_trigger_build): Uses a set of directories and regexp
+ patterns to determine whether the given file should trigger a build on
+ the given platform. As mentioned earlier, this has only been
+ implemented for Windows, though I did try to make some guesses about
+ other platforms.
+ (should_build): Returns true if any of the files should trigger a
+ build on the given platform.
+
+ * Scripts/webkitpy/common/net/build_unittest.py: Added.
+ (ShouldBuildTest.test_should_build): Does some basic testing to make
+ sure we're triggering builds for the right files. It only tests
+ Windows for now, though I tried to make some guesses about other
+ platforms.
+
+2010-11-16 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] Remove synchronous QWebPage::checkPermissions signal
+ https://bugs.webkit.org/show_bug.cgi?id=46810
+
+ * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
+ (WebCore::WebPage::WebPage):
+ * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
+ (LayoutTestController::grantDesktopNotificationPermission): When granting
+ permission, grant it directly on the QWebPage/Frame, that will remember it.
+ * QtTestBrowser/webpage.cpp:
+ (WebPage::WebPage):
+ * QtTestBrowser/webpage.h:
+
+
+2010-11-16 Andras Becsi <abecsi@inf.u-szeged.hu>
+
+ Reviewed by Csaba Osztrogonác.
+
+ [Qt] Add isPrinting and setPrinting methods to DRT's LayoutTestController.
+
+ * DumpRenderTree/qt/LayoutTestControllerQt.cpp:
+ (LayoutTestController::reset):
+ * DumpRenderTree/qt/LayoutTestControllerQt.h:
+ (LayoutTestController::isPrinting):
+ (LayoutTestController::setPrinting):
+
+2010-11-16 Balazs Kelemen <kbalazs@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt][WK2] Add a way to turn on tiled backing store in MiniBrowser
+ https://bugs.webkit.org/show_bug.cgi?id=49587
+
+ * MiniBrowser/qt/BrowserView.cpp:
+ (BrowserView::BrowserView): Added BackingStoreType
+ argument to ctor. Propagating it to the QGraphicsWKView.
+ * MiniBrowser/qt/BrowserView.h:
+ * MiniBrowser/qt/BrowserWindow.cpp:
+ (BrowserWindow::BrowserWindow):
+ (BrowserWindow::newWindow): Create the new BrowserWindow
+ with the same BackingStoreType that this instance has.
+ * MiniBrowser/qt/BrowserWindow.h: Added BackingStoreType member.
+ * MiniBrowser/qt/main.cpp:
+ (main): Use tiled backing store if got -tiled command line argument.
+ Avoid redundant copy of command line args.
+
+2010-11-16 John Knottenbelt <jknotten@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ Move DeviceOrientationClientMock from LayoutTestController to WebViewHost.
+ https://bugs.webkit.org/show_bug.cgi?id=48506
+
+ This ensures that there is one mock per page WebView / WebViewHost. This is a
+ design constraint of the DeviceOrientationClientMock because the m_controller
+ field can only store a pointer to a single instance of the corresponding
+ DeviceOrientationController.
+
+ Test: fast/dom/DeviceOrientation/no-page-cache.html
+
+ * DumpRenderTree/chromium/LayoutTestController.cpp:
+ (LayoutTestController::setMockDeviceOrientation):
+ (LayoutTestController::deviceOrientationClientMock):
+ * DumpRenderTree/chromium/LayoutTestController.h:
+ * DumpRenderTree/chromium/WebViewHost.cpp:
+ (WebViewHost::deviceOrientationClientMock):
+ (WebViewHost::deviceOrientationClient):
+ (WebViewHost::reset):
+ * DumpRenderTree/chromium/WebViewHost.h:
+
+2010-11-15 Andras Becsi <abecsi@webkit.org>
+
+ Reviewed by Andreas Kling.
+
+ [Qt][WK2] Avoid polling in WebKitTestRunner.
+ https://bugs.webkit.org/show_bug.cgi?id=49542
+
+ Make the WK2 testing session about 10-15% faster and decrease random flakiness
+ resulting from timing skew by removing the millisecond polling from TestControllerQt.
+
+ * WebKitTestRunner/TestController.cpp:
+ (WTR::TestController::didFinishLoadForFrame):
+ * WebKitTestRunner/TestController.h:
+ * WebKitTestRunner/TestInvocation.cpp:
+ (WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
+ * WebKitTestRunner/mac/TestControllerMac.mm:
+ (WTR::TestController::notifyDone): Add method stub.
+ * WebKitTestRunner/qt/TestControllerQt.cpp:
+ (WTR::TestControllerRunLoop::instance):
+ (WTR::TestControllerRunLoop::start):
+ (WTR::TestControllerRunLoop::stop):
+ (WTR::TestControllerRunLoop::TestControllerRunLoop):
+ (WTR::TestControllerRunLoop::timerEvent):
+ (WTR::TestController::notifyDone):
+ (WTR::TestController::platformRunUntil):
+ * WebKitTestRunner/win/TestControllerWin.cpp:
+ (WTR::TestController::notifyDone): Add method stub.
+
+2010-11-15 Darin Adler <darin@apple.com>
+
+ * Scripts/webkitpy/common/net/bugzilla: Added property svn:ignore.
+
+2010-11-15 Benjamin Poulain <benjamin.poulain@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt] [WK2] Add Ctrl+L shortcut to Qt Minibrowser
+ https://bugs.webkit.org/show_bug.cgi?id=49544
+
+ Add the shortcut to BrowserWindow.
+
+ * MiniBrowser/qt/BrowserWindow.cpp:
+ (BrowserWindow::BrowserWindow):
+ (BrowserWindow::openLocation):
+ * MiniBrowser/qt/BrowserWindow.h:
+
+2010-11-14 David Levin <levin@chromium.org>
+
+ Reviewed by Daniel Bates.
+
+ check-webkit-style should detect PassRefPtr usage in functions.
+ https://bugs.webkit.org/show_bug.cgi?id=49513
+
+ * Scripts/webkitpy/style/checkers/cpp.py:
+ (check_for_function_lengths): Revert a comment change that I
+ accidentally made in r71986.
+ (check_pass_ptr_usage): Added the code to do the check.
+ (process_line): Added the call to check_pass_ptr_usage.
+ (CppChecker): Added the new error category.
+ * Scripts/webkitpy/style/checkers/cpp_unittest.py:
+ (CppStyleTestBase::perform_pass_ptr_check): Runs the new check for
+ testing purposes.
+ (PassPtrTest::*): The class/functions to unit test the new
+ functionality.
+
+2010-11-14 David Levin <levin@chromium.org>
+
+ Reviewed by Shinichiro Hamaji.
+
+ check-webkit-style function detection and the line count style checks should be separate.
+ https://bugs.webkit.org/show_bug.cgi?id=49512
+
+ * Scripts/webkitpy/style/checkers/cpp.py: Do the separation.
+ * Scripts/webkitpy/style/checkers/cpp_unittest.py: Adjust the test to
+ call the detection function and fix line counts in two places now that
+ the code really only counts the lines in the body of the function.
+
+2010-11-14 Andreas Kling <kling@webkit.org>
+
+ Reviewed by Antonio Gomes.
+
+ http/tests/plugins tests print "Unhandled variable" to stderr under Qt
+ https://bugs.webkit.org/show_bug.cgi?id=33438
+
+ Stifle "Unhandled variable" warning to match what the other
+ TestNetscapePlugin does (NPP_GetValue in TestNetscapePlugIn/main.cpp
+ simply returns NPERR_GENERIC_ERROR for unhandled variables.)
+
+ * DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp:
+ (webkit_test_plugin_get_value):
+
+2010-11-13 David Levin <levin@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ check-webkit-style function detection crashes on functions in templates.
+ https://bugs.webkit.org/show_bug.cgi?id=49504
+
+ For example "template <bool shouldClose(const Element*)>".
+
+ * Scripts/webkitpy/style/checkers/cpp.py: If not function is detected, bail out.
+ * Scripts/webkitpy/style/checkers/cpp_unittest.py: Modified the complex
+ function detection test to expose this issue.
+
+2010-11-12 David Levin <levin@chromium.org>
+
+ Reviewed by Shinichiro Hamaji.
+
+ check-webkit-style function detection doesn't detect indented functions declaractions.
+ https://bugs.webkit.org/show_bug.cgi?id=49446
+
+ Indented function declarations occur inside class definitions, so
+ they are a pretty common (and worth detecting).
+
+ * Scripts/webkitpy/style/checkers/cpp.py:
+ Changed regex to allow indentation.
+ Changed the function start detection to only happen when not in a
+ function.
+ Changed function end detection to work based on matching braces
+ instead of finding a close brace at the beginning of the line.
+ Fixed close_expression to do what it says when it doesn't find
+ the close.
+ * Scripts/webkitpy/style/checkers/cpp_unittest.py: Indented function test.
+
+2010-11-12 Daniel Bates <dbates@rim.com>
+
+ Rubber-stamped by Nikolas Zimmermann.
+
+ Make do-file-rename rename files in the directory WebKit2.
+
+ This also makes the list of searched directories in do-file-rename
+ consistent with the list of searched directories in the script do-webcore-rename.
+
+ * Scripts/do-file-rename:
+
+2010-11-12 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by James Robinson.
+
+ Attempt yet again to land the fix for bug 49360 (respecting
+ set-webkit-configuration). We need to handle the cases where
+ trying to run webkit-build-directory to find out where the
+ default configuration might be fails (that shows up on some
+ Chromium bots that apparently don't have perl installed).
+
+ https://bugs.webkit.org/show_bug.cgi?id=49360
+
+ * Scripts/webkitpy/layout_tests/port/config.py:
+ * Scripts/webkitpy/layout_tests/port/config_standalone.py: Added.
+ * Scripts/webkitpy/layout_tests/port/config_unittest.py:
+
+2010-11-12 Mihai Parparita <mihaip@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ webkit-patch land logs commit message twice
+ https://bugs.webkit.org/show_bug.cgi?id=49482
+
+ Don't log the comment that's used by bugzilla.close_bug_as_fixed, since
+ that's just the commit message, which we now output following the
+ actual commit.
+
+ * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
+
+2010-11-12 Tony Chang <tony@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ run platform/chromium/plugins/script-object-invoke.html on all platforms
+ https://bugs.webkit.org/show_bug.cgi?id=49280
+
+ * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
+ (testScriptObjectInvoke):
+ (pluginInvoke):
+
+2010-11-12 Mihai Parparita <mihaip@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ webkit-patch land-cowboy (and other commands) should display the committed SVN revision after landing a patch
+ https://bugs.webkit.org/show_bug.cgi?id=49471
+
+ Right now there's no indication of a successful commit.
+
+ * Scripts/webkitpy/tool/commands/download_unittest.py:
+ * Scripts/webkitpy/tool/steps/commit.py:
+
+2010-11-12 Kinuko Yasuda <kinuko@chromium.org>
+
+ Reviewed by Ojan Vafai.
+
+ Include detailed test modifiers in results.json and enable incremental uploading for non-layout tests
+ https://bugs.webkit.org/show_bug.cgi?id=49354
+
+ Also moved/integrated the upload method from run_webkit_tests.py to json_results_generator.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:
+ * Scripts/webkitpy/layout_tests/run_webkit_tests.py:
+
+2010-11-12 Tony Chang <tony@chromium.org>
+
+ Reviewed by Kent Tamura.
+
+ [chromium] Load a blank page when closing DRT WebViewHosts
+ https://bugs.webkit.org/show_bug.cgi?id=49417
+
+ In test_shell, when we close a window, we first load about:blank
+ and run GC to fire the destruction logic of the page. In test_shell,
+ this happens in ~TestShell. In DRT, we manage virtual windows as
+ WebViewHosts, so we need to replicate this logic in ~WebViewHost.
+
+ Managing focus is a bit trickier, since normally you would get window
+ events to reset the focus to the right window. We do it manually
+ instead.
+
+ This fixes 2 plugin tests on DRT.
+
+ * DumpRenderTree/chromium/TestShell.cpp:
+ (TestShell::~TestShell): Move window close logic to ~WebViewHost.
+ (TestShell::closeWindow): Move widget close() to WVH destructor and
+ manage focus manually.
+ (TestShell::closeRemainingWindows): Comment typo.
+ * DumpRenderTree/chromium/WebViewHost.cpp:
+ (WebViewHost::closeWidget):
+ (invokeCloseWidget):
+ (WebViewHost::closeWidgetSoon): Close the window asynchronously (matches
+ test_shell).
+ (WebViewHost::~WebViewHost):
+ * DumpRenderTree/chromium/WebViewHost.h:
+
+2010-11-12 David Levin <levin@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ cpp.py needs some tidying.
+ https://bugs.webkit.org/show_bug.cgi?id=49443
+
+ * Scripts/webkitpy/style/checkers/cpp.py:
+ Fix parameter ordering for iteratively_replace_matches_with_char
+ to mirror other similar functions (and improved comments, etc.)
+ Also, use a python-ism (for/else) to get rid of a variable that
+ was there to determine if something had been found in the loop.
+
+2010-11-12 Robert Kroeger <rjkroege@chromium.org>
+
+ Reviewed by James Robinson.
+
+ [Chromium/DRT] Make EventSendingController send complete touch events.
+ https://bugs.webkit.org/show_bug.cgi?id=49285
+
+ * DumpRenderTree/chromium/EventSender.cpp:
+ (EventSender::addTouchPoint):
+ (EventSender::updateTouchPoint):
+ (EventSender::sendCurrentTouchEvent):
+
+2010-11-12 Mihai Parparita <mihaip@chromium.org>
+
+ Unreviewed rollout of r71858.
+
+ Rollout out r71858 since it breaks new-run-webkit-httpd as used by the
+ NaCl tests.
+
+ * Scripts/webkitpy/layout_tests/port/config.py:
+ * Scripts/webkitpy/layout_tests/port/config_standalone.py: Removed.
+ * Scripts/webkitpy/layout_tests/port/config_unittest.py:
+
+2010-11-12 Benjamin Poulain <benjamin.poulain@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] TestController::runUntil doesn't honor the timeout parameter
+ https://bugs.webkit.org/show_bug.cgi?id=48941
+
+ Implement the missing timeout of WebKitTestRunner for Qt.
+
+ A QElapsedTimer has been added to RunUntilConditionLoop in order
+ to measure how long the loop has been running. When the timer
+ is bigger or equal than the timeout, the loop ends even if the
+ condition is not met.
+
+ * WebKitTestRunner/qt/TestControllerQt.cpp:
+ (WTR::RunUntilConditionLoop::start):
+ (WTR::RunUntilConditionLoop::run):
+ (WTR::RunUntilConditionLoop::timerEvent):
+ (WTR::TestController::platformRunUntil):
+
+2010-11-11 David Levin <levin@chromium.org>
+
+ Reviewed by Shinichiro Hamaji.
+
+ check-webkit-style function detection doesn't handle templates with spaces.
+ https://bugs.webkit.org/show_bug.cgi?id=49427
+
+ * Scripts/webkitpy/style/checkers/cpp.py: Stripped out templates when
+ finding the function name.
+ * Scripts/webkitpy/style/checkers/cpp_unittest.py: Made the test have a
+ template with a space.
+
+2010-11-11 Ademar de Souza Reis Jr <ademar.reis@openbossa.org>
+
+ Reviewed by Shinichiro Hamaji.
+
+ Enable check-webkit-style on Qt files
+ https://bugs.webkit.org/show_bug.cgi?id=48322
+
+ Adding exception for _q_... private slots and
+ ..._data() methods in tests
+
+ * Scripts/webkitpy/style/checker.py: enable Qt dirs, add exceptions
+ * Scripts/webkitpy/style/checker_unittest.py: improve unittests
+
+2010-11-11 David Levin <levin@chromium.org>
+
+ Reviewed by Shinichiro Hamaji.
+
+ check-webkit-style function detection doesn't work for templates and destructors.
+ https://bugs.webkit.org/show_bug.cgi?id=49425
+
+ * Scripts/webkitpy/style/checkers/cpp.py: Changed regex for templates and destructors.
+ * Scripts/webkitpy/style/checkers/cpp_unittest.py: Made the test hit this issue.
+
+2010-11-11 Joone Hur <joone@kldp.org>
+
+ Reviewed by Antonio Gomes.
+
+ [GTK][DRT] Implement LayoutTestController::nodesFromRect
+ https://bugs.webkit.org/show_bug.cgi?id=46598
+
+ Support nodesFromRect in DRT
+
+ * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
+ (LayoutTestController::nodesFromRect):
+
+2010-11-11 MORITA Hajime <morrita@google.com>
+
+ Reviewed by Kent Tamura.
+
+ editing/selection/context-menu-on-text.html fails on chromium
+ https://bugs.webkit.org/show_bug.cgi?id=45898
+
+ Enhance Chromium's EventSender::contextClick() to return
+ array of menu strings. The implementation incomplete because
+ Although actual context menu is implemented by the browser,
+ it reflects editability of underlying context thus makes
+ context-menu-on-text.html passed.
+
+ * DumpRenderTree/chromium/EventSender.cpp:
+ (makeMenuItemStringsFor): Added.
+ (EventSender::contextClick): Now returns array of menu strings.
+ * DumpRenderTree/chromium/WebViewHost.cpp:
+ (WebViewHost::showContextMenu): Now storing given WebContextMenuData object.
+ (WebViewHost::clearContextMenuData): Added.
+ (WebViewHost::lastContextMenuData): Added.
+ * DumpRenderTree/chromium/WebViewHost.h:
+
+2010-11-11 Dirk Pranke <dpranke@chromium.org>
+
+ Unreviewed, build fix.
+
+ fix build breakage caused by fix for bug 49380 (r71858).
+
+ config_standalone needs to ensure that the packages it needs are
+ in sys.path.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49419
+
+ * Scripts/webkitpy/layout_tests/port/config_standalone.py:
+
+2010-11-11 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Adam Roben.
+
+ Fix NRWT to respect set-webkit-configuration again :(
+
+ This change fixes a typo in config.py that was causing the wrong
+ value to be read initially and us never actually looking into
+ the filesystem to get the default configuration.
+
+ * Scripts/webkitpy/layout_tests/port/config.py:
+ * Scripts/webkitpy/layout_tests/port/config_standalone.py:
+ * Scripts/webkitpy/layout_tests/port/config_unittest.py:
+
+2010-11-11 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ Split out Bug, Attachment and CommitterValidator from bugzilla.py
+ https://bugs.webkit.org/show_bug.cgi?id=49403
+
+ CommitterValidator really had nothing to do with bugzilla.py.
+ I've put it next to committers.py for now since its rather tied to that file.
+
+ * Scripts/webkitpy/common/config/committervalidator.py: Added.
+ * Scripts/webkitpy/common/config/committervalidator_unittest.py: Added.
+ * Scripts/webkitpy/common/net/bugzilla/__init__.py:
+ * Scripts/webkitpy/common/net/bugzilla/attachment.py: Added.
+ * Scripts/webkitpy/common/net/bugzilla/bug.py: Added.
+ * Scripts/webkitpy/common/net/bugzilla/bug_unittest.py: Added.
+ * Scripts/webkitpy/common/net/bugzilla/bugzilla.py:
+ * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py:
+ * Scripts/webkitpy/tool/bot/feeders.py:
+ * Scripts/webkitpy/tool/commands/queues.py:
+
+2010-11-11 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ fix missing 'pid' argument for http lockfile checking on win32
+ https://bugs.webkit.org/show_bug.cgi?id=49363
+
+ * Scripts/webkitpy/common/system/executive.py:
+
+2010-11-11 Eric Seidel <eric@webkit.org>
+
+ Rubber-stamped by Adam Barth.
+
+ Move bugzilla.py into its own module in preparation for splitting one-file-per-class
+ https://bugs.webkit.org/show_bug.cgi?id=49402
+
+ * Scripts/webkitpy/common/net/bugzilla/__init__.py: Added.
+ * Scripts/webkitpy/common/net/bugzilla/bugzilla.py: Renamed from WebKitTools/Scripts/webkitpy/common/net/bugzilla.py.
+ * Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py: Renamed from WebKitTools/Scripts/webkitpy/common/net/bugzilla_unittest.py.
+
+2010-11-10 Chris Guillory <chris.guillory@google.com>
+
+ Reviewed by Chris Fleizach.
+
+ Use IAccessibleComparable to compare accessibility objects.
+ https://bugs.webkit.org/show_bug.cgi?id=49118
+
+ * DumpRenderTree/AccessibilityUIElement.cpp:
+ (AccessibilityUIElement::isEqual):
+ * DumpRenderTree/AccessibilityUIElement.h:
+ * DumpRenderTree/win/AccessibilityUIElementWin.cpp:
+ (comparableObject):
+ (AccessibilityUIElement::isEqual):
+
+2010-11-10 Csaba Osztrogonác <ossy@webkit.org>
+
+ Reviewed by David Hyatt.
+
+ HTML5 Ruby support should be mandatory feature
+ https://bugs.webkit.org/show_bug.cgi?id=49272
+
+ Remove Ruby as optional feature.
+
+ * Scripts/build-webkit:
+
+2010-11-10 Adam Roben <aroben@apple.com>
+
+ Print VC++ Express build logs in the same order that the projects are
+ built
+
+ Fixes <http://webkit.org/b/49326> print-vse-failure-logs prints logs
+ in an unhelpful order
+
+ Reviewed by Eric Seidel.
+
+ * Scripts/print-vse-failure-logs:
+ (PrintVisualStudioExpressLogs._build_order): Added. Uses
+ print-msvc-project-dependencies to figure out the order in which
+ projects are built.
+ (PrintVisualStudioExpressLogs._sort_buildlogs): Added. Sorts the logs
+ based on their build order and project name.
+ (PrintVisualStudioExpressLogs._obj_directory): Moved code to find the
+ scripts directory from here...
+ (PrintVisualStudioExpressLogs._scripts_directory): ...to here.
+ (PrintVisualStudioExpressLogs.main): Sort the logs before printing
+ them.
+
+2010-11-10 Adam Roben <aroben@apple.com>
+
+ Only print the interesting text from VC++ Express build logs
+
+ Fixes <http://webkit.org/b/49325> It's hard to find the interesting
+ output from print-vse-failure-logs
+
+ Reviewed by Eric Seidel.
+
+ * Scripts/print-vse-failure-logs: Removed unnecessary os.path import,
+ added newly-required imports. Removed a comment that was essentially a
+ FIXME, and is now fixed.
+ (PrintVisualStudioExpressLogs._relevant_text): Added. Uses
+ BeautifulSoup to extract the relevant text from the build log.
+ (PrintVisualStudioExpressLogs.main): Only print the relevant text.
+
+2010-11-09 Mihai Parparita <mihaip@chromium.org>
+
+ Reviewed by Tony Chang.
+
+ [Chromium] http/tests/security/XFrameOptions fail with Chromium DRT
+ https://bugs.webkit.org/show_bug.cgi?id=49286
+
+ The tests in http/tests/security/XFrameOptions started to fail after
+ r71297, since it changed the WebViewHost::assignIdentifierToRequest
+ logic to always assign identifiers to requests, even if we're not going
+ to be dumping resource load callbacks at that point. These tests
+ only call LayoutTestController.dumpResourceLoadCallbacks after the
+ request is started, thus their expectations have "<unknown>" as the
+ identifier. Change WebViewHost to the previous behavior, which also
+ match the other ports'.
+
+ * DumpRenderTree/chromium/WebViewHost.cpp:
+ (WebViewHost::assignIdentifierToRequest):
+ (WebViewHost::removeIdentifierForRequest):
+
+2010-11-08 Tony Chang <tony@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ run platform/chromium/plugins/return-npobject.html on all platforms
+ https://bugs.webkit.org/show_bug.cgi?id=49103
+
+ This tests that we can get an NPObject returned through a method on
+ an NPAPI Object.
+
+ * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
+ (testCallbackReturn):
+ (pluginInvoke):
+
+2010-11-09 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r71672.
+ http://trac.webkit.org/changeset/71672
+ https://bugs.webkit.org/show_bug.cgi?id=49276
+
+ It doesn't work on Chromium Windows bot (Requested by Ossy on
+ #webkit).
+
+ * Scripts/webkitpy/common/system/file_lock.py: Removed.
+ * Scripts/webkitpy/common/system/file_lock_unittest.py: Removed.
+ * Scripts/webkitpy/layout_tests/port/http_lock.py:
+
+2010-11-09 Gabor Rapcsanyi <rgabor@inf.u-szeged.hu>
+
+ Reviewed by Tony Chang.
+
+ [NRWT] Make http locking similar to perl implementation
+ https://bugs.webkit.org/show_bug.cgi?id=49187
+
+ * Scripts/webkitpy/common/system/file_lock.py: Added.
+ * Scripts/webkitpy/common/system/file_lock_unittest.py: Added.
+ * Scripts/webkitpy/layout_tests/port/http_lock.py:
+
+2010-11-09 James Kozianski <koz@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ Clean up imports for webkit-patch.
+ https://bugs.webkit.org/show_bug.cgi?id=49083
+
+ Move some imports from commands into main.py where they are used.
+ Move command imports into the __init__ of the commands module.
+
+ * Scripts/webkitpy/tool/commands/__init__.py:
+ * Scripts/webkitpy/tool/commands/download.py:
+ * Scripts/webkitpy/tool/commands/queues.py:
+ * Scripts/webkitpy/tool/main.py:
+
+2010-11-09 Yi Shen <yi.4.shen@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ [Qt][QtTestBrowser] Don't erase incorrect url in the Url Bar
+ https://bugs.webkit.org/show_bug.cgi?id=49047
+
+ * QtTestBrowser/mainwindow.cpp:
+ (MainWindow::setAddressUrl):
+
+2010-11-09 Andras Becsi <abecsi@webkit.org>
+
+ Reviewed by Csaba Osztrogonác.
+
+ Improve old-run-webkit-tests --verbose to show DumpTool opening/closing
+ https://bugs.webkit.org/show_bug.cgi?id=49252
+
+ * Scripts/old-run-webkit-tests:
+
+2010-11-09 Csaba Osztrogonác <ossy@webkit.org>
+
+ Reviewed by Tor Arne Vestbø.
+
+ Output of old-run-webkit-tests is buggy in verbose mode
+ https://bugs.webkit.org/show_bug.cgi?id=49249
+
+ * Scripts/old-run-webkit-tests: Redundant outputs removed.
+
+2010-11-08 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+ Reviewed by Martin Robinson.
+
+ [GTK] Link with target name set does not work
+ https://bugs.webkit.org/show_bug.cgi?id=48865
+
+ When a new page is created with a name (target=myFrame), the new
+ mainFrame could not be found because they where not stored in the
+ same PageGroup. As PageGroup are not exposed externally so the
+ simpliest solution is to use a global page group name. This also fixes
+ issue with visited link coloration across pages. After this change the
+ private function webkit_web_view_set_group_name() was no longer used
+ so it was removed completly.
+
+ * DumpRenderTree/gtk/DumpRenderTree.cpp:
+ (createWebView):
+
+2010-11-08 John Knottenbelt <jknotten@chromium.org>
+
+ Reviewed by Kent Tamura.
+
+ WebViewHost::reset() uses placement new.
+ https://bugs.webkit.org/show_bug.cgi?id=49069
+
+ WebViewHost is using placement destruction / new to simulate a fresh
+ WebViewHost object at the same address. This is because the WebView remains
+ open across tests and maintains a pointer to the WebViewHost.
+ This change resets member variables explictly instead of the placement new dance.
+
+ * DumpRenderTree/chromium/WebViewHost.cpp:
+ (WebViewHost::WebViewHost):
+ (WebViewHost::reset):
+
+2010-11-08 Dirk Pranke <dpranke@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ Fix the webkit_base_dir logic in webkitpy/layout_tests/port/config.py.
+ It turns out that NRWT can't use the code in scm.find_checkout_root()
+ because the Chromium bots don't do full checkouts of the WebKit
+ tree; they only check out subdirectories like WebKitTools/Scripts.
+ Until we can figure out a better approach for this, I've
+ restored the base_dir-detecting code from NRWT, which works in
+ any directory tree, scm or no.
+
+ This also restores the files modified in r71475 and r71474.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49151
+
+ * WebKitTools/Scripts/webkitpy/layout_tests/port/config.py
+ * WebKitTools/Scripts/webkitpy/layout_tests/port/config_unittest.py
+
+2010-11-08 Eric Seidel <eric@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ webkit-patch failure-reason explodes if a build is missing
+ https://bugs.webkit.org/show_bug.cgi?id=49195
+
+ This is likely a recent regression. Adding a unit test for this case.
+
+ * Scripts/webkitpy/common/net/buildbot.py:
+ * Scripts/webkitpy/common/net/buildbot_unittest.py:
+
+2010-11-08 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Ignore the system scrollbar setting.
+
+ * DumpRenderTree/mac/DumpRenderTree.mm:
+ (resetDefaultsToConsistentValues): Set the scrollbar default.
+
2010-11-05 Adam Roben <aroben@apple.com>
Make webkitpy.common.system.executive_unittest pass when running under
@@ -180,7 +1377,7 @@
Unreviewed, rolling out r71475.
http://trac.webkit.org/changeset/71475
-
+
breaks chromium webkit tests
https://bugs.webkit.org/show_bug.cgi?id=49151
diff --git a/WebKitTools/DumpRenderTree/AccessibilityUIElement.cpp b/WebKitTools/DumpRenderTree/AccessibilityUIElement.cpp
index 87be335..4d0bfa8 100644
--- a/WebKitTools/DumpRenderTree/AccessibilityUIElement.cpp
+++ b/WebKitTools/DumpRenderTree/AccessibilityUIElement.cpp
@@ -787,6 +787,13 @@ unsigned AccessibilityUIElement::selectedChildrenCount() const { return 0; }
AccessibilityUIElement AccessibilityUIElement::selectedChildAtIndex(unsigned) const { return 0; }
#endif
+#if !PLATFORM(WIN)
+bool AccessibilityUIElement::isEqual(AccessibilityUIElement* otherElement)
+{
+ return platformUIElement() == otherElement->platformUIElement();
+}
+#endif
+
#if !SUPPORTS_AX_TEXTMARKERS
AccessibilityTextMarkerRange AccessibilityUIElement::textMarkerRangeForElement(AccessibilityUIElement*)
diff --git a/WebKitTools/DumpRenderTree/AccessibilityUIElement.h b/WebKitTools/DumpRenderTree/AccessibilityUIElement.h
index 3120e65..3eb396d 100644
--- a/WebKitTools/DumpRenderTree/AccessibilityUIElement.h
+++ b/WebKitTools/DumpRenderTree/AccessibilityUIElement.h
@@ -70,8 +70,8 @@ public:
static JSObjectRef makeJSAccessibilityUIElement(JSContextRef, const AccessibilityUIElement&);
- bool isEqual(AccessibilityUIElement* otherElement) { return platformUIElement() == otherElement->platformUIElement(); }
-
+ bool isEqual(AccessibilityUIElement* otherElement);
+
void getLinkedUIElements(Vector<AccessibilityUIElement>&);
void getDocumentLinks(Vector<AccessibilityUIElement>&);
void getChildren(Vector<AccessibilityUIElement>&);
diff --git a/WebKitTools/DumpRenderTree/ForwardingHeaders/wtf/CurrentTime.h b/WebKitTools/DumpRenderTree/ForwardingHeaders/wtf/CurrentTime.h
new file mode 100644
index 0000000..a31a23d
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/ForwardingHeaders/wtf/CurrentTime.h
@@ -0,0 +1 @@
+#include <JavaScriptCore/CurrentTime.h>
diff --git a/WebKitTools/DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp
index 7f1c4b4..966ed2f 100644
--- a/WebKitTools/DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp
+++ b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp
@@ -162,6 +162,7 @@ static const NPUTF8 *pluginPropertyIdentifierNames[NUM_PROPERTY_IDENTIFIERS] = {
enum {
ID_TEST_CALLBACK_METHOD = 0,
+ ID_TEST_CALLBACK_METHOD_RETURN,
ID_TEST_GETURL,
ID_TEST_DOM_ACCESS,
ID_TEST_GET_URL_NOTIFY,
@@ -181,6 +182,8 @@ enum {
ID_TEST_CONSTRUCT,
ID_TEST_THROW_EXCEPTION_METHOD,
ID_TEST_FAIL_METHOD,
+ ID_TEST_CLONE_OBJECT,
+ ID_TEST_SCRIPT_OBJECT_INVOKE,
ID_DESTROY_NULL_STREAM,
ID_TEST_RELOAD_PLUGINS_NO_PAGES,
ID_TEST_RELOAD_PLUGINS_AND_PAGES,
@@ -199,6 +202,7 @@ enum {
static NPIdentifier pluginMethodIdentifiers[NUM_METHOD_IDENTIFIERS];
static const NPUTF8 *pluginMethodIdentifierNames[NUM_METHOD_IDENTIFIERS] = {
"testCallback",
+ "testCallbackReturn",
"getURL",
"testDOMAccess",
"getURLNotify",
@@ -218,6 +222,8 @@ static const NPUTF8 *pluginMethodIdentifierNames[NUM_METHOD_IDENTIFIERS] = {
"testConstruct",
"testThrowException",
"testFail",
+ "testCloneObject",
+ "testScriptObjectInvoke",
"destroyNullStream",
"reloadPluginsNoPages",
"reloadPluginsAndPages",
@@ -483,6 +489,35 @@ static bool testCallback(PluginObject* obj, const NPVariant* args, uint32_t argC
return true;
}
+static bool testCallbackReturn(PluginObject* obj, const NPVariant* args, uint32_t argCount, NPVariant* result)
+{
+ if (argCount != 1 || !NPVARIANT_IS_STRING(args[0]))
+ return false;
+
+ NPObject* windowScriptObject;
+ browser->getvalue(obj->npp, NPNVWindowNPObject, &windowScriptObject);
+
+ NPUTF8* callbackString = createCStringFromNPVariant(&args[0]);
+ NPIdentifier callbackIdentifier = browser->getstringidentifier(callbackString);
+ free(callbackString);
+
+ NPVariant callbackArgs[1];
+ OBJECT_TO_NPVARIANT(windowScriptObject, callbackArgs[0]);
+
+ NPVariant browserResult;
+ browser->invoke(obj->npp, windowScriptObject, callbackIdentifier,
+ callbackArgs, 1, &browserResult);
+
+ if (NPVARIANT_IS_OBJECT(browserResult))
+ OBJECT_TO_NPVARIANT(NPVARIANT_TO_OBJECT(browserResult), *result);
+ else {
+ browser->releasevariantvalue(&browserResult);
+ VOID_TO_NPVARIANT(*result);
+ }
+
+ return true;
+}
+
static bool getURL(PluginObject* obj, const NPVariant* args, uint32_t argCount, NPVariant* result)
{
if (argCount == 2 && NPVARIANT_IS_STRING(args[0]) && NPVARIANT_IS_STRING(args[1])) {
@@ -752,6 +787,58 @@ static bool testConstruct(PluginObject* obj, const NPVariant* args, uint32_t arg
return browser->construct(obj->npp, NPVARIANT_TO_OBJECT(args[0]), args + 1, argCount - 1, result);
}
+// Invoke a script callback to get a script NPObject. Then call a method on the
+// script NPObject passing it a freshly created NPObject.
+static bool testScriptObjectInvoke(PluginObject* obj, const NPVariant* args, uint32_t argCount, NPVariant* result)
+{
+ if (argCount != 2 || !NPVARIANT_IS_STRING(args[0]) || !NPVARIANT_IS_STRING(args[1]))
+ return false;
+ NPObject* windowScriptObject;
+ browser->getvalue(obj->npp, NPNVWindowNPObject, &windowScriptObject);
+
+ // Arg1 is the name of the callback
+ NPUTF8* callbackString = createCStringFromNPVariant(&args[0]);
+ NPIdentifier callbackIdentifier = browser->getstringidentifier(callbackString);
+ free(callbackString);
+
+ // Invoke a callback that returns a script object
+ NPVariant object_result;
+ browser->invoke(obj->npp, windowScriptObject, callbackIdentifier, &args[1], 1, &object_result);
+
+ // Script object returned
+ NPObject* script_object = object_result.value.objectValue;
+
+ // Arg2 is the name of the method to be called on the script object
+ NPUTF8* object_mehod_string = createCStringFromNPVariant(&args[1]);
+ NPIdentifier object_method = browser->getstringidentifier(object_mehod_string);
+ free(object_mehod_string);
+
+ // Create a fresh NPObject to be passed as an argument
+ NPObject* object_arg = browser->createobject(obj->npp, &pluginClass);
+ NPVariant invoke_args[1];
+ OBJECT_TO_NPVARIANT(object_arg, invoke_args[0]);
+
+ // Invoke the script method
+ NPVariant object_method_result;
+ browser->invoke(obj->npp, script_object, object_method, invoke_args, 1, &object_method_result);
+
+ browser->releasevariantvalue(&object_result);
+ VOID_TO_NPVARIANT(*result);
+ if (NPVARIANT_IS_OBJECT(object_method_result)) {
+ // Now return the callbacks return value back to our caller.
+ // BUG 897451: This should be the same as the
+ // windowScriptObject, but its not (in Chrome) - or at least, it
+ // has a different refcount. This means Chrome will delete the
+ // object before returning it and the calling JS gets a garbage
+ // value. Firefox handles it fine.
+ OBJECT_TO_NPVARIANT(NPVARIANT_TO_OBJECT(object_method_result), *result);
+ } else {
+ browser->releasevariantvalue(&object_method_result);
+ VOID_TO_NPVARIANT(*result);
+ }
+ return true;
+}
+
// Helper function to notify the layout test controller that the test completed.
void notifyTestCompletion(NPP npp, NPObject* object)
{
@@ -894,6 +981,8 @@ static bool pluginInvoke(NPObject* header, NPIdentifier name, const NPVariant* a
PluginObject* plugin = reinterpret_cast<PluginObject*>(header);
if (name == pluginMethodIdentifiers[ID_TEST_CALLBACK_METHOD])
return testCallback(plugin, args, argCount, result);
+ if (name == pluginMethodIdentifiers[ID_TEST_CALLBACK_METHOD_RETURN])
+ return testCallbackReturn(plugin, args, argCount, result);
if (name == pluginMethodIdentifiers[ID_TEST_GETURL])
return getURL(plugin, args, argCount, result);
if (name == pluginMethodIdentifiers[ID_TEST_DOM_ACCESS])
@@ -928,6 +1017,8 @@ static bool pluginInvoke(NPObject* header, NPIdentifier name, const NPVariant* a
return testPostURLFile(plugin, args, argCount, result);
if (name == pluginMethodIdentifiers[ID_TEST_CONSTRUCT])
return testConstruct(plugin, args, argCount, result);
+ if (name == pluginMethodIdentifiers[ID_TEST_SCRIPT_OBJECT_INVOKE])
+ return testScriptObjectInvoke(plugin, args, argCount, result);
if (name == pluginMethodIdentifiers[ID_TEST_THROW_EXCEPTION_METHOD]) {
browser->setexception(header, "plugin object testThrowException SUCCESS");
return true;
@@ -938,6 +1029,12 @@ static bool pluginInvoke(NPObject* header, NPIdentifier name, const NPVariant* a
browser->invoke(plugin->npp, windowScriptObject, name, args, argCount, result);
return false;
}
+ if (name == pluginMethodIdentifiers[ID_TEST_CLONE_OBJECT]) {
+ NPObject* new_object = browser->createobject(plugin->npp, &pluginClass);
+ assert(new_object->referenceCount == 1);
+ OBJECT_TO_NPVARIANT(new_object, *result);
+ return true;
+ }
if (name == pluginMethodIdentifiers[ID_DESTROY_NULL_STREAM])
return destroyNullStream(plugin, args, argCount, result);
if (name == pluginMethodIdentifiers[ID_TEST_RELOAD_PLUGINS_NO_PAGES]) {
diff --git a/WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj
index a2e6809..fb0a236 100644
--- a/WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj
+++ b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj
@@ -18,12 +18,11 @@
<Configuration
Name="Debug|Win32"
ConfigurationType="2"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;.\TestNetscapePluginCommon.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;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -39,9 +38,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(ProjectDir)&quot;;&quot;$(ProjectDir)..&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\include&quot;"
- PreprocessorDefinitions="_USRDLL;TESTNETSCAPEPLUGIN_EXPORTS;snprintf=_snprintf"
- DisableSpecificWarnings="4819"
+ AdditionalIncludeDirectories=""
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -55,9 +52,6 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="Msimg32.lib"
- OutputFile="$(OutDir)\$(ProjectName)$(WebKitConfigSuffix)\np$(ProjectName)$(WebKitConfigSuffix).dll"
- ModuleDefinitionFile="TestNetscapePlugin$(WebKitConfigSuffix).def"
/>
<Tool
Name="VCALinkTool"
@@ -82,19 +76,16 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;"
/>
</Configuration>
<Configuration
Name="Release|Win32"
ConfigurationType="2"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\TestNetscapePluginCommon.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;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -110,9 +101,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(ProjectDir)&quot;;&quot;$(ProjectDir)..&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\include&quot;"
- PreprocessorDefinitions="_USRDLL;TESTNETSCAPEPLUGIN_EXPORTS;snprintf=_snprintf"
- DisableSpecificWarnings="4819"
+ AdditionalIncludeDirectories=""
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -126,9 +115,6 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="Msimg32.lib"
- OutputFile="$(OutDir)\$(ProjectName)$(WebKitConfigSuffix)\np$(ProjectName)$(WebKitConfigSuffix).dll"
- ModuleDefinitionFile="TestNetscapePlugin$(WebKitConfigSuffix).def"
/>
<Tool
Name="VCALinkTool"
@@ -153,18 +139,16 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;"
/>
</Configuration>
<Configuration
Name="Debug_Internal|Win32"
ConfigurationType="2"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_internal.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_internal.vsprops;.\TestNetscapePluginCommon.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;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -180,10 +164,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(ProjectDir)&quot;;&quot;$(ProjectDir)..&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\include&quot;"
- PreprocessorDefinitions="_USRDLL;TESTNETSCAPEPLUGIN_EXPORTS;snprintf=_snprintf"
- RuntimeLibrary="3"
- DisableSpecificWarnings="4819"
+ AdditionalIncludeDirectories=""
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -197,9 +178,6 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="Msimg32.lib"
- OutputFile="$(OutDir)\$(ProjectName)$(WebKitConfigSuffix)\np$(ProjectName)$(WebKitConfigSuffix).dll"
- ModuleDefinitionFile="TestNetscapePlugin$(WebKitConfigSuffix).def"
/>
<Tool
Name="VCALinkTool"
@@ -224,18 +202,16 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;"
/>
</Configuration>
<Configuration
Name="Debug_Cairo|Win32"
ConfigurationType="2"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_wincairo.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_wincairo.vsprops;.\TestNetscapePluginCommon.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;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -251,9 +227,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(ProjectDir)&quot;;&quot;$(ProjectDir)..&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\include&quot;"
- PreprocessorDefinitions="_USRDLL;TESTNETSCAPEPLUGIN_EXPORTS;snprintf=_snprintf"
- DisableSpecificWarnings="4819"
+ AdditionalIncludeDirectories=""
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -267,9 +241,6 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="Msimg32.lib"
- OutputFile="$(OutDir)\$(ProjectName)$(WebKitConfigSuffix)\np$(ProjectName)$(WebKitConfigSuffix).dll"
- ModuleDefinitionFile="TestNetscapePlugin$(WebKitConfigSuffix).def"
/>
<Tool
Name="VCALinkTool"
@@ -294,18 +265,16 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;"
/>
</Configuration>
<Configuration
Name="Debug_All|Win32"
ConfigurationType="2"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_internal.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_all.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_internal.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_all.vsprops;.\TestNetscapePluginCommon.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;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -321,10 +290,8 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(ProjectDir)&quot;;&quot;$(ProjectDir)..&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\include&quot;"
- PreprocessorDefinitions="_USRDLL;TESTNETSCAPEPLUGIN_EXPORTS;snprintf=_snprintf"
+ AdditionalIncludeDirectories=""
RuntimeLibrary="3"
- DisableSpecificWarnings="4819"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -338,9 +305,6 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="Msimg32.lib"
- OutputFile="$(OutDir)\$(ProjectName)$(WebKitConfigSuffix)\np$(ProjectName)$(WebKitConfigSuffix).dll"
- ModuleDefinitionFile="TestNetscapePlugin$(WebKitConfigSuffix).def"
/>
<Tool
Name="VCALinkTool"
@@ -365,7 +329,70 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\TestNetscapePluginCommon.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ AdditionalIncludeDirectories=""
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
@@ -443,51 +470,6 @@
<File
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="..\PluginObject.cpp"
diff --git a/WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginCommon.vsprops b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginCommon.vsprops
new file mode 100644
index 0000000..88aa183
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePluginCommon.vsprops
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="TestNetscapePluginCommon"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(ProjectDir)&quot;;&quot;$(ProjectDir)..&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\include&quot;"
+ PreprocessorDefinitions="_USRDLL;TESTNETSCAPEPLUGIN_EXPORTS;snprintf=_snprintf"
+ DisableSpecificWarnings="4819"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="Msimg32.lib"
+ OutputFile="$(OutDir)\$(ProjectName)$(WebKitConfigSuffix)\np$(ProjectName)$(WebKitConfigSuffix).dll"
+ ModuleDefinitionFile="TestNetscapePlugin$(WebKitConfigSuffix).def"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;"
+ />
+ <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;"
+ />
+</VisualStudioPropertySheet>
diff --git a/WebKitTools/DumpRenderTree/chromium/EventSender.cpp b/WebKitTools/DumpRenderTree/chromium/EventSender.cpp
index ec16cf7..6104a90 100644
--- a/WebKitTools/DumpRenderTree/chromium/EventSender.cpp
+++ b/WebKitTools/DumpRenderTree/chromium/EventSender.cpp
@@ -44,6 +44,7 @@
#include "EventSender.h"
#include "TestShell.h"
+#include "WebContextMenuData.h"
#include "WebDragData.h"
#include "WebDragOperation.h"
#include "WebPoint.h"
@@ -728,16 +729,52 @@ void EventSender::replaySavedEvents()
replayingSavedEvents = false;
}
-void EventSender::contextClick(const CppArgumentList& arguments, CppVariant* result)
+// Because actual context menu is implemented by the browser side,
+// this function does only what LayoutTests are expecting:
+// - Many test checks the count of items. So returning non-zero value makes sense.
+// - Some test compares the count before and after some action. So changing the count based on flags
+// also makes sense. This function is doing such for some flags.
+// - Some test even checks actual string content. So providing it would be also helpful.
+//
+static Vector<WebString> makeMenuItemStringsFor(WebContextMenuData* contextMenu, MockSpellCheck* spellcheck)
{
- result->setNull();
+ // These constants are based on Safari's context menu because tests are made for it.
+ static const char* nonEditableMenuStrings[] = { "Back", "Reload Page", "Open in Dashbaord", "<separator>", "View Source", "Save Page As", "Print Page", "Inspect Element", 0 };
+ static const char* editableMenuStrings[] = { "Cut", "Copy", "<separator>", "Paste", "Spelling and Grammar", "Substitutions, Transformations", "Font", "Speech", "Paragraph Direction", "<separator>", 0 };
+
+ // This is possible because mouse events are cancelleable.
+ if (!contextMenu)
+ return Vector<WebString>();
+
+ Vector<WebString> strings;
+
+ if (contextMenu->isEditable) {
+ for (const char** item = editableMenuStrings; *item; ++item)
+ strings.append(WebString::fromUTF8(*item));
+ Vector<WebString> suggestions;
+ spellcheck->fillSuggestionList(contextMenu->misspelledWord, &suggestions);
+ for (size_t i = 0; i < suggestions.size(); ++i)
+ strings.append(suggestions[i]);
+ } else {
+ for (const char** item = nonEditableMenuStrings; *item; ++item)
+ strings.append(WebString::fromUTF8(*item));
+ }
+
+ return strings;
+}
+
+void EventSender::contextClick(const CppArgumentList& arguments, CppVariant* result)
+{
webview()->layout();
updateClickCountForButton(WebMouseEvent::ButtonRight);
- // Generate right mouse down and up.
+ // Clears last context menu data because we need to know if the context menu be requested
+ // after following mouse events.
+ m_shell->webViewHost()->clearContextMenuData();
+ // Generate right mouse down and up.
WebMouseEvent event;
pressedButton = WebMouseEvent::ButtonRight;
initMouseEvent(WebInputEvent::MouseDown, WebMouseEvent::ButtonRight, lastMousePos, &event);
@@ -747,6 +784,9 @@ void EventSender::contextClick(const CppArgumentList& arguments, CppVariant* res
webview()->handleInputEvent(event);
pressedButton = WebMouseEvent::ButtonNone;
+
+ WebContextMenuData* lastContextMenu = m_shell->webViewHost()->lastContextMenuData();
+ result->set(WebBindings::makeStringArray(makeMenuItemStringsFor(lastContextMenu, m_shell->webViewHost()->mockSpellCheck())));
}
class MouseDownTask: public MethodTask<EventSender> {
@@ -801,6 +841,7 @@ void EventSender::addTouchPoint(const CppArgumentList& arguments, CppVariant* re
WebTouchPoint touchPoint;
touchPoint.state = WebTouchPoint::StatePressed;
touchPoint.position = WebPoint(arguments[0].toInt32(), arguments[1].toInt32());
+ touchPoint.screenPosition = touchPoint.position;
touchPoint.id = touchPoints.size();
touchPoints.append(touchPoint);
}
@@ -854,6 +895,7 @@ void EventSender::updateTouchPoint(const CppArgumentList& arguments, CppVariant*
WebTouchPoint* touchPoint = &touchPoints[index];
touchPoint->state = WebTouchPoint::StateMoved;
touchPoint->position = position;
+ touchPoint->screenPosition = position;
}
void EventSender::cancelTouchPoint(const CppArgumentList& arguments, CppVariant* result)
@@ -870,6 +912,8 @@ void EventSender::cancelTouchPoint(const CppArgumentList& arguments, CppVariant*
void EventSender::sendCurrentTouchEvent(const WebInputEvent::Type type)
{
ASSERT(static_cast<unsigned>(WebTouchEvent::touchPointsLengthCap) > touchPoints.size());
+ webview()->layout();
+
WebTouchEvent touchEvent;
touchEvent.type = type;
touchEvent.modifiers = touchModifiers;
diff --git a/WebKitTools/DumpRenderTree/chromium/LayoutTestController.cpp b/WebKitTools/DumpRenderTree/chromium/LayoutTestController.cpp
index 5b0c844..85b2dce 100644
--- a/WebKitTools/DumpRenderTree/chromium/LayoutTestController.cpp
+++ b/WebKitTools/DumpRenderTree/chromium/LayoutTestController.cpp
@@ -1502,9 +1502,10 @@ void LayoutTestController::setMockDeviceOrientation(const CppArgumentList& argum
return;
WebDeviceOrientation orientation(arguments[0].toBoolean(), arguments[1].toDouble(), arguments[2].toBoolean(), arguments[3].toDouble(), arguments[4].toBoolean(), arguments[5].toDouble());
-
- ASSERT(m_deviceOrientationClientMock);
- m_deviceOrientationClientMock->setOrientation(orientation);
+ // Note that we only call setOrientation on the main page's mock since this is all that the
+ // tests require. If necessary, we could get a list of WebViewHosts from the TestShell and
+ // call setOrientation on each DeviceOrientationClientMock.
+ m_shell->webViewHost()->deviceOrientationClientMock()->setOrientation(orientation);
}
void LayoutTestController::setGeolocationPermission(const CppArgumentList& arguments, CppVariant* result)
@@ -1542,14 +1543,7 @@ void LayoutTestController::setMockSpeechInputResult(const CppArgumentList& argum
if (arguments.size() < 2 || !arguments[0].isString() || !arguments[1].isString())
return;
- m_speechInputControllerMock->setMockRecognitionResult(cppVariantToWebString(arguments[0]), cppVariantToWebString(arguments[1]));
-}
-
-WebKit::WebSpeechInputController* LayoutTestController::speechInputController(WebKit::WebSpeechInputListener* listener)
-{
- if (!m_speechInputControllerMock.get())
- m_speechInputControllerMock.set(WebSpeechInputControllerMock::create(listener));
- return m_speechInputControllerMock.get();
+ m_shell->webViewHost()->speechInputControllerMock()->setMockRecognitionResult(cppVariantToWebString(arguments[0]), cppVariantToWebString(arguments[1]));
}
void LayoutTestController::layerTreeAsText(const CppArgumentList& args, CppVariant* result)
@@ -1566,13 +1560,6 @@ void LayoutTestController::markerTextForListItem(const CppArgumentList& args, Cp
result->set(element.document().frame()->markerTextForListItem(element).utf8());
}
-WebDeviceOrientationClient* LayoutTestController::deviceOrientationClient()
-{
- if (!m_deviceOrientationClientMock.get())
- m_deviceOrientationClientMock.set(WebDeviceOrientationClientMock::create());
- return m_deviceOrientationClientMock.get();
-}
-
void LayoutTestController::hasSpellingMarker(const CppArgumentList& arguments, CppVariant* result)
{
if (arguments.size() < 2 || !arguments[0].isNumber() || !arguments[1].isNumber())
diff --git a/WebKitTools/DumpRenderTree/chromium/LayoutTestController.h b/WebKitTools/DumpRenderTree/chromium/LayoutTestController.h
index fc16827..62f473c 100644
--- a/WebKitTools/DumpRenderTree/chromium/LayoutTestController.h
+++ b/WebKitTools/DumpRenderTree/chromium/LayoutTestController.h
@@ -49,8 +49,6 @@
#include <wtf/OwnPtr.h>
namespace WebKit {
-class WebDeviceOrientationClient;
-class WebDeviceOrientationClientMock;
class WebSpeechInputController;
class WebSpeechInputControllerMock;
class WebSpeechInputListener;
@@ -340,7 +338,6 @@ public:
void setWorkQueueFrozen(bool frozen) { m_workQueue.setFrozen(frozen); }
WebKit::WebSpeechInputController* speechInputController(WebKit::WebSpeechInputListener*);
- WebKit::WebDeviceOrientationClient* deviceOrientationClient();
bool shouldDumpAsText() { return m_dumpAsText; }
bool shouldDumpEditingCallbacks() { return m_dumpEditingCallbacks; }
bool shouldDumpFrameLoadCallbacks() { return m_dumpFrameLoadCallbacks; }
@@ -545,8 +542,6 @@ private:
WebKit::WebURL m_userStyleSheetLocation;
OwnPtr<WebKit::WebSpeechInputControllerMock> m_speechInputControllerMock;
-
- OwnPtr<WebKit::WebDeviceOrientationClientMock> m_deviceOrientationClientMock;
};
#endif // LayoutTestController_h
diff --git a/WebKitTools/DumpRenderTree/chromium/MockSpellCheck.cpp b/WebKitTools/DumpRenderTree/chromium/MockSpellCheck.cpp
index bf39f60..7243152 100644
--- a/WebKitTools/DumpRenderTree/chromium/MockSpellCheck.cpp
+++ b/WebKitTools/DumpRenderTree/chromium/MockSpellCheck.cpp
@@ -91,6 +91,12 @@ bool MockSpellCheck::spellCheckWord(const WebString& text, int* misspelledOffset
return false;
}
+void MockSpellCheck::fillSuggestionList(const WebString& word, Vector<WebString>* suggestions)
+{
+ if (word == WebString::fromUTF8("wellcome"))
+ suggestions->append(WebString::fromUTF8("welcome"));
+}
+
bool MockSpellCheck::initializeIfNeeded()
{
// Exit if we have already initialized this object.
@@ -133,6 +139,7 @@ bool MockSpellCheck::initializeIfNeeded()
"ifmmp",
"qwertyuiopasd",
"qwertyuiopasdf",
+ "wellcome"
};
m_misspelledWords.clear();
diff --git a/WebKitTools/DumpRenderTree/chromium/MockSpellCheck.h b/WebKitTools/DumpRenderTree/chromium/MockSpellCheck.h
index c680340..dcd37f3 100644
--- a/WebKitTools/DumpRenderTree/chromium/MockSpellCheck.h
+++ b/WebKitTools/DumpRenderTree/chromium/MockSpellCheck.h
@@ -62,6 +62,7 @@ public:
int* misspelledOffset,
int* misspelledLength);
+ void fillSuggestionList(const WebKit::WebString& word, Vector<WebKit::WebString>* suggestions);
private:
// Initialize the internal resources if we need to initialize it.
// Initializing this object may take long time. To prevent from hurting
diff --git a/WebKitTools/DumpRenderTree/chromium/TestShell.cpp b/WebKitTools/DumpRenderTree/chromium/TestShell.cpp
index 9bb0192..5de351c 100644
--- a/WebKitTools/DumpRenderTree/chromium/TestShell.cpp
+++ b/WebKitTools/DumpRenderTree/chromium/TestShell.cpp
@@ -117,14 +117,8 @@ 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();
- callJSGC();
-
// Destroy the WebView before its WebViewHost.
m_drtDevToolsAgent->setWebView(0);
- m_webView->close();
}
void TestShell::createDRTDevToolsClient(DRTDevToolsAgent* agent)
@@ -588,16 +582,24 @@ void TestShell::closeWindow(WebViewHost* window)
return;
}
m_windowList.remove(i);
+ WebWidget* focusedWidget = m_focusedWidget;
if (window->webWidget() == m_focusedWidget)
- m_focusedWidget = 0;
- window->webWidget()->close();
+ focusedWidget = 0;
+
delete window;
+ // We set the focused widget after deleting the web view host because it
+ // can change the focus.
+ m_focusedWidget = focusedWidget;
+ if (m_focusedWidget) {
+ webView()->setIsActive(true);
+ m_focusedWidget->setFocus(true);
+ }
}
void TestShell::closeRemainingWindows()
{
// Iterate through the window list and close everything except the main
- // ihwindow. We don't want to delete elements as we're iterating, so we copy
+ // window. We don't want to delete elements as we're iterating, so we copy
// to a temp vector first.
Vector<WebViewHost*> windowsToDelete;
for (unsigned i = 0; i < m_windowList.size(); ++i) {
diff --git a/WebKitTools/DumpRenderTree/chromium/WebPreferences.cpp b/WebKitTools/DumpRenderTree/chromium/WebPreferences.cpp
index 948b448..7c274c3 100644
--- a/WebKitTools/DumpRenderTree/chromium/WebPreferences.cpp
+++ b/WebKitTools/DumpRenderTree/chromium/WebPreferences.cpp
@@ -65,7 +65,7 @@ void WebPreferences::reset()
defaultFontSize = 16;
defaultFixedFontSize = 13;
- minimumFontSize = 1;
+ minimumFontSize = 0;
minimumLogicalFontSize = 9;
DOMPasteAllowed = true;
diff --git a/WebKitTools/DumpRenderTree/chromium/WebViewHost.cpp b/WebKitTools/DumpRenderTree/chromium/WebViewHost.cpp
index 2f9bdfb..87fbaca 100644
--- a/WebKitTools/DumpRenderTree/chromium/WebViewHost.cpp
+++ b/WebKitTools/DumpRenderTree/chromium/WebViewHost.cpp
@@ -39,6 +39,7 @@
#include "WebConsoleMessage.h"
#include "WebContextMenuData.h"
#include "WebDataSource.h"
+#include "WebDeviceOrientationClientMock.h"
#include "WebDragData.h"
#include "WebElement.h"
#include "WebFrame.h"
@@ -49,6 +50,7 @@
#include "WebRect.h"
#include "WebScreenInfo.h"
#include "WebSize.h"
+#include "WebSpeechInputControllerMock.h"
#include "WebStorageNamespace.h"
#include "WebURLRequest.h"
#include "WebURLResponse.h"
@@ -443,10 +445,20 @@ bool WebViewHost::runModalBeforeUnloadDialog(WebFrame*, const WebString&)
return true; // Allow window closure.
}
-void WebViewHost::showContextMenu(WebFrame*, const WebContextMenuData&)
+void WebViewHost::showContextMenu(WebFrame*, const WebContextMenuData& contextMenuData)
{
+ m_lastContextMenuData = adoptPtr(new WebContextMenuData(contextMenuData));
}
+void WebViewHost::clearContextMenuData()
+{
+ m_lastContextMenuData.clear();
+}
+
+WebContextMenuData* WebViewHost::lastContextMenuData() const
+{
+ return m_lastContextMenuData.get();
+}
void WebViewHost::setStatusText(const WebString& text)
{
@@ -570,12 +582,26 @@ WebKit::WebGeolocationService* WebViewHost::geolocationService()
WebSpeechInputController* WebViewHost::speechInputController(WebKit::WebSpeechInputListener* listener)
{
- return m_shell->layoutTestController()->speechInputController(listener);
+ if (!m_speechInputControllerMock)
+ m_speechInputControllerMock.set(WebSpeechInputControllerMock::create(listener));
+ return m_speechInputControllerMock.get();
+}
+
+WebDeviceOrientationClientMock* WebViewHost::deviceOrientationClientMock()
+{
+ if (!m_deviceOrientationClientMock.get())
+ m_deviceOrientationClientMock.set(WebDeviceOrientationClientMock::create());
+ return m_deviceOrientationClientMock.get();
+}
+
+MockSpellCheck* WebViewHost::mockSpellCheck()
+{
+ return &m_spellcheck;
}
-WebKit::WebDeviceOrientationClient* WebViewHost::deviceOrientationClient()
+WebDeviceOrientationClient* WebViewHost::deviceOrientationClient()
{
- return m_shell->layoutTestController()->deviceOrientationClient();
+ return deviceOrientationClientMock();
}
// WebWidgetClient -----------------------------------------------------------
@@ -633,14 +659,24 @@ void WebViewHost::show(WebNavigationPolicy)
updatePaintRect(WebRect(0, 0, size.width, size.height));
}
-void WebViewHost::closeWidgetSoon()
+
+
+void WebViewHost::closeWidget()
{
m_hasWindow = false;
m_shell->closeWindow(this);
- if (m_inModalLoop) {
- m_inModalLoop = false;
- webkit_support::QuitMessageLoop();
- }
+ // No more code here, we should be deleted at this point.
+}
+
+static void invokeCloseWidget(void* context)
+{
+ WebViewHost* wvh = static_cast<WebViewHost*>(context);
+ wvh->closeWidget();
+}
+
+void WebViewHost::closeWidgetSoon()
+{
+ webkit_support::PostDelayedTask(invokeCloseWidget, static_cast<void*>(this), 0);
}
void WebViewHost::didChangeCursor(const WebCursorInfo& cursorInfo)
@@ -940,13 +976,14 @@ void WebViewHost::didChangeLocationWithinPage(WebFrame* frame)
void WebViewHost::assignIdentifierToRequest(WebFrame*, unsigned identifier, const WebURLRequest& request)
{
+ if (!m_shell->shouldDumpResourceLoadCallbacks())
+ return;
ASSERT(!m_resourceIdentifierMap.contains(identifier));
m_resourceIdentifierMap.set(identifier, descriptionSuitableForTestResult(request.url().spec()));
}
void WebViewHost::removeIdentifierForRequest(unsigned identifier)
{
- ASSERT(m_resourceIdentifierMap.contains(identifier));
m_resourceIdentifierMap.remove(identifier);
}
@@ -1066,31 +1103,26 @@ void WebViewHost::openFileSystem(WebFrame* frame, WebFileSystem::Type type, long
// Public functions -----------------------------------------------------------
WebViewHost::WebViewHost(TestShell* shell)
- : m_policyDelegateEnabled(false)
- , m_policyDelegateIsPermissive(false)
- , m_policyDelegateShouldNotifyDone(false)
- , m_shell(shell)
+ : m_shell(shell)
, m_webWidget(0)
- , m_topLoadingFrame(0)
- , m_pageId(-1)
- , m_lastPageIdUpdated(-1)
- , m_hasWindow(false)
- , m_inModalLoop(false)
- , m_smartInsertDeleteEnabled(true)
-#if OS(WINDOWS)
- , m_selectTrailingWhitespaceEnabled(true)
-#else
- , m_selectTrailingWhitespaceEnabled(false)
-#endif
- , m_blocksRedirects(false)
- , m_requestReturnNull(false)
- , m_isPainting(false)
{
- m_navigationController.set(new TestNavigationController(this));
+ reset();
}
WebViewHost::~WebViewHost()
{
+ // Navigate to an empty page to fire all the destruction logic for the
+ // current page.
+ loadURLForFrame(GURL("about:blank"), WebString());
+
+ // Call GC twice to clean up garbage.
+ m_shell->callJSGC();
+ m_shell->callJSGC();
+
+ webWidget()->close();
+
+ if (m_inModalLoop)
+ webkit_support::QuitMessageLoop();
}
WebView* WebViewHost::webView() const
@@ -1108,13 +1140,46 @@ WebWidget* WebViewHost::webWidget() const
void WebViewHost::reset()
{
- // Do a little placement new dance...
- TestShell* shell = m_shell;
- WebWidget* widget = m_webWidget;
- this->~WebViewHost();
- new (this) WebViewHost(shell);
- setWebWidget(widget);
- webView()->mainFrame()->setName(WebString());
+ m_policyDelegateEnabled = false;
+ m_policyDelegateIsPermissive = false;
+ m_policyDelegateShouldNotifyDone = false;
+ m_topLoadingFrame = 0;
+ m_pageId = -1;
+ m_lastPageIdUpdated = -1;
+ m_hasWindow = false;
+ m_inModalLoop = false;
+ m_smartInsertDeleteEnabled = true;
+#if OS(WINDOWS)
+ m_selectTrailingWhitespaceEnabled = true;
+#else
+ m_selectTrailingWhitespaceEnabled = false;
+#endif
+ m_blocksRedirects = false;
+ m_requestReturnNull = false;
+ m_isPainting = false;
+ m_canvas.clear();
+
+ m_navigationController.set(new TestNavigationController(this));
+
+ m_pendingExtraData.clear();
+ m_resourceIdentifierMap.clear();
+ m_clearHeaders.clear();
+ m_editCommandName.clear();
+ m_editCommandValue.clear();
+
+#if !ENABLE(CLIENT_BASED_GEOLOCATION)
+ m_geolocationServiceMock.clear();
+#endif
+
+ if (m_speechInputControllerMock.get())
+ m_speechInputControllerMock->clearResults();
+
+ m_currentCursor = WebCursorInfo();
+ m_windowRect = WebRect();
+ m_paintRect = WebRect();
+
+ if (m_webWidget)
+ webView()->mainFrame()->setName(WebString());
}
void WebViewHost::setSelectTrailingWhitespaceEnabled(bool enabled)
diff --git a/WebKitTools/DumpRenderTree/chromium/WebViewHost.h b/WebKitTools/DumpRenderTree/chromium/WebViewHost.h
index f21e663..c8595b3 100644
--- a/WebKitTools/DumpRenderTree/chromium/WebViewHost.h
+++ b/WebKitTools/DumpRenderTree/chromium/WebViewHost.h
@@ -47,8 +47,10 @@ class TestShell;
namespace WebKit {
class WebFrame;
class WebDeviceOrientationClient;
+class WebDeviceOrientationClientMock;
class WebGeolocationServiceMock;
class WebSpeechInputController;
+class WebSpeechInputControllerMock;
class WebSpeechInputListener;
class WebURL;
struct WebRect;
@@ -89,6 +91,12 @@ class WebViewHost : public WebKit::WebViewClient, public WebKit::WebFrameClient,
void addClearHeader(const WTF::String& header) { m_clearHeaders.add(header); }
const HashSet<WTF::String>& clearHeaders() const { return m_clearHeaders; }
+ void closeWidget();
+
+ WebKit::WebContextMenuData* lastContextMenuData() const;
+ void clearContextMenuData();
+
+ WebKit::WebSpeechInputControllerMock* speechInputControllerMock() { return m_speechInputControllerMock.get(); }
// NavigationHost
virtual bool navigate(const TestNavigationEntry&, bool reload);
@@ -195,6 +203,9 @@ class WebViewHost : public WebKit::WebViewClient, public WebKit::WebFrameClient,
virtual bool allowScript(WebKit::WebFrame*, bool enabledPerSettings);
virtual void openFileSystem(WebKit::WebFrame*, WebKit::WebFileSystem::Type, long long size, bool create, WebKit::WebFileSystemCallbacks*);
+ WebKit::WebDeviceOrientationClientMock* deviceOrientationClientMock();
+ MockSpellCheck* mockSpellCheck();
+
private:
LayoutTestController* layoutTestController() const;
@@ -294,11 +305,16 @@ private:
WebKit::WebRect m_paintRect;
bool m_isPainting;
+ OwnPtr<WebKit::WebContextMenuData> m_lastContextMenuData;
+
#if !ENABLE(CLIENT_BASED_GEOLOCATION)
// Geolocation
OwnPtr<WebKit::WebGeolocationServiceMock> m_geolocationServiceMock;
#endif
+ OwnPtr<WebKit::WebDeviceOrientationClientMock> m_deviceOrientationClientMock;
+ OwnPtr<WebKit::WebSpeechInputControllerMock> m_speechInputControllerMock;
+
OwnPtr<TestNavigationController*> m_navigationController;
};
diff --git a/WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp b/WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp
index 54acc49..5aa61e3 100644
--- a/WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp
+++ b/WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp
@@ -69,7 +69,6 @@ extern guint webkit_web_frame_get_pending_unload_event_count(WebKitWebFrame* fra
extern void webkit_web_settings_add_extra_plugin_directory(WebKitWebView* view, const gchar* directory);
extern gchar* webkit_web_frame_get_response_mime_type(WebKitWebFrame* frame);
extern void webkit_web_frame_clear_main_frame_name(WebKitWebFrame* frame);
-extern void webkit_web_view_set_group_name(WebKitWebView* view, const gchar* groupName);
extern void webkit_reset_origin_access_white_lists();
}
@@ -1000,10 +999,6 @@ static WebKitWebView* createWebView()
DumpRenderTreeSupportGtk::setDumpRenderTreeModeEnabled(true);
- // From bug 11756: Use a frame group name for all WebViews created by
- // DumpRenderTree to allow testing of cross-page frame lookup.
- webkit_web_view_set_group_name(view, "org.webkit.gtk.DumpRenderTree");
-
g_object_connect(G_OBJECT(view),
"signal::load-started", webViewLoadStarted, 0,
"signal::load-finished", webViewLoadFinished, 0,
diff --git a/WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp b/WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp
index ab70a3e..39fb116 100644
--- a/WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp
+++ b/WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp
@@ -140,8 +140,7 @@ JSValueRef LayoutTestController::computedStyleIncludingVisitedInfo(JSContextRef
JSValueRef LayoutTestController::nodesFromRect(JSContextRef context, JSValueRef value, int x, int y, unsigned top, unsigned right, unsigned bottom, unsigned left, bool ignoreClipping)
{
- // FIXME: Implement this.
- return JSValueMakeUndefined(context);
+ return DumpRenderTreeSupportGtk::nodesFromRect(context, value, x, y, top, right, bottom, left, ignoreClipping);
}
JSRetainPtr<JSStringRef> LayoutTestController::layerTreeAsText() const
diff --git a/WebKitTools/DumpRenderTree/mac/DumpRenderTree.mm b/WebKitTools/DumpRenderTree/mac/DumpRenderTree.mm
index efdf54a..e280fab 100644
--- a/WebKitTools/DumpRenderTree/mac/DumpRenderTree.mm
+++ b/WebKitTools/DumpRenderTree/mac/DumpRenderTree.mm
@@ -295,7 +295,7 @@ WebView *createWebViewAndOffscreenWindow()
[webView setEditingDelegate:editingDelegate];
[webView setResourceLoadDelegate:resourceLoadDelegate];
[webView _setGeolocationProvider:[MockGeolocationProvider shared]];
- [webView _setDeviceOrientationProvider:[[WebDeviceOrientationProviderMock alloc] init]];
+ [webView _setDeviceOrientationProvider:[WebDeviceOrientationProviderMock shared]];
// Register the same schemes that Safari does
[WebView registerURLSchemeAsLocal:@"feed"];
@@ -406,6 +406,7 @@ static void resetDefaultsToConsistentValues()
#endif
[defaults setBool:NO forKey:@"AppleScrollAnimationEnabled"];
+ [defaults setBool:NO forKey:@"NSOverlayScrollersEnabled"];
if (initialValue)
CFPreferencesSetValue(CFSTR("AppleScrollBarVariant"), initialValue.get(), kCFPreferencesAnyApplication, kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
@@ -426,7 +427,7 @@ static void resetDefaultsToConsistentValues()
[preferences setFantasyFontFamily:@"Papyrus"];
[preferences setDefaultFontSize:16];
[preferences setDefaultFixedFontSize:13];
- [preferences setMinimumFontSize:1];
+ [preferences setMinimumFontSize:0];
[preferences setJavaEnabled:NO];
[preferences setJavaScriptEnabled:YES];
[preferences setEditableLinkBehavior:WebKitEditableLinkOnlyLiveWithShiftKey];
diff --git a/WebKitTools/DumpRenderTree/mac/LayoutTestControllerMac.mm b/WebKitTools/DumpRenderTree/mac/LayoutTestControllerMac.mm
index 431d4e9..b19d6b5 100644
--- a/WebKitTools/DumpRenderTree/mac/LayoutTestControllerMac.mm
+++ b/WebKitTools/DumpRenderTree/mac/LayoutTestControllerMac.mm
@@ -70,6 +70,7 @@
#import <WebKit/WebView.h>
#import <WebKit/WebViewPrivate.h>
#import <WebKit/WebWorkersPrivate.h>
+#import <wtf/CurrentTime.h>
#import <wtf/HashMap.h>
#import <wtf/RetainPtr.h>
@@ -348,11 +349,12 @@ void LayoutTestController::setMockDeviceOrientation(bool canProvideAlpha, double
WebDeviceOrientationProviderMock* mockProvider = static_cast<WebDeviceOrientationProviderMock*>(provider);
WebDeviceOrientation* orientation = [[WebDeviceOrientation alloc] initWithCanProvideAlpha:canProvideAlpha alpha:alpha canProvideBeta:canProvideBeta beta:beta canProvideGamma:canProvideGamma gamma:gamma];
[mockProvider setOrientation:orientation];
+ [orientation release];
}
void LayoutTestController::setMockGeolocationPosition(double latitude, double longitude, double accuracy)
{
- WebGeolocationPosition *position = [[WebGeolocationPosition alloc] initWithTimestamp:0 latitude:latitude longitude:longitude accuracy:accuracy];
+ WebGeolocationPosition *position = [[WebGeolocationPosition alloc] initWithTimestamp:currentTime() latitude:latitude longitude:longitude accuracy:accuracy];
[[MockGeolocationProvider shared] setPosition:position];
[position release];
}
diff --git a/WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.cpp b/WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.cpp
index 50ae605..eadcc43 100644
--- a/WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.cpp
+++ b/WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.cpp
@@ -159,7 +159,6 @@ WebPage::WebPage(QObject* parent, DumpRenderTree* drt)
setPluginFactory(new TestPlugin(this));
connect(this, SIGNAL(requestPermissionFromUser(QWebFrame*, QWebPage::PermissionDomain)), this, SLOT(requestPermission(QWebFrame*, QWebPage::PermissionDomain)));
- connect(this, SIGNAL(checkPermissionFromUser(QWebFrame*, QWebPage::PermissionDomain, QWebPage::PermissionPolicy&)), this, SLOT(checkPermission(QWebFrame*, QWebPage::PermissionDomain, QWebPage::PermissionPolicy&)));
connect(this, SIGNAL(cancelRequestsForPermission(QWebFrame*, QWebPage::PermissionDomain)), this, SLOT(cancelPermission(QWebFrame*, QWebPage::PermissionDomain)));
}
@@ -241,20 +240,6 @@ void WebPage::requestPermission(QWebFrame* frame, QWebPage::PermissionDomain dom
}
}
-void WebPage::checkPermission(QWebFrame* frame, QWebPage::PermissionDomain domain, QWebPage::PermissionPolicy& policy)
-{
- switch (domain) {
- case NotificationsPermissionDomain:
- {
- QUrl url = frame->url();
- policy = m_drt->layoutTestController()->checkDesktopNotificationPermission(url.scheme() + "://" + url.host()) ? PermissionGranted : PermissionDenied;
- break;
- }
- default:
- break;
- }
-}
-
void WebPage::cancelPermission(QWebFrame* frame, QWebPage::PermissionDomain domain)
{
switch (domain) {
diff --git a/WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.h b/WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.h
index b3e4e32..0382f96 100644
--- a/WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.h
+++ b/WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.h
@@ -199,7 +199,6 @@ public:
public slots:
bool shouldInterruptJavaScript() { return false; }
void requestPermission(QWebFrame* frame, QWebPage::PermissionDomain domain);
- void checkPermission(QWebFrame* frame, QWebPage::PermissionDomain domain, QWebPage::PermissionPolicy& policy);
void cancelPermission(QWebFrame* frame, QWebPage::PermissionDomain domain);
protected:
diff --git a/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp
index 3e50e06..7135a1a 100644
--- a/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp
+++ b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp
@@ -69,6 +69,7 @@ void LayoutTestController::reset()
m_desktopNotificationAllowedOrigins.clear();
m_ignoreDesktopNotification = false;
m_isGeolocationPermissionSet = false;
+ m_isPrinting = false;
m_geolocationPermission = false;
DumpRenderTreeSupportQt::dumpEditingCallbacks(false);
@@ -196,6 +197,8 @@ int LayoutTestController::windowCount()
void LayoutTestController::grantDesktopNotificationPermission(const QString& origin)
{
+ QWebFrame* frame = m_drt->webPage()->mainFrame();
+ m_drt->webPage()->setUserPermission(frame, QWebPage::NotificationsPermissionDomain, QWebPage::PermissionGranted);
m_desktopNotificationAllowedOrigins.append(origin);
}
diff --git a/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.h b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.h
index dfb12fe..5c17624 100644
--- a/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.h
+++ b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.h
@@ -71,6 +71,7 @@ public:
bool shouldDumpTitleChanges() const { return m_dumpTitleChanges; }
bool waitForPolicy() const { return m_waitForPolicy; }
bool ignoreReqestForPermission() const { return m_ignoreDesktopNotification; }
+ bool isPrinting() { return m_isPrinting; }
void reset();
@@ -95,6 +96,7 @@ public slots:
void dumpDatabaseCallbacks() { m_dumpDatabaseCallbacks = true; }
void dumpStatusCallbacks() { m_dumpStatusCallbacks = true; }
void setCanOpenWindows() { m_canOpenWindows = true; }
+ void setPrinting() { m_isPrinting = true; }
void waitUntilDone();
QString counterValueForElementById(const QString& id);
int webHistoryItemCount();
@@ -267,6 +269,7 @@ private:
bool m_globalFlag;
bool m_userStyleSheetEnabled;
bool m_isGeolocationPermissionSet;
+ bool m_isPrinting;
bool m_geolocationPermission;
QUrl m_userStyleSheetLocation;
diff --git a/WebKitTools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp b/WebKitTools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp
index 2298ef1..755fba0 100644
--- a/WebKitTools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp
+++ b/WebKitTools/DumpRenderTree/unix/TestNetscapePlugin/TestNetscapePlugin.cpp
@@ -340,7 +340,6 @@ webkit_test_plugin_get_value(NPP instance, NPPVariable variable, void *value)
err = NPERR_GENERIC_ERROR;
break;
default:
- fprintf(stderr, "Unhandled variable\n");
err = NPERR_GENERIC_ERROR;
break;
}
diff --git a/WebKitTools/DumpRenderTree/win/AccessibilityUIElementWin.cpp b/WebKitTools/DumpRenderTree/win/AccessibilityUIElementWin.cpp
index 96937fd..5b771b2 100644
--- a/WebKitTools/DumpRenderTree/win/AccessibilityUIElementWin.cpp
+++ b/WebKitTools/DumpRenderTree/win/AccessibilityUIElementWin.cpp
@@ -35,6 +35,16 @@
using std::wstring;
+static COMPtr<IAccessibleComparable> comparableObject(IAccessible* accessible)
+{
+ COMPtr<IServiceProvider> serviceProvider(Query, accessible);
+ if (!serviceProvider)
+ return 0;
+ COMPtr<IAccessibleComparable> comparable;
+ serviceProvider->QueryService(SID_AccessibleComparable, __uuidof(IAccessibleComparable), reinterpret_cast<void**>(&comparable));
+ return comparable;
+}
+
AccessibilityUIElement::AccessibilityUIElement(PlatformUIElement element)
: m_element(element)
{
@@ -49,6 +59,18 @@ AccessibilityUIElement::~AccessibilityUIElement()
{
}
+bool AccessibilityUIElement::isEqual(AccessibilityUIElement* otherElement)
+{
+ COMPtr<IAccessibleComparable> comparable = comparableObject(m_element.get());
+ COMPtr<IAccessibleComparable> otherComparable = comparableObject(otherElement->m_element.get());
+ if (!comparable || !otherComparable)
+ return false;
+ BOOL isSame = FALSE;
+ if (FAILED(comparable->isSameObject(otherComparable.get(), &isSame)))
+ return false;
+ return isSame;
+}
+
void AccessibilityUIElement::getLinkedUIElements(Vector<AccessibilityUIElement>&)
{
}
diff --git a/WebKitTools/DumpRenderTree/win/DumpRenderTree.cpp b/WebKitTools/DumpRenderTree/win/DumpRenderTree.cpp
index 7c3d9b3..aca17fb 100644
--- a/WebKitTools/DumpRenderTree/win/DumpRenderTree.cpp
+++ b/WebKitTools/DumpRenderTree/win/DumpRenderTree.cpp
@@ -792,7 +792,7 @@ static void resetDefaultsToConsistentValues(IWebPreferences* preferences)
preferences->setAutosaves(FALSE);
preferences->setDefaultFontSize(16);
preferences->setDefaultFixedFontSize(13);
- preferences->setMinimumFontSize(1);
+ preferences->setMinimumFontSize(0);
preferences->setJavaEnabled(FALSE);
preferences->setPlugInsEnabled(TRUE);
preferences->setDOMPasteAllowed(TRUE);
diff --git a/WebKitTools/DumpRenderTree/win/DumpRenderTree.vcproj b/WebKitTools/DumpRenderTree/win/DumpRenderTree.vcproj
index 2f4908f..fa0304a 100644
--- a/WebKitTools/DumpRenderTree/win/DumpRenderTree.vcproj
+++ b/WebKitTools/DumpRenderTree/win/DumpRenderTree.vcproj
@@ -18,12 +18,11 @@
<Configuration
Name="Debug|Win32"
ConfigurationType="1"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;.\DumpRenderTreeCommon.vsprops;.\DumpRenderTreeApple.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\DumpRenderTree&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -39,10 +38,6 @@
/>
<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\DumpRenderTree\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="_CONSOLE"
- DisableSpecificWarnings="4146"
- ForcedIncludeFiles="DumpRenderTreePrefix.h"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -55,12 +50,6 @@
/>
<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=""
- SubSystem="1"
- TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -85,19 +74,16 @@
/>
<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\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
Name="Release|Win32"
ConfigurationType="1"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\DumpRenderTreeCommon.vsprops;.\DumpRenderTreeApple.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\DumpRenderTree&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -113,10 +99,6 @@
/>
<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\DumpRenderTree\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="_CONSOLE"
- DisableSpecificWarnings="4146"
- ForcedIncludeFiles="DumpRenderTreePrefix.h"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -129,12 +111,6 @@
/>
<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=""
- SubSystem="1"
- TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -159,18 +135,16 @@
/>
<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\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
Name="Debug_Internal|Win32"
ConfigurationType="1"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_internal.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_internal.vsprops;.\DumpRenderTreeCommon.vsprops;.\DumpRenderTreeApple.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\DumpRenderTree&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -186,10 +160,6 @@
/>
<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\DumpRenderTree\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="_CONSOLE"
- DisableSpecificWarnings="4146"
- ForcedIncludeFiles="DumpRenderTreePrefix.h"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -202,11 +172,6 @@
/>
<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=""
- SubSystem="1"
/>
<Tool
Name="VCALinkTool"
@@ -231,18 +196,16 @@
/>
<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\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
Name="Debug_Cairo|Win32"
ConfigurationType="1"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefinesCairo.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_wincairo.vsprops;$(WebKitLibrariesDir)\tools\vsprops\WinCairo.vsprops"
+ 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;.\DumpRenderTreeCommon.vsprops;.\DumpRenderTreeCairo.vsprops;.\DumpRenderTreeCFLite.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\DumpRenderTree&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(TargetDir)\..\include\WebCore\ForwardingHeaders\wtf\MD5.h&quot; &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -258,10 +221,6 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(ProjectDir)\.&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)\..\cairo&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\include\private&quot;;&quot;$(WebKitOutputDir)\Include\DumpRenderTree\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="_CONSOLE"
- DisableSpecificWarnings="4146"
- ForcedIncludeFiles="DumpRenderTreePrefix.h"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -274,12 +233,6 @@
/>
<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=""
- SubSystem="1"
- TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -304,19 +257,17 @@
/>
<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\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
Name="Release_Cairo|Win32"
ConfigurationType="1"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefinesCairo.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;$(WebKitLibrariesDir)\tools\vsprops\WinCairo.vsprops"
+ 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;.\DumpRenderTreeCommon.vsprops;.\DumpRenderTreeCairo.vsprops;.\DumpRenderTreeCFLite.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\DumpRenderTree&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(TargetDir)\..\include\WebCore\ForwardingHeaders\wtf\MD5.h&quot; &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -332,10 +283,6 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(ProjectDir)\.&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)\..\cairo&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\private&quot;;&quot;$(WebKitOutputDir)\Include\DumpRenderTree\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="_CONSOLE"
- DisableSpecificWarnings="4146"
- ForcedIncludeFiles="DumpRenderTreePrefix.h"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -348,12 +295,6 @@
/>
<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=""
- SubSystem="1"
- TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -378,18 +319,16 @@
/>
<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\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
Name="Debug_All|Win32"
ConfigurationType="1"
- 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"
+ 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;.\DumpRenderTreeCommon.vsprops;.\DumpRenderTreeApple.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\DumpRenderTree&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -405,10 +344,6 @@
/>
<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\DumpRenderTree\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="_CONSOLE"
- DisableSpecificWarnings="4146"
- ForcedIncludeFiles="DumpRenderTreePrefix.h"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -421,11 +356,6 @@
/>
<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=""
- SubSystem="1"
/>
<Tool
Name="VCALinkTool"
@@ -450,7 +380,68 @@
/>
<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\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
+ Name="Release_LTCG|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\FeatureDefines.vsprops;$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\DumpRenderTreeCommon.vsprops;.\DumpRenderTreeApple.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
@@ -688,6 +679,14 @@
Name="VCCLCompilerTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\cairo\PixelDumpSupportCairo.h"
@@ -724,6 +723,14 @@
Name="VCCustomBuildTool"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\cg\PixelDumpSupportCG.cpp"
diff --git a/WebKitTools/DumpRenderTree/win/DumpRenderTreeApple.vsprops b/WebKitTools/DumpRenderTree/win/DumpRenderTreeApple.vsprops
new file mode 100644
index 0000000..a6db765
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/win/DumpRenderTreeApple.vsprops
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="DumpRenderTreeApple"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(ProjectDir)\..\cg&quot;;"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="CoreGraphics$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib CFNetwork$(LibraryConfigSuffix).lib"
+ />
+</VisualStudioPropertySheet>
diff --git a/WebKitTools/DumpRenderTree/win/DumpRenderTreeCFLite.vsprops b/WebKitTools/DumpRenderTree/win/DumpRenderTreeCFLite.vsprops
new file mode 100644
index 0000000..7e47f38
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/win/DumpRenderTreeCFLite.vsprops
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="DumpRenderTreeCFLite"
+ >
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="CFLite$(LibraryConfigSuffix).lib"
+ />
+</VisualStudioPropertySheet>
diff --git a/WebKitTools/DumpRenderTree/win/DumpRenderTreeCairo.vsprops b/WebKitTools/DumpRenderTree/win/DumpRenderTreeCairo.vsprops
new file mode 100644
index 0000000..827bcd0
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/win/DumpRenderTreeCairo.vsprops
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="DumpRenderTreeCairo"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(ProjectDir)\..\cairo&quot;;"
+ />
+</VisualStudioPropertySheet>
diff --git a/WebKitTools/DumpRenderTree/win/DumpRenderTreeCommon.vsprops b/WebKitTools/DumpRenderTree/win/DumpRenderTreeCommon.vsprops
new file mode 100644
index 0000000..ff572a5
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/win/DumpRenderTreeCommon.vsprops
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="DumpRenderTreeCommon"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(ProjectDir)\.&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\private&quot;;&quot;$(WebKitOutputDir)\Include\DumpRenderTree\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="_CONSOLE"
+ DisableSpecificWarnings="4146"
+ ForcedIncludeFiles="DumpRenderTreePrefix.h"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/NXCOMPAT"
+ AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib WebKitGUID$(WebKitConfigSuffix).lib WebKit$(WebKitDLLConfigSuffix).lib pthreadVC2$(LibraryConfigSuffix).lib gdi32.lib ole32.lib oleaut32.lib user32.lib shlwapi.lib oleacc.lib comsuppw.lib"
+ SubSystem="1"
+ />
+ <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\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;"
+ />
+ <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\DumpRenderTree&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\DumpRenderTree\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;if &quot;$(ConfigurationName)&quot;==&quot;Debug_Cairo&quot; xcopy /y /d &quot;$(TargetDir)\..\include\WebCore\ForwardingHeaders\wtf\MD5.h&quot;&#x0D;&#x0A;if &quot;$(ConfigurationName)&quot;==&quot;Release_Cairo&quot; xcopy /y /d &quot;$(TargetDir)\..\include\WebCore\ForwardingHeaders\wtf\MD5.h&quot;&#x0D;&#x0A;"
+ />
+</VisualStudioPropertySheet>
diff --git a/WebKitTools/DumpRenderTree/win/ImageDiff.vcproj b/WebKitTools/DumpRenderTree/win/ImageDiff.vcproj
index fde5e47..dcc6dba 100644
--- a/WebKitTools/DumpRenderTree/win/ImageDiff.vcproj
+++ b/WebKitTools/DumpRenderTree/win/ImageDiff.vcproj
@@ -17,12 +17,11 @@
<Configuration
Name="Debug|Win32"
ConfigurationType="1"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;.\ImageDiffCommon.vsprops"
CharacterSet="2"
>
<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;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -38,7 +37,6 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include&quot;;&quot;$(WebKitOutputDir)\include\private&quot;;&quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -51,10 +49,6 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions="/NXCOMPAT"
- AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib"
- AdditionalLibraryDirectories=""
- SubSystem="1"
/>
<Tool
Name="VCALinkTool"
@@ -79,19 +73,16 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#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 /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&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;"
/>
</Configuration>
<Configuration
Name="Release|Win32"
ConfigurationType="1"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\ImageDiffCommon.vsprops"
CharacterSet="2"
- 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;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -107,7 +98,6 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include&quot;;&quot;$(WebKitOutputDir)\include\private&quot;;&quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -120,10 +110,6 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions="/NXCOMPAT"
- AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib"
- AdditionalLibraryDirectories=""
- SubSystem="1"
/>
<Tool
Name="VCALinkTool"
@@ -148,18 +134,16 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#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 /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&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;"
/>
</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"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_internal.vsprops;.\ImageDiffCommon.vsprops"
CharacterSet="2"
>
<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;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -175,7 +159,6 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include&quot;;&quot;$(WebKitOutputDir)\include\private&quot;;&quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -188,10 +171,6 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions="/NXCOMPAT"
- AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib"
- AdditionalLibraryDirectories=""
- SubSystem="1"
/>
<Tool
Name="VCALinkTool"
@@ -216,18 +195,16 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#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 /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&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;"
/>
</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"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_internal.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_all.vsprops;.\ImageDiffCommon.vsprops"
CharacterSet="2"
>
<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;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -243,7 +220,6 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include&quot;;&quot;$(WebKitOutputDir)\include\private&quot;;&quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -256,10 +232,6 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions="/NXCOMPAT"
- AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib"
- AdditionalLibraryDirectories=""
- SubSystem="1"
/>
<Tool
Name="VCALinkTool"
@@ -284,20 +256,16 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#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 /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&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;"
/>
</Configuration>
<Configuration
Name="Debug_Cairo|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;..\..\..\WebKitLibraries\win\tools\vsprops\debug_wincairo.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;..\..\..\WebKitLibraries\win\tools\vsprops\debug_wincairo.vsprops;.\ImageDiffCommon.vsprops"
CharacterSet="2"
>
<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;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -313,7 +281,6 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include&quot;;&quot;$(WebKitOutputDir)\include\private&quot;;&quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -326,10 +293,6 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalOptions="/NXCOMPAT"
- AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib"
- AdditionalLibraryDirectories=""
- SubSystem="1"
/>
<Tool
Name="VCALinkTool"
@@ -354,7 +317,68 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin&quot;&#x0D;&#x0A;&#x0D;&#x0A;if not defined ARCHIVE_BUILD (if defined PRODUCTION exit /b)&#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 /e /i &quot;$(WebKitLibrariesDir)\bin\CoreFoundation.resources&quot; &quot;$(WebKitOutputDir)\bin\CoreFoundation.resources&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;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\ImageDiffCommon.vsprops"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
diff --git a/WebKitTools/DumpRenderTree/win/ImageDiffCommon.vsprops b/WebKitTools/DumpRenderTree/win/ImageDiffCommon.vsprops
new file mode 100644
index 0000000..bbb8da8
--- /dev/null
+++ b/WebKitTools/DumpRenderTree/win/ImageDiffCommon.vsprops
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="ImageDiffCommon"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include&quot;;&quot;$(WebKitOutputDir)\include\private&quot;;&quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\private&quot;"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/NXCOMPAT"
+ AdditionalDependencies="JavaScriptCore$(WebKitDLLConfigSuffix).lib CoreGraphics$(LibraryConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib"
+ SubSystem="1"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;"
+ />
+ <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;"
+ />
+</VisualStudioPropertySheet>
diff --git a/WebKitTools/FindSafari/FindSafari.vcproj b/WebKitTools/FindSafari/FindSafari.vcproj
index 083fa4d..66f1454 100644
--- a/WebKitTools/FindSafari/FindSafari.vcproj
+++ b/WebKitTools/FindSafari/FindSafari.vcproj
@@ -17,7 +17,7 @@
<Configuration
Name="all|Win32"
ConfigurationType="1"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\FindSafariCommon.vsprops"
CharacterSet="1"
>
<Tool
@@ -49,9 +49,6 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="shlwapi.lib advapi32.lib ole32.lib"
- OutputFile="$(OutDir)\$(ProjectName).exe"
- SubSystem="1"
/>
<Tool
Name="VCALinkTool"
diff --git a/WebKitTools/FindSafari/FindSafariCommon.vsprops b/WebKitTools/FindSafari/FindSafariCommon.vsprops
new file mode 100644
index 0000000..738b109
--- /dev/null
+++ b/WebKitTools/FindSafari/FindSafariCommon.vsprops
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="FindSafariCommon"
+ >
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="shlwapi.lib advapi32.lib ole32.lib"
+ OutputFile="$(OutDir)\$(ProjectName).exe"
+ SubSystem="1"
+ />
+</VisualStudioPropertySheet>
diff --git a/WebKitTools/MiniBrowser/MiniBrowser.qrc b/WebKitTools/MiniBrowser/MiniBrowser.qrc
new file mode 100644
index 0000000..ffe77b0
--- /dev/null
+++ b/WebKitTools/MiniBrowser/MiniBrowser.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/">
+ <file>useragentlist.txt</file>
+ </qresource>
+</RCC>
diff --git a/WebKitTools/MiniBrowser/MiniBrowser.vcproj b/WebKitTools/MiniBrowser/MiniBrowser.vcproj
index 7af24ec..b8bcebe 100644
--- a/WebKitTools/MiniBrowser/MiniBrowser.vcproj
+++ b/WebKitTools/MiniBrowser/MiniBrowser.vcproj
@@ -83,7 +83,6 @@
InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\Configurations\MiniBrowserCoreFoundation.vsprops;.\Configurations\MiniBrowserCommon.vsprops"
UseOfATL="1"
CharacterSet="1"
- WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -393,6 +392,69 @@
Name="VCPostBuildEventTool"
/>
</Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\Configurations\MiniBrowserCoreFoundation.vsprops;.\Configurations\MiniBrowserCommon.vsprops"
+ UseOfATL="1"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
</Configurations>
<References>
</References>
@@ -469,6 +531,14 @@
UsePrecompiledHeader="1"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
</File>
</Filter>
<Filter
diff --git a/WebKitTools/MiniBrowser/qt/BrowserView.cpp b/WebKitTools/MiniBrowser/qt/BrowserView.cpp
index ce101c2..c885a39 100644
--- a/WebKitTools/MiniBrowser/qt/BrowserView.cpp
+++ b/WebKitTools/MiniBrowser/qt/BrowserView.cpp
@@ -36,14 +36,14 @@ static QWKPage* createNewPage(QWKPage* page)
return page;
}
-BrowserView::BrowserView(QWidget* parent)
+BrowserView::BrowserView(QGraphicsWKView::BackingStoreType backingStoreType, QWidget* parent)
: QGraphicsView(parent)
, m_item(0)
, m_context(WKContextGetSharedProcessContext())
{
WKRetainPtr<WKPageNamespaceRef> pageNamespace(AdoptWK, WKPageNamespaceCreate(m_context.get()));
- m_item = new QGraphicsWKView(pageNamespace.get(), QGraphicsWKView::Simple, 0);
+ m_item = new QGraphicsWKView(pageNamespace.get(), backingStoreType, 0);
setScene(new QGraphicsScene(this));
scene()->addItem(m_item);
diff --git a/WebKitTools/MiniBrowser/qt/BrowserView.h b/WebKitTools/MiniBrowser/qt/BrowserView.h
index 42b7658..7e8288e 100644
--- a/WebKitTools/MiniBrowser/qt/BrowserView.h
+++ b/WebKitTools/MiniBrowser/qt/BrowserView.h
@@ -37,7 +37,7 @@ class BrowserView : public QGraphicsView {
Q_OBJECT
public:
- BrowserView(QWidget* parent = 0);
+ BrowserView(QGraphicsWKView::BackingStoreType, QWidget* parent = 0);
virtual ~BrowserView() { delete m_item; }
void load(const QString&);
diff --git a/WebKitTools/MiniBrowser/qt/BrowserWindow.cpp b/WebKitTools/MiniBrowser/qt/BrowserWindow.cpp
index a703788..4c56c3b 100644
--- a/WebKitTools/MiniBrowser/qt/BrowserWindow.cpp
+++ b/WebKitTools/MiniBrowser/qt/BrowserWindow.cpp
@@ -30,15 +30,19 @@
#include "WKPageNamespace.h"
-BrowserWindow::BrowserWindow()
+BrowserWindow::BrowserWindow(QGraphicsWKView::BackingStoreType type)
+ : m_backingStoreType(type)
{
setAttribute(Qt::WA_DeleteOnClose);
m_menu = new QMenuBar();
- m_browser = new BrowserView();
+ m_browser = new BrowserView(m_backingStoreType);
m_addressBar = new QLineEdit();
m_menu->addAction("New Window", this, SLOT(newWindow()));
+ m_menu->addAction("Change User Agent", this, SLOT(showUserAgentDialog()));
+
+ m_menu->addSeparator();
m_menu->addAction("Quit", this, SLOT(close()));
m_browser->setFocus(Qt::OtherFocusReason);
@@ -60,6 +64,9 @@ BrowserWindow::BrowserWindow()
m_browser->setFocus(Qt::OtherFocusReason);
+ QShortcut* selectAddressBar = new QShortcut(Qt::CTRL | Qt::Key_L, this);
+ connect(selectAddressBar, SIGNAL(activated()), this, SLOT(openLocation()));
+
resize(960, 640);
show();
}
@@ -72,11 +79,17 @@ void BrowserWindow::load(const QString& url)
BrowserWindow* BrowserWindow::newWindow(const QString& url)
{
- BrowserWindow* window = new BrowserWindow();
+ BrowserWindow* window = new BrowserWindow(m_backingStoreType);
window->load(url);
return window;
}
+void BrowserWindow::openLocation()
+{
+ m_addressBar->selectAll();
+ m_addressBar->setFocus();
+}
+
void BrowserWindow::changeLocation()
{
QString string = m_addressBar->text();
@@ -112,6 +125,53 @@ void BrowserWindow::urlChanged(const QUrl& url)
m_addressBar->setText(url.toString());
}
+void BrowserWindow::updateUserAgentList()
+{
+ QWKPage* page = m_browser->view()->page();
+
+ QFile file(":/useragentlist.txt");
+
+ if (file.open(QIODevice::ReadOnly)) {
+ while (!file.atEnd())
+ m_userAgentList << file.readLine().trimmed();
+ file.close();
+ }
+
+ Q_ASSERT(!m_userAgentList.isEmpty());
+
+ if (!(page->customUserAgent().isEmpty() || m_userAgentList.contains(page->customUserAgent())))
+ m_userAgentList << page->customUserAgent();
+}
+
+void BrowserWindow::showUserAgentDialog()
+{
+ updateUserAgentList();
+
+ QDialog dialog(this);
+ dialog.setWindowTitle("Change User Agent");
+ dialog.resize(size().width() * 0.7, dialog.size().height());
+ QVBoxLayout* layout = new QVBoxLayout(&dialog);
+ dialog.setLayout(layout);
+
+ QComboBox* combo = new QComboBox(&dialog);
+ combo->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLength);
+ combo->setEditable(true);
+ combo->insertItems(0, m_userAgentList);
+ layout->addWidget(combo);
+
+ int index = combo->findText(m_browser->view()->page()->customUserAgent());
+ combo->setCurrentIndex(index);
+
+ QDialogButtonBox* buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel
+ , Qt::Horizontal, &dialog);
+ connect(buttonBox, SIGNAL(accepted()), &dialog, SLOT(accept()));
+ connect(buttonBox, SIGNAL(rejected()), &dialog, SLOT(reject()));
+ layout->addWidget(buttonBox);
+
+ if (dialog.exec() && !combo->currentText().isEmpty())
+ m_browser->view()->page()->setCustomUserAgent(combo->currentText());
+}
+
BrowserWindow::~BrowserWindow()
{
delete m_addressBar;
diff --git a/WebKitTools/MiniBrowser/qt/BrowserWindow.h b/WebKitTools/MiniBrowser/qt/BrowserWindow.h
index 47e55b5..fe94d6b 100644
--- a/WebKitTools/MiniBrowser/qt/BrowserWindow.h
+++ b/WebKitTools/MiniBrowser/qt/BrowserWindow.h
@@ -29,32 +29,38 @@
#ifndef BrowserWindow_h
#define BrowserWindow_h
-#define PLATFORM(x) 0
-
#include "BrowserView.h"
+#include <QStringList>
#include <QtGui>
+#include <qgraphicswkview.h>
class BrowserWindow : public QMainWindow {
Q_OBJECT
public:
- BrowserWindow();
+ BrowserWindow(QGraphicsWKView::BackingStoreType);
~BrowserWindow();
void load(const QString& url);
public slots:
BrowserWindow* newWindow(const QString& url = "about:blank");
+ void openLocation();
protected slots:
void changeLocation();
void loadProgress(int progress);
void titleChanged(const QString&);
void urlChanged(const QUrl&);
+ void showUserAgentDialog();
private:
+ void updateUserAgentList();
+
BrowserView* m_browser;
QMenuBar* m_menu;
QLineEdit* m_addressBar;
+ QStringList m_userAgentList;
+ QGraphicsWKView::BackingStoreType m_backingStoreType;
};
#endif
diff --git a/WebKitTools/MiniBrowser/qt/MiniBrowser.pro b/WebKitTools/MiniBrowser/qt/MiniBrowser.pro
index e42c49a..82f6a00 100644
--- a/WebKitTools/MiniBrowser/qt/MiniBrowser.pro
+++ b/WebKitTools/MiniBrowser/qt/MiniBrowser.pro
@@ -51,3 +51,10 @@ contains(QT_CONFIG, opengl) {
QT += opengl
DEFINES += QT_CONFIGURED_WITH_OPENGL
}
+
+# We have to copy the resource file to the build directory
+# to use the useragentlist.txt file of QtTestBrowser without
+# polluting the source tree.
+# The copier is defined in WebKit2/DerivedSources.pro.
+RESOURCES += \
+ $$OUTPUT_DIR/WebKitTools/MiniBrowser/qt/MiniBrowser.qrc
diff --git a/WebKitTools/MiniBrowser/qt/main.cpp b/WebKitTools/MiniBrowser/qt/main.cpp
index 8ff3de8..20f4ff5 100644
--- a/WebKitTools/MiniBrowser/qt/main.cpp
+++ b/WebKitTools/MiniBrowser/qt/main.cpp
@@ -27,28 +27,37 @@
*/
#include "BrowserWindow.h"
+#include <QLatin1String>
+#include <QRegExp>
+#include <qgraphicswkview.h>
#include <QtGui>
int main(int argc, char** argv) {
QApplication app(argc, argv);
QStringList args = QApplication::arguments();
- QStringList urls = args;
- urls.removeAt(0);
+ args.removeAt(0);
- if (urls.isEmpty()) {
+ QGraphicsWKView::BackingStoreType backingStoreTypeToUse = QGraphicsWKView::Simple;
+ int indexOfTiledOption;
+ if ((indexOfTiledOption = args.indexOf(QRegExp(QLatin1String("-tiled")))) != -1) {
+ backingStoreTypeToUse = QGraphicsWKView::Tiled;
+ args.removeAt(indexOfTiledOption);
+ }
+
+ if (args.isEmpty()) {
QString defaultUrl = QString("file://%1/%2").arg(QDir::homePath()).arg(QLatin1String("index.html"));
if (QDir(defaultUrl).exists())
- urls.append(defaultUrl);
+ args.append(defaultUrl);
else
- urls.append("http://www.google.com");
+ args.append("http://www.google.com");
}
- BrowserWindow* window = new BrowserWindow();
- window->load(urls[0]);
+ BrowserWindow* window = new BrowserWindow(backingStoreTypeToUse);
+ window->load(args[0]);
- for (int i = 1; i < urls.size(); ++i)
- window->newWindow(urls[i]);
+ for (int i = 1; i < args.size(); ++i)
+ window->newWindow(args[i]);
app.exec();
diff --git a/WebKitTools/MiniBrowser/win/stdafx.h b/WebKitTools/MiniBrowser/win/stdafx.h
index 0522a17..c5a35f9 100644
--- a/WebKitTools/MiniBrowser/win/stdafx.h
+++ b/WebKitTools/MiniBrowser/win/stdafx.h
@@ -28,4 +28,3 @@
#include <tchar.h>
#include <windows.h>
-
diff --git a/WebKitTools/QtTestBrowser/mainwindow.cpp b/WebKitTools/QtTestBrowser/mainwindow.cpp
index 68002e1..9854c4f 100644
--- a/WebKitTools/QtTestBrowser/mainwindow.cpp
+++ b/WebKitTools/QtTestBrowser/mainwindow.cpp
@@ -116,12 +116,13 @@ WebPage* MainWindow::page() const
void MainWindow::setAddressUrl(const QUrl& url)
{
- urlEdit->setText(url.toString(QUrl::RemoveUserInfo));
+ setAddressUrl(url.toString(QUrl::RemoveUserInfo));
}
void MainWindow::setAddressUrl(const QString& url)
{
- urlEdit->setText(url);
+ if (!url.contains("about:"))
+ urlEdit->setText(url);
}
void MainWindow::addCompleterEntry(const QUrl& url)
diff --git a/WebKitTools/QtTestBrowser/webpage.cpp b/WebKitTools/QtTestBrowser/webpage.cpp
index 137c65c..114ed6c 100644
--- a/WebKitTools/QtTestBrowser/webpage.cpp
+++ b/WebKitTools/QtTestBrowser/webpage.cpp
@@ -51,7 +51,6 @@ WebPage::WebPage(QObject* parent)
connect(networkAccessManager(), SIGNAL(authenticationRequired(QNetworkReply*, QAuthenticator*)),
this, SLOT(authenticationRequired(QNetworkReply*, QAuthenticator*)));
connect(this, SIGNAL(requestPermissionFromUser(QWebFrame*, QWebPage::PermissionDomain)), this, SLOT(requestPermission(QWebFrame*, QWebPage::PermissionDomain)));
- connect(this, SIGNAL(checkPermissionFromUser(QWebFrame*, QWebPage::PermissionDomain, QWebPage::PermissionPolicy&)), this, SLOT(checkPermission(QWebFrame*, QWebPage::PermissionDomain, QWebPage::PermissionPolicy&)));
connect(this, SIGNAL(cancelRequestsForPermission(QWebFrame*, QWebPage::PermissionDomain)), this, SLOT(cancelRequestsForPermission(QWebFrame*, QWebPage::PermissionDomain)));
}
@@ -173,17 +172,6 @@ void WebPage::requestPermission(QWebFrame* frame, QWebPage::PermissionDomain dom
setUserPermission(frame, domain, PermissionGranted);
}
-void WebPage::checkPermission(QWebFrame* frame, QWebPage::PermissionDomain domain, QWebPage::PermissionPolicy& policy)
-{
- switch (domain) {
- case NotificationsPermissionDomain:
- policy = PermissionGranted;
- break;
- default:
- break;
- }
-}
-
void WebPage::cancelRequestsForPermission(QWebFrame*, QWebPage::PermissionDomain)
{
}
diff --git a/WebKitTools/QtTestBrowser/webpage.h b/WebKitTools/QtTestBrowser/webpage.h
index 15ae369..27198e5 100644
--- a/WebKitTools/QtTestBrowser/webpage.h
+++ b/WebKitTools/QtTestBrowser/webpage.h
@@ -58,7 +58,6 @@ public slots:
bool shouldInterruptJavaScript();
void authenticationRequired(QNetworkReply*, QAuthenticator*);
void requestPermission(QWebFrame* frame, QWebPage::PermissionDomain domain);
- void checkPermission(QWebFrame* frame, QWebPage::PermissionDomain domain, QWebPage::PermissionPolicy& policy);
void cancelRequestsForPermission(QWebFrame* frame, QWebPage::PermissionDomain domain);
private:
diff --git a/WebKitTools/Scripts/build-webkit b/WebKitTools/Scripts/build-webkit
index da336fe..d9534f8 100755
--- a/WebKitTools/Scripts/build-webkit
+++ b/WebKitTools/Scripts/build-webkit
@@ -87,7 +87,6 @@ my (
$notificationsSupport,
$offlineWebApplicationSupport,
$progressTagSupport,
- $rubySupport,
$sharedWorkersSupport,
$svgSupport,
$svgAnimationSupport,
@@ -198,9 +197,6 @@ my @features = (
{ option => "progress-tag", desc => "Progress Tag support",
define => "ENABLE_PROGRESS_TAG", default => 1, value => \$progressTagSupport },
- { option => "ruby", desc => "Toggle HTML5 Ruby support",
- define => "ENABLE_RUBY", default => 1, value => \$rubySupport },
-
{ option => "system-malloc", desc => "Toggle system allocator instead of TCmalloc",
define => "USE_SYSTEM_MALLOC", default => 0, value => \$systemMallocSupport },
diff --git a/WebKitTools/Scripts/do-file-rename b/WebKitTools/Scripts/do-file-rename
index b81b9dc..9c4c898 100755
--- a/WebKitTools/Scripts/do-file-rename
+++ b/WebKitTools/Scripts/do-file-rename
@@ -47,6 +47,7 @@ find(\&wanted, "JavaScriptCore");
find(\&wanted, "JavaScriptGlue");
find(\&wanted, "WebCore");
find(\&wanted, "WebKit");
+find(\&wanted, "WebKit2");
sub wanted
{
diff --git a/WebKitTools/Scripts/old-run-webkit-tests b/WebKitTools/Scripts/old-run-webkit-tests
index 2cef18b..eeaaab3 100755
--- a/WebKitTools/Scripts/old-run-webkit-tests
+++ b/WebKitTools/Scripts/old-run-webkit-tests
@@ -917,8 +917,7 @@ for my $test (@tests) {
testCrashedOrTimedOut($test, $base, 1, $actual, $error);
} elsif (!defined $expected) {
if ($verbose) {
- print "new " . ($resetResults ? "result" : "test") ."\n";
- $atLineStart = 1;
+ print "new " . ($resetResults ? "result" : "test");
}
$result = "new";
@@ -936,11 +935,13 @@ for my $test (@tests) {
print "$test -> ";
}
my $resultsDir = catdir($expectedDir, dirname($base));
+ if (!$verbose) {
+ print "new";
+ }
if ($generateNewResults) {
- print "new (results generated in $resultsDir)\n";
- } else {
- print "new\n";
+ print " (results generated in $resultsDir)";
}
+ print "\n" unless $atLineStart;
$atLineStart = 1;
}
} elsif ($actual eq $expected && $diffResult eq "passed") {
@@ -1420,6 +1421,10 @@ sub openDumpTool()
{
return if $isDumpToolOpen;
+ if ($verbose && $testsPerDumpTool != 1) {
+ print "| Opening DumpTool |\n";
+ }
+
my %CLEAN_ENV;
# Generic environment variables
@@ -1502,6 +1507,10 @@ sub closeDumpTool()
{
return if !$isDumpToolOpen;
+ if ($verbose && $testsPerDumpTool != 1) {
+ print "| Closing DumpTool |\n";
+ }
+
close IN;
close OUT;
waitpid $dumpToolPID, 0;
diff --git a/WebKitTools/Scripts/print-vse-failure-logs b/WebKitTools/Scripts/print-vse-failure-logs
index cec806e..7580465 100755
--- a/WebKitTools/Scripts/print-vse-failure-logs
+++ b/WebKitTools/Scripts/print-vse-failure-logs
@@ -33,15 +33,14 @@
from __future__ import with_statement
import codecs
-import os.path
import os
+import re
+from webkitpy.common.checkout import scm
from webkitpy.common.system.executive import Executive
+from webkitpy.thirdparty import BeautifulSoup
-# This is just enough to make the win-ews bot useable. Others who
-# actually use Windows should feel encouraged to improve this class,
-# including just printing the text instead of the raw html.
class PrintVisualStudioExpressLogs(object):
def __init__(self):
self._executive = Executive()
@@ -55,25 +54,59 @@ class PrintVisualStudioExpressLogs(object):
build_log_paths.append(file_path)
return build_log_paths
+ def _build_order(self):
+ """Returns a list of project names in the order in which they are built."""
+ script_path = os.path.join(self._scripts_directory(), "print-msvc-project-dependencies")
+ sln_path = os.path.join(scm.find_checkout_root(), "WebKit", "win", "WebKit.vcproj", "WebKit.sln")
+ lines = self._executive.run_command([script_path, sln_path]).splitlines()
+ order = [line.strip() for line in lines if line.find("Folder") == -1]
+ order.reverse()
+ return order
+
+ def _sort_buildlogs(self, log_paths):
+ build_order = self._build_order()
+ def sort_key(log_path):
+ project_name = os.path.basename(os.path.dirname(os.path.dirname(log_path)))
+ try:
+ index = build_order.index(project_name)
+ except ValueError:
+ # If the project isn't in the list, sort it after all items that
+ # are in the list.
+ index = len(build_order)
+ # Sort first by build order, then by project name
+ return (index, project_name)
+ return sorted(log_paths, key=sort_key)
+
def _obj_directory(self):
- scripts_directory = os.path.dirname(__file__)
- build_directory_script_path = os.path.join(scripts_directory, "webkit-build-directory")
+ build_directory_script_path = os.path.join(self._scripts_directory(), "webkit-build-directory")
# FIXME: ports/webkit.py should provide the build directory in a nice API.
# NOTE: The windows VSE build does not seem to use different directories
# for Debug and Release.
build_directory = self._executive.run_command([build_directory_script_path, "--top-level"]).rstrip()
return os.path.join(build_directory, "obj")
+ def _scripts_directory(self):
+ return os.path.dirname(__file__)
+
+ def _relevant_text(self, log):
+ soup = BeautifulSoup.BeautifulSoup(log)
+ # The Output Window table is where the useful output starts in the build log.
+ output_window_table = soup.find(text=re.compile("Output Window")).findParent("table")
+ result = []
+ for table in [output_window_table] + output_window_table.findNextSiblings("table"):
+ result.extend([text.replace("&nbsp;", "") for text in table.findAll(text=True)])
+ result.append("\n")
+ return "".join(result)
+
def main(self):
- obj_directory = self._obj_directory()
- build_log_paths = self._find_buildlogs(obj_directory)
+ build_log_paths = self._sort_buildlogs(self._find_buildlogs(self._obj_directory()))
print "Found %s Visual Studio Express Build Logs:\n%s" % (len(build_log_paths), "\n".join(build_log_paths))
for build_log_path in build_log_paths:
print "%s:\n" % build_log_path
with codecs.open(build_log_path, "r", "utf-16") as build_log:
- print build_log.read()
+ print self._relevant_text(build_log)
if __name__ == '__main__':
diff --git a/WebKitTools/Scripts/webkitpy/common/checkout/scm.py b/WebKitTools/Scripts/webkitpy/common/checkout/scm.py
index 8aadcb8..11e82ac 100644
--- a/WebKitTools/Scripts/webkitpy/common/checkout/scm.py
+++ b/WebKitTools/Scripts/webkitpy/common/checkout/scm.py
@@ -700,8 +700,7 @@ class Git(SCM):
"""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), "--"] + changed_files, decode_output=False)
+ return self.run(['git', 'diff', '--binary', "--no-ext-diff", "--full-index", "-M", self.merge_base(git_commit), "--"] + changed_files, decode_output=False, cwd=self.checkout_root)
def _run_git_svn_find_rev(self, arg):
# git svn find-rev always exits 0, even when the revision or commit is not found.
diff --git a/WebKitTools/Scripts/webkitpy/common/config/build.py b/WebKitTools/Scripts/webkitpy/common/config/build.py
new file mode 100644
index 0000000..c45f122
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/common/config/build.py
@@ -0,0 +1,138 @@
+# 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.
+
+"""Functions relating to building WebKit"""
+
+import re
+
+
+def _should_file_trigger_build(target_platform, file):
+ # The directories and patterns lists below map directory names or
+ # regexp patterns to the bot platforms for which they should trigger a
+ # build. Mapping to the empty list means that no builds should be
+ # triggered on any platforms. Earlier directories/patterns take
+ # precendence over later ones.
+
+ # FIXME: The patterns below have only been verified to be correct on
+ # Windows. We should implement this for other platforms and start using
+ # it for their bots. Someone familiar with each platform will have to
+ # figure out what the right set of directories/patterns is for that
+ # platform.
+ assert(target_platform == "win")
+
+ directories = [
+ # Directories that shouldn't trigger builds on any bots.
+ ("BugsSite", []),
+ ("PageLoadTests", []),
+ ("PlanetWebKit", []),
+ ("WebCore/manual-tests", []),
+ ("WebKitExamplePlugins", []),
+ ("WebKitSite", []),
+ ("android", []),
+ ("brew", []),
+ ("efl", []),
+ ("haiku", []),
+ ("iphone", []),
+ ("opengl", []),
+ ("opentype", []),
+ ("openvg", []),
+ ("wx", []),
+ ("wince", []),
+
+ # Directories that should trigger builds on only some bots.
+ ("JavaScriptGlue", ["mac"]),
+ ("LayoutTests/platform/mac", ["mac", "win"]),
+ ("LayoutTests/platform/mac-snowleopard", ["mac-snowleopard", "win"]),
+ ("WebCore/image-decoders", ["chromium"]),
+ ("cairo", ["gtk", "wincairo"]),
+ ("cf", ["chromium-mac", "mac", "qt", "win"]),
+ ("chromium", ["chromium"]),
+ ("cocoa", ["chromium-mac", "mac"]),
+ ("curl", ["gtk", "wincairo"]),
+ ("gobject", ["gtk"]),
+ ("gpu", ["chromium", "mac"]),
+ ("gstreamer", ["gtk"]),
+ ("gtk", ["gtk"]),
+ ("mac", ["chromium-mac", "mac"]),
+ ("mac-leopard", ["mac-leopard"]),
+ ("mac-snowleopard", ["mac-snowleopard"]),
+ ("mac-wk2", ["mac-snowleopard", "win"]),
+ ("objc", ["mac"]),
+ ("qt", ["qt"]),
+ ("skia", ["chromium"]),
+ ("soup", ["gtk"]),
+ ("v8", ["chromium"]),
+ ("win", ["chromium-win", "win"]),
+ ]
+ patterns = [
+ # Patterns that shouldn't trigger builds on any bots.
+ (r"(?:^|/)Makefile$", []),
+ (r"/ARM", []),
+ (r"/CMake.*", []),
+ (r"/ChangeLog.*$", []),
+ (r"/LICENSE[^/]+$", []),
+ (r"ARM(?:v7)?\.(?:cpp|h)$", []),
+ (r"MIPS\.(?:cpp|h)$", []),
+ (r"WinCE\.(?:cpp|h|mm)$", []),
+ (r"\.(?:bkl|mk)$", []),
+
+ # Patterns that should trigger builds on only some bots.
+ (r"/GNUmakefile\.am$", ["gtk"]),
+ (r"/\w+Chromium\w*\.(?:cpp|h|mm)$", ["chromium"]),
+ (r"Mac\.(?:cpp|h|mm)$", ["mac"]),
+ (r"\.exp$", ["mac"]),
+ (r"\.gypi?", ["chromium"]),
+ (r"\.order$", ["mac"]),
+ (r"\.pr[io]$", ["qt"]),
+ (r"\.xcconfig$", ["mac"]),
+ (r"\.xcodeproj/", ["mac"]),
+ ]
+
+ base_platform = target_platform.split("-")[0]
+
+ # See if the file is in one of the known directories.
+ for directory, platforms in directories:
+ if re.search(r"(?:^|/)%s/" % directory, file):
+ return target_platform in platforms or base_platform in platforms
+
+ # See if the file matches a known pattern.
+ for pattern, platforms in patterns:
+ if re.search(pattern, file):
+ return target_platform in platforms or base_platform in platforms
+
+ # See if the file is a platform-specific test result.
+ match = re.match("LayoutTests/platform/(?P<platform>[^/]+)/", file)
+ if match:
+ # See if the file is a test result for this platform, our base
+ # platform, or one of our sub-platforms.
+ return match.group("platform") in (target_platform, base_platform) or match.group("platform").startswith("%s-" % target_platform)
+
+ # The file isn't one we know about specifically, so we should assume we
+ # have to build.
+ return True
+
+
+def should_build(target_platform, changed_files):
+ """Returns true if the changed files affect the given platform, and
+ thus a build should be performed. target_platform should be one of the
+ platforms used in the build.webkit.org master's config.json file."""
+ return any(_should_file_trigger_build(target_platform, file) for file in changed_files)
diff --git a/WebKitTools/Scripts/webkitpy/common/config/build_unittest.py b/WebKitTools/Scripts/webkitpy/common/config/build_unittest.py
new file mode 100644
index 0000000..3e70ff0
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/common/config/build_unittest.py
@@ -0,0 +1,64 @@
+# 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.
+
+import unittest
+
+from webkitpy.common.config import build
+
+
+class ShouldBuildTest(unittest.TestCase):
+ _should_build_tests = [
+ (["BugsSite/foo", "WebCore/bar"], ["*"]),
+ (["BugsSite/foo"], []),
+ (["JavaScriptCore/JavaScriptCore.xcodeproj/foo"], ["mac-leopard", "mac-snowleopard"]),
+ (["JavaScriptGlue/foo", "WebCore/bar"], ["*"]),
+ (["JavaScriptGlue/foo"], ["mac-leopard", "mac-snowleopard"]),
+ (["LayoutTests/foo"], ["*"]),
+ (["LayoutTests/platform/chromium-linux/foo"], ["chromium-linux"]),
+ (["LayoutTests/platform/chromium-win/fast/compact/001-expected.txt"], ["chromium-win"]),
+ (["LayoutTests/platform/mac-leopard/foo"], ["mac-leopard"]),
+ (["LayoutTests/platform/mac-snowleopard/foo"], ["mac-snowleopard", "win"]),
+ (["LayoutTests/platform/mac-wk2/Skipped"], ["mac-snowleopard", "win"]),
+ (["LayoutTests/platform/mac/foo"], ["mac-leopard", "mac-snowleopard", "win"]),
+ (["LayoutTests/platform/win-xp/foo"], ["win"]),
+ (["LayoutTests/platform/win-wk2/foo"], ["win"]),
+ (["LayoutTests/platform/win/foo"], ["win"]),
+ (["WebCore/mac/foo"], ["chromium-mac", "mac-leopard", "mac-snowleopard"]),
+ (["WebCore/win/foo"], ["chromium-win", "win"]),
+ (["WebCore/platform/graphics/gpu/foo"], ["mac-leopard", "mac-snowleopard"]),
+ (["WebCore/platform/wx/wxcode/win/foo"], []),
+ (["WebCore/rendering/RenderThemeMac.mm", "WebCore/rendering/RenderThemeMac.h"], ["mac-leopard", "mac-snowleopard"]),
+ (["WebCore/rendering/RenderThemeChromiumLinux.h"], ["chromium-linux"]),
+ (["WebCore/rendering/RenderThemeWinCE.h"], []),
+ ]
+
+ def test_should_build(self):
+ for files, platforms in self._should_build_tests:
+ # FIXME: We should test more platforms here once
+ # build._should_file_trigger_build is implemented for them.
+ for platform in ["win"]:
+ should_build = platform in platforms or "*" in platforms
+ self.assertEqual(build.should_build(platform, files), should_build, "%s should%s have built but did%s (files: %s)" % (platform, "" if should_build else "n't", "n't" if should_build else "", str(files)))
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/WebKitTools/Scripts/webkitpy/common/config/committers.py b/WebKitTools/Scripts/webkitpy/common/config/committers.py
index 446c2b1..0967340 100644
--- a/WebKitTools/Scripts/webkitpy/common/config/committers.py
+++ b/WebKitTools/Scripts/webkitpy/common/config/committers.py
@@ -69,7 +69,7 @@ committers_unable_to_review = [
Committer("Albert J. Wong", "ajwong@chromium.org"),
Committer("Alejandro G. Castro", ["alex@igalia.com", "alex@webkit.org"]),
Committer("Alexander Kellett", ["lypanov@mac.com", "a-lists001@lypanov.net", "lypanov@kde.org"], "lypanov"),
- Committer("Alexander Pavlov", "apavlov@chromium.org"),
+ Committer("Alexander Pavlov", "apavlov@chromium.org", "apavlov"),
Committer("Andre Boule", "aboule@apple.com"),
Committer("Andrei Popescu", "andreip@google.com", "andreip"),
Committer("Andrew Wellington", ["andrew@webkit.org", "proton@wiretapped.net"], "proton"),
diff --git a/WebKitTools/Scripts/webkitpy/common/config/committervalidator.py b/WebKitTools/Scripts/webkitpy/common/config/committervalidator.py
new file mode 100644
index 0000000..b7b2990
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/common/config/committervalidator.py
@@ -0,0 +1,120 @@
+# Copyright (c) 2009 Google Inc. All rights reserved.
+# Copyright (c) 2009 Apple Inc. All rights reserved.
+# Copyright (c) 2010 Research In Motion Limited. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import os
+
+from webkitpy.common.system.ospath import relpath
+from webkitpy.common.config import committers
+
+
+class CommitterValidator(object):
+
+ def __init__(self, bugzilla):
+ self._bugzilla = bugzilla
+
+ # _view_source_url belongs in some sort of webkit_config.py module.
+ def _view_source_url(self, local_path):
+ return "http://trac.webkit.org/browser/trunk/%s" % local_path
+
+ def _checkout_root(self):
+ # FIXME: This is a hack, we would have this from scm.checkout_root
+ # if we had any way to get to an scm object here.
+ components = __file__.split(os.sep)
+ tools_index = components.index("WebKitTools")
+ return os.sep.join(components[:tools_index])
+
+ def _committers_py_path(self):
+ # extension can sometimes be .pyc, we always want .py
+ (path, extension) = os.path.splitext(committers.__file__)
+ # FIXME: When we're allowed to use python 2.6 we can use the real
+ # os.path.relpath
+ path = relpath(path, self._checkout_root())
+ return ".".join([path, "py"])
+
+ def _flag_permission_rejection_message(self, setter_email, flag_name):
+ # Should come from some webkit_config.py
+ contribution_guidlines = "http://webkit.org/coding/contributing.html"
+ # This could be queried from the status_server.
+ queue_administrator = "eseidel@chromium.org"
+ # This could be queried from the tool.
+ queue_name = "commit-queue"
+ committers_list = self._committers_py_path()
+ message = "%s does not have %s permissions according to %s." % (
+ setter_email,
+ flag_name,
+ self._view_source_url(committers_list))
+ message += "\n\n- If you do not have %s rights please read %s for instructions on how to use bugzilla flags." % (
+ flag_name, contribution_guidlines)
+ message += "\n\n- If you have %s rights please correct the error in %s by adding yourself to the file (no review needed). " % (
+ flag_name, committers_list)
+ message += "The %s restarts itself every 2 hours. After restart the %s will correctly respect your %s rights." % (
+ queue_name, queue_name, flag_name)
+ return message
+
+ def _validate_setter_email(self, patch, result_key, rejection_function):
+ committer = getattr(patch, result_key)()
+ # If the flag is set, and we don't recognize the setter, reject the
+ # flag!
+ setter_email = patch._attachment_dictionary.get("%s_email" % result_key)
+ if setter_email and not committer:
+ rejection_function(patch.id(),
+ self._flag_permission_rejection_message(setter_email,
+ result_key))
+ return False
+ return True
+
+ def _reject_patch_if_flags_are_invalid(self, patch):
+ return (self._validate_setter_email(
+ patch, "reviewer", self.reject_patch_from_review_queue)
+ and self._validate_setter_email(
+ patch, "committer", self.reject_patch_from_commit_queue))
+
+ def patches_after_rejecting_invalid_commiters_and_reviewers(self, patches):
+ return [patch for patch in patches if self._reject_patch_if_flags_are_invalid(patch)]
+
+ def reject_patch_from_commit_queue(self,
+ attachment_id,
+ additional_comment_text=None):
+ comment_text = "Rejecting patch %s from commit-queue." % attachment_id
+ self._bugzilla.set_flag_on_attachment(attachment_id,
+ "commit-queue",
+ "-",
+ comment_text,
+ additional_comment_text)
+
+ def reject_patch_from_review_queue(self,
+ attachment_id,
+ additional_comment_text=None):
+ comment_text = "Rejecting patch %s from review queue." % attachment_id
+ self._bugzilla.set_flag_on_attachment(attachment_id,
+ 'review',
+ '-',
+ comment_text,
+ additional_comment_text)
diff --git a/WebKitTools/Scripts/webkitpy/common/config/committervalidator_unittest.py b/WebKitTools/Scripts/webkitpy/common/config/committervalidator_unittest.py
new file mode 100644
index 0000000..61fa3bf
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/common/config/committervalidator_unittest.py
@@ -0,0 +1,43 @@
+# Copyright (C) 2010 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import unittest
+
+from .committervalidator import CommitterValidator
+
+
+class CommitterValidatorTest(unittest.TestCase):
+ def test_flag_permission_rejection_message(self):
+ validator = CommitterValidator(bugzilla=None)
+ self.assertEqual(validator._committers_py_path(), "WebKitTools/Scripts/webkitpy/common/config/committers.py")
+ expected_messsage = """foo@foo.com does not have review permissions according to http://trac.webkit.org/browser/trunk/WebKitTools/Scripts/webkitpy/common/config/committers.py.
+
+- If you do not have review rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.
+
+- If you have review rights please correct the error in WebKitTools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed). The commit-queue restarts itself every 2 hours. After restart the commit-queue will correctly respect your review rights."""
+ self.assertEqual(validator._flag_permission_rejection_message("foo@foo.com", "review"), expected_messsage)
diff --git a/WebKitTools/Scripts/webkitpy/common/net/bugzilla/__init__.py b/WebKitTools/Scripts/webkitpy/common/net/bugzilla/__init__.py
new file mode 100644
index 0000000..cfaf3b1
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/common/net/bugzilla/__init__.py
@@ -0,0 +1,8 @@
+# Required for Python to search this directory for module files
+
+# We only export public API here.
+# FIXME: parse_bug_id should not be a free function.
+from .bugzilla import Bugzilla, parse_bug_id
+# Unclear if Bug and Attachment need to be public classes.
+from .bug import Bug
+from .attachment import Attachment
diff --git a/WebKitTools/Scripts/webkitpy/common/net/bugzilla/attachment.py b/WebKitTools/Scripts/webkitpy/common/net/bugzilla/attachment.py
new file mode 100644
index 0000000..85761fe
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/common/net/bugzilla/attachment.py
@@ -0,0 +1,114 @@
+# Copyright (c) 2009 Google Inc. All rights reserved.
+# Copyright (c) 2009 Apple Inc. All rights reserved.
+# Copyright (c) 2010 Research In Motion Limited. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+from webkitpy.common.system.deprecated_logging import log
+
+
+class Attachment(object):
+
+ rollout_preamble = "ROLLOUT of r"
+
+ def __init__(self, attachment_dictionary, bug):
+ self._attachment_dictionary = attachment_dictionary
+ self._bug = bug
+ self._reviewer = None
+ self._committer = None
+
+ def _bugzilla(self):
+ return self._bug._bugzilla
+
+ def id(self):
+ return int(self._attachment_dictionary.get("id"))
+
+ def attacher_is_committer(self):
+ return self._bugzilla.committers.committer_by_email(
+ patch.attacher_email())
+
+ def attacher_email(self):
+ return self._attachment_dictionary.get("attacher_email")
+
+ def bug(self):
+ return self._bug
+
+ def bug_id(self):
+ return int(self._attachment_dictionary.get("bug_id"))
+
+ def is_patch(self):
+ return not not self._attachment_dictionary.get("is_patch")
+
+ def is_obsolete(self):
+ return not not self._attachment_dictionary.get("is_obsolete")
+
+ def is_rollout(self):
+ return self.name().startswith(self.rollout_preamble)
+
+ def name(self):
+ return self._attachment_dictionary.get("name")
+
+ def attach_date(self):
+ return self._attachment_dictionary.get("attach_date")
+
+ def review(self):
+ return self._attachment_dictionary.get("review")
+
+ def commit_queue(self):
+ return self._attachment_dictionary.get("commit-queue")
+
+ def url(self):
+ # FIXME: This should just return
+ # self._bugzilla().attachment_url_for_id(self.id()). scm_unittest.py
+ # depends on the current behavior.
+ return self._attachment_dictionary.get("url")
+
+ def contents(self):
+ # FIXME: We shouldn't be grabbing at _bugzilla.
+ return self._bug._bugzilla.fetch_attachment_contents(self.id())
+
+ def _validate_flag_value(self, flag):
+ email = self._attachment_dictionary.get("%s_email" % flag)
+ if not email:
+ return None
+ committer = getattr(self._bugzilla().committers,
+ "%s_by_email" % flag)(email)
+ if committer:
+ return committer
+ log("Warning, attachment %s on bug %s has invalid %s (%s)" % (
+ self._attachment_dictionary['id'],
+ self._attachment_dictionary['bug_id'], flag, email))
+
+ def reviewer(self):
+ if not self._reviewer:
+ self._reviewer = self._validate_flag_value("reviewer")
+ return self._reviewer
+
+ def committer(self):
+ if not self._committer:
+ self._committer = self._validate_flag_value("committer")
+ return self._committer
diff --git a/WebKitTools/Scripts/webkitpy/common/net/bugzilla/bug.py b/WebKitTools/Scripts/webkitpy/common/net/bugzilla/bug.py
new file mode 100644
index 0000000..2cb4bc8
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/common/net/bugzilla/bug.py
@@ -0,0 +1,105 @@
+# Copyright (c) 2009 Google Inc. All rights reserved.
+# Copyright (c) 2009 Apple Inc. All rights reserved.
+# Copyright (c) 2010 Research In Motion Limited. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+from .attachment import Attachment
+
+
+class Bug(object):
+ # FIXME: This class is kinda a hack for now. It exists so we have one
+ # place to hold bug logic, even if much of the code deals with
+ # dictionaries still.
+
+ def __init__(self, bug_dictionary, bugzilla):
+ self.bug_dictionary = bug_dictionary
+ self._bugzilla = bugzilla
+
+ def id(self):
+ return self.bug_dictionary["id"]
+
+ def title(self):
+ return self.bug_dictionary["title"]
+
+ def assigned_to_email(self):
+ return self.bug_dictionary["assigned_to_email"]
+
+ # FIXME: This information should be stored in some sort of webkit_config.py instead of here.
+ unassigned_emails = frozenset([
+ "webkit-unassigned@lists.webkit.org",
+ "webkit-qt-unassigned@trolltech.com",
+ ])
+
+ def is_unassigned(self):
+ return self.assigned_to_email() in self.unassigned_emails
+
+ def status(self):
+ return self.bug_dictionary["bug_status"]
+
+ # Bugzilla has many status states we don't really use in WebKit:
+ # https://bugs.webkit.org/page.cgi?id=fields.html#status
+ _open_states = ["UNCONFIRMED", "NEW", "ASSIGNED", "REOPENED"]
+ _closed_states = ["RESOLVED", "VERIFIED", "CLOSED"]
+
+ def is_open(self):
+ return self.status() in self._open_states
+
+ def is_closed(self):
+ return not self.is_open()
+
+ # Rarely do we actually want obsolete attachments
+ def attachments(self, include_obsolete=False):
+ attachments = self.bug_dictionary["attachments"]
+ if not include_obsolete:
+ attachments = filter(lambda attachment:
+ not attachment["is_obsolete"], attachments)
+ return [Attachment(attachment, self) for attachment in attachments]
+
+ def patches(self, include_obsolete=False):
+ return [patch for patch in self.attachments(include_obsolete)
+ if patch.is_patch()]
+
+ def unreviewed_patches(self):
+ return [patch for patch in self.patches() if patch.review() == "?"]
+
+ def reviewed_patches(self, include_invalid=False):
+ patches = [patch for patch in self.patches() if patch.review() == "+"]
+ if include_invalid:
+ return patches
+ # Checking reviewer() ensures that it was both reviewed and has a valid
+ # reviewer.
+ return filter(lambda patch: patch.reviewer(), patches)
+
+ def commit_queued_patches(self, include_invalid=False):
+ patches = [patch for patch in self.patches()
+ if patch.commit_queue() == "+"]
+ if include_invalid:
+ return patches
+ # Checking committer() ensures that it was both commit-queue+'d and has
+ # a valid committer.
+ return filter(lambda patch: patch.committer(), patches)
diff --git a/WebKitTools/Scripts/webkitpy/common/net/bugzilla/bug_unittest.py b/WebKitTools/Scripts/webkitpy/common/net/bugzilla/bug_unittest.py
new file mode 100644
index 0000000..d43d64f
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/common/net/bugzilla/bug_unittest.py
@@ -0,0 +1,40 @@
+# 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 .bug import Bug
+
+
+class BugTest(unittest.TestCase):
+ def test_is_unassigned(self):
+ for email in Bug.unassigned_emails:
+ bug = Bug({"assigned_to_email": email}, bugzilla=None)
+ self.assertTrue(bug.is_unassigned())
+ bug = Bug({"assigned_to_email": "test@test.com"}, bugzilla=None)
+ self.assertFalse(bug.is_unassigned())
diff --git a/WebKitTools/Scripts/webkitpy/common/net/bugzilla.py b/WebKitTools/Scripts/webkitpy/common/net/bugzilla/bugzilla.py
index a7dc1b7..9fa7fe5 100644
--- a/WebKitTools/Scripts/webkitpy/common/net/bugzilla.py
+++ b/WebKitTools/Scripts/webkitpy/common/net/bugzilla/bugzilla.py
@@ -36,15 +36,18 @@ import StringIO
from datetime import datetime # used in timestamp()
-from webkitpy.common.system.deprecated_logging import error, log
+from .attachment import Attachment
+from .bug import Bug
+
+from webkitpy.common.system.deprecated_logging import log
from webkitpy.common.config import committers
from webkitpy.common.net.credentials import Credentials
-from webkitpy.common.system.ospath import relpath
from webkitpy.common.system.user import User
from webkitpy.thirdparty.autoinstalled.mechanize import Browser
from webkitpy.thirdparty.BeautifulSoup import BeautifulSoup, SoupStrainer
+# FIXME: parse_bug_id should not be a free function.
def parse_bug_id(message):
if not message:
return None
@@ -63,162 +66,6 @@ def timestamp():
return datetime.now().strftime("%Y%m%d%H%M%S")
-class Attachment(object):
-
- rollout_preamble = "ROLLOUT of r"
-
- def __init__(self, attachment_dictionary, bug):
- self._attachment_dictionary = attachment_dictionary
- self._bug = bug
- self._reviewer = None
- self._committer = None
-
- def _bugzilla(self):
- return self._bug._bugzilla
-
- def id(self):
- return int(self._attachment_dictionary.get("id"))
-
- def attacher_is_committer(self):
- return self._bugzilla.committers.committer_by_email(
- patch.attacher_email())
-
- def attacher_email(self):
- return self._attachment_dictionary.get("attacher_email")
-
- def bug(self):
- return self._bug
-
- def bug_id(self):
- return int(self._attachment_dictionary.get("bug_id"))
-
- def is_patch(self):
- return not not self._attachment_dictionary.get("is_patch")
-
- def is_obsolete(self):
- return not not self._attachment_dictionary.get("is_obsolete")
-
- def is_rollout(self):
- return self.name().startswith(self.rollout_preamble)
-
- def name(self):
- return self._attachment_dictionary.get("name")
-
- def attach_date(self):
- return self._attachment_dictionary.get("attach_date")
-
- def review(self):
- return self._attachment_dictionary.get("review")
-
- def commit_queue(self):
- return self._attachment_dictionary.get("commit-queue")
-
- def url(self):
- # FIXME: This should just return
- # self._bugzilla().attachment_url_for_id(self.id()). scm_unittest.py
- # depends on the current behavior.
- return self._attachment_dictionary.get("url")
-
- def contents(self):
- # FIXME: We shouldn't be grabbing at _bugzilla.
- return self._bug._bugzilla.fetch_attachment_contents(self.id())
-
- def _validate_flag_value(self, flag):
- email = self._attachment_dictionary.get("%s_email" % flag)
- if not email:
- return None
- committer = getattr(self._bugzilla().committers,
- "%s_by_email" % flag)(email)
- if committer:
- return committer
- log("Warning, attachment %s on bug %s has invalid %s (%s)" % (
- self._attachment_dictionary['id'],
- self._attachment_dictionary['bug_id'], flag, email))
-
- def reviewer(self):
- if not self._reviewer:
- self._reviewer = self._validate_flag_value("reviewer")
- return self._reviewer
-
- def committer(self):
- if not self._committer:
- self._committer = self._validate_flag_value("committer")
- return self._committer
-
-
-class Bug(object):
- # FIXME: This class is kinda a hack for now. It exists so we have one
- # place to hold bug logic, even if much of the code deals with
- # dictionaries still.
-
- def __init__(self, bug_dictionary, bugzilla):
- self.bug_dictionary = bug_dictionary
- self._bugzilla = bugzilla
-
- def id(self):
- return self.bug_dictionary["id"]
-
- def title(self):
- return self.bug_dictionary["title"]
-
- def assigned_to_email(self):
- return self.bug_dictionary["assigned_to_email"]
-
- # FIXME: This information should be stored in some sort of webkit_config.py instead of here.
- unassigned_emails = frozenset([
- "webkit-unassigned@lists.webkit.org",
- "webkit-qt-unassigned@trolltech.com",
- ])
- def is_unassigned(self):
- return self.assigned_to_email() in self.unassigned_emails
-
- def status(self):
- return self.bug_dictionary["bug_status"]
-
- # Bugzilla has many status states we don't really use in WebKit:
- # https://bugs.webkit.org/page.cgi?id=fields.html#status
- _open_states = ["UNCONFIRMED", "NEW", "ASSIGNED", "REOPENED"]
- _closed_states = ["RESOLVED", "VERIFIED", "CLOSED"]
-
- def is_open(self):
- return self.status() in self._open_states
-
- def is_closed(self):
- return not self.is_open()
-
- # Rarely do we actually want obsolete attachments
- def attachments(self, include_obsolete=False):
- attachments = self.bug_dictionary["attachments"]
- if not include_obsolete:
- attachments = filter(lambda attachment:
- not attachment["is_obsolete"], attachments)
- return [Attachment(attachment, self) for attachment in attachments]
-
- def patches(self, include_obsolete=False):
- return [patch for patch in self.attachments(include_obsolete)
- if patch.is_patch()]
-
- def unreviewed_patches(self):
- return [patch for patch in self.patches() if patch.review() == "?"]
-
- def reviewed_patches(self, include_invalid=False):
- patches = [patch for patch in self.patches() if patch.review() == "+"]
- if include_invalid:
- return patches
- # Checking reviewer() ensures that it was both reviewed and has a valid
- # reviewer.
- return filter(lambda patch: patch.reviewer(), patches)
-
- def commit_queued_patches(self, include_invalid=False):
- patches = [patch for patch in self.patches()
- if patch.commit_queue() == "+"]
- if include_invalid:
- return patches
- # Checking committer() ensures that it was both commit-queue+'d and has
- # a valid committer.
- return filter(lambda patch: patch.committer(), patches)
-
-
# A container for all of the logic for making and parsing buzilla queries.
class BugzillaQueries(object):
@@ -298,92 +145,6 @@ class BugzillaQueries(object):
return self._fetch_attachment_ids_request_query(review_queue_url)
-class CommitterValidator(object):
-
- def __init__(self, bugzilla):
- self._bugzilla = bugzilla
-
- # _view_source_url belongs in some sort of webkit_config.py module.
- def _view_source_url(self, local_path):
- return "http://trac.webkit.org/browser/trunk/%s" % local_path
-
- def _checkout_root(self):
- # FIXME: This is a hack, we would have this from scm.checkout_root
- # if we had any way to get to an scm object here.
- components = __file__.split(os.sep)
- tools_index = components.index("WebKitTools")
- return os.sep.join(components[:tools_index])
-
- def _committers_py_path(self):
- # extension can sometimes be .pyc, we always want .py
- (path, extension) = os.path.splitext(committers.__file__)
- # FIXME: When we're allowed to use python 2.6 we can use the real
- # os.path.relpath
- path = relpath(path, self._checkout_root())
- return ".".join([path, "py"])
-
- def _flag_permission_rejection_message(self, setter_email, flag_name):
- # Should come from some webkit_config.py
- contribution_guidlines = "http://webkit.org/coding/contributing.html"
- # This could be queried from the status_server.
- queue_administrator = "eseidel@chromium.org"
- # This could be queried from the tool.
- queue_name = "commit-queue"
- committers_list = self._committers_py_path()
- message = "%s does not have %s permissions according to %s." % (
- setter_email,
- flag_name,
- self._view_source_url(committers_list))
- message += "\n\n- If you do not have %s rights please read %s for instructions on how to use bugzilla flags." % (
- flag_name, contribution_guidlines)
- message += "\n\n- If you have %s rights please correct the error in %s by adding yourself to the file (no review needed). " % (
- flag_name, committers_list)
- message += "The %s restarts itself every 2 hours. After restart the %s will correctly respect your %s rights." % (
- queue_name, queue_name, flag_name)
- return message
-
- def _validate_setter_email(self, patch, result_key, rejection_function):
- committer = getattr(patch, result_key)()
- # If the flag is set, and we don't recognize the setter, reject the
- # flag!
- setter_email = patch._attachment_dictionary.get("%s_email" % result_key)
- if setter_email and not committer:
- rejection_function(patch.id(),
- self._flag_permission_rejection_message(setter_email,
- result_key))
- return False
- return True
-
- def _reject_patch_if_flags_are_invalid(self, patch):
- return (self._validate_setter_email(
- patch, "reviewer", self.reject_patch_from_review_queue)
- and self._validate_setter_email(
- patch, "committer", self.reject_patch_from_commit_queue))
-
- def patches_after_rejecting_invalid_commiters_and_reviewers(self, patches):
- return [patch for patch in patches if self._reject_patch_if_flags_are_invalid(patch)]
-
- def reject_patch_from_commit_queue(self,
- attachment_id,
- additional_comment_text=None):
- comment_text = "Rejecting patch %s from commit-queue." % attachment_id
- self._bugzilla.set_flag_on_attachment(attachment_id,
- "commit-queue",
- "-",
- comment_text,
- additional_comment_text)
-
- def reject_patch_from_review_queue(self,
- attachment_id,
- additional_comment_text=None):
- comment_text = "Rejecting patch %s from review queue." % attachment_id
- self._bugzilla.set_flag_on_attachment(attachment_id,
- 'review',
- '-',
- comment_text,
- additional_comment_text)
-
-
class Bugzilla(object):
def __init__(self, dryrun=False, committers=committers.CommitterList()):
@@ -861,7 +622,6 @@ class Bugzilla(object):
self.browser.open(self.bug_url_for_bug_id(bug_id))
self.browser.select_form(name="changeform")
if comment_text:
- log(comment_text)
self.browser['comment'] = comment_text
self.browser['bug_status'] = ['RESOLVED']
self.browser['resolution'] = ['FIXED']
diff --git a/WebKitTools/Scripts/webkitpy/common/net/bugzilla_unittest.py b/WebKitTools/Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py
index df1fcf6..c476c81 100644
--- a/WebKitTools/Scripts/webkitpy/common/net/bugzilla_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/common/net/bugzilla/bugzilla_unittest.py
@@ -27,38 +27,16 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import unittest
-
import datetime
-from webkitpy.common.config.committers import CommitterList, Reviewer, Committer
-from webkitpy.common.net.bugzilla import Bugzilla, BugzillaQueries, parse_bug_id, CommitterValidator, Bug
+from .bugzilla import Bugzilla, BugzillaQueries, parse_bug_id
+
from webkitpy.common.system.outputcapture import OutputCapture
from webkitpy.tool.mocktool import MockBrowser
from webkitpy.thirdparty.mock import Mock
from webkitpy.thirdparty.BeautifulSoup import BeautifulSoup
-class BugTest(unittest.TestCase):
- def test_is_unassigned(self):
- for email in Bug.unassigned_emails:
- bug = Bug({"assigned_to_email" : email}, bugzilla=None)
- self.assertTrue(bug.is_unassigned())
- bug = Bug({"assigned_to_email" : "test@test.com"}, bugzilla=None)
- self.assertFalse(bug.is_unassigned())
-
-
-class CommitterValidatorTest(unittest.TestCase):
- def test_flag_permission_rejection_message(self):
- validator = CommitterValidator(bugzilla=None)
- self.assertEqual(validator._committers_py_path(), "WebKitTools/Scripts/webkitpy/common/config/committers.py")
- expected_messsage="""foo@foo.com does not have review permissions according to http://trac.webkit.org/browser/trunk/WebKitTools/Scripts/webkitpy/common/config/committers.py.
-
-- If you do not have review rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.
-
-- If you have review rights please correct the error in WebKitTools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed). The commit-queue restarts itself every 2 hours. After restart the commit-queue will correctly respect your review rights."""
- self.assertEqual(validator._flag_permission_rejection_message("foo@foo.com", "review"), expected_messsage)
-
-
class BugzillaTest(unittest.TestCase):
_example_attachment = '''
<attachment
diff --git a/WebKitTools/Scripts/webkitpy/common/net/buildbot.py b/WebKitTools/Scripts/webkitpy/common/net/buildbot.py
index a14bc7f..88cdd4e 100644
--- a/WebKitTools/Scripts/webkitpy/common/net/buildbot.py
+++ b/WebKitTools/Scripts/webkitpy/common/net/buildbot.py
@@ -220,6 +220,7 @@ class Build(object):
results_html = "%s/results.html" % (self.results_url())
# FIXME: This should use NetworkTransaction's 404 handling instead.
try:
+ # It seems this can return None if the url redirects and then returns 404.
return urllib2.urlopen(results_html)
except urllib2.HTTPError, error:
if error.code != 404:
diff --git a/WebKitTools/Scripts/webkitpy/common/net/buildbot_unittest.py b/WebKitTools/Scripts/webkitpy/common/net/buildbot_unittest.py
index afc9a39..4fdf24c 100644
--- a/WebKitTools/Scripts/webkitpy/common/net/buildbot_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/common/net/buildbot_unittest.py
@@ -111,6 +111,14 @@ class BuilderTest(unittest.TestCase):
self.assertEqual(self.builder._revision_and_build_for_filename(filename), revision_and_build)
+class BuildTest(unittest.TestCase):
+ def test_layout_test_results(self):
+ build = Build(None, None, None, None)
+ build._fetch_results_html = lambda: None
+ # Test that layout_test_results() returns None if the fetch fails.
+ self.assertEqual(build.layout_test_results(), None)
+
+
class BuildBotTest(unittest.TestCase):
_example_one_box_status = '''
diff --git a/WebKitTools/Scripts/webkitpy/common/net/layouttestresults.py b/WebKitTools/Scripts/webkitpy/common/net/layouttestresults.py
index 2f7b3e6..a7b3b0a 100644
--- a/WebKitTools/Scripts/webkitpy/common/net/layouttestresults.py
+++ b/WebKitTools/Scripts/webkitpy/common/net/layouttestresults.py
@@ -58,6 +58,8 @@ class LayoutTestResults(object):
@classmethod
def _parse_results_html(cls, page):
+ if not page:
+ return None
parsed_results = {}
tables = BeautifulSoup(page).findAll("table")
for table in tables:
diff --git a/WebKitTools/Scripts/webkitpy/common/net/layouttestresults_unittest.py b/WebKitTools/Scripts/webkitpy/common/net/layouttestresults_unittest.py
index 44e4dbc..8490eae 100644
--- a/WebKitTools/Scripts/webkitpy/common/net/layouttestresults_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/common/net/layouttestresults_unittest.py
@@ -71,6 +71,7 @@ class LayoutTestResultsTest(unittest.TestCase):
self.assertEqual(self._expected_layout_test_results, results)
def test_results_from_string(self):
+ self.assertEqual(LayoutTestResults.results_from_string(None), None)
self.assertEqual(LayoutTestResults.results_from_string(""), None)
results = LayoutTestResults.results_from_string(self._example_results_html)
self.assertEqual(len(results.failing_tests()), 0)
diff --git a/WebKitTools/Scripts/webkitpy/common/newstringio.py b/WebKitTools/Scripts/webkitpy/common/newstringio.py
new file mode 100644
index 0000000..f6d08ec
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/common/newstringio.py
@@ -0,0 +1,40 @@
+#!/usr/bin/env python
+# Copyright (C) 2010 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * 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.
+
+"""'with'-compliant StringIO implementation."""
+
+import StringIO
+
+
+class StringIO(StringIO.StringIO):
+ def __enter__(self):
+ return self
+
+ def __exit__(self, type, value, traceback):
+ pass
diff --git a/WebKitTools/Scripts/webkitpy/common/newstringio_unittest.py b/WebKitTools/Scripts/webkitpy/common/newstringio_unittest.py
new file mode 100644
index 0000000..5755c98
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/common/newstringio_unittest.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env python
+# Copyright (C) 2010 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * 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 newstringio module."""
+
+from __future__ import with_statement
+
+import unittest
+
+import newstringio
+
+
+class NewStringIOTest(unittest.TestCase):
+ def test_with(self):
+ with newstringio.StringIO("foo") as f:
+ contents = f.read()
+ self.assertEqual(contents, "foo")
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/WebKitTools/Scripts/webkitpy/common/system/executive.py b/WebKitTools/Scripts/webkitpy/common/system/executive.py
index 37f4e53..85a683a 100644
--- a/WebKitTools/Scripts/webkitpy/common/system/executive.py
+++ b/WebKitTools/Scripts/webkitpy/common/system/executive.py
@@ -201,7 +201,7 @@ class Executive(object):
return
raise
- def _win32_check_running_pid(self):
+ def _win32_check_running_pid(self, pid):
class PROCESSENTRY32(ctypes.Structure):
_fields_ = [("dwSize", ctypes.c_ulong),
@@ -246,7 +246,7 @@ class Executive(object):
except OSError:
return False
elif sys.platform == 'win32':
- return self._win32_check_running_pid()
+ return self._win32_check_running_pid(pid)
assert(False)
diff --git a/WebKitTools/Scripts/webkitpy/common/system/executive_mock.py b/WebKitTools/Scripts/webkitpy/common/system/executive_mock.py
new file mode 100644
index 0000000..7347ff9
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/common/system/executive_mock.py
@@ -0,0 +1,55 @@
+# 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.
+
+# FIXME: Implement the rest of the interface as needed for testing :).
+
+# FIXME: Unify with tool/mocktool.MockExecutive.
+
+
+class MockExecutive2(object):
+ def __init__(self, output='', exit_code=0, exception=None):
+ self._output = output
+ self._exit_code = exit_code
+ self._exception = exception
+
+ def cpu_count(self):
+ return 2
+
+ def kill_all(self, process_name):
+ pass
+
+ def kill_process(self, pid):
+ pass
+
+ def run_command(self, arg_list, return_exit_code=False,
+ decode_output=False):
+ if self._exception:
+ raise self._exception
+ if return_exit_code:
+ return self._exit_code
+ return self._output
diff --git a/WebKitTools/Scripts/webkitpy/common/system/file_lock.py b/WebKitTools/Scripts/webkitpy/common/system/file_lock.py
new file mode 100644
index 0000000..7296958
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/common/system/file_lock.py
@@ -0,0 +1,83 @@
+#!/usr/bin/env python
+# Copyright (C) 2010 Gabor Rapcsanyi (rgabor@inf.u-szeged.hu), 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 UNIVERSITY OF SZEGED ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL UNIVERSITY OF SZEGED OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""This class helps to lock files exclusively across processes."""
+
+import logging
+import os
+import sys
+import time
+
+
+_log = logging.getLogger("webkitpy.common.system.file_lock")
+
+
+class FileLock(object):
+
+ def __init__(self, lock_file_path, max_wait_time_sec=20):
+ self._lock_file_path = lock_file_path
+ self._lock_file_descriptor = None
+ self._max_wait_time_sec = max_wait_time_sec
+
+ def _create_lock(self):
+ if sys.platform in ('darwin', 'linux2', 'cygwin'):
+ import fcntl
+ fcntl.flock(self._lock_file_descriptor, fcntl.LOCK_EX | fcntl.LOCK_NB)
+ elif sys.platform == 'win32':
+ import msvcrt
+ msvcrt.locking(self._lock_file_descriptor, msvcrt.LK_NBLCK, 32)
+
+ def _remove_lock(self):
+ if sys.platform in ('darwin', 'linux2', 'cygwin'):
+ import fcntl
+ fcntl.flock(self._lock_file_descriptor, fcntl.LOCK_UN)
+ elif sys.platform == 'win32':
+ import msvcrt
+ msvcrt.locking(self._lock_file_descriptor, msvcrt.LK_UNLCK, 32)
+
+ def acquire_lock(self):
+ self._lock_file_descriptor = os.open(self._lock_file_path, os.O_TRUNC | os.O_CREAT)
+ start_time = time.time()
+ while True:
+ try:
+ self._create_lock()
+ return True
+ except IOError:
+ if time.time() - start_time > self._max_wait_time_sec:
+ _log.debug("File locking failed: %s" % str(sys.exc_info()))
+ os.close(self._lock_file_descriptor)
+ self._lock_file_descriptor = None
+ return False
+
+ def release_lock(self):
+ try:
+ if self._lock_file_descriptor:
+ self._remove_lock()
+ os.close(self._lock_file_descriptor)
+ self._lock_file_descriptor = None
+ os.unlink(self._lock_file_path)
+ except (IOError, OSError):
+ _log.debug("Warning in release lock: %s" % str(sys.exc_info()))
diff --git a/WebKitTools/Scripts/webkitpy/common/system/file_lock_unittest.py b/WebKitTools/Scripts/webkitpy/common/system/file_lock_unittest.py
new file mode 100644
index 0000000..c5c1db3
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/common/system/file_lock_unittest.py
@@ -0,0 +1,61 @@
+#!/usr/bin/env python
+# Copyright (C) 2010 Gabor Rapcsanyi (rgabor@inf.u-szeged.hu), 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 UNIVERSITY OF SZEGED ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL UNIVERSITY OF SZEGED OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import os
+import tempfile
+import unittest
+
+from webkitpy.common.system.file_lock import FileLock
+
+
+class FileLockTest(unittest.TestCase):
+
+ def setUp(self):
+ self._lock_name = "TestWebKit" + str(os.getpid()) + ".lock"
+ self._lock_path = os.path.join(tempfile.gettempdir(), self._lock_name)
+ self._file_lock1 = FileLock(self._lock_path, 1)
+ self._file_lock2 = FileLock(self._lock_path, 1)
+
+ def tearDown(self):
+ self._file_lock1.release_lock()
+ self._file_lock2.release_lock()
+
+ def test_lock_lifecycle(self):
+ # Create the lock.
+ self._file_lock1.acquire_lock()
+ self.assertTrue(os.path.exists(self._lock_path))
+
+ # Try to lock again.
+ self.assertFalse(self._file_lock2.acquire_lock())
+
+ # Release the lock.
+ self._file_lock1.release_lock()
+ self.assertFalse(os.path.exists(self._lock_path))
+
+ def test_stuck_lock(self):
+ open(self._lock_path, 'w').close()
+ self._file_lock1.acquire_lock()
+ self._file_lock1.release_lock()
diff --git a/WebKitTools/Scripts/webkitpy/common/system/filesystem_mock.py b/WebKitTools/Scripts/webkitpy/common/system/filesystem_mock.py
new file mode 100644
index 0000000..d2cde4f
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/common/system/filesystem_mock.py
@@ -0,0 +1,75 @@
+# 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 errno
+import os
+import path
+
+
+class MockFileSystem(object):
+ def __init__(self, files={}):
+ """Initializes a "mock" filesystem that can be used to completely
+ stub out a filesystem.
+
+ Args:
+ files: a dict of filenames -> file contents. A file contents
+ value of None is used to indicate that the file should
+ not exist (even if standalone is False).
+ standalone: If True, only the files listed in _files_ exist.
+ If False, the object will pass through read calls to the
+ underlying filesystem. Writes are never passed through.
+
+ """
+ self.files = files
+
+ def exists(self, path):
+ if path in self.files:
+ return self.files[path] is not None
+ return False
+
+ def join(self, *comps):
+ return '/'.join(comps)
+
+ def maybe_make_directory(self, *path):
+ # FIXME: Implement such that subsequent calls to isdir() work?
+ pass
+
+ def read_text_file(self, path):
+ return self.read_binary_file(path)
+
+ def read_binary_file(self, path):
+ if path in self.files:
+ if self.files[path] is None:
+ raise IOError(errno.ENOENT, path, os.strerror(errno.ENOENT))
+ return self.files[path]
+
+ def write_text_file(self, path, contents):
+ return self.write_binary_file(path, contents)
+
+ def write_binary_file(self, path, contents):
+ self.files[path] = contents
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 9f2de7e..88f493d 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
@@ -51,6 +51,7 @@ import time
import traceback
import test_failures
+import test_output
import test_results
_log = logging.getLogger("webkitpy.layout_tests.layout_package."
@@ -74,9 +75,14 @@ def log_stack(stack):
_log.error(' %s' % line.strip())
-def _process_output(port, options, test_info, test_types, test_args,
- crash, timeout, test_run_time, actual_checksum,
- output, error):
+def _expected_test_output(port, filename):
+ """Returns an expected TestOutput object."""
+ return test_output.TestOutput(port.expected_text(filename),
+ port.expected_image(filename),
+ port.expected_checksum(filename))
+
+def _process_output(port, options, test_input, test_types, test_args,
+ test_output):
"""Receives the output from a DumpRenderTree process, subjects it to a
number of tests, and returns a list of failure types the test produced.
@@ -84,57 +90,55 @@ def _process_output(port, options, test_info, test_types, test_args,
port: port-specific hooks
options: command line options argument from optparse
proc: an active DumpRenderTree process
- test_info: Object containing the test filename, uri and timeout
+ test_input: Object containing the test filename and timeout
test_types: list of test types to subject the output to
test_args: arguments to be passed to each test
+ test_output: a TestOutput object containing the output of the test
Returns: a TestResult object
"""
failures = []
- # Some test args, such as the image hash, may be added or changed on a
- # test-by-test basis.
- local_test_args = copy.copy(test_args)
-
- local_test_args.hash = actual_checksum
-
- if crash:
+ if test_output.crash:
failures.append(test_failures.FailureCrash())
- if timeout:
+ if test_output.timeout:
failures.append(test_failures.FailureTimeout())
- if crash:
- _log.debug("Stacktrace for %s:\n%s" % (test_info.filename, error))
+ if test_output.crash:
+ _log.debug("Stacktrace for %s:\n%s" % (test_input.filename,
+ test_output.error))
# Strip off "file://" since RelativeTestFilename expects
# filesystem paths.
filename = os.path.join(options.results_directory,
port.relative_test_filename(
- test_info.filename))
+ test_input.filename))
filename = os.path.splitext(filename)[0] + "-stack.txt"
port.maybe_make_directory(os.path.split(filename)[0])
with codecs.open(filename, "wb", "utf-8") as file:
- file.write(error)
- elif error:
- _log.debug("Previous test output stderr lines:\n%s" % error)
+ file.write(test_output.error)
+ elif test_output.error:
+ _log.debug("Previous test output stderr lines:\n%s" % test_output.error)
+
+ expected_test_output = _expected_test_output(port, test_input.filename)
# Check the output and save the results.
start_time = time.time()
time_for_diffs = {}
for test_type in test_types:
start_diff_time = time.time()
- new_failures = test_type.compare_output(port, test_info.filename,
- output, local_test_args,
- options.configuration)
+ new_failures = test_type.compare_output(port, test_input.filename,
+ test_args, test_output,
+ expected_test_output)
# Don't add any more failures if we already have a crash, so we don't
# double-report those tests. We do double-report for timeouts since
# we still want to see the text and image output.
- if not crash:
+ if not test_output.crash:
failures.extend(new_failures)
time_for_diffs[test_type.__class__.__name__] = (
time.time() - start_diff_time)
total_time_for_all_diffs = time.time() - start_diff_time
- return test_results.TestResult(test_info.filename, failures, test_run_time,
+ return test_results.TestResult(test_input.filename, failures, test_output.test_time,
total_time_for_all_diffs, time_for_diffs)
@@ -153,22 +157,36 @@ def _milliseconds_to_seconds(msecs):
return float(msecs) / 1000.0
-def _image_hash(test_info, test_args, options):
- """Returns the image hash of the test if it's needed, otherwise None."""
- if (test_args.new_baseline or test_args.reset_results or not options.pixel_tests):
- return None
- return test_info.image_hash()
+def _should_fetch_expected_checksum(options):
+ return options.pixel_tests and not (options.new_baseline or options.reset_results)
+
+
+def _run_single_test(port, options, test_input, test_types, test_args, driver):
+ # FIXME: Pull this into TestShellThread._run().
+
+ # The image hash is used to avoid doing an image dump if the
+ # checksums match, so it should be set to a blank value if we
+ # are generating a new baseline. (Otherwise, an image from a
+ # previous run will be copied into the baseline."""
+ if _should_fetch_expected_checksum(options):
+ image_hash_to_driver = port.expected_checksum(test_input.filename)
+ else:
+ image_hash_to_driver = None
+ uri = port.filename_to_uri(test_input.filename)
+ test_output = driver.run_test(uri, test_input.timeout, image_hash_to_driver)
+ return _process_output(port, options, test_input, test_types, test_args,
+ test_output)
class SingleTestThread(threading.Thread):
"""Thread wrapper for running a single test file."""
- def __init__(self, port, options, test_info, test_types, test_args):
+ def __init__(self, port, options, test_input, test_types, test_args):
"""
Args:
port: object implementing port-specific hooks
options: command line argument object from optparse
- test_info: Object containing the test filename, uri and timeout
+ test_input: Object containing the test filename and timeout
test_types: A list of TestType objects to run the test output
against.
test_args: A TestArguments object to pass to each TestType.
@@ -177,7 +195,7 @@ class SingleTestThread(threading.Thread):
threading.Thread.__init__(self)
self._port = port
self._options = options
- self._test_info = test_info
+ self._test_input = test_input
self._test_types = test_types
self._test_args = test_args
self._driver = None
@@ -188,20 +206,12 @@ class SingleTestThread(threading.Thread):
def _covered_run(self):
# FIXME: this is a separate routine to work around a bug
# in coverage: see http://bitbucket.org/ned/coveragepy/issue/85.
- test_info = self._test_info
self._driver = self._port.create_driver(self._test_args.png_path,
self._options)
self._driver.start()
- image_hash = _image_hash(test_info, self._test_args, self._options)
- start = time.time()
- crash, timeout, actual_checksum, output, error = \
- self._driver.run_test(test_info.uri.strip(), test_info.timeout,
- image_hash)
- end = time.time()
- self._test_result = _process_output(self._port, self._options,
- test_info, self._test_types, self._test_args,
- crash, timeout, end - start,
- actual_checksum, output, error)
+ self._test_result = _run_single_test(self._port, self._options,
+ self._test_input, self._test_types,
+ self._test_args, self._driver)
self._driver.stop()
def get_test_result(self):
@@ -258,7 +268,6 @@ class TestShellThread(WatchableThread):
test_types: A list of TestType objects to run the test output
against.
test_args: A TestArguments object to pass to each TestType.
-
"""
WatchableThread.__init__(self)
self._port = port
@@ -402,17 +411,17 @@ class TestShellThread(WatchableThread):
self._num_tests_in_current_group = len(self._filename_list)
self._current_group_start_time = time.time()
- test_info = self._filename_list.pop()
+ test_input = self._filename_list.pop()
# We have a url, run tests.
batch_count += 1
self._num_tests += 1
if self._options.run_singly:
- result = self._run_test_singly(test_info)
+ result = self._run_test_singly(test_input)
else:
- result = self._run_test(test_info)
+ result = self._run_test(test_input)
- filename = test_info.filename
+ filename = test_input.filename
tests_run_file.write(filename + "\n")
if result.failures:
# Check and kill DumpRenderTree if we need to.
@@ -440,7 +449,7 @@ class TestShellThread(WatchableThread):
if test_runner:
test_runner.update_summary(result_summary)
- def _run_test_singly(self, test_info):
+ def _run_test_singly(self, test_input):
"""Run a test in a separate thread, enforcing a hard time limit.
Since we can only detect the termination of a thread, not any internal
@@ -448,7 +457,7 @@ class TestShellThread(WatchableThread):
files singly.
Args:
- test_info: Object containing the test filename, uri and timeout
+ test_input: Object containing the test filename and timeout
Returns:
A TestResult
@@ -456,14 +465,14 @@ class TestShellThread(WatchableThread):
"""
worker = SingleTestThread(self._port,
self._options,
- test_info,
+ test_input,
self._test_types,
self._test_args)
worker.start()
thread_timeout = _milliseconds_to_seconds(
- _pad_timeout(int(test_info.timeout)))
+ _pad_timeout(int(test_input.timeout)))
thread._next_timeout = time.time() + thread_timeout
worker.join(thread_timeout)
if worker.isAlive():
@@ -485,43 +494,29 @@ class TestShellThread(WatchableThread):
# This gets raised if the worker thread has already exited.
failures = []
_log.error('Cannot get results of test: %s' %
- test_info.filename)
- result = test_results.TestResult(test_info.filename, failures=[],
+ test_input.filename)
+ result = test_results.TestResult(test_input.filename, failures=[],
test_run_time=0, total_time_for_all_diffs=0, time_for_diffs=0)
return result
- def _run_test(self, test_info):
+ def _run_test(self, test_input):
"""Run a single test file using a shared DumpRenderTree process.
Args:
- test_info: Object containing the test filename, uri and timeout
+ test_input: Object containing the test filename, uri and timeout
Returns: a TestResult object.
"""
self._ensure_dump_render_tree_is_running()
- # The pixel_hash is used to avoid doing an image dump if the
- # checksums match, so it should be set to a blank value if we
- # are generating a new baseline. (Otherwise, an image from a
- # previous run will be copied into the baseline.)
- image_hash = _image_hash(test_info, self._test_args, self._options)
- start = time.time()
-
thread_timeout = _milliseconds_to_seconds(
- _pad_timeout(int(test_info.timeout)))
- self._next_timeout = start + thread_timeout
-
- crash, timeout, actual_checksum, output, error = \
- self._driver.run_test(test_info.uri, test_info.timeout, image_hash)
- end = time.time()
-
- result = _process_output(self._port, self._options,
- test_info, self._test_types,
- self._test_args, crash,
- timeout, end - start, actual_checksum,
- output, error)
- self._test_results.append(result)
- return result
+ _pad_timeout(int(test_input.timeout)))
+ self._next_timeout = time.time() + thread_timeout
+ test_result = _run_single_test(self._port, self._options, test_input,
+ self._test_types, self._test_args,
+ self._driver)
+ self._test_results.append(test_result)
+ return test_result
def _ensure_dump_render_tree_is_running(self):
"""Start the shared DumpRenderTree, if it's not running.
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 1cf88ef..101d30b 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
@@ -56,7 +56,8 @@ class JSONLayoutResultsGenerator(json_results_generator.JSONResultsGeneratorBase
def __init__(self, port, builder_name, build_name, build_number,
results_file_base_path, builder_base_url,
test_timings, expectations, result_summary, all_tests,
- generate_incremental_results=False, test_results_server=None):
+ generate_incremental_results=False, test_results_server=None,
+ test_type="", master_name=""):
"""Modifies the results.json file. Grabs it off the archive directory
if it is not found locally.
@@ -67,7 +68,8 @@ class JSONLayoutResultsGenerator(json_results_generator.JSONResultsGeneratorBase
super(JSONLayoutResultsGenerator, self).__init__(
builder_name, build_name, build_number, results_file_base_path,
builder_base_url, {}, port.test_repository_paths(),
- generate_incremental_results, test_results_server)
+ generate_incremental_results, test_results_server,
+ test_type, master_name)
self._port = port
self._expectations = expectations
@@ -117,7 +119,7 @@ class JSONLayoutResultsGenerator(json_results_generator.JSONResultsGeneratorBase
return set(self._failures.keys())
# override
- def _get_result_type_char(self, test_name):
+ def _get_modifier_char(self, test_name):
if test_name not in self._all_tests:
return self.NO_DATA_RESULT
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 765b4d8..3267718 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
@@ -46,17 +46,35 @@ import webkitpy.thirdparty.simplejson as simplejson
_log = logging.getLogger("webkitpy.layout_tests.layout_package.json_results_generator")
-
class TestResult(object):
"""A simple class that represents a single test result."""
- def __init__(self, name, failed=False, skipped=False, elapsed_time=0):
+
+ # Test modifier constants.
+ (NONE, FAILS, FLAKY, DISABLED) = range(4)
+
+ def __init__(self, name, failed=False, elapsed_time=0):
self.name = name
self.failed = failed
- self.skipped = skipped
self.time = elapsed_time
+ test_name = name
+ try:
+ test_name = name.split('.')[1]
+ except IndexError:
+ _log.warn("Invalid test name: %s.", name)
+ pass
+
+ if test_name.startswith('FAILS_'):
+ self.modifier = self.FAILS
+ elif test_name.startswith('FLAKY_'):
+ self.modifier = self.FLAKY
+ elif test_name.startswith('DISABLED_'):
+ self.modifier = self.DISABLED
+ else:
+ self.modifier = self.NONE
+
def fixable(self):
- return self.failed or self.skipped
+ return self.failed or self.modifier == self.DISABLED
class JSONResultsGeneratorBase(object):
@@ -67,10 +85,20 @@ class JSONResultsGeneratorBase(object):
MIN_TIME = 1
JSON_PREFIX = "ADD_RESULTS("
JSON_SUFFIX = ");"
+
+ # Note that in non-chromium tests those chars are used to indicate
+ # test modifiers (FAILS, FLAKY, etc) but not actual test results.
PASS_RESULT = "P"
SKIP_RESULT = "X"
FAIL_RESULT = "F"
+ FLAKY_RESULT = "L"
NO_DATA_RESULT = "N"
+
+ MODIFIER_TO_CHAR = {TestResult.NONE: PASS_RESULT,
+ TestResult.DISABLED: SKIP_RESULT,
+ TestResult.FAILS: FAIL_RESULT,
+ TestResult.FLAKY: FLAKY_RESULT}
+
VERSION = 3
VERSION_KEY = "version"
RESULTS = "results"
@@ -94,7 +122,8 @@ class JSONResultsGeneratorBase(object):
test_results_map, svn_repositories=None,
generate_incremental_results=False,
test_results_server=None,
- test_type=""):
+ test_type="",
+ master_name=""):
"""Modifies the results.json file. Grabs it off the archive directory
if it is not found locally.
@@ -113,11 +142,14 @@ class JSONResultsGeneratorBase(object):
generate_incremental_results: If true, generate incremental json file
from current run results.
test_results_server: server that hosts test results json.
+ test_type: test type string (e.g. 'layout-tests').
+ master_name: the name of the buildbot master.
"""
self._builder_name = builder_name
self._build_name = build_name
self._build_number = build_number
self._builder_base_url = builder_base_url
+ self._results_directory = results_file_base_path
self._results_file_path = os.path.join(results_file_base_path,
self.RESULTS_FILENAME)
self._incremental_results_file_path = os.path.join(
@@ -133,6 +165,7 @@ class JSONResultsGeneratorBase(object):
self._test_results_server = test_results_server
self._test_type = test_type
+ self._master_name = master_name
self._json = None
self._archived_results = None
@@ -205,6 +238,36 @@ class JSONResultsGeneratorBase(object):
def set_archived_results(self, archived_results):
self._archived_results = archived_results
+ def upload_json_files(self, json_files):
+ """Uploads the given json_files to the test_results_server (if the
+ test_results_server is given)."""
+ if not self._test_results_server:
+ return
+
+ if not self._master_name:
+ _log.error("--test-results-server was set, but --master-name was not. Not uploading JSON files.")
+ return
+
+ _log.info("Uploading JSON files for builder: %s", self._builder_name)
+ attrs = [("builder", self._builder_name),
+ ("testtype", self._test_type),
+ ("master", self._master_name)]
+
+ files = [(file, os.path.join(self._results_directory, file))
+ for file in json_files]
+
+ uploader = test_results_uploader.TestResultsUploader(
+ self._test_results_server)
+ try:
+ # Set uploading timeout in case appengine server is having problem.
+ # 120 seconds are more than enough to upload test results.
+ uploader.upload(attrs, files, 120)
+ except Exception, err:
+ _log.error("Upload failed: %s" % err)
+ return
+
+ _log.info("JSON files uploaded.")
+
def _generate_json_file(self, json, file_path):
# Specify separators in order to get compact encoding.
json_data = simplejson.dumps(json, separators=(',', ':'))
@@ -226,19 +289,17 @@ class JSONResultsGeneratorBase(object):
"""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):
+ def _get_modifier_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
+ PASS_RESULT, NO_DATA_RESULT, etc) that indicates the test modifier
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
+ if test_result.modifier in self.MODIFIER_TO_CHAR.keys():
+ return self.MODIFIER_TO_CHAR[test_result.modifier]
return JSONResultsGenerator.PASS_RESULT
@@ -344,10 +405,10 @@ class JSONResultsGeneratorBase(object):
self._insert_item_into_raw_list(results_for_builder,
fixable_count, self.FIXABLE_COUNT)
- # Create a pass/skip/failure summary dictionary.
+ # Create a test modifiers (FAILS, FLAKY etc) summary dictionary.
entry = {}
for test_name in self._test_results_map.iterkeys():
- result_char = self._get_result_type_char(test_name)
+ result_char = self._get_modifier_char(test_name)
entry[result_char] = entry.get(result_char, 0) + 1
# Insert the pass/skip/failure summary dictionary.
@@ -423,7 +484,7 @@ class JSONResultsGeneratorBase(object):
tests: Dictionary containing test result entries.
"""
- result = self._get_result_type_char(test_name)
+ result = self._get_modifier_char(test_name)
time = self._get_test_timing(test_name)
if test_name not in tests:
@@ -523,33 +584,10 @@ class JSONResultsGenerator(JSONResultsGeneratorBase):
# The flag is for backward compatibility.
output_json_in_init = True
- def _upload_json_files(self):
- if not self._test_results_server or not self._test_type:
- return
-
- _log.info("Uploading JSON files for %s to the server: %s",
- self._builder_name, self._test_results_server)
- attrs = [("builder", self._builder_name), ("testtype", self._test_type)]
- json_files = [self.INCREMENTAL_RESULTS_FILENAME]
-
- files = [(file, os.path.join(self._results_directory, file))
- for file in json_files]
- uploader = test_results_uploader.TestResultsUploader(
- self._test_results_server)
- try:
- # Set uploading timeout in case appengine server is having problem.
- # 120 seconds are more than enough to upload test results.
- uploader.upload(attrs, files, 120)
- except Exception, err:
- _log.error("Upload failed: %s" % err)
- return
-
- _log.info("JSON files uploaded.")
-
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,
- test_results_server=None, test_type=None):
+ test_results_server=None, test_type=None, master_name=None):
"""Generates a JSON results file.
Args
@@ -567,6 +605,7 @@ class JSONResultsGenerator(JSONResultsGeneratorBase):
include skipped tests.
test_results_server: server that hosts test results json.
test_type: the test type.
+ master_name: the name of the buildbot master.
"""
self._test_type = test_type
@@ -582,11 +621,9 @@ class JSONResultsGenerator(JSONResultsGeneratorBase):
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)
@@ -599,8 +636,9 @@ class JSONResultsGenerator(JSONResultsGeneratorBase):
svn_repositories=port.test_repository_paths(),
generate_incremental_results=True,
test_results_server=test_results_server,
- test_type=test_type)
+ test_type=test_type,
+ master_name=master_name)
if self.__class__.output_json_in_init:
self.generate_json_output()
- self._upload_json_files()
+ self.upload_json_files([self.INCREMENTAL_RESULTS_FILENAME])
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
index 785cc1c..606a613 100644
--- 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
@@ -47,43 +47,68 @@ class JSONGeneratorTest(unittest.TestCase):
self.build_number = 'DUMMY_BUILDER_NUMBER'
self._json = None
self._num_runs = 0
- self._tests_list = set([])
+ self._tests_set = set([])
self._test_timings = {}
- self._failed_tests = {}
- self._passed_tests = set([])
- self._skipped_tests = set([])
-
- 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())
+ self._failed_tests = set([])
+
+ self._PASS_tests = set([])
+ self._DISABLED_tests = set([])
+ self._FLAKY_tests = set([])
+ self._FAILS_tests = set([])
+
+ def _get_test_modifier(self, test_name):
+ if test_name.startswith('DISABLED_'):
+ return json_results_generator.JSONResultsGenerator.SKIP_RESULT
+ elif test_name.startswith('FLAKY_'):
+ return json_results_generator.JSONResultsGenerator.FLAKY_RESULT
+ elif test_name.startswith('FAILS_'):
+ return json_results_generator.JSONResultsGenerator.FAIL_RESULT
+ return json_results_generator.JSONResultsGenerator.PASS_RESULT
+
+ def _test_json_generation(self, passed_tests_list, failed_tests_list):
+ tests_set = set(passed_tests_list) | set(failed_tests_list)
+
+ DISABLED_tests = set([t for t in tests_set
+ if t.startswith('DISABLED_')])
+ FLAKY_tests = set([t for t in tests_set
+ if t.startswith('FLAKY_')])
+ FAILS_tests = set([t for t in tests_set
+ if t.startswith('FAILS_')])
+ PASS_tests = tests_set ^ (DISABLED_tests | FLAKY_tests | FAILS_tests)
+
+ passed_tests = set(passed_tests_list) ^ DISABLED_tests
+ failed_tests = set(failed_tests_list)
+
test_timings = {}
i = 0
- for test in tests_list:
+ for test in tests_set:
test_timings[test] = float(self._num_runs * 100 + i)
i += 1
- port_obj = port.get(None)
+ # For backward compatibility.
+ reason = test_expectations.TEXT
+ failed_tests_dict = dict([(name, reason) for name in failed_tests])
+ port_obj = port.get(None)
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,
+ failed_tests_dict,
passed_tests,
- skipped_tests,
- tests_list)
+ (),
+ tests_set)
# Test incremental json results
incremental_json = generator.get_json(incremental=True)
self._verify_json_results(
- tests_list,
+ tests_set,
test_timings,
- passed_tests,
failed_tests,
- skipped_tests,
+ PASS_tests,
+ DISABLED_tests,
+ FLAKY_tests,
incremental_json,
1)
@@ -92,23 +117,25 @@ class JSONGeneratorTest(unittest.TestCase):
json = generator.get_json(incremental=False)
self._json = json
self._num_runs += 1
- self._tests_list |= tests_list
+ self._tests_set |= tests_set
self._test_timings.update(test_timings)
self._failed_tests.update(failed_tests)
- self._passed_tests |= passed_tests
- self._skipped_tests |= skipped_tests
+ self._PASS_tests |= PASS_tests
+ self._DISABLED_tests |= DISABLED_tests
+ self._FLAKY_tests |= FLAKY_tests
self._verify_json_results(
- self._tests_list,
+ self._tests_set,
self._test_timings,
- self._passed_tests,
self._failed_tests,
- self._skipped_tests,
+ self._PASS_tests,
+ self._DISABLED_tests,
+ self._FLAKY_tests,
self._json,
self._num_runs)
- def _verify_json_results(self, tests_list, test_timings,
- passed_tests, failed_tests,
- skipped_tests, json, num_runs):
+ def _verify_json_results(self, tests_set, test_timings, failed_tests,
+ PASS_tests, DISABLED_tests, FLAKY_tests,
+ json, num_runs):
# Aliasing to a short name for better access to its constants.
JRG = json_results_generator.JSONResultsGenerator
@@ -118,10 +145,10 @@ class JSONGeneratorTest(unittest.TestCase):
buildinfo = json[self.builder_name]
self.assertTrue(JRG.FIXABLE in buildinfo)
self.assertTrue(JRG.TESTS in buildinfo)
- self.assertTrue(len(buildinfo[JRG.BUILD_NUMBERS]) == num_runs)
- self.assertTrue(buildinfo[JRG.BUILD_NUMBERS][0] == self.build_number)
+ self.assertEqual(len(buildinfo[JRG.BUILD_NUMBERS]), num_runs)
+ self.assertEqual(buildinfo[JRG.BUILD_NUMBERS][0], self.build_number)
- if tests_list or skipped_tests:
+ if tests_set or DISABLED_tests:
fixable = {}
for fixable_items in buildinfo[JRG.FIXABLE]:
for (type, count) in fixable_items.iteritems():
@@ -130,52 +157,58 @@ class JSONGeneratorTest(unittest.TestCase):
else:
fixable[type] = count
- if passed_tests:
- self.assertTrue(fixable[JRG.PASS_RESULT] == len(passed_tests))
+ if PASS_tests:
+ self.assertEqual(fixable[JRG.PASS_RESULT], len(PASS_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))
+ if DISABLED_tests:
+ self.assertEqual(fixable[JRG.SKIP_RESULT], len(DISABLED_tests))
else:
self.assertTrue(JRG.SKIP_RESULT not in fixable or
fixable[JRG.SKIP_RESULT] == 0)
+ if FLAKY_tests:
+ self.assertEqual(fixable[JRG.FLAKY_RESULT], len(FLAKY_tests))
+ else:
+ self.assertTrue(JRG.FLAKY_RESULT not in fixable or
+ fixable[JRG.FLAKY_RESULT] == 0)
if failed_tests:
tests = buildinfo[JRG.TESTS]
- for test_name, failure in failed_tests.iteritems():
+ for test_name in failed_tests:
self.assertTrue(test_name in tests)
test = tests[test_name]
failed = 0
+ modifier = self._get_test_modifier(test_name)
for result in test[JRG.RESULTS]:
- if result[1] == JRG.FAIL_RESULT:
+ if result[1] == modifier:
failed = result[0]
- self.assertTrue(failed == 1)
+ self.assertEqual(1, failed)
timing_count = 0
for timings in test[JRG.TIMES]:
if timings[1] == test_timings[test_name]:
timing_count = timings[0]
- self.assertTrue(timing_count == 1)
+ self.assertEqual(1, timing_count)
- fixable_count = len(skipped_tests) + len(failed_tests.keys())
- if skipped_tests or failed_tests:
- self.assertTrue(sum(buildinfo[JRG.FIXABLE_COUNT]) == fixable_count)
+ fixable_count = len(DISABLED_tests | failed_tests)
+ if DISABLED_tests or failed_tests:
+ self.assertEqual(sum(buildinfo[JRG.FIXABLE_COUNT]), fixable_count)
def test_json_generation(self):
- reason = test_expectations.TEXT
-
- self._test_json_generation([], {}, [])
- self._test_json_generation(['A1', 'B1'], {}, [])
- self._test_json_generation([], {'A2': reason, 'B2': reason}, [])
- self._test_json_generation([], {}, ['A3', 'B3'])
- self._test_json_generation(['A4'], {'B4': reason, 'C4': reason}, [])
+ self._test_json_generation([], [])
+ self._test_json_generation(['A1', 'B1'], [])
+ self._test_json_generation([], ['FAILS_A2', 'FAILS_B2'])
+ self._test_json_generation(['DISABLED_A3', 'DISABLED_B3'], [])
+ self._test_json_generation(['A4'], ['B4', 'FAILS_C4'])
+ self._test_json_generation(['DISABLED_C5', 'DISABLED_D5'], ['A5', 'B5'])
self._test_json_generation(
- [], {'A5': reason, 'B5': reason}, ['C5', 'D5'])
+ ['A6', 'B6', 'FAILS_C6', 'DISABLED_E6', 'DISABLED_F6'],
+ ['FAILS_D6'])
self._test_json_generation(
- ['A6', 'B6', 'C6'], {'D6': reason}, ['E6', 'F6'])
-
+ ['A7', 'FLAKY_B7', 'DISABLED_C7'],
+ ['FAILS_D7', 'FLAKY_D8'])
if __name__ == '__main__':
unittest.main()
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py
index 00ff211..fb9fe6d 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/printing.py
@@ -182,8 +182,8 @@ def _configure_logging(stream, verbose):
log_datefmt = '%y%m%d %H:%M:%S'
log_level = logging.INFO
if verbose:
- log_fmt = ('%(asctime)s %(filename)s:%(lineno)-4d %(levelname)s '
- '%(message)s')
+ log_fmt = ('%(asctime)s %(process)d %(filename)s:%(lineno)-4d %(levelname)s'
+ '%(message)s')
log_level = logging.DEBUG
root = logging.getLogger()
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_output.py b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_output.py
new file mode 100644
index 0000000..e809be6
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/layout_package/test_output.py
@@ -0,0 +1,56 @@
+# 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.
+
+
+class TestOutput(object):
+ """Groups information about a test output for easy passing of data.
+
+ This is used not only for a actual test output, but also for grouping
+ expected test output.
+ """
+
+ def __init__(self, text, image, image_hash,
+ crash=None, test_time=None, timeout=None, error=None):
+ """Initializes a TestOutput object.
+
+ Args:
+ text: a text output
+ image: an image output
+ image_hash: a string containing the checksum of the image
+ crash: a boolean indicating whether the driver crashed on the test
+ test_time: a time which the test has taken
+ timeout: a boolean indicating whehter the test timed out
+ error: any unexpected or additional (or error) text output
+ """
+ self.text = text
+ self.image = image
+ self.image_hash = image_hash
+ self.crash = crash
+ self.test_time = test_time
+ self.timeout = timeout
+ self.error = error
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/base.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/base.py
index a98b858..632806f 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/port/base.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/base.py
@@ -30,10 +30,7 @@
"""Abstract base class of Port-specific entrypoints for the layout tests
test infrastructure (the Port and Driver classes)."""
-from __future__ import with_statement
-
import cgi
-import codecs
import difflib
import errno
import os
@@ -42,15 +39,17 @@ import sys
import time
import apache_http_server
+import config as port_config
import http_lock
import http_server
import test_files
import websocket_server
-from webkitpy.common.memoized import memoized
+from webkitpy.common import system
+from webkitpy.common.system import filesystem
from webkitpy.common.system import logutils
+from webkitpy.common.system import path
from webkitpy.common.system.executive import Executive, ScriptError
-from webkitpy.common.system.path import abspath_to_uri
from webkitpy.common.system.user import User
@@ -75,27 +74,26 @@ class DummyOptions(object):
# FIXME: This class should merge with webkitpy.webkit_port at some point.
class Port(object):
- """Abstract class for Port-specific hooks for the layout_test package.
- """
-
- @staticmethod
- def flag_from_configuration(configuration):
- flags_by_configuration = {
- "Debug": "--debug",
- "Release": "--release",
- }
- return flags_by_configuration[configuration]
-
- def __init__(self, **kwargs):
- self._name = kwargs.get('port_name', None)
- self._options = kwargs.get('options')
+ """Abstract class for Port-specific hooks for the layout_test package."""
+
+ def __init__(self, port_name=None, options=None,
+ executive=None,
+ user=None,
+ filesystem=None,
+ config=None,
+ **kwargs):
+ self._name = port_name
+ self._options = options
if self._options is None:
# FIXME: Ideally we'd have a package-wide way to get a
# well-formed options object that had all of the necessary
# options defined on it.
self._options = DummyOptions()
- self._executive = kwargs.get('executive', Executive())
- self._user = kwargs.get('user', User())
+ self._executive = executive or Executive()
+ self._user = user or User()
+ self._filesystem = filesystem or system.filesystem.FileSystem()
+ self._config = config or port_config.Config(self._executive,
+ self._filesystem)
self._helper = None
self._http_server = None
self._webkit_base_dir = None
@@ -118,7 +116,7 @@ class Port(object):
self._wdiff_available = True
self._pretty_patch_path = self.path_from_webkit_base("BugsSite",
- "PrettyPatch", "prettify.rb")
+ "PrettyPatch", "prettify.rb")
self._pretty_patch_available = True
self.set_option_default('configuration', None)
if self._options.configuration is None:
@@ -265,7 +263,8 @@ class Port(object):
baselines = []
for platform_dir in baseline_search_path:
- if os.path.exists(os.path.join(platform_dir, baseline_filename)):
+ if self.path_exists(self._filesystem.join(platform_dir,
+ baseline_filename)):
baselines.append((platform_dir, baseline_filename))
if not all_baselines and baselines:
@@ -274,7 +273,8 @@ class Port(object):
# If it wasn't found in a platform directory, return the expected
# result in the test directory, even if no such file actually exists.
platform_dir = self.layout_tests_dir()
- if os.path.exists(os.path.join(platform_dir, baseline_filename)):
+ if self.path_exists(self._filesystem.join(platform_dir,
+ baseline_filename)):
baselines.append((platform_dir, baseline_filename))
if baselines:
@@ -304,35 +304,32 @@ class Port(object):
platform_dir, baseline_filename = self.expected_baselines(
filename, suffix)[0]
if platform_dir:
- return os.path.join(platform_dir, baseline_filename)
- return os.path.join(self.layout_tests_dir(), baseline_filename)
-
- def _expected_file_contents(self, test, extension, encoding):
- path = self.expected_filename(test, extension)
- if not os.path.exists(path):
- return None
- open_mode = 'r'
- if encoding is None:
- open_mode = 'r+b'
- with codecs.open(path, open_mode, encoding) as file:
- return file.read()
+ return self._filesystem.join(platform_dir, baseline_filename)
+ return self._filesystem.join(self.layout_tests_dir(), baseline_filename)
def expected_checksum(self, test):
"""Returns the checksum of the image we expect the test to produce, or None if it is a text-only test."""
- return self._expected_file_contents(test, '.checksum', 'ascii')
+ path = self.expected_filename(test, '.checksum')
+ if not self.path_exists(path):
+ return None
+ return self._filesystem.read_text_file(path)
def expected_image(self, test):
"""Returns the image we expect the test to produce."""
- return self._expected_file_contents(test, '.png', None)
+ path = self.expected_filename(test, '.png')
+ if not self.path_exists(path):
+ return None
+ return self._filesystem.read_binary_file(path)
def expected_text(self, test):
"""Returns the text output we expect the test to produce."""
- # NOTE: -expected.txt files are ALWAYS utf-8. However,
- # we do not decode the output from DRT, so we should not
- # decode the -expected.txt values either to allow comparisons.
- text = self._expected_file_contents(test, '.txt', None)
- if not text:
+ # FIXME: DRT output is actually utf-8, but since we don't decode the
+ # output from DRT (instead treating it as a binary string), we read the
+ # baselines as a binary string, too.
+ path = self.expected_filename(test, '.txt')
+ if not self.path_exists(path):
return ''
+ text = self._filesystem.read_binary_file(path)
return text.strip("\r\n").replace("\r\n", "\n") + "\n"
def filename_to_uri(self, filename):
@@ -362,7 +359,7 @@ class Port(object):
protocol = "http"
return "%s://127.0.0.1:%u/%s" % (protocol, port, relative_path)
- return abspath_to_uri(os.path.abspath(filename))
+ return path.abspath_to_uri(os.path.abspath(filename))
def tests(self, paths):
"""Return the list of tests found (relative to layout_tests_dir()."""
@@ -373,20 +370,19 @@ class Port(object):
Used by --clobber-old-results."""
layout_tests_dir = self.layout_tests_dir()
- return filter(lambda x: os.path.isdir(os.path.join(layout_tests_dir, x)),
- os.listdir(layout_tests_dir))
+ return filter(lambda x: self._filesystem.isdir(self._filesystem.join(layout_tests_dir, x)),
+ self._filesystem.listdir(layout_tests_dir))
def path_isdir(self, path):
- """Returns whether the path refers to a directory of tests.
-
- Used by test_expectations.py to apply rules to whole directories."""
- return os.path.isdir(path)
+ """Return True if the path refers to a directory of tests."""
+ # Used by test_expectations.py to apply rules to whole directories.
+ return self._filesystem.isdir(path)
def path_exists(self, path):
- """Returns whether the path refers to an existing test or baseline."""
+ """Return True if the path refers to an existing test or baseline."""
# Used by test_expectations.py to determine if an entry refers to a
- # valid test and by printing.py to determine if baselines exist."""
- return os.path.exists(path)
+ # valid test and by printing.py to determine if baselines exist.
+ return self._filesystem.exists(path)
def update_baseline(self, path, data, encoding):
"""Updates the baseline for a test.
@@ -398,11 +394,12 @@ class Port(object):
data: contents of the baseline.
encoding: file encoding to use for the baseline.
"""
- write_mode = "w"
+ # FIXME: remove the encoding parameter in favor of text/binary
+ # functions.
if encoding is None:
- write_mode = "wb"
- with codecs.open(path, write_mode, encoding=encoding) as file:
- file.write(data)
+ self._filesystem.write_binary_file(path, data)
+ else:
+ self._filesystem.write_text_file(path, data)
def uri_to_test_name(self, uri):
"""Return the base layout test name for a given URI.
@@ -414,7 +411,7 @@ class Port(object):
"""
test = uri
if uri.startswith("file:///"):
- prefix = abspath_to_uri(self.layout_tests_dir()) + "/"
+ prefix = path.abspath_to_uri(self.layout_tests_dir()) + "/"
return test[len(prefix):]
if uri.startswith("http://127.0.0.1:8880/"):
@@ -441,18 +438,16 @@ class Port(object):
for test_or_category in self.skipped_layout_tests():
if test_or_category == test_name:
return True
- category = os.path.join(self.layout_tests_dir(), test_or_category)
- if os.path.isdir(category) and test_name.startswith(test_or_category):
+ category = self._filesystem.join(self.layout_tests_dir(),
+ test_or_category)
+ if (self._filesystem.isdir(category) and
+ test_name.startswith(test_or_category)):
return True
return False
def maybe_make_directory(self, *path):
"""Creates the specified directory if it doesn't already exist."""
- try:
- os.makedirs(os.path.join(*path))
- except OSError, e:
- if e.errno != errno.EEXIST:
- raise
+ self._filesystem.maybe_make_directory(*path)
def name(self):
"""Return the name of the port (e.g., 'mac', 'chromium-win-xp').
@@ -473,19 +468,13 @@ class Port(object):
if not hasattr(self._options, name):
return setattr(self._options, name, default_value)
- # FIXME: This could be replaced by functions in webkitpy.common.checkout.scm.
def path_from_webkit_base(self, *comps):
"""Returns the full path to path made by joining the top of the
WebKit source tree and the list of path components in |*comps|."""
- if not self._webkit_base_dir:
- abspath = os.path.abspath(__file__)
- self._webkit_base_dir = abspath[0:abspath.find('WebKitTools')]
-
- return os.path.join(self._webkit_base_dir, *comps)
+ return self._config.path_from_webkit_base(*comps)
- # FIXME: Callers should eventually move to scm.script_path.
def script_path(self, script_name):
- return self.path_from_webkit_base("WebKitTools", "Scripts", script_name)
+ return self._config.script_path(script_name)
def path_to_test_expectations_file(self):
"""Update the test expectations to the passed-in string.
@@ -726,50 +715,8 @@ class Port(object):
e.message_with_output()))
return self._pretty_patch_error_html
- def _webkit_build_directory_command(self, args):
- return ["perl", self.script_path("webkit-build-directory")] + args
-
- @memoized
- def _webkit_top_level_build_directory(self, top_level=True):
- """This directory is above where products are built to and contains things like the Configuration file."""
- args = self._webkit_build_directory_command(["--top-level"])
- return self._executive.run_command(args).rstrip()
-
- @memoized
- def _webkit_configuration_build_directory(self, configuration=None):
- """This is where products are normally built to."""
- if not configuration:
- configuration = self.flag_from_configuration(self.get_option('configuration'))
- args = self._webkit_build_directory_command(["--configuration", configuration])
- return self._executive.run_command(args).rstrip()
-
- def _configuration_file_path(self):
- return os.path.join(self._webkit_top_level_build_directory(), "Configuration")
-
- # Easy override for unit tests
- def _open_configuration_file(self):
- configuration_path = self._configuration_file_path()
- return codecs.open(configuration_path, "r", "utf-8")
-
- def _read_configuration(self):
- try:
- with self._open_configuration_file() as file:
- return file.readline().rstrip()
- except:
- return None
-
- # FIXME: This list may be incomplete as Apple has some sekret configs.
- _RECOGNIZED_CONFIGURATIONS = ("Debug", "Release")
-
def default_configuration(self):
- # FIXME: Unify this with webkitdir.pm configuration reading code.
- configuration = self._read_configuration()
- if not configuration:
- configuration = "Release"
- if configuration not in self._RECOGNIZED_CONFIGURATIONS:
- _log.warn("Configuration \"%s\" found in %s is not a recognized value.\n" % (configuration, self._configuration_file_path()))
- _log.warn("Scripts may fail. See 'set-webkit-configuration --help'.")
- return configuration
+ return self._config.default_configuration()
#
# PROTECTED ROUTINES
@@ -777,6 +724,8 @@ class Port(object):
# The routines below should only be called by routines in this class
# or any of its subclasses.
#
+ def _webkit_build_directory(self, args):
+ return self._config.build_directory(args[0])
def _path_to_apache(self):
"""Returns the full path to the apache binary.
@@ -848,8 +797,8 @@ class Port(object):
def _webkit_baseline_path(self, platform):
"""Return the full path to the top of the baseline tree for a
given platform."""
- return os.path.join(self.layout_tests_dir(), 'platform',
- platform)
+ return self._filesystem.join(self.layout_tests_dir(), 'platform',
+ platform)
class Driver:
@@ -883,16 +832,8 @@ class Driver:
checksum - if present, the expected checksum for the image for this
test
- Returns a tuple of the following:
- crash - a boolean indicating whether the driver crashed on the test
- timeout - a boolean indicating whehter the test timed out
- checksum - a string containing the checksum of the image, if
- present
- output - any text output
- error - any unexpected or additional (or error) text output
-
- Note that the image itself should be written to the path that was
- specified in the __init__() call."""
+ Returns a TestOutput object.
+ """
raise NotImplementedError('Driver.run_test')
# FIXME: This is static so we can test it w/o creating a Base instance.
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/base_unittest.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/base_unittest.py
index ee868e8..1e9c2b7 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/port/base_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/base_unittest.py
@@ -28,49 +28,21 @@
import optparse
import os
-import StringIO
import sys
import tempfile
import unittest
-from webkitpy.common.system.path import abspath_to_uri
from webkitpy.common.system.executive import Executive, ScriptError
+from webkitpy.common.system import executive_mock
+from webkitpy.common.system import filesystem
+from webkitpy.common.system import outputcapture
+from webkitpy.common.system.path import abspath_to_uri
from webkitpy.thirdparty.mock import Mock
from webkitpy.tool import mocktool
import base
-
-# FIXME: This makes StringIO objects work with "with". Remove
-# when we upgrade to 2.6.
-class NewStringIO(StringIO.StringIO):
- def __enter__(self):
- return self
-
- def __exit__(self, type, value, traceback):
- pass
-
-
-class MockExecutive():
- def __init__(self, exception):
- self._exception = exception
-
- def run_command(self, *args, **kwargs):
- raise self._exception
-
-
-class UnitTestPort(base.Port):
- """Subclass of base.Port used for unit testing."""
- def __init__(self, configuration_contents=None, configuration_exception=IOError, executive_exception=None):
- base.Port.__init__(self)
- self._configuration_contents = configuration_contents
- self._configuration_exception = configuration_exception
- if executive_exception:
- self._executive = MockExecutive(executive_exception)
-
- def _open_configuration_file(self):
- if self._configuration_contents:
- return NewStringIO(self._configuration_contents)
- raise self._configuration_exception
+import config
+import config_mock
class PortTest(unittest.TestCase):
@@ -102,18 +74,21 @@ class PortTest(unittest.TestCase):
return new_file
def test_pretty_patch_os_error(self):
- port = UnitTestPort(executive_exception=OSError)
+ port = base.Port(executive=executive_mock.MockExecutive2(exception=OSError))
+ oc = outputcapture.OutputCapture()
+ oc.capture_output()
self.assertEqual(port.pretty_patch_text("patch.txt"),
port._pretty_patch_error_html)
# This tests repeated calls to make sure we cache the result.
self.assertEqual(port.pretty_patch_text("patch.txt"),
port._pretty_patch_error_html)
+ oc.restore_output()
def test_pretty_patch_script_error(self):
# FIXME: This is some ugly white-box test hacking ...
base._pretty_patch_available = True
- port = UnitTestPort(executive_exception=ScriptError)
+ port = base.Port(executive=executive_mock.MockExecutive2(exception=ScriptError))
self.assertEqual(port.pretty_patch_text("patch.txt"),
port._pretty_patch_error_html)
@@ -194,13 +169,9 @@ class PortTest(unittest.TestCase):
self.assertFalse('nosuchthing' in diff)
def test_default_configuration_notfound(self):
- # Regular IOError thrown while trying to get the configuration.
- port = UnitTestPort()
- self.assertEqual(port.default_configuration(), "Release")
-
- # More exotic OSError thrown.
- port = UnitTestPort(configuration_exception=OSError)
- self.assertEqual(port.default_configuration(), "Release")
+ # Test that we delegate to the config object properly.
+ port = base.Port(config=config_mock.MockConfig(default_configuration='default'))
+ self.assertEqual(port.default_configuration(), 'default')
def test_layout_tests_skipping(self):
port = base.Port()
@@ -209,14 +180,6 @@ class PortTest(unittest.TestCase):
self.assertTrue(port.skips_layout_test('media/video-zoom.html'))
self.assertFalse(port.skips_layout_test('foo/foo.html'))
- def test_default_configuration_found(self):
- port = UnitTestPort(configuration_contents="Debug")
- self.assertEqual(port.default_configuration(), "Debug")
-
- def test_default_configuration_unknown(self):
- port = UnitTestPort(configuration_contents="weird_value")
- self.assertEqual(port.default_configuration(), "weird_value")
-
def test_setup_test_run(self):
port = base.Port()
# This routine is a no-op. We just test it for coverage.
@@ -229,7 +192,6 @@ class PortTest(unittest.TestCase):
self.assertTrue('css2.1' in dirs)
def test_filename_to_uri(self):
-
port = base.Port()
layout_test_dir = port.layout_tests_dir()
test_file = os.path.join(layout_test_dir, "foo", "bar.html")
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/chromium.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/chromium.py
index f93f9a8..3149290 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/port/chromium.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/chromium.py
@@ -46,13 +46,11 @@ import webbrowser
from webkitpy.common.system.executive import Executive
from webkitpy.common.system.path import cygpath
from webkitpy.layout_tests.layout_package import test_expectations
+from webkitpy.layout_tests.layout_package import test_output
import base
import http_server
-from webkitpy.common.system.executive import Executive
-from webkitpy.layout_tests.layout_package import test_expectations
-
# Chromium DRT on OSX uses WebKitDriver.
if sys.platform == 'darwin':
import webkit
@@ -447,6 +445,15 @@ class ChromiumDriver(base.Driver):
cmd += "\n"
return cmd
+ def _output_image(self):
+ """Returns the image output which driver generated."""
+ png_path = self._image_path
+ if png_path and os.path.isfile(png_path):
+ with open(png_path, 'rb') as image_file:
+ return image_file.read()
+ else:
+ return None
+
def run_test(self, uri, timeoutms, checksum):
output = []
error = []
@@ -498,8 +505,9 @@ class ChromiumDriver(base.Driver):
(line, crash) = self._write_command_and_read_line(input=None)
- return (crash, timeout, actual_checksum, ''.join(output),
- ''.join(error))
+ return test_output.TestOutput(
+ ''.join(output), self._output_image(), actual_checksum,
+ crash, time.time() - start_time, timeout, ''.join(error))
def stop(self):
if self._proc:
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/chromium_gpu.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/chromium_gpu.py
index 57b6989..54a0fee 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/port/chromium_gpu.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/chromium_gpu.py
@@ -69,11 +69,14 @@ def _set_gpu_options(options):
options.accelerated_compositing = True
if options.accelerated_2d_canvas is None:
options.accelerated_2d_canvas = True
- if options.builder_name is not None:
- options.builder_name = options.builder_name + ' - GPU'
if options.use_drt is None:
options.use_drt = True
+ # FIXME: Remove this after http://codereview.chromium.org/5133001/ is enabled
+ # on the bots.
+ if options.builder_name is not None and not ' - GPU' in options.builder_name:
+ options.builder_name = options.builder_name + ' - GPU'
+
def _gpu_overrides(port):
try:
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/config.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/config.py
index 2364098..cad5e37 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/port/config.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/config.py
@@ -32,28 +32,29 @@
# FIXME: This file needs to be unified with common/checkout/scm.py and
# common/config/ports.py .
-from __future__ import with_statement
-
-import codecs
import os
-from webkitpy.common.checkout import scm
from webkitpy.common.system import logutils
+from webkitpy.common.system import executive
_log = logutils.get_logger(__file__)
#
-# This is used to record if we've already hit the filesystem to look
+# FIXME: This is used to record if we've already hit the filesystem to look
# for a default configuration. We cache this to speed up the unit tests,
-# but this can be reset with clear_cached_configuration().
+# but this can be reset with clear_cached_configuration(). This should be
+# replaced with us consistently using MockConfigs() for tests that don't
+# hit the filesystem at all and provide a reliable value.
#
-_determined_configuration = None
+_have_determined_configuration = False
+_configuration = "Release"
def clear_cached_configuration():
- global _determined_configuration
- _determined_configuration = -1
+ global _have_determined_configuration, _configuration
+ _have_determined_configuration = False
+ _configuration = "Release"
class Config(object):
@@ -62,8 +63,9 @@ class Config(object):
"Release": "--release",
}
- def __init__(self, executive):
+ def __init__(self, executive, filesystem):
self._executive = executive
+ self._filesystem = filesystem
self._webkit_base_dir = None
self._default_configuration = None
self._build_directories = {}
@@ -115,40 +117,54 @@ class Config(object):
return self._default_configuration
def path_from_webkit_base(self, *comps):
- return os.path.join(self.webkit_base_dir(), *comps)
+ return self._filesystem.join(self.webkit_base_dir(), *comps)
def webkit_base_dir(self):
"""Returns the absolute path to the top of the WebKit tree.
Raises an AssertionError if the top dir can't be determined."""
- # FIXME: Consider determining this independently of scm in order
- # to be able to run in a bare tree.
+ # Note: this code somewhat duplicates the code in
+ # scm.find_checkout_root(). However, that code only works if the top
+ # of the SCM repository also matches the top of the WebKit tree. The
+ # Chromium ports, for example, only check out subdirectories like
+ # WebKitTools/Scripts, and so we still have to do additional work
+ # to find the top of the tree.
+ #
+ # This code will also work if there is no SCM system at all.
if not self._webkit_base_dir:
- self._webkit_base_dir = scm.find_checkout_root()
- assert self._webkit_base_dir, "Could not determine the top of the WebKit checkout"
+ abspath = os.path.abspath(__file__)
+ self._webkit_base_dir = abspath[0:abspath.find('WebKitTools')]
return self._webkit_base_dir
def _script_path(self, script_name):
- return os.path.join(self.webkit_base_dir(), "WebKitTools",
- "Scripts", script_name)
+ return self._filesystem.join(self.webkit_base_dir(), "WebKitTools",
+ "Scripts", script_name)
def _determine_configuration(self):
# This mirrors the logic in webkitdirs.pm:determineConfiguration().
- global _determined_configuration
- if _determined_configuration == -1:
+ #
+ # FIXME: See the comment at the top of the file regarding unit tests
+ # and our use of global mutable static variables.
+ global _have_determined_configuration, _configuration
+ if not _have_determined_configuration:
contents = self._read_configuration()
+ if not contents:
+ contents = "Release"
if contents == "Deployment":
contents = "Release"
if contents == "Development":
contents = "Debug"
- _determined_configuration = contents
- return _determined_configuration
+ _configuration = contents
+ _have_determined_configuration = True
+ return _configuration
def _read_configuration(self):
- configuration_path = os.path.join(self.build_directory(None),
- "Configuration")
- if not os.path.exists(configuration_path):
+ try:
+ configuration_path = self._filesystem.join(self.build_directory(None),
+ "Configuration")
+ if not self._filesystem.exists(configuration_path):
+ return None
+ except (OSError, executive.ScriptError):
return None
- with codecs.open(configuration_path, "r", "utf-8") as fh:
- return fh.read().rstrip()
+ return self._filesystem.read_text_file(configuration_path).rstrip()
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/config_mock.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/config_mock.py
new file mode 100644
index 0000000..af71fa3
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/config_mock.py
@@ -0,0 +1,50 @@
+#!/usr/bin/env python
+# Copyright (C) 2010 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * 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.
+
+"""Wrapper objects for WebKit-specific utility routines."""
+
+
+class MockConfig(object):
+ def __init__(self, default_configuration='Release'):
+ self._default_configuration = default_configuration
+
+ def build_directory(self, configuration):
+ return "/build"
+
+ def build_dumprendertree(self, configuration):
+ return True
+
+ def default_configuration(self):
+ return self._default_configuration
+
+ def path_from_webkit_base(self, *comps):
+ return "/" + "/".join(list(comps))
+
+ def webkit_base_dir(self):
+ return "/"
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/config_standalone.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/config_standalone.py
new file mode 100644
index 0000000..3dec3b9
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/config_standalone.py
@@ -0,0 +1,70 @@
+# 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.
+
+"""FIXME: This script is used by
+config_unittest.test_default_configuration__standalone() to read the
+default configuration to work around any possible caching / reset bugs. See
+https://bugs.webkit.org/show_bug?id=49360 for the motivation. We can remove
+this test when we remove the global configuration cache in config.py."""
+
+import os
+import unittest
+import sys
+
+
+# Ensure that webkitpy is in PYTHONPATH.
+this_dir = os.path.abspath(sys.path[0])
+up = os.path.dirname
+script_dir = up(up(up(this_dir)))
+if script_dir not in sys.path:
+ sys.path.append(script_dir)
+
+from webkitpy.common.system import executive
+from webkitpy.common.system import executive_mock
+from webkitpy.common.system import filesystem
+from webkitpy.common.system import filesystem_mock
+
+import config
+
+
+def main(argv=None):
+ if not argv:
+ argv = sys.argv
+
+ if len(argv) == 3 and argv[1] == '--mock':
+ e = executive_mock.MockExecutive2(output='foo')
+ fs = filesystem_mock.MockFileSystem({'foo/Configuration': argv[2]})
+ else:
+ e = executive.Executive()
+ fs = filesystem.FileSystem()
+
+ c = config.Config(e, fs)
+ print c.default_configuration()
+
+if __name__ == '__main__':
+ main()
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/config_unittest.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/config_unittest.py
index 4674cba..9bea014 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/port/config_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/config_unittest.py
@@ -26,150 +26,157 @@
# (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 codecs
import os
-import StringIO
+import sys
import unittest
+from webkitpy.common.system import executive
+from webkitpy.common.system import executive_mock
+from webkitpy.common.system import filesystem
+from webkitpy.common.system import filesystem_mock
from webkitpy.common.system import outputcapture
import config
-
-# FIXME: This makes StringIO objects work with "with". Remove
-# when we upgrade to 2.6.
-class NewStringIO(StringIO.StringIO):
- def __enter__(self):
- return self
-
- def __exit__(self, type, value, traceback):
- pass
-
-
-class MockExecutive(object):
- def __init__(self, output='', exit_code=0):
- self._output = output
- self._exit_code = exit_code
-
- def run_command(self, arg_list, return_exit_code=False,
- decode_output=False):
- if return_exit_code:
- return self._exit_code
- return self._output
-
-
class ConfigTest(unittest.TestCase):
def tearDown(self):
config.clear_cached_configuration()
- def assertConfiguration(self, contents, expected):
- # This tests that a configuration file containing
- # _contents_ endsd up being interpreted as _expected_.
- #
- # FIXME: rewrite this when we have a filesystem abstraction we
- # can mock out more easily.
- config.clear_cached_configuration()
- orig_open = codecs.open
-
- def wrap_open(contents):
- def open_wrapper(path, mode, encoding):
- return NewStringIO(contents)
- return open_wrapper
+ def make_config(self, output='', files={}, exit_code=0, exception=None):
+ e = executive_mock.MockExecutive2(output=output, exit_code=exit_code,
+ exception=exception)
+ fs = filesystem_mock.MockFileSystem(files)
+ return config.Config(e, fs)
- try:
- orig_exists = os.path.exists
- os.path.exists = lambda p: True
- codecs.open = wrap_open(contents)
-
- e = MockExecutive(output='foo')
- c = config.Config(e)
- self.assertEqual(c.default_configuration(), expected)
- finally:
- os.path.exists = orig_exists
- codecs.open = orig_open
+ def assert_configuration(self, contents, expected):
+ # This tests that a configuration file containing
+ # _contents_ ends up being interpreted as _expected_.
+ c = self.make_config('foo', {'foo/Configuration': contents})
+ self.assertEqual(c.default_configuration(), expected)
def test_build_directory_toplevel(self):
- e = MockExecutive(output="toplevel")
- c = config.Config(e)
+ c = self.make_config('toplevel')
self.assertEqual(c.build_directory(None), 'toplevel')
# Test again to check caching
self.assertEqual(c.build_directory(None), 'toplevel')
def test_build_directory__release(self):
- e = MockExecutive(output="release")
- c = config.Config(e)
+ c = self.make_config('release')
self.assertEqual(c.build_directory('Release'), 'release')
def test_build_directory__debug(self):
- e = MockExecutive(output="debug")
- c = config.Config(e)
+ c = self.make_config('debug')
self.assertEqual(c.build_directory('Debug'), 'debug')
def test_build_directory__unknown(self):
- e = MockExecutive(output="unknown")
- c = config.Config(e)
+ c = self.make_config("unknown")
self.assertRaises(KeyError, c.build_directory, 'Unknown')
def test_build_dumprendertree__success(self):
- e = MockExecutive(exit_code=0)
- c = config.Config(e)
+ c = self.make_config(exit_code=0)
self.assertTrue(c.build_dumprendertree("Debug"))
self.assertTrue(c.build_dumprendertree("Release"))
self.assertRaises(KeyError, c.build_dumprendertree, "Unknown")
def test_build_dumprendertree__failure(self):
- e = MockExecutive(exit_code=-1)
- c = config.Config(e)
+ c = self.make_config(exit_code=-1)
+ # FIXME: Build failures should log errors. However, the message we
+ # get depends on how we're being called; as a standalone test,
+ # we'll get the "no handlers found" message. As part of
+ # test-webkitpy, we get the actual message. Really, we need
+ # outputcapture to install its own handler.
oc = outputcapture.OutputCapture()
oc.capture_output()
self.assertFalse(c.build_dumprendertree('Debug'))
- (out, err) = oc.restore_output()
+ oc.restore_output()
oc.capture_output()
self.assertFalse(c.build_dumprendertree('Release'))
oc.restore_output()
def test_default_configuration__release(self):
- self.assertConfiguration('Release', 'Release')
+ self.assert_configuration('Release', 'Release')
def test_default_configuration__debug(self):
- self.assertConfiguration('Debug', 'Debug')
+ self.assert_configuration('Debug', 'Debug')
def test_default_configuration__deployment(self):
- self.assertConfiguration('Deployment', 'Release')
+ self.assert_configuration('Deployment', 'Release')
def test_default_configuration__development(self):
- self.assertConfiguration('Development', 'Debug')
+ self.assert_configuration('Development', 'Debug')
def test_default_configuration__notfound(self):
# This tests what happens if the default configuration file
# doesn't exist.
- config.clear_cached_configuration()
- try:
- orig_exists = os.path.exists
- os.path.exists = lambda p: False
- e = MockExecutive(output="foo")
- c = config.Config(e)
- self.assertEqual(c.default_configuration(), "Release")
- finally:
- os.path.exists = orig_exists
+ c = self.make_config(output='foo', files={'foo/Configuration': None})
+ self.assertEqual(c.default_configuration(), "Release")
def test_default_configuration__unknown(self):
# Ignore the warning about an unknown configuration value.
oc = outputcapture.OutputCapture()
oc.capture_output()
- self.assertConfiguration('Unknown', 'Unknown')
+ self.assert_configuration('Unknown', 'Unknown')
oc.restore_output()
- def test_path_from_webkit_base(self, *comps):
- c = config.Config(None)
+ def test_default_configuration__standalone(self):
+ # FIXME: This test runs a standalone python script to test
+ # reading the default configuration to work around any possible
+ # caching / reset bugs. See https://bugs.webkit.org/show_bug?id=49360
+ # for the motivation. We can remove this test when we remove the
+ # global configuration cache in config.py.
+ e = executive.Executive()
+ fs = filesystem.FileSystem()
+ c = config.Config(e, fs)
+ script = c.path_from_webkit_base('WebKitTools', 'Scripts',
+ 'webkitpy', 'layout_tests', 'port', 'config_standalone.py')
+
+ # Note: don't use 'Release' here, since that's the normal default.
+ expected = 'Debug'
+
+ args = [sys.executable, script, '--mock', expected]
+ actual = e.run_command(args).rstrip()
+ self.assertEqual(actual, expected)
+
+ def test_default_configuration__no_perl(self):
+ # We need perl to run webkit-build-directory to find out where the
+ # default configuration file is. See what happens if perl isn't
+ # installed. (We should get the default value, 'Release').
+ c = self.make_config(exception=OSError)
+ actual = c.default_configuration()
+ self.assertEqual(actual, 'Release')
+
+ def test_default_configuration__scripterror(self):
+ # We run webkit-build-directory to find out where the default
+ # configuration file is. See what happens if that script fails.
+ # (We should get the default value, 'Release').
+ c = self.make_config(exception=executive.ScriptError())
+ actual = c.default_configuration()
+ self.assertEqual(actual, 'Release')
+
+ def test_path_from_webkit_base(self):
+ # FIXME: We use a real filesystem here. Should this move to a
+ # mocked one?
+ c = config.Config(executive.Executive(), filesystem.FileSystem())
self.assertTrue(c.path_from_webkit_base('foo'))
def test_webkit_base_dir(self):
- c = config.Config(None)
- self.assertTrue(c.webkit_base_dir())
+ # FIXME: We use a real filesystem here. Should this move to a
+ # mocked one?
+ c = config.Config(executive.Executive(), filesystem.FileSystem())
+ base_dir = c.webkit_base_dir()
+ self.assertTrue(base_dir)
+
+ orig_cwd = os.getcwd()
+ os.chdir(os.environ['HOME'])
+ c = config.Config(executive.Executive(), filesystem.FileSystem())
+ try:
+ base_dir_2 = c.webkit_base_dir()
+ self.assertEqual(base_dir, base_dir_2)
+ finally:
+ os.chdir(orig_cwd)
if __name__ == '__main__':
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/dryrun.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/dryrun.py
index 8a6af56..96d0d55 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/port/dryrun.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/dryrun.py
@@ -48,6 +48,9 @@ from __future__ import with_statement
import os
import sys
+import time
+
+from webkitpy.layout_tests.layout_package import test_output
import base
import factory
@@ -109,19 +112,19 @@ class DryrunDriver(base.Driver):
return None
def run_test(self, uri, timeoutms, image_hash):
+ start_time = time.time()
test_name = self._port.uri_to_test_name(uri)
path = os.path.join(self._port.layout_tests_dir(), test_name)
text_output = self._port.expected_text(path)
if image_hash is not None:
image = self._port.expected_image(path)
- if image and self._image_path:
- with open(self._image_path, 'w') as f:
- f.write(image)
hash = self._port.expected_checksum(path)
else:
+ image = None
hash = None
- return (False, False, hash, text_output, None)
+ return test_output.TestOutput(text_output, image, hash, False,
+ time.time() - start_time, False, None)
def start(self):
pass
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py
index c4c885d..e60c274 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/google_chrome_unittest.py
@@ -28,7 +28,8 @@ import codecs
import os
import unittest
-import base_unittest
+from webkitpy.common import newstringio
+
import factory
import google_chrome
@@ -77,7 +78,7 @@ class GetGoogleChromePortTest(unittest.TestCase):
def mock_open(path, mode, encoding):
if 'test_expectations_chrome.txt' in path:
- return base_unittest.NewStringIO(expected_string)
+ return newstringio.StringIO(expected_string)
return orig_open(path, mode, encoding)
try:
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/http_lock.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/http_lock.py
index d65801d..8995b21 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/port/http_lock.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/http_lock.py
@@ -36,6 +36,7 @@ import tempfile
import time
from webkitpy.common.system.executive import Executive
+from webkitpy.common.system.file_lock import FileLock
_log = logging.getLogger("webkitpy.layout_tests.port.http_lock")
@@ -52,10 +53,9 @@ class HttpLock(object):
self._lock_file_path_prefix = os.path.join(self._lock_path,
self._lock_file_prefix)
self._guard_lock_file = os.path.join(self._lock_path, guard_lock)
+ self._guard_lock = FileLock(self._guard_lock_file)
self._process_lock_file_name = ""
self._executive = Executive()
- # maximum wait time for the lock creation
- self._guard_lock_max_wait = 1 * 60
def cleanup_http_lock(self):
"""Delete the lock file if exists."""
@@ -95,35 +95,31 @@ class HttpLock(object):
_log.debug("Removing stuck lock file: %s" % lock_list[0])
os.unlink(lock_list[0])
return
- except IOError, OSError:
+ except (IOError, OSError):
return
return int(current_pid)
def _create_lock_file(self):
"""The lock files are used to schedule the running test sessions in first
- come first served order. The sequential guard lock ensures that the lock
- numbers are sequential."""
+ come first served order. The guard lock ensures that the lock numbers are
+ sequential."""
if not os.path.exists(self._lock_path):
_log.debug("Lock directory does not exist: %s" % self._lock_path)
return False
- start_time = time.time()
- while(True):
- try:
- sequential_guard_lock = os.open(self._guard_lock_file, os.O_CREAT | os.O_EXCL)
- self._process_lock_file_name = (self._lock_file_path_prefix +
- str(self._next_lock_number()))
- lock_file = open(self._process_lock_file_name, 'w')
- _log.debug("Creating lock file: %s" % self._process_lock_file_name)
- lock_file.write(str(os.getpid()))
- lock_file.close()
- os.close(sequential_guard_lock)
- os.unlink(self._guard_lock_file)
- return True
- except OSError:
- if time.time() - start_time > self._guard_lock_max_wait:
- _log.debug("Lock does not created: %s" % str(sys.exc_info()))
- return False
+ if not self._guard_lock.acquire_lock():
+ _log.debug("Guard lock timed out!")
+ return False
+
+ self._process_lock_file_name = (self._lock_file_path_prefix +
+ str(self._next_lock_number()))
+ _log.debug("Creating lock file: %s" % self._process_lock_file_name)
+ lock_file = open(self._process_lock_file_name, 'w')
+ lock_file.write(str(os.getpid()))
+ lock_file.close()
+ self._guard_lock.release_lock()
+ return True
+
def wait_for_httpd_lock(self):
"""Create a lock file and wait until it's turn comes. If something goes wrong
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/test.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/test.py
index ff4086c..0a27821 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/port/test.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/test.py
@@ -36,6 +36,8 @@ import os
import sys
import time
+from webkitpy.layout_tests.layout_package import test_output
+
import base
@@ -289,6 +291,7 @@ class TestDriver(base.Driver):
return True
def run_test(self, uri, timeoutms, image_hash):
+ start_time = time.time()
test_name = self._port.uri_to_test_name(uri)
test = self._port._tests[test_name]
if test.keyboard:
@@ -297,13 +300,10 @@ class TestDriver(base.Driver):
raise ValueError('exception from ' + test_name)
if test.hang:
time.sleep((float(timeoutms) * 4) / 1000.0)
-
- if self._port.get_option('pixel_tests') and test.actual_image:
- with open(self._image_path, 'w') as file:
- file.write(test.actual_image)
-
- return (test.crash, test.timeout, test.actual_checksum,
- test.actual_text, test.error)
+ return test_output.TestOutput(test.actual_text, test.actual_image,
+ test.actual_checksum, test.crash,
+ time.time() - start_time, test.timeout,
+ test.error)
def start(self):
pass
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/port/webkit.py b/WebKitTools/Scripts/webkitpy/layout_tests/port/webkit.py
index 0b324f5..06797c6 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/port/webkit.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/webkit.py
@@ -49,6 +49,7 @@ import shutil
from webkitpy.common.system.executive import Executive
import webkitpy.common.system.ospath as ospath
+import webkitpy.layout_tests.layout_package.test_output as test_output
import webkitpy.layout_tests.port.base as base
import webkitpy.layout_tests.port.server_process as server_process
@@ -81,14 +82,8 @@ class WebKitPort(base.Port):
return ''
def _build_driver(self):
- exit_code = self._executive.run_command([
- self.script_path("build-dumprendertree"),
- self.flag_from_configuration(self.get_option('configuration')),
- ], return_exit_code=True)
- if exit_code != 0:
- _log.error("Failed to build DumpRenderTree")
- return False
- return True
+ configuration = self.get_option('configuration')
+ return self._config.build_dumprendertree(configuration)
def _check_driver(self):
driver_path = self._path_to_driver()
@@ -357,8 +352,8 @@ class WebKitPort(base.Port):
'mac-tiger', 'mac-leopard', 'mac-snowleopard')
def _build_path(self, *comps):
- build_root = self._webkit_configuration_build_directory()
- return os.path.join(build_root, *comps)
+ return self._filesystem.join(self._config.build_directory(
+ self.get_option('configuration')), *comps)
def _path_to_driver(self):
return self._build_path('DumpRenderTree')
@@ -448,6 +443,7 @@ class WebKitDriver(base.Driver):
command += "'" + image_hash
command += "\n"
+ start_time = time.time()
self._server_process.write(command)
have_seen_content_type = False
@@ -492,10 +488,6 @@ class WebKitDriver(base.Driver):
timeout = deadline - time.time()
line = self._server_process.read_line(timeout)
- if self._image_path and len(self._image_path):
- with open(self._image_path, "wb") as image_file:
- image_file.write(image)
-
error_lines = self._server_process.error.splitlines()
# FIXME: This is a hack. It is unclear why sometimes
# we do not get any error lines from the server_process
@@ -506,11 +498,11 @@ class WebKitDriver(base.Driver):
# FIXME: This seems like the wrong section of code to be doing
# this reset in.
self._server_process.error = ""
- return (self._server_process.crashed,
- self._server_process.timed_out,
- actual_image_hash,
- output,
- error)
+ return test_output.TestOutput(output, image, actual_image_hash,
+ self._server_process.crashed,
+ time.time() - start_time,
+ self._server_process.timed_out,
+ error)
def stop(self):
if self._server_process:
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py b/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
index f360adc..119de8c 100755
--- a/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py
@@ -90,31 +90,18 @@ LAYOUT_TESTS_DIRECTORY = "LayoutTests" + os.sep
TestExpectationsFile = test_expectations.TestExpectationsFile
-class TestInfo:
+class TestInput:
"""Groups information about a test for easy passing of data."""
- def __init__(self, port, filename, timeout):
- """Generates the URI and stores the filename and timeout for this test.
+ def __init__(self, filename, timeout):
+ """Holds the input parameters for a test.
Args:
filename: Full path to the test.
- timeout: Timeout for running the test in TestShell.
+ timeout: Timeout in msecs the driver should use while running the test
"""
+ # FIXME: filename should really be test_name as a relative path.
self.filename = filename
- self._port = port
- self.uri = port.filename_to_uri(filename)
self.timeout = timeout
- self._image_checksum = -1
-
- def image_hash(self):
- # Read the image_hash lazily to reduce startup time.
- # This class is accessed across threads, but only one thread should
- # ever be dealing with any given TestInfo so no locking is needed.
- #
- # Note that we use -1 to indicate that we haven't read the value,
- # because expected_checksum() returns a string or None.
- if self._image_checksum == -1:
- self._image_checksum = self._port.expected_checksum(self.filename)
- return self._image_checksum
class ResultSummary(object):
@@ -497,14 +484,13 @@ class TestRunner:
return return_value
- def _get_test_info_for_file(self, test_file):
- """Returns the appropriate TestInfo object for the file. Mostly this
+ def _get_test_input_for_file(self, test_file):
+ """Returns the appropriate TestInput object for the file. Mostly this
is used for looking up the timeout value (in ms) to use for the given
test."""
if self._expectations.has_modifier(test_file, test_expectations.SLOW):
- return TestInfo(self._port, test_file,
- self._options.slow_time_out_ms)
- return TestInfo(self._port, test_file, self._options.time_out_ms)
+ return TestInput(test_file, self._options.slow_time_out_ms)
+ return TestInput(test_file, self._options.time_out_ms)
def _test_requires_lock(self, test_file):
"""Return True if the test needs to be locked when
@@ -522,7 +508,7 @@ class TestRunner:
cross-tests dependencies tend to occur within the same directory.
Return:
- The Queue of lists of TestInfo objects.
+ The Queue of lists of TestInput objects.
"""
test_lists = []
@@ -530,21 +516,21 @@ class TestRunner:
if (self._options.experimental_fully_parallel or
self._is_single_threaded()):
for test_file in test_files:
- test_info = self._get_test_info_for_file(test_file)
+ test_input = self._get_test_input_for_file(test_file)
if self._test_requires_lock(test_file):
- tests_to_http_lock.append(test_info)
+ tests_to_http_lock.append(test_input)
else:
- test_lists.append((".", [test_info]))
+ test_lists.append((".", [test_input]))
else:
tests_by_dir = {}
for test_file in test_files:
directory = self._get_dir_for_test_file(test_file)
- test_info = self._get_test_info_for_file(test_file)
+ test_input = self._get_test_input_for_file(test_file)
if self._test_requires_lock(test_file):
- tests_to_http_lock.append(test_info)
+ tests_to_http_lock.append(test_input)
else:
tests_by_dir.setdefault(directory, [])
- tests_by_dir[directory].append(test_info)
+ tests_by_dir[directory].append(test_input)
# Sort by the number of tests in the dir so that the ones with the
# most tests get run first in order to maximize parallelization.
# Number of tests is a good enough, but not perfect, approximation
@@ -808,12 +794,10 @@ class TestRunner:
self._printer.print_unexpected_results(unexpected_results)
if self._options.record_results:
- # Write the same data to log files.
- self._write_json_files(unexpected_results, result_summary,
- individual_test_timings)
-
- # Upload generated JSON files to appengine server.
- self._upload_json_files()
+ # Write the same data to log files and upload generated JSON files
+ # to appengine server.
+ self._upload_json_files(unexpected_results, result_summary,
+ individual_test_timings)
# Write the summary to disk (results.html) and display it if requested.
wrote_results = self._write_results_html_file(result_summary)
@@ -892,10 +876,10 @@ class TestRunner:
return failed_results
- def _write_json_files(self, unexpected_results, result_summary,
+ def _upload_json_files(self, unexpected_results, result_summary,
individual_test_timings):
"""Writes the results of the test run as JSON files into the results
- dir.
+ dir and upload the files to the appengine server.
There are three different files written into the results dir:
unexpected_results.json: A short list of any unexpected results.
@@ -924,50 +908,25 @@ class TestRunner:
with codecs.open(expectations_path, "w", "utf-8") as file:
file.write(u"ADD_EXPECTATIONS(%s);" % expectations_json)
- json_layout_results_generator.JSONLayoutResultsGenerator(
+ generator = json_layout_results_generator.JSONLayoutResultsGenerator(
self._port, self._options.builder_name, self._options.build_name,
self._options.build_number, self._options.results_directory,
BUILDER_BASE_URL, individual_test_timings,
self._expectations, result_summary, self._test_files_list,
not self._options.upload_full_results,
- self._options.test_results_server)
+ self._options.test_results_server,
+ "layout-tests",
+ self._options.master_name)
_log.debug("Finished writing JSON files.")
- def _upload_json_files(self):
- if not self._options.test_results_server:
- return
-
- if not self._options.master_name:
- _log.error("--test-results-server was set, but --master-name was not. Not uploading JSON files.")
- return
-
- _log.info("Uploading JSON files for builder: %s",
- self._options.builder_name)
-
- attrs = [("builder", self._options.builder_name), ("testtype", "layout-tests"),
- ("master", self._options.master_name)]
-
json_files = ["expectations.json"]
if self._options.upload_full_results:
json_files.append("results.json")
else:
json_files.append("incremental_results.json")
- files = [(file, os.path.join(self._options.results_directory, file))
- for file in json_files]
-
- uploader = test_results_uploader.TestResultsUploader(
- self._options.test_results_server)
- try:
- # Set uploading timeout in case appengine server is having problem.
- # 120 seconds are more than enough to upload test results.
- uploader.upload(attrs, files, 120)
- except Exception, err:
- _log.error("Upload failed: %s" % err)
- return
-
- _log.info("JSON files uploaded.")
+ generator.upload_json_files(json_files)
def _print_config(self):
"""Prints the configuration for the test run."""
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py b/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py
index f21e7a5..54e1dc0 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py
@@ -380,31 +380,33 @@ class RebaselineTest(unittest.TestCase):
baseline = file + "-expected" + ext
self.assertTrue(any(f.find(baseline) != -1 for f in file_list))
- # FIXME: This test is failing on the bots. Also, this test touches the
- # file system. Unit tests should not read or write the file system.
- # https://bugs.webkit.org/show_bug.cgi?id=47879
+ # FIXME: Add tests to ensure that we're *not* writing baselines when we're not
+ # supposed to be.
+
def disabled_test_reset_results(self):
+ # FIXME: This test is disabled until we can rewrite it to use a
+ # mock filesystem.
+ #
+ # Test that we update expectations in place. If the expectation
+ # is missing, update the expected generic location.
file_list = []
- original_open = codecs.open
- try:
- # Test that we update expectations in place. If the expectation
- # is missing, update the expected generic location.
- file_list = []
- codecs.open = _mocked_open(original_open, file_list)
- passing_run(['--pixel-tests',
- '--reset-results',
- 'passes/image.html',
- 'failures/expected/missing_image.html'],
- tests_included=True)
- self.assertEqual(len(file_list), 6)
- self.assertBaselines(file_list,
- "data/passes/image")
- self.assertBaselines(file_list,
- "data/failures/expected/missing_image")
- finally:
- codecs.open = original_open
-
- def test_new_baseline(self):
+ passing_run(['--pixel-tests',
+ '--reset-results',
+ 'passes/image.html',
+ 'failures/expected/missing_image.html'],
+ tests_included=True)
+ self.assertEqual(len(file_list), 6)
+ self.assertBaselines(file_list,
+ "data/passes/image")
+ self.assertBaselines(file_list,
+ "data/failures/expected/missing_image")
+
+ def disabled_test_new_baseline(self):
+ # FIXME: This test is disabled until we can rewrite it to use a
+ # mock filesystem.
+ #
+ # Test that we update the platform expectations. If the expectation
+ # is mssing, then create a new expectation in the platform dir.
file_list = []
original_open = codecs.open
try:
@@ -427,7 +429,7 @@ class RebaselineTest(unittest.TestCase):
class TestRunnerWrapper(run_webkit_tests.TestRunner):
- def _get_test_info_for_file(self, test_file):
+ def _get_test_input_for_file(self, test_file):
return test_file
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 0b05802..41fe9bd 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/test_types/image_diff.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/test_types/image_diff.py
@@ -54,116 +54,93 @@ _log = logging.getLogger("webkitpy.layout_tests.test_types.image_diff")
class ImageDiff(test_type_base.TestTypeBase):
- def _copy_output_png(self, test_filename, source_image, extension):
- """Copies result files into the output directory with appropriate
- names.
-
- Args:
- test_filename: the test filename
- source_file: path to the image file (either actual or expected)
- extension: extension to indicate -actual.png or -expected.png
- """
- self._make_output_directory(test_filename)
- dest_image = self.output_filename(test_filename, extension)
-
- if os.path.exists(source_image):
- shutil.copyfile(source_image, dest_image)
-
- def _save_baseline_files(self, filename, png_path, checksum,
+ def _save_baseline_files(self, filename, image, image_hash,
generate_new_baseline):
"""Saves new baselines for the PNG and checksum.
Args:
filename: test filename
- png_path: path to the actual PNG result file
- checksum: value of the actual checksum result
+ image: a image output
+ image_hash: a checksum of the image
generate_new_baseline: whether to generate a new, platform-specific
baseline, or update the existing one
"""
- with open(png_path, "rb") as png_file:
- png_data = png_file.read()
- self._save_baseline_data(filename, png_data, ".png", encoding=None,
+ self._save_baseline_data(filename, image, ".png", encoding=None,
generate_new_baseline=generate_new_baseline)
- self._save_baseline_data(filename, checksum, ".checksum",
+ self._save_baseline_data(filename, image_hash, ".checksum",
encoding="ascii",
generate_new_baseline=generate_new_baseline)
- def _create_image_diff(self, port, filename, configuration):
+ def _copy_image(self, filename, actual_image, expected_image):
+ self.write_output_files(filename, '.png',
+ output=actual_image, expected=expected_image,
+ encoding=None, print_text_diffs=False)
+
+ def _copy_image_hash(self, filename, actual_image_hash, expected_image_hash):
+ self.write_output_files(filename, '.checksum',
+ actual_image_hash, expected_image_hash,
+ encoding="ascii", print_text_diffs=False)
+
+ def _create_diff_image(self, port, filename, actual_image, expected_image):
"""Creates the visual diff of the expected/actual PNGs.
- Args:
- filename: the name of the test
- configuration: Debug or Release
- Returns True if the files are different, False if they match
+ Returns True if the images are different.
"""
diff_filename = self.output_filename(filename,
- self.FILENAME_SUFFIX_COMPARE)
- actual_filename = self.output_filename(filename,
- self.FILENAME_SUFFIX_ACTUAL + '.png')
- expected_filename = self.output_filename(filename,
- self.FILENAME_SUFFIX_EXPECTED + '.png')
+ self.FILENAME_SUFFIX_COMPARE)
+ return port.diff_image(actual_image, expected_image, diff_filename)
- expected_image = port.expected_image(filename)
- with codecs.open(actual_filename, 'r+b', None) as file:
- actual_image = file.read()
-
- result = port.diff_image(expected_image, actual_image,
- diff_filename)
- return result
-
- def compare_output(self, port, filename, output, test_args, configuration):
+ def compare_output(self, port, filename, test_args, actual_test_output,
+ expected_test_output):
"""Implementation of CompareOutput that checks the output image and
checksum against the expected files from the LayoutTest directory.
"""
failures = []
# If we didn't produce a hash file, this test must be text-only.
- if test_args.hash is None:
+ if actual_test_output.image_hash is None:
return failures
# If we're generating a new baseline, we pass.
if test_args.new_baseline or test_args.reset_results:
- self._save_baseline_files(filename, test_args.png_path,
- test_args.hash, test_args.new_baseline)
+ self._save_baseline_files(filename, actual_test_output.image_hash,
+ actual_test_output.image,
+ test_args.new_baseline)
return failures
- # Compare hashes.
- expected_hash = self._port.expected_checksum(filename)
- expected_png = self._port.expected_image(filename)
-
- if not expected_png:
+ if not expected_test_output.image:
# Report a missing expected PNG file.
- self.write_output_files(filename, '.checksum',
- test_args.hash, expected_hash,
- encoding="ascii",
- print_text_diffs=False)
- self._copy_output_png(filename, test_args.png_path, '-actual.png')
+ self._copy_image(filename, actual_test_output.image, expected_image=None)
+ self._copy_image_hash(filename, actual_test_output.image_hash,
+ expected_test_output.image_hash)
failures.append(test_failures.FailureMissingImage())
return failures
- elif test_args.hash == expected_hash:
+ if not expected_test_output.image_hash:
+ # Report a missing expected checksum file.
+ self._copy_image(filename, actual_test_output.image,
+ expected_test_output.image)
+ self._copy_image_hash(filename, actual_test_output.image_hash,
+ expected_image_hash=None)
+ failures.append(test_failures.FailureMissingImageHash())
+ return failures
+
+ if actual_test_output.image_hash == expected_test_output.image_hash:
# Hash matched (no diff needed, okay to return).
return failures
- self.write_output_files(filename, '.checksum',
- test_args.hash, expected_hash,
- encoding="ascii",
- print_text_diffs=False)
-
- # FIXME: combine next two lines
- self._copy_output_png(filename, test_args.png_path, '-actual.png')
- self.write_output_files(filename, '.png', output=None,
- expected=expected_png,
- encoding=None, print_text_diffs=False)
+ self._copy_image(filename, actual_test_output.image,
+ expected_test_output.image)
+ self._copy_image_hash(filename, actual_test_output.image_hash,
+ expected_test_output.image_hash)
# Even though we only use the result in one codepath below but we
# still need to call CreateImageDiff for other codepaths.
- images_are_different = self._create_image_diff(port, filename, configuration)
- if not expected_hash:
- failures.append(test_failures.FailureMissingImageHash())
- elif test_args.hash != expected_hash:
- if images_are_different:
- failures.append(test_failures.FailureImageHashMismatch())
- else:
- failures.append(test_failures.FailureImageHashIncorrect())
+ images_are_different = self._create_diff_image(port, filename,
+ actual_test_output.image,
+ expected_test_output.image)
+ if not images_are_different:
+ failures.append(test_failures.FailureImageHashIncorrect())
+ else:
+ failures.append(test_failures.FailureImageHashMismatch())
return failures
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/test_types/test_type_base.py b/WebKitTools/Scripts/webkitpy/layout_tests/test_types/test_type_base.py
index dcc64a3..4b96b3a 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/test_types/test_type_base.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/test_types/test_type_base.py
@@ -140,18 +140,22 @@ class TestTypeBase(object):
self._port.relative_test_filename(filename))
return os.path.splitext(output_filename)[0] + modifier
- def compare_output(self, port, filename, output, test_args, configuration):
+ def compare_output(self, port, filename, test_args, actual_test_output,
+ expected_test_output):
"""Method that compares the output from the test with the
expected value.
This is an abstract method to be implemented by all sub classes.
Args:
+ port: object implementing port-specific information and methods
filename: absolute filename to test file
- output: a string containing the output of the test
test_args: a TestArguments object holding optional additional
arguments
- configuration: Debug or Release
+ actual_test_output: a TestOutput object which represents actual test
+ output
+ expected_test_output: a TestOutput object which represents a expected
+ test output
Return:
a list of TestFailure objects, empty if the test passes
diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/test_types/text_diff.py b/WebKitTools/Scripts/webkitpy/layout_tests/test_types/text_diff.py
index 4c32f0d..66e42ba 100644
--- a/WebKitTools/Scripts/webkitpy/layout_tests/test_types/text_diff.py
+++ b/WebKitTools/Scripts/webkitpy/layout_tests/test_types/text_diff.py
@@ -55,13 +55,8 @@ class TestTextDiff(test_type_base.TestTypeBase):
"\r\n", "\n")
return norm + "\n"
- def _get_normalized_expected_text(self, filename):
- """Given the filename of the test, read the expected output from a file
- and normalize the text. Returns a string with the expected text, or ''
- if the expected output file was not found."""
- return self._port.expected_text(filename)
-
- def compare_output(self, port, filename, output, test_args, configuration):
+ def compare_output(self, port, filename, test_args, actual_test_output,
+ expected_test_output):
"""Implementation of CompareOutput that checks the output text against
the expected text from the LayoutTest directory."""
failures = []
@@ -76,17 +71,18 @@ class TestTextDiff(test_type_base.TestTypeBase):
return failures
# Normalize text to diff
- output = self._get_normalized_output_text(output)
- expected = self._get_normalized_expected_text(filename)
+ actual_text = self._get_normalized_output_text(actual_test_output.text)
+ # Assuming expected_text is already normalized.
+ expected_text = expected_test_output.text
# Write output files for new tests, too.
- if port.compare_text(output, expected):
+ if port.compare_text(actual_text, expected_text):
# Text doesn't match, write output files.
- self.write_output_files(filename, ".txt", output,
- expected, encoding=None,
+ self.write_output_files(filename, ".txt", actual_text,
+ expected_text, encoding=None,
print_text_diffs=True)
- if expected == '':
+ if expected_text == '':
failures.append(test_failures.FailureMissingResult())
else:
failures.append(test_failures.FailureTextMismatch())
diff --git a/WebKitTools/Scripts/webkitpy/style/checker.py b/WebKitTools/Scripts/webkitpy/style/checker.py
index fb93eb9..e10eec5 100644
--- a/WebKitTools/Scripts/webkitpy/style/checker.py
+++ b/WebKitTools/Scripts/webkitpy/style/checker.py
@@ -131,11 +131,13 @@ _PATH_RULES_SPECIFIER = [
"WebKit/efl/ewk/",
# There is no clean way to avoid "yy_*" names used by flex.
"WebCore/css/CSSParser.cpp",
- # There is no clean way to avoid "xxx_data" methods inside
- # Qt's autotests since they are called automatically by the
- # QtTest module.
+ # Qt code uses '_' in some places (such as private slots
+ # and on test xxx_data methos on tests)
+ "JavaScriptCore/qt/api/",
+ "WebKit/qt/Api/",
"WebKit/qt/tests/",
- "JavaScriptCore/qt/tests"],
+ "WebKit/qt/declarative/",
+ "WebKit/qt/examples/"],
["-readability/naming"]),
([# The GTK+ APIs use GTK+ naming style, which includes
# lower-cased, underscore-separated values.
@@ -232,15 +234,9 @@ _TEXT_FILE_EXTENSIONS = [
# WebKit maintains some files in Mozilla style on purpose to ease
# future merges.
_SKIPPED_FILES_WITH_WARNING = [
- # The Qt API and tests do not follow WebKit style.
- # They follow Qt style. :)
"gtk2drawing.c", # WebCore/platform/gtk/gtk2drawing.c
"gtkdrawing.h", # WebCore/platform/gtk/gtkdrawing.h
- "JavaScriptCore/qt/api/",
"WebKit/gtk/tests/",
- "WebKit/qt/Api/",
- "WebKit/qt/tests/",
- "WebKit/qt/examples/",
# Soup API that is still being cooked, will be removed from WebKit
# in a few months when it is merged into soup proper. The style
# follows the libsoup style completely.
diff --git a/WebKitTools/Scripts/webkitpy/style/checker_unittest.py b/WebKitTools/Scripts/webkitpy/style/checker_unittest.py
index 43d24fe..94d2c29 100755
--- a/WebKitTools/Scripts/webkitpy/style/checker_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/style/checker_unittest.py
@@ -223,11 +223,29 @@ class GlobalVariablesTest(unittest.TestCase):
"readability/naming")
assertNoCheck("WebCore/css/CSSParser.cpp",
"readability/naming")
+
+ # Test if Qt exceptions are indeed working
+ assertCheck("JavaScriptCore/qt/api/qscriptengine.cpp",
+ "readability/braces")
+ assertCheck("WebKit/qt/Api/qwebpage.cpp",
+ "readability/braces")
+ assertCheck("WebKit/qt/tests/qwebelement/tst_qwebelement.cpp",
+ "readability/braces")
+ assertCheck("WebKit/qt/declarative/platformplugin/WebPlugin.cpp",
+ "readability/braces")
+ assertCheck("WebKit/qt/examples/platformplugin/WebPlugin.cpp",
+ "readability/braces")
+ assertNoCheck("JavaScriptCore/qt/api/qscriptengine.cpp",
+ "readability/naming")
+ assertNoCheck("WebKit/qt/Api/qwebpage.cpp",
+ "readability/naming")
assertNoCheck("WebKit/qt/tests/qwebelement/tst_qwebelement.cpp",
"readability/naming")
- assertNoCheck(
- "JavaScriptCore/qt/tests/qscriptengine/tst_qscriptengine.cpp",
- "readability/naming")
+ assertNoCheck("WebKit/qt/declarative/platformplugin/WebPlugin.cpp",
+ "readability/naming")
+ assertNoCheck("WebKit/qt/examples/platformplugin/WebPlugin.cpp",
+ "readability/naming")
+
assertNoCheck("WebCore/ForwardingHeaders/debugger/Debugger.h",
"build/header_guard")
@@ -277,12 +295,9 @@ class CheckerDispatcherSkipTest(unittest.TestCase):
paths_to_skip = [
"gtk2drawing.c",
"gtkdrawing.h",
- "JavaScriptCore/qt/api/qscriptengine_p.h",
"WebCore/platform/gtk/gtk2drawing.c",
"WebCore/platform/gtk/gtkdrawing.h",
"WebKit/gtk/tests/testatk.c",
- "WebKit/qt/Api/qwebpage.h",
- "WebKit/qt/tests/qwebsecurityorigin/tst_qwebsecurityorigin.cpp",
]
for path in paths_to_skip:
diff --git a/WebKitTools/Scripts/webkitpy/style/checkers/cpp.py b/WebKitTools/Scripts/webkitpy/style/checkers/cpp.py
index cd9e6ae..590bba9 100644
--- a/WebKitTools/Scripts/webkitpy/style/checkers/cpp.py
+++ b/WebKitTools/Scripts/webkitpy/style/checkers/cpp.py
@@ -152,6 +152,38 @@ def subn(pattern, replacement, s):
return _regexp_compile_cache[pattern].subn(replacement, s)
+def iteratively_replace_matches_with_char(pattern, char_replacement, s):
+ """Returns the string with replacement done.
+
+ Every character in the match is replaced with char.
+ Due to the iterative nature, pattern should not match char or
+ there will be an infinite loop.
+
+ Example:
+ pattern = r'<[^>]>' # template parameters
+ char_replacement = '_'
+ s = 'A<B<C, D>>'
+ Returns 'A_________'
+
+ Args:
+ pattern: The regex to match.
+ char_replacement: The character to put in place of every
+ character of the match.
+ s: The string on which to do the replacements.
+
+ Returns:
+ True, if the given line is blank.
+ """
+ while True:
+ matched = search(pattern, s)
+ if not matched:
+ return s
+ start_match_index = matched.start(0)
+ end_match_index = matched.end(0)
+ match_length = end_match_index - start_match_index
+ s = s[:start_match_index] + char_replacement * match_length + s[end_match_index:]
+
+
def up_to_unmatched_closing_paren(s):
"""Splits a string into two parts up to first unmatched ')'.
@@ -284,20 +316,27 @@ class _FunctionState(object):
self.current_function = ''
self.in_a_function = False
self.lines_in_function = 0
+ # Make sure these will not be mistaken for real lines (even when a
+ # small amount is added to them).
+ self.body_start_line_number = -1000
+ self.ending_line_number = -1000
- def begin(self, function_name):
+ def begin(self, function_name, body_start_line_number, ending_line_number):
"""Start analyzing function body.
Args:
function_name: The name of the function being tracked.
+ ending_line_number: The line number where the function ends.
"""
self.in_a_function = True
self.lines_in_function = 0
self.current_function = function_name
+ self.body_start_line_number = body_start_line_number
+ self.ending_line_number = ending_line_number
- def count(self):
+ def count(self, line_number):
"""Count line in current function body."""
- if self.in_a_function:
+ if self.in_a_function and line_number >= self.body_start_line_number:
self.lines_in_function += 1
def check(self, error, line_number):
@@ -325,7 +364,7 @@ class _FunctionState(object):
self.current_function, self.lines_in_function, trigger))
def end(self):
- """Stop analizing function body."""
+ """Stop analyzing function body."""
self.in_a_function = False
@@ -577,8 +616,8 @@ class CleansedLines(object):
def close_expression(clean_lines, line_number, pos):
"""If input points to ( or { or [, finds the position that closes it.
- If lines[line_number][pos] points to a '(' or '{' or '[', finds the the
- line_number/pos that correspond to the closing of the expression.
+ If clean_lines.elided[line_number][pos] points to a '(' or '{' or '[', finds
+ the line_number/pos that correspond to the closing of the expression.
Args:
clean_lines: A CleansedLines instance containing the file.
@@ -587,8 +626,8 @@ def close_expression(clean_lines, line_number, pos):
Returns:
A tuple (line, line_number, pos) pointer *past* the closing brace, or
- (line, len(lines), -1) if we never find a close. Note we ignore
- strings and comments when matching; and the line we return is the
+ ('', len(clean_lines.elided), -1) if we never find a close. Note we
+ ignore strings and comments when matching; and the line we return is the
'cleansed' line at line_number.
"""
@@ -604,8 +643,10 @@ def close_expression(clean_lines, line_number, pos):
end_character = '}'
num_open = line.count(start_character) - line.count(end_character)
- while line_number < clean_lines.num_lines() and num_open > 0:
+ while num_open > 0:
line_number += 1
+ if line_number >= clean_lines.num_lines():
+ return ('', len(clean_lines.elided), -1)
line = clean_lines.elided[line_number]
num_open += line.count(start_character) - line.count(end_character)
# OK, now find the end_character that actually got us back to even
@@ -1109,17 +1150,85 @@ def is_blank_line(line):
return not line or line.isspace()
+def detect_functions(clean_lines, line_number, function_state, error):
+ """Finds where functions start and end.
+
+ Uses a simplistic algorithm assuming other style guidelines
+ (especially spacing) are followed.
+ Trivial bodies are unchecked, so constructors with huge initializer lists
+ may be missed.
+
+ Args:
+ clean_lines: A CleansedLines instance containing the file.
+ line_number: The number of the line to check.
+ function_state: Current function name and lines in body so far.
+ error: The function to call with any errors found.
+ """
+ # Are we now past the end of a function?
+ if function_state.ending_line_number + 1 == line_number:
+ function_state.end()
+
+ # If we're in a function, don't try to detect a new one.
+ if function_state.in_a_function:
+ return
+
+ lines = clean_lines.lines
+ line = lines[line_number]
+ raw = clean_lines.raw_lines
+ raw_line = raw[line_number]
+
+ regexp = r'\s*(\w(\w|::|\*|\&|\s|<|>|,|~)*)\(' # decls * & space::name( ...
+ match_result = match(regexp, line)
+ if not match_result:
+ return
+
+ # If the name is all caps and underscores, figure it's a macro and
+ # ignore it, unless it's TEST or TEST_F.
+ function_name = match_result.group(1).split()[-1]
+ if function_name != 'TEST' and function_name != 'TEST_F' and match(r'[A-Z_]+$', function_name):
+ return
+
+ joined_line = ''
+ for start_line_number in xrange(line_number, clean_lines.num_lines()):
+ start_line = lines[start_line_number]
+ joined_line += ' ' + start_line.lstrip()
+ if search(r'(;|})', start_line): # Declarations and trivial functions
+ return # ... ignore
+
+ if search(r'{', start_line):
+ # Replace template constructs with _ so that no spaces remain in the function name,
+ # while keeping the column numbers of other characters the same as "line".
+ line_with_no_templates = iteratively_replace_matches_with_char(r'<[^<>]*>', '_', line)
+ match_function = search(r'((\w|:|<|>|,|~)*)\(', line_with_no_templates)
+ if not match_function:
+ return # The '(' must have been inside of a template.
+
+ # Use the column numbers from the modified line to find the
+ # function name in the original line.
+ function = line[match_function.start(1):match_function.end(1)]
+
+ if match(r'TEST', function): # Handle TEST... macros
+ parameter_regexp = search(r'(\(.*\))', joined_line)
+ if parameter_regexp: # Ignore bad syntax
+ function += parameter_regexp.group(1)
+ else:
+ function += '()'
+ open_brace_index = start_line.find('{')
+ ending_line_number = close_expression(clean_lines, start_line_number, open_brace_index)[1]
+ function_state.begin(function, start_line_number + 1, ending_line_number)
+ return
+
+ # No body for the function (or evidence of a non-function) was found.
+ error(line_number, 'readability/fn_size', 5,
+ 'Lint failed to find start of function body.')
+
+
def check_for_function_lengths(clean_lines, line_number, function_state, error):
"""Reports for long function bodies.
For an overview why this is done, see:
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Write_Short_Functions
- Uses a simplistic algorithm assuming other style guidelines
- (especially spacing) are followed.
- Only checks unindented functions, so class members are unchecked.
- Trivial bodies are unchecked, so constructors with huge initializer lists
- may be missed.
Blank/comment lines are not counted so as to avoid encouraging the removal
of vertical space and commments just to get through a lint check.
NOLINT *on the last line of a function* disables this check.
@@ -1134,47 +1243,38 @@ def check_for_function_lengths(clean_lines, line_number, function_state, error):
line = lines[line_number]
raw = clean_lines.raw_lines
raw_line = raw[line_number]
- joined_line = ''
- starting_func = False
- regexp = r'(\w(\w|::|\*|\&|\s)*)\(' # decls * & space::name( ...
- match_result = match(regexp, line)
- if match_result:
- # If the name is all caps and underscores, figure it's a macro and
- # ignore it, unless it's TEST or TEST_F.
- function_name = match_result.group(1).split()[-1]
- if function_name == 'TEST' or function_name == 'TEST_F' or (not match(r'[A-Z_]+$', function_name)):
- starting_func = True
-
- if starting_func:
- body_found = False
- for start_line_number in xrange(line_number, clean_lines.num_lines()):
- start_line = lines[start_line_number]
- joined_line += ' ' + start_line.lstrip()
- if search(r'(;|})', start_line): # Declarations and trivial functions
- body_found = True
- break # ... ignore
- if search(r'{', start_line):
- body_found = True
- function = search(r'((\w|:)*)\(', line).group(1)
- if match(r'TEST', function): # Handle TEST... macros
- parameter_regexp = search(r'(\(.*\))', joined_line)
- if parameter_regexp: # Ignore bad syntax
- function += parameter_regexp.group(1)
- else:
- function += '()'
- function_state.begin(function)
- break
- if not body_found:
- # No body for the function (or evidence of a non-function) was found.
- error(line_number, 'readability/fn_size', 5,
- 'Lint failed to find start of function body.')
- elif match(r'^\}\s*$', line): # function end
+ if function_state.ending_line_number == line_number: # last line
if not search(r'\bNOLINT\b', raw_line):
function_state.check(error, line_number)
- function_state.end()
elif not match(r'^\s*$', line):
- function_state.count() # Count non-blank/non-comment lines.
+ function_state.count(line_number) # Count non-blank/non-comment lines.
+
+
+def check_pass_ptr_usage(clean_lines, line_number, function_state, error):
+ """Check for proper usage of Pass*Ptr.
+
+ Currently this is limited to detecting declarations of Pass*Ptr
+ variables inside of functions.
+
+ Args:
+ clean_lines: A CleansedLines instance containing the file.
+ line_number: The number of the line to check.
+ function_state: Current function name and lines in body so far.
+ error: The function to call with any errors found.
+ """
+ if not function_state.in_a_function:
+ return
+
+ lines = clean_lines.lines
+ line = lines[line_number]
+ if line_number >= function_state.body_start_line_number:
+ matched_pass_ptr = match(r'^\s*Pass([A-Z][A-Za-z]*)Ptr<', line)
+ if matched_pass_ptr:
+ type_name = 'Pass%sPtr' % matched_pass_ptr.group(1)
+ error(line_number, 'readability/pass_ptr', 5,
+ 'Local variables should never be %s (see '
+ 'http://webkit.org/coding/RefPtr.html).' % type_name)
def check_spacing(file_extension, clean_lines, line_number, error):
@@ -2855,9 +2955,11 @@ def process_line(filename, file_extension,
"""
raw_lines = clean_lines.raw_lines
+ detect_functions(clean_lines, line, function_state, error)
check_for_function_lengths(clean_lines, line, function_state, error)
if search(r'\bNOLINT\b', raw_lines[line]): # ignore nolint lines
return
+ check_pass_ptr_usage(clean_lines, line, function_state, error)
check_for_multiline_comments_and_strings(clean_lines, line, error)
check_style(clean_lines, line, file_extension, class_state, file_state, error)
check_language(filename, clean_lines, line, file_extension, include_state,
@@ -2942,6 +3044,7 @@ class CppChecker(object):
'readability/multiline_string',
'readability/naming',
'readability/null',
+ 'readability/pass_ptr',
'readability/streams',
'readability/todo',
'readability/utf8',
diff --git a/WebKitTools/Scripts/webkitpy/style/checkers/cpp_unittest.py b/WebKitTools/Scripts/webkitpy/style/checkers/cpp_unittest.py
index 6d5c24b..13b053c 100644
--- a/WebKitTools/Scripts/webkitpy/style/checkers/cpp_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/style/checkers/cpp_unittest.py
@@ -205,10 +205,27 @@ class CppStyleTestBase(unittest.TestCase):
cpp_style.remove_multi_line_comments(lines, error_collector)
lines = cpp_style.CleansedLines(lines)
for i in xrange(lines.num_lines()):
+ cpp_style.detect_functions(lines, i,
+ function_state, error_collector)
cpp_style.check_for_function_lengths(lines, i,
function_state, error_collector)
return error_collector.results()
+ # Similar to perform_function_lengths_check, but calls check_pass_ptr_usage
+ # instead of check_for_function_lengths.
+ def perform_pass_ptr_check(self, code):
+ error_collector = ErrorCollector(self.assert_)
+ function_state = cpp_style._FunctionState(self.min_confidence)
+ lines = code.split('\n')
+ cpp_style.remove_multi_line_comments(lines, error_collector)
+ lines = cpp_style.CleansedLines(lines)
+ for i in xrange(lines.num_lines()):
+ cpp_style.detect_functions(lines, i,
+ function_state, error_collector)
+ cpp_style.check_pass_ptr_usage(lines, i,
+ function_state, error_collector)
+ return error_collector.results()
+
def perform_include_what_you_use(self, code, filename='foo.h', io=codecs):
# First, build up the include state.
error_collector = ErrorCollector(self.assert_)
@@ -2432,6 +2449,20 @@ class CheckForFunctionLengthsTest(CppStyleTestBase):
def test_function_length_check_definition_above_severity1(self):
self.assert_function_length_check_above_error_level(1)
+ def test_function_length_check_definition_severity1_plus_indented(self):
+ error_level = 1
+ error_lines = self.trigger_lines(error_level) + 1
+ trigger_level = self.trigger_lines(self.min_confidence)
+ indent_spaces = ' '
+ self.assert_function_lengths_check(
+ re.sub(r'(?m)^(.)', indent_spaces + r'\1',
+ 'void test_indent(int x)\n' + self.function_body(error_lines)),
+ ('Small and focused functions are preferred: '
+ 'test_indent() has %d non-comment lines '
+ '(error triggered by exceeding %d lines).'
+ ' [readability/fn_size] [%d]')
+ % (error_lines, trigger_level, error_level))
+
def test_function_length_check_definition_severity1_plus_blanks(self):
error_level = 1
error_lines = self.trigger_lines(error_level) + 1
@@ -2449,11 +2480,11 @@ class CheckForFunctionLengthsTest(CppStyleTestBase):
error_lines = self.trigger_lines(error_level) + 1
trigger_level = self.trigger_lines(self.min_confidence)
self.assert_function_lengths_check(
- ('my_namespace::my_other_namespace::MyVeryLongTypeName*\n'
- 'my_namespace::my_other_namespace::MyFunction(int arg1, char* arg2)'
+ ('my_namespace::my_other_namespace::MyVeryLongTypeName<Type1, bool func(const Element*)>*\n'
+ 'my_namespace::my_other_namespace<Type3, Type4>::~MyFunction<Type5<Type6, Type7> >(int arg1, char* arg2)'
+ self.function_body(error_lines)),
('Small and focused functions are preferred: '
- 'my_namespace::my_other_namespace::MyFunction()'
+ 'my_namespace::my_other_namespace<Type3, Type4>::~MyFunction<Type5<Type6, Type7> >()'
' has %d non-comment lines '
'(error triggered by exceeding %d lines).'
' [readability/fn_size] [%d]')
@@ -2484,7 +2515,7 @@ class CheckForFunctionLengthsTest(CppStyleTestBase):
'FixGoogleUpdate_AllValues_MachineApp) has %d non-comment lines '
'(error triggered by exceeding %d lines).'
' [readability/fn_size] [%d]')
- % (error_lines+1, trigger_level, error_level))
+ % (error_lines, trigger_level, error_level))
def test_function_length_check_definition_severity1_for_bad_test_doesnt_break(self):
error_level = 1
@@ -2714,6 +2745,65 @@ class NoNonVirtualDestructorsTest(CppStyleTestBase):
'virtual method(s), one declared at line 2. [runtime/virtual] [4]'])
+class PassPtrTest(CppStyleTestBase):
+ # For http://webkit.org/coding/RefPtr.html
+
+ def assert_pass_ptr_check(self, code, expected_message):
+ """Check warnings for Pass*Ptr are as expected.
+
+ Args:
+ code: C++ source code expected to generate a warning message.
+ expected_message: Message expected to be generated by the C++ code.
+ """
+ self.assertEquals(expected_message,
+ self.perform_pass_ptr_check(code))
+
+ def test_pass_ref_ptr_in_function(self):
+ # Local variables should never be PassRefPtr.
+ self.assert_pass_ptr_check(
+ 'int myFunction()\n'
+ '{\n'
+ ' PassRefPtr<Type1> variable = variable2;\n'
+ '}',
+ 'Local variables should never be PassRefPtr (see '
+ 'http://webkit.org/coding/RefPtr.html). [readability/pass_ptr] [5]')
+
+ def test_pass_own_ptr_in_function(self):
+ # Local variables should never be PassRefPtr.
+ self.assert_pass_ptr_check(
+ 'int myFunction()\n'
+ '{\n'
+ ' PassOwnPtr<Type1> variable = variable2;\n'
+ '}',
+ 'Local variables should never be PassOwnPtr (see '
+ 'http://webkit.org/coding/RefPtr.html). [readability/pass_ptr] [5]')
+
+ def test_pass_other_type_ptr_in_function(self):
+ # Local variables should never be PassRefPtr.
+ self.assert_pass_ptr_check(
+ 'int myFunction()\n'
+ '{\n'
+ ' PassOtherTypePtr<Type1> variable;\n'
+ '}',
+ 'Local variables should never be PassOtherTypePtr (see '
+ 'http://webkit.org/coding/RefPtr.html). [readability/pass_ptr] [5]')
+
+ def test_pass_ref_ptr_return_value(self):
+ self.assert_pass_ptr_check(
+ 'PassRefPtr<Type1>\n'
+ 'myFunction(int)\n'
+ '{\n'
+ '}',
+ '')
+
+ def test_pass_ref_ptr_parameter_value(self):
+ self.assert_pass_ptr_check(
+ 'int myFunction(PassRefPtr<Type1>)\n'
+ '{\n'
+ '}',
+ '')
+
+
class WebKitStyleTest(CppStyleTestBase):
# for http://webkit.org/coding/coding-style.html
diff --git a/WebKitTools/Scripts/webkitpy/tool/bot/feeders.py b/WebKitTools/Scripts/webkitpy/tool/bot/feeders.py
index dc892a4..046c4c1 100644
--- a/WebKitTools/Scripts/webkitpy/tool/bot/feeders.py
+++ b/WebKitTools/Scripts/webkitpy/tool/bot/feeders.py
@@ -26,8 +26,8 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+from webkitpy.common.config.committervalidator import CommitterValidator
from webkitpy.common.system.deprecated_logging import log
-from webkitpy.common.net.bugzilla import CommitterValidator
from webkitpy.tool.grammar import pluralize
diff --git a/WebKitTools/Scripts/webkitpy/tool/commands/__init__.py b/WebKitTools/Scripts/webkitpy/tool/commands/__init__.py
index a070324..d2aa503 100644
--- a/WebKitTools/Scripts/webkitpy/tool/commands/__init__.py
+++ b/WebKitTools/Scripts/webkitpy/tool/commands/__init__.py
@@ -1,6 +1,12 @@
# Required for Python to search this directory for module files
+from webkitpy.tool.commands.download import *
+from webkitpy.tool.commands.earlywarningsystem import *
+from webkitpy.tool.commands.openbugs import OpenBugs
from webkitpy.tool.commands.prettydiff import PrettyDiff
+from webkitpy.tool.commands.queries import *
+from webkitpy.tool.commands.queues import *
from webkitpy.tool.commands.rebaseline import Rebaseline
from webkitpy.tool.commands.rebaselineserver import RebaselineServer
-# FIXME: Add the rest of the commands here.
+from webkitpy.tool.commands.sheriffbot import *
+from webkitpy.tool.commands.upload import *
diff --git a/WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html b/WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html
index 5667cd2..8cc48c1 100644
--- a/WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html
+++ b/WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/index.html
@@ -1,11 +1,11 @@
<!DOCTYPE html>
<!--
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
@@ -15,7 +15,7 @@
* Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
-
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@@ -32,9 +32,108 @@
<head>
<title>Layout Test Rebaseline Server</title>
<link rel="stylesheet" href="/main.css" type="text/css">
+ <script src="/util.js"></script>
+ <script src="/loupe.js"></script>
<script src="/main.js"></script>
</head>
<body class="loading">
+
+<div id="header">
+ <div id="controls">
+ <!-- Add a dummy <select> node so that this lines up with the text on the left -->
+ <select style="visibility: hidden"></select>
<a href="/quitquitquit">Exit</a>
+ </div>
+
+ <span id="selectors">
+ <label>
+ Failure type:
+ <select id="failure-type-selector"></select>
+ </label>
+
+ <label>
+ Directory:
+ <select id="directory-selector"></select>
+ </label>
+
+ <label>
+ Test:
+ <select id="test-selector"></select>
+ </label>
+ </span>
+
+ <a id="test-link">View test</a>
+
+ <span id="nav-buttons">
+ <button id="previous-test">&laquo;</button>
+ <span id="test-index"></span> of <span id="test-count"></span>
+ <button id="next-test">&raquo;</button>
+ </span>
+</div>
+
+<table id="test-output">
+ <thead id="labels">
+ <tr>
+ <th>Expected</th>
+ <th>Actual</th>
+ <th>Diff</th>
+ </tr>
+ </thead>
+ <tbody id="image-outputs" style="display: none">
+ <tr>
+ <td colspan="3"><h2>Image</h2></td>
+ </tr>
+ <tr>
+ <td><img id="expected-image"></td>
+ <td><img id="actual-image"></td>
+ <td><canvas id="diff-canvas" width="800" height="600"></canvas></td>
+ </tr>
+ </tbody>
+ <tbody id="text-outputs" style="display: none">
+ <tr>
+ <td colspan="3"><h2>Text</h2></td>
+ </tr>
+ <tr>
+ <td><pre id="expected-text"></pre></td>
+ <td><pre id="actual-text"></pre></td>
+ <td><pre id="diff-text"><pre></td>
+ </tr>
+ </tbody>
+</table>
+
+<table id="loupe" style="display: none">
+ <tr>
+ <td colspan="3" id="loupe-info">
+ <span id="loupe-close" class="link">Close</span>
+ <label>Coordinate: <span id="loupe-coordinate"></span></label>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="loupe-container">
+ <canvas id="expected-loupe" width="210" height="210"></canvas>
+ <div class="center-highlight"></div>
+ </div>
+ </td>
+ <td>
+ <div class="loupe-container">
+ <canvas id="actual-loupe" width="210" height="210"></canvas>
+ <div class="center-highlight"></div>
+ </div>
+ </td>
+ <td>
+ <div class="loupe-container">
+ <canvas id="diff-loupe" width="210" height="210"></canvas>
+ <div class="center-highlight"></div>
+ </div>
+ </td>
+ </tr>
+ <tr id="loupe-colors">
+ <td><label>Exp. color: <span id="expected-loupe-color"></span></label></td>
+ <td><label>Actual color: <span id="actual-loupe-color"></span></label></td>
+ <td><label>Diff color: <span id="diff-loupe-color"></span></label></td>
+ </tr>
+</table>
+
</body>
</html>
diff --git a/WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/loupe.js b/WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/loupe.js
new file mode 100644
index 0000000..41f977a
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/loupe.js
@@ -0,0 +1,144 @@
+/*
+ * 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.
+ */
+
+var LOUPE_MAGNIFICATION_FACTOR = 10;
+
+function Loupe()
+{
+ this._node = $('loupe');
+ this._currentCornerX = -1;
+ this._currentCornerY = -1;
+
+ var self = this;
+
+ function handleOutputClick(event) { self._handleOutputClick(event); }
+ $('expected-image').addEventListener('click', handleOutputClick);
+ $('actual-image').addEventListener('click', handleOutputClick);
+ $('diff-canvas').addEventListener('click', handleOutputClick);
+
+ function handleLoupeClick(event) { self._handleLoupeClick(event); }
+ $('expected-loupe').addEventListener('click', handleLoupeClick);
+ $('actual-loupe').addEventListener('click', handleLoupeClick);
+ $('diff-loupe').addEventListener('click', handleLoupeClick);
+
+ function hide(event) { self.hide(); }
+ $('loupe-close').addEventListener('click', hide);
+}
+
+Loupe.prototype._handleOutputClick = function(event)
+{
+ // The -1 compensates for the border around the image/canvas.
+ this._showFor(event.offsetX - 1, event.offsetY - 1);
+};
+
+Loupe.prototype._handleLoupeClick = function(event)
+{
+ var deltaX = Math.floor(event.offsetX/LOUPE_MAGNIFICATION_FACTOR);
+ var deltaY = Math.floor(event.offsetY/LOUPE_MAGNIFICATION_FACTOR);
+
+ this._showFor(
+ this._currentCornerX + deltaX, this._currentCornerY + deltaY);
+}
+
+Loupe.prototype.hide = function()
+{
+ this._node.style.display = 'none';
+};
+
+Loupe.prototype._showFor = function(x, y)
+{
+ this._fillFromImage(x, y, 'expected', $('expected-image'));
+ this._fillFromImage(x, y, 'actual', $('actual-image'));
+ this._fillFromCanvas(x, y, 'diff', $('diff-canvas'));
+
+ this._node.style.display = '';
+};
+
+Loupe.prototype._fillFromImage = function(x, y, type, sourceImage)
+{
+ var tempCanvas = document.createElement('canvas');
+ tempCanvas.width = sourceImage.width;
+ tempCanvas.height = sourceImage.height;
+ var tempContext = tempCanvas.getContext('2d');
+
+ tempContext.drawImage(sourceImage, 0, 0);
+
+ this._fillFromCanvas(x, y, type, tempCanvas);
+};
+
+Loupe.prototype._fillFromCanvas = function(x, y, type, canvas)
+{
+ var context = canvas.getContext('2d');
+ var sourceImageData =
+ context.getImageData(0, 0, canvas.width, canvas.height);
+
+ var targetCanvas = $(type + '-loupe');
+ var targetContext = targetCanvas.getContext('2d');
+ targetContext.fillStyle = 'rgba(255, 255, 255, 1)';
+ targetContext.fillRect(0, 0, targetCanvas.width, targetCanvas.height);
+
+ var sourceXOffset = (targetCanvas.width/LOUPE_MAGNIFICATION_FACTOR - 1)/2;
+ var sourceYOffset = (targetCanvas.height/LOUPE_MAGNIFICATION_FACTOR - 1)/2;
+
+ function readPixelComponent(x, y, component) {
+ var offset = (y * sourceImageData.width + x) * 4 + component;
+ return sourceImageData.data[offset];
+ }
+
+ for (var i = -sourceXOffset; i <= sourceXOffset; i++) {
+ for (var j = -sourceYOffset; j <= sourceYOffset; j++) {
+ var sourceX = x + i;
+ var sourceY = y + j;
+
+ var sourceR = readPixelComponent(sourceX, sourceY, 0);
+ var sourceG = readPixelComponent(sourceX, sourceY, 1);
+ var sourceB = readPixelComponent(sourceX, sourceY, 2);
+ var sourceA = readPixelComponent(sourceX, sourceY, 3)/255;
+ sourceA = Math.round(sourceA * 10)/10;
+
+ var targetX = (i + sourceXOffset) * LOUPE_MAGNIFICATION_FACTOR;
+ var targetY = (j + sourceYOffset) * LOUPE_MAGNIFICATION_FACTOR;
+ var colorString =
+ sourceR + ', ' + sourceG + ', ' + sourceB + ', ' + sourceA;
+ targetContext.fillStyle = 'rgba(' + colorString + ')';
+ targetContext.fillRect(
+ targetX, targetY,
+ LOUPE_MAGNIFICATION_FACTOR, LOUPE_MAGNIFICATION_FACTOR);
+
+ if (i == 0 && j == 0) {
+ $('loupe-coordinate').textContent = sourceX + ', ' + sourceY;
+ $(type + '-loupe-color').textContent = colorString;
+ }
+ }
+ }
+
+ this._currentCornerX = x - sourceXOffset;
+ this._currentCornerY = y - sourceYOffset;
+};
diff --git a/WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css b/WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css
index 35bd6a5..6e90fe4 100644
--- a/WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css
+++ b/WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/main.css
@@ -46,7 +46,7 @@ div {
a, .link {
color: #aaf;
text-decoration: underline;
- cursor: pointer;
+ cursor: pointer;
}
.link.selected {
@@ -54,3 +54,160 @@ a, .link {
font-weight: bold;
text-decoration: none;
}
+
+#header {
+ padding: .5em 1em;
+ background: #333;
+ color: #fff;
+ -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.5);
+ margin-bottom: 1em;
+}
+
+#header label {
+ padding-right: 1em;
+ color: #ccc;
+}
+
+#test-link {
+ margin-right: 1em;
+}
+
+#header label span {
+ color: #fff;
+ font-weight: bold;
+}
+
+#nav-buttons {
+ white-space: nowrap;
+}
+
+#nav-buttons button {
+ background: #fff;
+ border: 0;
+ border-radius: 10px;
+}
+
+#nav-buttons button:active {
+ -webkit-box-shadow: 0 0 5px #33f inset;
+ background: #aaa;
+}
+
+#nav-buttons button[disabled] {
+ opacity: .5;
+}
+
+#controls {
+ float: right;
+}
+
+#test-output {
+ border-spacing: 0;
+ border-collapse: collapse;
+ margin: 0 auto;
+ width: 100%;
+}
+
+#test-output td,
+#test-output th {
+ padding: 0;
+ vertical-align: top;
+}
+
+#image-outputs img,
+#image-outputs canvas {
+ width: 800px;
+ height: 600px;
+ border: solid 1px #ddd;
+ -webkit-user-select: none;
+ -webkit-user-drag: none;
+ cursor: crosshair;
+}
+
+#image-outputs img.loading,
+#image-outputs canvas.loading {
+ opacity: .5;
+}
+
+#image-outputs #actual-image {
+ margin: 0 1em;
+}
+
+#test-output #labels th {
+ text-align: center;
+ color: #666;
+}
+
+#text-outputs pre {
+ height: 600px;
+ width: 800px;
+ overflow: auto;
+}
+
+#test-output h2 {
+ border-bottom: solid 1px #ccc;
+ font-weight: bold;
+ margin: 0;
+ background: #eee;
+}
+
+#loupe {
+ -webkit-box-shadow: 2px 2px 5px rgba(0, 0, 0, .5);
+ position: absolute;
+ width: 634px;
+ top: 50%;
+ left: 50%;
+ margin-left: -151px;
+ margin-top: -50px;
+ background: #fff;
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+
+#loupe td {
+ padding: 0;
+ border: solid 1px #ccc;
+}
+
+#loupe label {
+ color: #999;
+ padding-right: 1em;
+}
+
+#loupe span {
+ color: #000;
+ font-weight: bold;
+}
+
+#loupe canvas {
+ cursor: crosshair;
+}
+
+#loupe #loupe-close {
+ float: right;
+}
+
+#loupe #loupe-info {
+ background: #eee;
+ padding: .3em .5em;
+}
+
+#loupe #loupe-colors td {
+ text-align: center;
+}
+
+#loupe .loupe-container {
+ position: relative;
+ width: 210px;
+ height: 210px;
+}
+
+#loupe .center-highlight {
+ position: absolute;
+ width: 10px;
+ height: 10px;
+ top: 50%;
+ left: 50%;
+ margin-left: -5px;
+ margin-top: -5px;
+ outline: solid 1px #999;
+}
diff --git a/WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js b/WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js
index 55f19a4..fa037b3 100644
--- a/WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js
+++ b/WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/main.js
@@ -28,9 +28,372 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+var ALL_DIRECTORY_PATH = '[all]';
+
+var results;
+var testsByFailureType = {};
+var testsByDirectory = {};
+var selectedTests = [];
+var loupe;
+
function main()
{
+ $('failure-type-selector').addEventListener('change', selectFailureType);
+ $('directory-selector').addEventListener('change', selectDirectory);
+ $('test-selector').addEventListener('change', selectTest);
+ $('next-test').addEventListener('click', nextTest);
+ $('previous-test').addEventListener('click', previousTest);
+
+ loupe = new Loupe();
+
+ document.addEventListener('keydown', function(event) {
+ if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {
+ return;
+ }
+
+ switch (event.keyIdentifier) {
+ case 'Left':
+ event.preventDefault();
+ previousTest();
+ break;
+ case 'Right':
+ event.preventDefault();
+ nextTest();
+ break;
+ }
+ });
+
+ loadText('/results.json', function(text) {
+ results = JSON.parse(text);
+ displayResults();
+ });
+}
+
+/**
+ * Groups test results by failure type.
+ */
+function displayResults()
+{
+ var failureTypeSelector = $('failure-type-selector');
+ var failureTypes = [];
+
+ for (var testName in results.tests) {
+ var test = results.tests[testName];
+ if (test.actual == 'PASS') {
+ continue;
+ }
+ var failureType = test.actual + ' (expected ' + test.expected + ')';
+ if (!(failureType in testsByFailureType)) {
+ testsByFailureType[failureType] = [];
+ failureTypes.push(failureType);
+ }
+ testsByFailureType[failureType].push(testName);
+ }
+
+ // Sort by number of failures
+ failureTypes.sort(function(a, b) {
+ return testsByFailureType[b].length - testsByFailureType[a].length;
+ });
+
+ for (var i = 0, failureType; failureType = failureTypes[i]; i++) {
+ var failureTypeOption = document.createElement('option');
+ failureTypeOption.value = failureType;
+ failureTypeOption.textContent = failureType + ' - ' + testsByFailureType[failureType].length + ' tests';
+ failureTypeSelector.appendChild(failureTypeOption);
+ }
+
+ selectFailureType();
+
document.body.classList.remove('loading');
}
+/**
+ * For a given failure type, gets all the tests and groups them by directory
+ * (populating the directory selector with them).
+ */
+function selectFailureType()
+{
+ var selectedFailureType = getSelectValue('failure-type-selector');
+ var tests = testsByFailureType[selectedFailureType];
+
+ testsByDirectory = {}
+ var displayDirectoryNamesByDirectory = {};
+ var directories = [];
+
+ // Include a special option for all tests
+ testsByDirectory[ALL_DIRECTORY_PATH] = tests;
+ displayDirectoryNamesByDirectory[ALL_DIRECTORY_PATH] = 'all';
+ directories.push(ALL_DIRECTORY_PATH);
+
+ // Roll up tests by ancestor directories
+ tests.forEach(function(test) {
+ var pathPieces = test.split('/');
+ var pathDirectories = pathPieces.slice(0, pathPieces.length -1);
+ var ancestorDirectory = '';
+
+ pathDirectories.forEach(function(pathDirectory, index) {
+ ancestorDirectory += pathDirectory + '/';
+ if (!(ancestorDirectory in testsByDirectory)) {
+ testsByDirectory[ancestorDirectory] = [];
+ var displayDirectoryName = new Array(index * 6).join('&nbsp;') + pathDirectory;
+ displayDirectoryNamesByDirectory[ancestorDirectory] = displayDirectoryName;
+ directories.push(ancestorDirectory);
+ }
+
+ testsByDirectory[ancestorDirectory].push(test);
+ });
+ });
+
+ directories.sort();
+
+ var directorySelector = $('directory-selector');
+ directorySelector.innerHTML = '';
+
+ directories.forEach(function(directory) {
+ var directoryOption = document.createElement('option');
+ directoryOption.value = directory;
+ directoryOption.innerHTML =
+ displayDirectoryNamesByDirectory[directory] + ' - ' +
+ testsByDirectory[directory].length + ' tests';
+ directorySelector.appendChild(directoryOption);
+ });
+
+ selectDirectory();
+}
+
+/**
+ * For a given failure type and directory and failure type, gets all the tests
+ * in that directory and populatest the test selector with them.
+ */
+function selectDirectory()
+{
+ var selectedDirectory = getSelectValue('directory-selector');
+ selectedTests = testsByDirectory[selectedDirectory];
+
+ selectedTests.sort();
+
+ var testSelector = $('test-selector');
+ testSelector.innerHTML = '';
+
+ selectedTests.forEach(function(testName) {
+ var testOption = document.createElement('option');
+ testOption.value = testName;
+ var testDisplayName = testName;
+ if (testName.lastIndexOf(selectedDirectory) == 0) {
+ testDisplayName = testName.substring(selectedDirectory.length);
+ }
+ testOption.innerHTML = '&nbsp;&nbsp;' + testDisplayName;
+ testSelector.appendChild(testOption);
+ });
+
+ selectTest();
+}
+
+function getSelectedTest()
+{
+ return getSelectValue('test-selector');
+}
+
+function selectTest()
+{
+ var selectedTest = getSelectedTest();
+
+ if (results.tests[selectedTest].actual.indexOf('IMAGE') != -1) {
+ $('image-outputs').style.display = '';
+ displayImageResults(selectedTest);
+ } else {
+ $('image-outputs').style.display = 'none';
+ }
+
+ if (results.tests[selectedTest].actual.indexOf('TEXT') != -1) {
+ $('text-outputs').style.display = '';
+ displayTextResults(selectedTest);
+ } else {
+ $('text-outputs').style.display = 'none';
+ }
+
+ updateState();
+ loupe.hide();
+}
+
+function updateState()
+{
+ var testName = getSelectedTest();
+ var testIndex = selectedTests.indexOf(testName);
+ var testCount = selectedTests.length
+ $('test-index').textContent = testIndex + 1;
+ $('test-count').textContent = testCount;
+
+ $('next-test').disabled = testIndex == testCount - 1;
+ $('previous-test').disabled = testIndex == 0;
+
+ $('test-link').href =
+ 'http://trac.webkit.org/browser/trunk/LayoutTests/' + testName;
+}
+
+function getTestResultUrl(testName, mode)
+{
+ return '/test_result?test=' + testName + '&mode=' + mode;
+}
+
+var currentExpectedImageTest;
+var currentActualImageTest;
+
+function displayImageResults(testName)
+{
+ if (currentExpectedImageTest == currentActualImageTest
+ && currentExpectedImageTest == testName) {
+ return;
+ }
+
+ function displayImageResult(mode, callback) {
+ var image = $(mode);
+ image.className = 'loading';
+ image.src = getTestResultUrl(testName, mode);
+ image.onload = function() {
+ image.className = '';
+ callback();
+ updateImageDiff();
+ };
+ }
+
+ displayImageResult(
+ 'expected-image',
+ function() { currentExpectedImageTest = testName; });
+ displayImageResult(
+ 'actual-image',
+ function() { currentActualImageTest = testName; });
+
+ $('diff-canvas').className = 'loading';
+ $('diff-canvas').style.display = '';
+}
+
+/**
+ * Computes a graphical a diff between the expected and actual images by
+ * rendering each to a canvas, getting the image data, and comparing the RGBA
+ * components of each pixel. The output is put into the diff canvas, with
+ * identical pixels appearing at 12.5% opacity and different pixels being
+ * highlighted in red.
+ */
+function updateImageDiff() {
+ if (currentExpectedImageTest != currentActualImageTest)
+ return;
+
+ var expectedImage = $('expected-image');
+ var actualImage = $('actual-image');
+
+ function getImageData(image) {
+ var imageCanvas = document.createElement('canvas');
+ imageCanvas.width = image.width;
+ imageCanvas.height = image.height;
+ imageCanvasContext = imageCanvas.getContext('2d');
+
+ imageCanvasContext.fillStyle = 'rgba(255, 255, 255, 1)';
+ imageCanvasContext.fillRect(
+ 0, 0, image.width, image.height);
+
+ imageCanvasContext.drawImage(image, 0, 0);
+ return imageCanvasContext.getImageData(
+ 0, 0, image.width, image.height);
+ }
+
+ var expectedImageData = getImageData(expectedImage);
+ var actualImageData = getImageData(actualImage);
+
+ var diffCanvas = $('diff-canvas');
+ var diffCanvasContext = diffCanvas.getContext('2d');
+ var diffImageData =
+ diffCanvasContext.createImageData(diffCanvas.width, diffCanvas.height);
+
+ // Avoiding property lookups for all these during the per-pixel loop below
+ // provides a significant performance benefit.
+ var expectedWidth = expectedImage.width;
+ var expectedHeight = expectedImage.height;
+ var expected = expectedImageData.data;
+
+ var actualWidth = actualImage.width;
+ var actual = actualImageData.data;
+
+ var diffWidth = diffImageData.width;
+ var diff = diffImageData.data;
+
+ for (var x = 0; x < expectedWidth; x++) {
+ for (var y = 0; y < expectedHeight; y++) {
+ var expectedOffset = (y * expectedWidth + x) * 4;
+ var actualOffset = (y * actualWidth + x) * 4;
+ var diffOffset = (y * diffWidth + x) * 4;
+ if (expected[expectedOffset] != actual[actualOffset] ||
+ expected[expectedOffset + 1] != actual[actualOffset + 1] ||
+ expected[expectedOffset + 2] != actual[actualOffset + 2] ||
+ expected[expectedOffset + 3] != actual[actualOffset + 3]) {
+ diff[diffOffset] = 255;
+ diff[diffOffset + 1] = 0;
+ diff[diffOffset + 2] = 0;
+ diff[diffOffset + 3] = 255;
+ } else {
+ diff[diffOffset] = expected[expectedOffset];
+ diff[diffOffset + 1] = expected[expectedOffset + 1];
+ diff[diffOffset + 2] = expected[expectedOffset + 2];
+ diff[diffOffset + 3] = 32;
+ }
+ }
+ }
+
+ diffCanvasContext.putImageData(
+ diffImageData,
+ 0, 0,
+ 0, 0,
+ diffImageData.width, diffImageData.height);
+ diffCanvas.className = '';
+}
+
+function displayTextResults(testName)
+{
+ function loadTextResult(mode) {
+ loadText(getTestResultUrl(testName, mode), function(text) {
+ $(mode).textContent = text;
+ });
+ }
+
+ loadTextResult('expected-text');
+ loadTextResult('actual-text');
+ loadTextResult('diff-text');
+}
+
+function nextTest()
+{
+ var testSelector = $('test-selector');
+ var nextTestIndex = testSelector.selectedIndex + 1;
+ while (true) {
+ if (nextTestIndex == testSelector.options.length) {
+ return;
+ }
+ if (testSelector.options[nextTestIndex].disabled) {
+ nextTestIndex++;
+ } else {
+ testSelector.selectedIndex = nextTestIndex;
+ selectTest();
+ return;
+ }
+ }
+}
+
+function previousTest()
+{
+ var testSelector = $('test-selector');
+ var previousTestIndex = testSelector.selectedIndex - 1;
+ while (true) {
+ if (previousTestIndex == -1) {
+ return;
+ }
+ if (testSelector.options[previousTestIndex].disabled) {
+ previousTestIndex--;
+ } else {
+ testSelector.selectedIndex = previousTestIndex;
+ selectTest();
+ return
+ }
+ }
+}
+
window.addEventListener('DOMContentLoaded', main);
diff --git a/WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/util.js b/WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/util.js
new file mode 100644
index 0000000..1c8782b
--- /dev/null
+++ b/WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/util.js
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ */
+
+var results;
+var testsByFailureType = {};
+var testsByDirectory = {};
+var selectedTests = [];
+
+function $(id)
+{
+ return document.getElementById(id);
+}
+
+function getSelectValue(id)
+{
+ var select = $(id);
+ if (select.selectedIndex == -1) {
+ return null;
+ } else {
+ return select.options[select.selectedIndex].value;
+ }
+}
+
+function loadText(url, callback)
+{
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', url);
+ xhr.addEventListener('load', function() { callback(xhr.responseText); });
+ xhr.send();
+}
diff --git a/WebKitTools/Scripts/webkitpy/tool/commands/download.py b/WebKitTools/Scripts/webkitpy/tool/commands/download.py
index 541c9c4..457c050 100644
--- a/WebKitTools/Scripts/webkitpy/tool/commands/download.py
+++ b/WebKitTools/Scripts/webkitpy/tool/commands/download.py
@@ -29,8 +29,6 @@
import os
-from optparse import make_option
-
import webkitpy.tool.steps as steps
from webkitpy.common.checkout.changelog import ChangeLog, view_source_url
diff --git a/WebKitTools/Scripts/webkitpy/tool/commands/download_unittest.py b/WebKitTools/Scripts/webkitpy/tool/commands/download_unittest.py
index bfca139..9ca343b 100644
--- a/WebKitTools/Scripts/webkitpy/tool/commands/download_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/tool/commands/download_unittest.py
@@ -95,7 +95,7 @@ class DownloadCommandsTest(CommandsTest):
self.assert_execute_outputs(ApplyFromBug(), [42], options=options, expected_stderr=expected_stderr)
def test_land_diff(self):
- expected_stderr = "Building WebKit\nRunning Python unit tests\nRunning Perl unit tests\nRunning JavaScriptCore tests\nRunning run-webkit-tests\nUpdating bug 42\n"
+ expected_stderr = "Building WebKit\nRunning Python unit tests\nRunning Perl unit tests\nRunning JavaScriptCore tests\nRunning run-webkit-tests\nCommitted r49824: <http://trac.webkit.org/changeset/49824>\nUpdating bug 42\n"
mock_tool = MockTool()
mock_tool.scm().create_patch = Mock()
mock_tool.checkout().modified_changelogs = Mock(return_value=[])
@@ -105,7 +105,7 @@ class DownloadCommandsTest(CommandsTest):
self.assertEqual(mock_tool.checkout().modified_changelogs.call_count, 1)
def test_land_red_builders(self):
- expected_stderr = '\nWARNING: Builders ["Builder2"] are red, please watch your commit carefully.\nSee http://dummy_buildbot_host/console?category=core\n\nBuilding WebKit\nRunning Python unit tests\nRunning Perl unit tests\nRunning JavaScriptCore tests\nRunning run-webkit-tests\nUpdating bug 42\n'
+ expected_stderr = '\nWARNING: Builders ["Builder2"] are red, please watch your commit carefully.\nSee http://dummy_buildbot_host/console?category=core\n\nBuilding WebKit\nRunning Python unit tests\nRunning Perl unit tests\nRunning JavaScriptCore tests\nRunning run-webkit-tests\nCommitted r49824: <http://trac.webkit.org/changeset/49824>\nUpdating bug 42\n'
mock_tool = MockTool()
mock_tool.buildbot.light_tree_on_fire()
self.assert_execute_outputs(Land(), [42], options=self._default_options(), expected_stderr=expected_stderr, tool=mock_tool)
@@ -128,6 +128,7 @@ Running Python unit tests
Running Perl unit tests
Running JavaScriptCore tests
Running run-webkit-tests
+Committed r49824: <http://trac.webkit.org/changeset/49824>
Not closing bug 42 as attachment 197 has review=+. Assuming there are more patches to land from this bug.
"""
self.assert_execute_outputs(LandAttachment(), [197], options=self._default_options(), expected_stderr=expected_stderr)
@@ -143,6 +144,7 @@ Running Python unit tests
Running Perl unit tests
Running JavaScriptCore tests
Running run-webkit-tests
+Committed r49824: <http://trac.webkit.org/changeset/49824>
Not closing bug 42 as attachment 197 has review=+. Assuming there are more patches to land from this bug.
Updating working directory
Processing patch 128 from bug 42.
@@ -151,6 +153,7 @@ Running Python unit tests
Running Perl unit tests
Running JavaScriptCore tests
Running run-webkit-tests
+Committed r49824: <http://trac.webkit.org/changeset/49824>
Not closing bug 42 as attachment 197 has review=+. Assuming there are more patches to land from this bug.
"""
self.assert_execute_outputs(LandFromBug(), [42], options=self._default_options(), expected_stderr=expected_stderr)
@@ -181,7 +184,7 @@ where ATTACHMENT_ID is the ID of this attachment.
self.assert_execute_outputs(CreateRollout(), [852, "Reason"], options=self._default_options(), expected_stderr=expected_stderr)
def test_rollout(self):
- expected_stderr = "Preparing rollout for bug 42.\nUpdating working directory\nRunning prepare-ChangeLog\nMOCK: user.open_url: file://...\nBuilding WebKit\n"
+ expected_stderr = "Preparing rollout for bug 42.\nUpdating working directory\nRunning prepare-ChangeLog\nMOCK: user.open_url: file://...\nBuilding WebKit\nCommitted r49824: <http://trac.webkit.org/changeset/49824>\n"
expected_stdout = "Was that diff correct?\n"
self.assert_execute_outputs(Rollout(), [852, "Reason"], options=self._default_options(), expected_stdout=expected_stdout, expected_stderr=expected_stderr)
diff --git a/WebKitTools/Scripts/webkitpy/tool/commands/queues.py b/WebKitTools/Scripts/webkitpy/tool/commands/queues.py
index 6b4213b..bfaeb08 100644
--- a/WebKitTools/Scripts/webkitpy/tool/commands/queues.py
+++ b/WebKitTools/Scripts/webkitpy/tool/commands/queues.py
@@ -38,15 +38,16 @@ from datetime import datetime
from optparse import make_option
from StringIO import StringIO
-from webkitpy.common.net.bugzilla import CommitterValidator, Attachment
+from webkitpy.common.config.committervalidator import CommitterValidator
+from webkitpy.common.net.bugzilla import Attachment
from webkitpy.common.net.layouttestresults import path_for_layout_test, LayoutTestResults
from webkitpy.common.net.statusserver import StatusServer
-from webkitpy.common.system.executive import ScriptError
from webkitpy.common.system.deprecated_logging import error, log
-from webkitpy.tool.commands.stepsequence import StepSequenceErrorHandler
+from webkitpy.common.system.executive import ScriptError
from webkitpy.tool.bot.commitqueuetask import CommitQueueTask, CommitQueueTaskDelegate
from webkitpy.tool.bot.feeders import CommitQueueFeeder, EWSFeeder
from webkitpy.tool.bot.queueengine import QueueEngine, QueueEngineDelegate
+from webkitpy.tool.commands.stepsequence import StepSequenceErrorHandler
from webkitpy.tool.grammar import pluralize, join_with_separators
from webkitpy.tool.multicommandtool import Command, TryAgain
diff --git a/WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py b/WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py
index 0a37677..abb2af4 100644
--- a/WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py
+++ b/WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py
@@ -46,19 +46,22 @@ from optparse import make_option
from wsgiref.handlers import format_date_time
from webkitpy.tool.multicommandtool import AbstractDeclarativeCommand
-
+import webkitpy.thirdparty.simplejson as simplejson
class RebaselineHTTPServer(BaseHTTPServer.HTTPServer):
- def __init__(self, httpd_port, results_directory):
+ def __init__(self, httpd_port, results_directory, results_json):
BaseHTTPServer.HTTPServer.__init__(self, ("", httpd_port), RebaselineHTTPRequestHandler)
self.results_directory = results_directory
+ self.results_json = results_json
class RebaselineHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
STATIC_FILE_NAMES = frozenset([
"index.html",
+ "loupe.js",
"main.js",
"main.css",
+ "util.js",
])
STATIC_FILE_DIRECTORY = os.path.join(
@@ -111,6 +114,38 @@ class RebaselineHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
# otherwise there's a deadlock
threading.Thread(target=lambda: self.server.shutdown()).start()
+ def test_result(self):
+ test_name, _ = os.path.splitext(self.query['test'][0])
+ mode = self.query['mode'][0]
+ if mode == 'expected-image':
+ file_name = test_name + '-expected.png'
+ elif mode == 'actual-image':
+ file_name = test_name + '-actual.png'
+ if mode == 'expected-checksum':
+ file_name = test_name + '-expected.checksum'
+ elif mode == 'actual-checksum':
+ file_name = test_name + '-actual.checksum'
+ elif mode == 'diff-image':
+ file_name = test_name + '-diff.png'
+ if mode == 'expected-text':
+ file_name = test_name + '-expected.txt'
+ elif mode == 'actual-text':
+ file_name = test_name + '-actual.txt'
+ elif mode == 'diff-text':
+ file_name = test_name + '-diff.txt'
+
+ file_path = os.path.join(self.server.results_directory, file_name)
+
+ # Let results be cached for 60 seconds, so that they can be pre-fetched
+ # by the UI
+ self._serve_file(file_path, cacheable_seconds=60)
+
+ def results_json(self):
+ self.send_response(200)
+ self.send_header('Content-type', 'application/json')
+ self.end_headers()
+ simplejson.dump(self.server.results_json, self.wfile)
+
def _serve_file(self, file_path, cacheable_seconds=0):
if not os.path.exists(file_path):
self.send_error(404, "File not found")
@@ -147,11 +182,19 @@ class RebaselineServer(AbstractDeclarativeCommand):
def execute(self, options, args, tool):
results_directory = args[0]
+ print 'Parsing unexpected_results.json...'
+ results_json_path = os.path.join(
+ results_directory, 'unexpected_results.json')
+ with codecs.open(results_json_path, "r") as results_json_file:
+ results_json_file = file(results_json_path)
+ results_json = simplejson.load(results_json_file)
+
print "Starting server at http://localhost:%d/" % options.httpd_port
print ("Use the 'Exit' link in the UI, http://localhost:%d/"
"quitquitquit or Ctrl-C to stop") % options.httpd_port
httpd = RebaselineHTTPServer(
httpd_port=options.httpd_port,
- results_directory=results_directory)
+ results_directory=results_directory,
+ results_json=results_json)
httpd.serve_forever()
diff --git a/WebKitTools/Scripts/webkitpy/tool/main.py b/WebKitTools/Scripts/webkitpy/tool/main.py
index e0862c5..7b1d7f3 100755
--- a/WebKitTools/Scripts/webkitpy/tool/main.py
+++ b/WebKitTools/Scripts/webkitpy/tool/main.py
@@ -29,6 +29,7 @@
#
# A tool for automating dealing with bugzilla, posting patches, committing patches, etc.
+from optparse import make_option
import os
import threading
@@ -38,20 +39,12 @@ from webkitpy.common.config.ports import WebKitPort
from webkitpy.common.net.bugzilla import Bugzilla
from webkitpy.common.net.buildbot import BuildBot
from webkitpy.common.net.irc.ircproxy import IRCProxy
+from webkitpy.common.net.statusserver import StatusServer
from webkitpy.common.system.executive import Executive
from webkitpy.common.system.user import User
from webkitpy.layout_tests import port
-import webkitpy.tool.commands as commands
-# FIXME: Remove these imports once all the commands are in the root of the
-# command package.
-from webkitpy.tool.commands.download import *
-from webkitpy.tool.commands.earlywarningsystem import *
-from webkitpy.tool.commands.openbugs import OpenBugs
-from webkitpy.tool.commands.queries import *
-from webkitpy.tool.commands.queues import *
-from webkitpy.tool.commands.sheriffbot import *
-from webkitpy.tool.commands.upload import *
from webkitpy.tool.multicommandtool import MultiCommandTool
+import webkitpy.tool.commands as commands
class WebKitPatch(MultiCommandTool):
diff --git a/WebKitTools/Scripts/webkitpy/tool/mocktool.py b/WebKitTools/Scripts/webkitpy/tool/mocktool.py
index b6ee95f..719f9b1 100644
--- a/WebKitTools/Scripts/webkitpy/tool/mocktool.py
+++ b/WebKitTools/Scripts/webkitpy/tool/mocktool.py
@@ -571,6 +571,7 @@ class MockStatusServer(object):
# FIXME: This should not inherit from Mock
+# FIXME: Unify with common.system.executive_mock.MockExecutive.
class MockExecutive(Mock):
def __init__(self, should_log):
self._should_log = should_log
diff --git a/WebKitTools/Scripts/webkitpy/tool/steps/commit.py b/WebKitTools/Scripts/webkitpy/tool/steps/commit.py
index 8f70b81..5c6bdb7 100644
--- a/WebKitTools/Scripts/webkitpy/tool/steps/commit.py
+++ b/WebKitTools/Scripts/webkitpy/tool/steps/commit.py
@@ -26,7 +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.changelog import view_source_url
from webkitpy.common.checkout.scm import AuthenticationError, AmbiguousCommitError
+from webkitpy.common.system.deprecated_logging import log
from webkitpy.common.system.executive import ScriptError
from webkitpy.common.system.user import User
from webkitpy.tool.steps.abstractstep import AbstractStep
@@ -61,7 +63,11 @@ class Commit(AbstractStep):
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)
+ scm = self._tool.scm()
+ commit_text = scm.commit_with_message(self._commit_message, git_commit=self._options.git_commit, username=username, force_squash=force_squash)
+ svn_revision = scm.svn_revision_from_commit_text(commit_text)
+ log("Committed r%s: <%s>" % (svn_revision, view_source_url(svn_revision)))
+ self._state["commit_text"] = commit_text
break;
except AmbiguousCommitError, e:
if self._tool.user.confirm(self._commit_warning(e)):
diff --git a/WebKitTools/TestWebKitAPI/win/TestWebKitAPI.vcproj b/WebKitTools/TestWebKitAPI/win/TestWebKitAPI.vcproj
index 2e7bbe4..2041155 100644
--- a/WebKitTools/TestWebKitAPI/win/TestWebKitAPI.vcproj
+++ b/WebKitTools/TestWebKitAPI/win/TestWebKitAPI.vcproj
@@ -80,7 +80,6 @@
ConfigurationType="1"
InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;..\Configurations\TestWebKitAPICommon.vsprops;..\Configurations\TestWebKitAPICoreFoundation.vsprops"
CharacterSet="1"
- WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -261,8 +260,6 @@
</Configuration>
<Configuration
Name="Debug_CFLite|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_wincairo.vsprops;..\Configurations\TestWebKitAPICommon.vsprops;..\Configurations\TestWebKitAPICFLite.vsprops"
CharacterSet="1"
@@ -324,8 +321,6 @@
</Configuration>
<Configuration
Name="Release_CFLite|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;..\Configurations\TestWebKitAPICommon.vsprops;..\Configurations\TestWebKitAPICFLite.vsprops"
CharacterSet="1"
@@ -386,6 +381,68 @@
Name="VCPostBuildEventTool"
/>
</Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;..\Configurations\TestWebKitAPICommon.vsprops;..\Configurations\TestWebKitAPICoreFoundation.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
</Configurations>
<References>
</References>
diff --git a/WebKitTools/WebKitLauncherWin/WebKitLauncherWin.vcproj b/WebKitTools/WebKitLauncherWin/WebKitLauncherWin.vcproj
index bf99228..792bfb3 100644
--- a/WebKitTools/WebKitLauncherWin/WebKitLauncherWin.vcproj
+++ b/WebKitTools/WebKitLauncherWin/WebKitLauncherWin.vcproj
@@ -18,7 +18,68 @@
<Configuration
Name="Release|Win32"
ConfigurationType="1"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\WebKitLauncherWinCommon.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\WebKitLauncherWinCommon.vsprops"
CharacterSet="1"
WholeProgramOptimization="1"
>
@@ -51,8 +112,6 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="shlwapi.lib"
- OutputFile="$(OutDir)\WebKit$(WebKitConfigSuffix).exe"
/>
<Tool
Name="VCALinkTool"
diff --git a/WebKitTools/WebKitLauncherWin/WebKitLauncherWinCommon.vsprops b/WebKitTools/WebKitLauncherWin/WebKitLauncherWinCommon.vsprops
new file mode 100644
index 0000000..b597d20
--- /dev/null
+++ b/WebKitTools/WebKitLauncherWin/WebKitLauncherWinCommon.vsprops
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="WebKitLauncherWinCommon"
+ >
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="shlwapi.lib"
+ OutputFile="$(OutDir)\WebKit$(WebKitConfigSuffix).exe"
+ />
+</VisualStudioPropertySheet>
diff --git a/WebKitTools/WebKitTestRunner/TestController.cpp b/WebKitTools/WebKitTestRunner/TestController.cpp
index 8ca0529..3fc92f2 100644
--- a/WebKitTools/WebKitTestRunner/TestController.cpp
+++ b/WebKitTools/WebKitTestRunner/TestController.cpp
@@ -388,6 +388,7 @@ void TestController::didFinishLoadForFrame(WKPageRef page, WKFrameRef frame)
return;
m_doneResetting = true;
+ shared().notifyDone();
}
} // namespace WTR
diff --git a/WebKitTools/WebKitTestRunner/TestController.h b/WebKitTools/WebKitTestRunner/TestController.h
index 1396c94..4c05bf4 100644
--- a/WebKitTools/WebKitTestRunner/TestController.h
+++ b/WebKitTools/WebKitTestRunner/TestController.h
@@ -56,6 +56,7 @@ public:
// Runs the run loop until `done` is true or the timeout elapses.
enum TimeoutDuration { ShortTimeout, LongTimeout };
void runUntil(bool& done, TimeoutDuration);
+ void notifyDone();
private:
void initialize(int argc, const char* argv[]);
diff --git a/WebKitTools/WebKitTestRunner/TestInvocation.cpp b/WebKitTools/WebKitTestRunner/TestInvocation.cpp
index e88de53..26ecfc0 100644
--- a/WebKitTools/WebKitTestRunner/TestInvocation.cpp
+++ b/WebKitTools/WebKitTestRunner/TestInvocation.cpp
@@ -163,6 +163,7 @@ void TestInvocation::didReceiveMessageFromInjectedBundle(WKStringRef messageName
m_gotInitialResponse = true;
m_gotFinalMessage = true;
m_error = true;
+ TestController::shared().notifyDone();
return;
}
@@ -171,6 +172,7 @@ void TestInvocation::didReceiveMessageFromInjectedBundle(WKStringRef messageName
WKStringRef messageBodyString = static_cast<WKStringRef>(messageBody);
if (WKStringIsEqualToUTF8CString(messageBodyString, "BeginTest")) {
m_gotInitialResponse = true;
+ TestController::shared().notifyDone();
return;
}
@@ -184,6 +186,7 @@ void TestInvocation::didReceiveMessageFromInjectedBundle(WKStringRef messageName
dump(toSTD(messageBodyString).c_str());
m_gotFinalMessage = true;
+ TestController::shared().notifyDone();
return;
}
diff --git a/WebKitTools/WebKitTestRunner/mac/TestControllerMac.mm b/WebKitTools/WebKitTestRunner/mac/TestControllerMac.mm
index 268f718..fee0070 100644
--- a/WebKitTools/WebKitTestRunner/mac/TestControllerMac.mm
+++ b/WebKitTools/WebKitTestRunner/mac/TestControllerMac.mm
@@ -30,6 +30,10 @@
namespace WTR {
+void TestController::notifyDone()
+{
+}
+
void TestController::platformInitialize()
{
}
diff --git a/WebKitTools/WebKitTestRunner/qt/TestControllerQt.cpp b/WebKitTools/WebKitTestRunner/qt/TestControllerQt.cpp
index d4de1ba..ca0a00c 100644
--- a/WebKitTools/WebKitTestRunner/qt/TestControllerQt.cpp
+++ b/WebKitTools/WebKitTestRunner/qt/TestControllerQt.cpp
@@ -40,54 +40,52 @@
namespace WTR {
-// With a bigger interval we would waste to much time
-// after the test had been finished.
-static const unsigned kTimerIntervalMS = 1;
-
-class RunUntilConditionLoop : public QObject {
+class TestControllerRunLoop : public QObject {
Q_OBJECT
-
public:
- static void start(bool& done)
+ static TestControllerRunLoop* instance()
{
- static RunUntilConditionLoop* instance = new RunUntilConditionLoop;
- instance->run(done);
+ static TestControllerRunLoop* result = new TestControllerRunLoop;
+ return result;
}
-private:
- RunUntilConditionLoop() {}
-
- void run(bool& done)
+ void start(int msec)
{
- m_condition = &done;
- m_timerID = startTimer(kTimerIntervalMS);
+ m_timerID = startTimer(msec);
ASSERT(m_timerID);
m_eventLoop.exec(QEventLoop::ExcludeUserInputEvents);
}
- virtual void timerEvent(QTimerEvent*)
+ void stop()
{
- if (!*m_condition)
- return;
-
killTimer(m_timerID);
- m_eventLoop.exit();
+ m_eventLoop.quit();
+ }
+private:
+ TestControllerRunLoop() {}
+
+ void timerEvent(QTimerEvent*)
+ {
+ fprintf(stderr, "FAIL: TestControllerRunLoop timed out.\n");
+ stop();
}
QEventLoop m_eventLoop;
- bool* m_condition;
int m_timerID;
};
+void TestController::notifyDone()
+{
+ TestControllerRunLoop::instance()->stop();
+}
+
void TestController::platformInitialize()
{
}
-void TestController::platformRunUntil(bool& done, double)
+void TestController::platformRunUntil(bool&, double timeout)
{
- // FIXME: Honor the timeout parameter <http://webkit.org/b/48941>.
- RunUntilConditionLoop::start(done);
- ASSERT(done);
+ TestControllerRunLoop::instance()->start(static_cast<int>(timeout * 1000));
}
static bool isExistingLibrary(const QString& path)
diff --git a/WebKitTools/WebKitTestRunner/win/InjectedBundle.vcproj b/WebKitTools/WebKitTestRunner/win/InjectedBundle.vcproj
index 0412562..7b629a1 100644
--- a/WebKitTools/WebKitTestRunner/win/InjectedBundle.vcproj
+++ b/WebKitTools/WebKitTestRunner/win/InjectedBundle.vcproj
@@ -81,7 +81,6 @@
ConfigurationType="2"
InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;..\Configurations\InjectedBundleCoreFoundation.vsprops;..\Configurations\InjectedBundleCommon.vsprops"
CharacterSet="1"
- WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -387,6 +386,68 @@
Name="VCPostBuildEventTool"
/>
</Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;..\Configurations\InjectedBundleCoreFoundation.vsprops;..\Configurations\InjectedBundleCommon.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
</Configurations>
<References>
</References>
diff --git a/WebKitTools/WebKitTestRunner/win/TestControllerWin.cpp b/WebKitTools/WebKitTestRunner/win/TestControllerWin.cpp
index 3fd853f..89e29fd 100644
--- a/WebKitTools/WebKitTestRunner/win/TestControllerWin.cpp
+++ b/WebKitTools/WebKitTestRunner/win/TestControllerWin.cpp
@@ -90,6 +90,10 @@ static LONG WINAPI exceptionFilter(EXCEPTION_POINTERS*)
return EXCEPTION_CONTINUE_SEARCH;
}
+void TestController::notifyDone()
+{
+}
+
void TestController::platformInitialize()
{
::SetUnhandledExceptionFilter(exceptionFilter);
diff --git a/WebKitTools/WebKitTestRunner/win/WebKitTestRunner.vcproj b/WebKitTools/WebKitTestRunner/win/WebKitTestRunner.vcproj
index c852f64..fe345b0 100644
--- a/WebKitTools/WebKitTestRunner/win/WebKitTestRunner.vcproj
+++ b/WebKitTools/WebKitTestRunner/win/WebKitTestRunner.vcproj
@@ -91,7 +91,6 @@
ConfigurationType="1"
InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops"
CharacterSet="1"
- WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
@@ -445,6 +444,78 @@
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_LTCG|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;"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(ProjectDir)\..&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\private&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include&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 WebKit$(WebKitDLLConfigSuffix).lib CoreFoundation$(LibraryConfigSuffix).lib shlwapi.lib"
+ 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>
</Configurations>
<References>
</References>
diff --git a/WebKitTools/WinLauncher/WinLauncher.cpp b/WebKitTools/WinLauncher/WinLauncher.cpp
index 08b7ed9..5caf230 100644
--- a/WebKitTools/WinLauncher/WinLauncher.cpp
+++ b/WebKitTools/WinLauncher/WinLauncher.cpp
@@ -150,7 +150,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance,
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: Place code here.
- MSG msg;
+ MSG msg = {0};
HACCEL hAccelTable;
INITCOMMONCONTROLSEX InitCtrlEx;
@@ -337,10 +337,10 @@ void PrintView(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
}
IWebFrame* frame = 0;
+ IWebFramePrivate* framePrivate = 0;
if (FAILED(gWebView->mainFrame(&frame)))
goto exit;
- IWebFramePrivate* framePrivate = 0;
if (FAILED(frame->QueryInterface(&framePrivate)))
goto exit;
@@ -376,8 +376,6 @@ exit:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
- PAINTSTRUCT ps;
- HDC hdc;
switch (message) {
case WM_COMMAND:
@@ -436,7 +434,6 @@ LRESULT CALLBACK MyEditProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPara
return (LRESULT)CallWindowProc((WNDPROC)DefEditProc,hDlg,message,wParam,lParam);
break;
}
- return 0;
}
diff --git a/WebKitTools/WinLauncher/WinLauncher.vcproj b/WebKitTools/WinLauncher/WinLauncher.vcproj
index 7c4c35c..2569f96 100644
--- a/WebKitTools/WinLauncher/WinLauncher.vcproj
+++ b/WebKitTools/WinLauncher/WinLauncher.vcproj
@@ -18,12 +18,11 @@
<Configuration
Name="Debug|Win32"
ConfigurationType="1"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;.\WinLauncherCommon.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;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -39,10 +38,6 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include\WebKit&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)&quot;;&quot;$(IntDir)\Include&quot;;&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE"
- UsePrecompiledHeader="2"
- WarningLevel="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -55,21 +50,12 @@
/>
<Tool
Name="VCLinkerTool"
- LinkLibraryDependencies="false"
- AdditionalDependencies="comdlg32.lib gdi32.lib comctl32.lib shlwapi.lib user32.lib ole32.lib oleaut32.lib WebKitGUID$(WebKitConfigSuffix).lib WebKit$(WebKitDLLConfigSuffix).lib"
- LinkIncremental="2"
- AdditionalLibraryDirectories="&quot;$(WebKitOutputDir)\lib&quot;;&quot;$(ProjectDir)\..\..\..\&quot;"
- GenerateDebugInformation="true"
- SubSystem="2"
- TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
- TypeLibraryFile=""
- ComponentFileName=""
/>
<Tool
Name="VCXDCMakeTool"
@@ -88,19 +74,16 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;"
/>
</Configuration>
<Configuration
Name="Release|Win32"
ConfigurationType="1"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\WinLauncherCommon.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;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -116,10 +99,6 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include\WebKit&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitOutputDir)\Include\icu&quot;;&quot;$(WebKitLibrariesDir)\Include\icu&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitOutputDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitOutputDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)&quot;;&quot;$(IntDir)\include&quot;;&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_WIN32_WINNT=0x501"
- UsePrecompiledHeader="2"
- WarningLevel="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -132,24 +111,12 @@
/>
<Tool
Name="VCLinkerTool"
- LinkLibraryDependencies="false"
- AdditionalOptions="&#x0D;&#x0A;"
- AdditionalDependencies="comdlg32.lib gdi32.lib comctl32.lib shlwapi.lib user32.lib ole32.lib oleaut32.lib WebKitGUID$(WebKitConfigSuffix).lib WebKit$(WebKitDLLConfigSuffix).lib"
- LinkIncremental="1"
- AdditionalLibraryDirectories="&quot;$(WebKitOutputDir)\lib&quot;;&quot;$(ProjectDir)\..\..\..\&quot;"
- GenerateDebugInformation="true"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
- TypeLibraryFile=""
- ComponentFileName=""
/>
<Tool
Name="VCXDCMakeTool"
@@ -168,18 +135,16 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;"
/>
</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"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_internal.vsprops;.\WinLauncherCommon.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;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -195,10 +160,6 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include\WebKit&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)&quot;;&quot;$(IntDir)\Include&quot;;&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE"
- UsePrecompiledHeader="2"
- WarningLevel="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -211,21 +172,12 @@
/>
<Tool
Name="VCLinkerTool"
- LinkLibraryDependencies="false"
- AdditionalDependencies="comdlg32.lib gdi32.lib comctl32.lib shlwapi.lib user32.lib ole32.lib oleaut32.lib WebKitGUID$(WebKitConfigSuffix).lib WebKit$(WebKitDLLConfigSuffix).lib"
- LinkIncremental="2"
- AdditionalLibraryDirectories="&quot;$(WebKitOutputDir)\lib&quot;;&quot;$(ProjectDir)\..\..\..\&quot;"
- GenerateDebugInformation="true"
- SubSystem="2"
- TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
- TypeLibraryFile=""
- ComponentFileName=""
/>
<Tool
Name="VCXDCMakeTool"
@@ -244,18 +196,16 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;"
/>
</Configuration>
<Configuration
Name="Debug_Cairo|Win32"
ConfigurationType="1"
- InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_wincairo.vsprops"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_wincairo.vsprops;.\WinLauncherCommon.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;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -271,10 +221,6 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include\WebKit&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)&quot;;&quot;$(IntDir)\Include&quot;;&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE"
- UsePrecompiledHeader="2"
- WarningLevel="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -287,21 +233,12 @@
/>
<Tool
Name="VCLinkerTool"
- LinkLibraryDependencies="false"
- AdditionalDependencies="comdlg32.lib gdi32.lib comctl32.lib shlwapi.lib user32.lib ole32.lib oleaut32.lib WebKitGUID$(WebKitConfigSuffix).lib WebKit$(WebKitDLLConfigSuffix).lib"
- LinkIncremental="2"
- AdditionalLibraryDirectories="&quot;$(WebKitOutputDir)\lib&quot;;&quot;$(ProjectDir)\..\..\..\&quot;"
- GenerateDebugInformation="true"
- SubSystem="2"
- TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
- TypeLibraryFile=""
- ComponentFileName=""
/>
<Tool
Name="VCXDCMakeTool"
@@ -320,18 +257,78 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;"
/>
</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"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_internal.vsprops;$(WebKitLibrariesDir)\tools\vsprops\debug_all.vsprops;.\WinLauncherCommon.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(WebKitLibrariesDir)\tools\vsprops\common.vsprops;$(WebKitLibrariesDir)\tools\vsprops\release.vsprops;.\WinLauncherCommon.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;"
/>
<Tool
Name="VCCustomBuildTool"
@@ -347,10 +344,6 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include\WebKit&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)&quot;;&quot;$(IntDir)\Include&quot;;&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE"
- UsePrecompiledHeader="2"
- WarningLevel="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -363,21 +356,12 @@
/>
<Tool
Name="VCLinkerTool"
- LinkLibraryDependencies="false"
- AdditionalDependencies="comctl32.lib shlwapi.lib user32.lib ole32.lib oleaut32.lib WebKitGUID$(WebKitConfigSuffix).lib WebKit$(WebKitDLLConfigSuffix).lib"
- LinkIncremental="2"
- AdditionalLibraryDirectories="&quot;$(WebKitOutputDir)\lib&quot;;&quot;$(ProjectDir)\..\..\..\&quot;"
- GenerateDebugInformation="true"
- SubSystem="2"
- TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
- TypeLibraryFile=""
- ComponentFileName=""
/>
<Tool
Name="VCXDCMakeTool"
@@ -396,7 +380,6 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;"
/>
</Configuration>
</Configurations>
@@ -455,6 +438,14 @@
UsePrecompiledHeader="1"
/>
</FileConfiguration>
+ <FileConfiguration
+ Name="Release_LTCG|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath=".\WinLauncher.cpp"
diff --git a/WebKitTools/WinLauncher/WinLauncherCommon.vsprops b/WebKitTools/WinLauncher/WinLauncherCommon.vsprops
new file mode 100644
index 0000000..4f46524
--- /dev/null
+++ b/WebKitTools/WinLauncher/WinLauncherCommon.vsprops
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="WinLauncherCommon"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\include\WebKit&quot;;&quot;$(WebKitOutputDir)\Include&quot;;&quot;$(WebKitLibrariesDir)\Include&quot;;&quot;$(WebKitOutputDir)\Include\WebCore&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore&quot;;&quot;$(WebKitOutputDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\WebCore\ForwardingHeaders&quot;;&quot;$(WebKitOutputDir)\Include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\Include\JavaScriptCore&quot;;&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)&quot;;&quot;$(IntDir)\Include&quot;;&quot;$(WebKitOutputDir)\obj\WebKit\DerivedSources&quot;"
+ UsePrecompiledHeader="2"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="comdlg32.lib gdi32.lib comctl32.lib shlwapi.lib user32.lib ole32.lib oleaut32.lib WebKitGUID$(WebKitConfigSuffix).lib WebKit$(WebKitDLLConfigSuffix).lib"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;"
+ />
+ <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;"
+ />
+</VisualStudioPropertySheet>
diff --git a/WebKitTools/record-memory-win/record-memory-win.vcproj b/WebKitTools/record-memory-win/record-memory-win.vcproj
index 6ec3c27..d4c64e6 100644
--- a/WebKitTools/record-memory-win/record-memory-win.vcproj
+++ b/WebKitTools/record-memory-win/record-memory-win.vcproj
@@ -21,6 +21,82 @@
IntermediateDirectory="$(WebKitOutputDir)\obj\$(ProjectName)\$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(VCInstallDir)\PlatformSDK\Include&quot;;&quot;$(VCInstallDir)\Include&quot;"
+ PreprocessorDefinitions="_WIN32_WINNT=0x501"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="&quot;$(VCInstallDir)\PlatformSDK\Lib&quot;"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ 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"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release_LTCG|Win32"
+ OutputDirectory="$(WebKitOutputDir)\bin"
+ IntermediateDirectory="$(WebKitOutputDir)\obj\$(ProjectName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool