diff options
Diffstat (limited to 'WebCore')
498 files changed, 24641 insertions, 4718 deletions
diff --git a/WebCore/Android.derived.jscbindings.mk b/WebCore/Android.derived.jscbindings.mk index c9d5b55..1929729 100644 --- a/WebCore/Android.derived.jscbindings.mk +++ b/WebCore/Android.derived.jscbindings.mk @@ -393,6 +393,7 @@ GEN := \ $(intermediates)/storage/JSIDBErrorEvent.h \ $(intermediates)/storage/JSIDBEvent.h \ $(intermediates)/storage/JSIDBIndexRequest.h \ + $(intermediates)/storage/JSIDBKey.h \ $(intermediates)/storage/JSIDBKeyRange.h \ $(intermediates)/storage/JSIDBRequest.h \ $(intermediates)/storage/JSIDBSuccessEvent.h \ diff --git a/WebCore/Android.derived.v8bindings.mk b/WebCore/Android.derived.v8bindings.mk index 216e200..c1065fa 100644 --- a/WebCore/Android.derived.v8bindings.mk +++ b/WebCore/Android.derived.v8bindings.mk @@ -387,6 +387,7 @@ GEN := \ $(intermediates)/bindings/V8IDBErrorEvent.h \ $(intermediates)/bindings/V8IDBEvent.h \ $(intermediates)/bindings/V8IDBIndexRequest.h \ + $(intermediates)/bindings/V8IDBKey.h \ $(intermediates)/bindings/V8IDBKeyRange.h \ $(intermediates)/bindings/V8IDBRequest.h \ $(intermediates)/bindings/V8IDBSuccessEvent.h \ diff --git a/WebCore/Android.jscbindings.mk b/WebCore/Android.jscbindings.mk index e2f0fb6..5983450 100644 --- a/WebCore/Android.jscbindings.mk +++ b/WebCore/Android.jscbindings.mk @@ -61,6 +61,7 @@ LOCAL_SRC_FILES += \ bindings/js/DOMObjectHashTableMap.cpp \ bindings/js/DOMWrapperWorld.cpp \ bindings/js/GCController.cpp \ + bindings/js/IDBBindingUtilities.cpp \ bindings/js/JSAttrCustom.cpp \ bindings/js/JSAudioConstructor.cpp \ bindings/js/JSCDATASectionCustom.cpp \ @@ -119,6 +120,8 @@ LOCAL_SRC_FILES += \ bindings/js/JSHTMLOptionsCollectionCustom.cpp \ bindings/js/JSHTMLSelectElementCustom.cpp \ bindings/js/JSHistoryCustom.cpp \ + bindings/js/JSIDBAnyCustom.cpp \ + bindings/js/JSIDBKeyCustom.cpp \ bindings/js/JSImageConstructor.cpp \ bindings/js/JSImageDataCustom.cpp \ bindings/js/JSLazyEventListener.cpp \ diff --git a/WebCore/Android.mk b/WebCore/Android.mk index 61591da..26eb405 100644 --- a/WebCore/Android.mk +++ b/WebCore/Android.mk @@ -155,7 +155,7 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \ dom/Notation.cpp \ dom/OptionElement.cpp \ dom/OptionGroupElement.cpp \ - dom/DeviceOrientation.cpp \ + dom/DeviceOrientationController.cpp \ dom/DeviceOrientationEvent.cpp \ dom/OverflowEvent.cpp \ dom/PageTransitionEvent.cpp \ @@ -274,6 +274,7 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \ html/HTMLTreeBuilder.cpp \ html/HTMLAllCollection.cpp \ html/HTMLCollection.cpp \ + html/HTMLConstructionSite.cpp \ html/HTMLDataListElement.cpp \ html/HTMLDocument.cpp \ html/HTMLDocumentParser.cpp \ @@ -803,6 +804,7 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \ storage/IDBEvent.cpp \ storage/IDBIndexImpl.cpp \ storage/IDBIndexRequest.cpp \ + storage/IDBKey.cpp \ storage/IDBKeyRange.cpp \ storage/IDBObjectStoreImpl.cpp \ storage/IDBObjectStoreRequest.cpp \ diff --git a/WebCore/Android.v8bindings.mk b/WebCore/Android.v8bindings.mk index 9eda878..8eaa091 100644 --- a/WebCore/Android.v8bindings.mk +++ b/WebCore/Android.v8bindings.mk @@ -49,8 +49,12 @@ LOCAL_SRC_FILES += \ bindings/v8/DateExtension.cpp \ bindings/v8/DOMData.cpp \ bindings/v8/DOMDataStore.cpp \ +<<<<<<< HEAD bindings/v8/DOMWrapperWorld.cpp \ bindings/v8/IsolatedWorld.cpp \ +======= + bindings/v8/IDBBindingUtilities.cpp \ +>>>>>>> webkit.org at r63173 bindings/v8/MainThreadDOMData.cpp \ bindings/v8/NPV8Object.cpp \ bindings/v8/ScheduledAction.cpp \ @@ -125,7 +129,12 @@ LOCAL_SRC_FILES += \ bindings/v8/custom/V8EventSourceConstructor.cpp \ bindings/v8/custom/V8Float32ArrayCustom.cpp \ bindings/v8/custom/V8GeolocationCustom.cpp \ +<<<<<<< HEAD bindings/v8/custom/V8HistoryCustom.cpp \ +======= + bindings/v8/custom/V8IDBAny.cpp \ + bindings/v8/custom/V8IDBKey.cpp \ +>>>>>>> webkit.org at r63173 bindings/v8/custom/V8HTMLAllCollectionCustom.cpp \ bindings/v8/custom/V8HTMLAudioElementConstructor.cpp \ bindings/v8/custom/V8HTMLCanvasElementCustom.cpp \ diff --git a/WebCore/CMakeLists.txt b/WebCore/CMakeLists.txt index c8fdde5..957b770 100644 --- a/WebCore/CMakeLists.txt +++ b/WebCore/CMakeLists.txt @@ -1,6 +1,7 @@ SET(WebCore_INCLUDE_DIRECTORIES "${WEBCORE_DIR}" "${WEBCORE_DIR}/accessibility" + "${WEBCORE_DIR}/bindings" "${WEBCORE_DIR}/bindings/js" "${WEBCORE_DIR}/bridge" "${WEBCORE_DIR}/bridge/c" @@ -266,6 +267,7 @@ SET(WebCore_IDL_FILES html/ImageData.idl html/MediaError.idl html/TextMetrics.idl + html/TimeRanges.idl html/ValidityState.idl html/VoidCallback.idl @@ -319,10 +321,10 @@ SET(WebCore_IDL_FILES page/WebKitPoint.idl page/WorkerNavigator.idl - plugins/MimeType.idl - plugins/MimeTypeArray.idl - plugins/Plugin.idl - plugins/PluginArray.idl + plugins/DOMMimeType.idl + plugins/DOMMimeTypeArray.idl + plugins/DOMPlugin.idl + plugins/DOMPluginArray.idl storage/Database.idl storage/DatabaseCallback.idl @@ -334,6 +336,7 @@ SET(WebCore_IDL_FILES storage/IDBErrorEvent.idl storage/IDBEvent.idl storage/IDBIndexRequest.idl + storage/IDBKey.idl storage/IDBKeyRange.idl storage/IDBObjectStoreRequest.idl storage/IDBRequest.idl @@ -555,6 +558,7 @@ SET(WebCore_SOURCES bindings/js/DOMObjectHashTableMap.cpp bindings/js/DOMWrapperWorld.cpp bindings/js/GCController.cpp + bindings/js/IDBBindingUtilities.cpp bindings/js/JavaScriptCallFrame.cpp bindings/js/JSAttrCustom.cpp bindings/js/JSCallbackData.cpp @@ -598,6 +602,8 @@ SET(WebCore_SOURCES bindings/js/JSExceptionBase.cpp bindings/js/JSGeolocationCustom.cpp bindings/js/JSHistoryCustom.cpp + bindings/js/JSIDBAnyCustom.cpp + bindings/js/JSIDBKeyCustom.cpp bindings/js/JSHTMLAllCollectionCustom.cpp bindings/js/JSHTMLAppletElementCustom.cpp bindings/js/JSHTMLCanvasElementCustom.cpp @@ -624,7 +630,7 @@ SET(WebCore_SOURCES bindings/js/JSMessageChannelCustom.cpp bindings/js/JSMessageEventCustom.cpp bindings/js/JSMessagePortCustom.cpp - bindings/js/JSMimeTypeArrayCustom.cpp + bindings/js/JSDOMMimeTypeArrayCustom.cpp bindings/js/JSNamedNodeMapCustom.cpp bindings/js/JSNavigatorCustom.cpp bindings/js/JSNodeCustom.cpp @@ -633,8 +639,8 @@ SET(WebCore_SOURCES bindings/js/JSNodeIteratorCustom.cpp bindings/js/JSNodeListCustom.cpp bindings/js/JSOptionConstructor.cpp - bindings/js/JSPluginArrayCustom.cpp - bindings/js/JSPluginCustom.cpp + bindings/js/JSDOMPluginArrayCustom.cpp + bindings/js/JSDOMPluginCustom.cpp bindings/js/JSPluginElementFunctions.cpp bindings/js/JSPopStateEventCustom.cpp bindings/js/JSScriptProfileNodeCustom.cpp @@ -662,7 +668,6 @@ SET(WebCore_SOURCES bindings/js/ScriptCallFrame.cpp bindings/js/ScriptCallStack.cpp bindings/js/ScriptController.cpp - bindings/js/ScriptControllerEfl.cpp bindings/js/ScriptDebugServer.cpp bindings/js/ScriptEventListener.cpp bindings/js/ScriptFunctionCall.cpp @@ -757,7 +762,6 @@ SET(WebCore_SOURCES dom/Attribute.cpp dom/BeforeTextInsertedEvent.cpp dom/BeforeUnloadEvent.cpp - dom/CanvasSurface.cpp dom/CDATASection.cpp dom/CharacterData.cpp dom/CheckedRadioButtons.cpp @@ -774,7 +778,7 @@ SET(WebCore_SOURCES dom/CustomEvent.cpp dom/DatasetDOMStringMap.cpp dom/DecodedDataDocumentParser.cpp - dom/DeviceOrientation.cpp + dom/DeviceOrientationController.cpp dom/DeviceOrientationEvent.cpp dom/Document.cpp dom/DocumentFragment.cpp @@ -898,7 +902,8 @@ SET(WebCore_SOURCES editing/markup.cpp editing/visible_units.cpp - history/BackForwardList.cpp + history/BackForwardController.cpp + history/BackForwardListImpl.cpp history/CachedFrame.cpp history/CachedPage.cpp history/HistoryItem.cpp @@ -935,6 +940,7 @@ SET(WebCore_SOURCES html/HTMLButtonElement.cpp html/HTMLCanvasElement.cpp html/HTMLCollection.cpp + html/HTMLConstructionSite.cpp html/HTMLDListElement.cpp html/HTMLDataGridCellElement.cpp html/HTMLDataGridColElement.cpp @@ -1025,6 +1031,7 @@ SET(WebCore_SOURCES inspector/ConsoleMessage.cpp inspector/InjectedScript.cpp inspector/InjectedScriptHost.cpp + inspector/InspectorApplicationCacheAgent.cpp inspector/InspectorBackend.cpp inspector/InspectorCSSStore.cpp inspector/InspectorController.cpp @@ -1283,10 +1290,10 @@ SET(WebCore_SOURCES platform/text/transcoder/FontTranscoder.cpp - plugins/MimeTypeArray.cpp - plugins/MimeType.cpp - plugins/PluginArray.cpp - plugins/Plugin.cpp + plugins/DOMMimeTypeArray.cpp + plugins/DOMMimeType.cpp + plugins/DOMPluginArray.cpp + plugins/DOMPlugin.cpp plugins/PluginData.cpp plugins/PluginDataNone.cpp plugins/PluginMainThreadScheduler.cpp @@ -1403,6 +1410,7 @@ SET(WebCore_SOURCES storage/IDBDatabaseRequest.cpp storage/IDBErrorEvent.cpp storage/IDBEvent.cpp + storage/IDBKey.cpp storage/IDBKeyRange.cpp storage/IDBRequest.cpp storage/IDBObjectStoreImpl.cpp @@ -1707,7 +1715,9 @@ FOREACH (_file ${WebCore_IDL_PURE_FILES}) GENERATE_JS_FROM_IDL_PURE(${_file}) ENDFOREACH () -LIST(APPEND WebCore_SOURCES ${JS_IDL_FILES}) +GENERATE_INSPECTOR_FROM_IDL(inspector/InspectorFrontend2.idl) + +LIST(APPEND WebCore_SOURCES ${JS_IDL_FILES} ${Inspector_IDL_FILES}) GENERATE_GPERF(${WEBCORE_DIR}/html/HTMLEntityNames.gperf) GENERATE_GPERF(${WEBCORE_DIR}/platform/ColorData.gperf) diff --git a/WebCore/CMakeListsEfl.txt b/WebCore/CMakeListsEfl.txt index da1f27a..ab475f5 100644 --- a/WebCore/CMakeListsEfl.txt +++ b/WebCore/CMakeListsEfl.txt @@ -17,6 +17,7 @@ LIST(APPEND WebCore_INCLUDE_DIRECTORIES LIST(APPEND WebCore_SOURCES accessibility/efl/AccessibilityObjectEfl.cpp + bindings/js/ScriptControllerEfl.cpp page/efl/DragControllerEfl.cpp page/efl/EventHandlerEfl.cpp page/efl/FrameEfl.cpp diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog index c27e3b2..e0d5843 100644 --- a/WebCore/ChangeLog +++ b/WebCore/ChangeLog @@ -1,3 +1,5854 @@ +2010-07-12 Eric Seidel <eric@webkit.org> + + Reviewed by Sam Weinig. + + Fix a typo in the adoption agency causing test failures + https://bugs.webkit.org/show_bug.cgi?id=42133 + + The new behavior actually differs from old webkit. + <p><b><p>TEST + was not bold in the old parser, but is bold now. + This matches Minefield and the HTML5 spec. + + Covered by two tests in html5lib/runner.html. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::callTheAdoptionAgency): + +2010-07-12 Pavel Feldman <pfeldman@chromium.org> + + Reviewed by Joseph Pecoraro. + + Web Inspector: provide starts and ends for network phases instead of duration. + + https://bugs.webkit.org/show_bug.cgi?id=42091 + + * inspector/InspectorResource.cpp: + (WebCore::InspectorResource::updateResponse): + (WebCore::InspectorResource::updateScriptObject): + (WebCore::InspectorResource::buildObjectForTiming): + * platform/network/ResourceLoadTiming.h: + (WebCore::ResourceLoadTiming::deepCopy): + (WebCore::ResourceLoadTiming::operator==): + (WebCore::ResourceLoadTiming::ResourceLoadTiming): + * platform/network/ResourceResponseBase.cpp: + (WebCore::ResourceResponseBase::ResourceResponseBase): + (WebCore::ResourceResponseBase::wasCached): + (WebCore::ResourceResponseBase::setWasCached): + * platform/network/ResourceResponseBase.h: + +2010-07-12 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + HTML5 Parser: document.write after onload blows away document + https://bugs.webkit.org/show_bug.cgi?id=40745 + + Rather than blowing away the document when we get a document.write call + after the document is closed, we new ignore the write. This + technically violates the spec (which requires us to blow away the + document), but blowing away the document breaks too many web sites. + + Rather than this patch, we could go back to our old behavior (which was + to append the bytes just before EOF), but implementing this approach + (suggested by Henri) will let us gather data about whether his approach + is workable. + + See also: http://www.w3.org/Bugs/Public/show_bug.cgi?id=9767 + + * dom/Document.cpp: + (WebCore::Document::write): + * html/HTMLDocumentParser.cpp: + (WebCore::HTMLDocumentParser::insert): + +2010-07-12 Tony Gentilcore <tonyg@chromium.org> + + Reviewed by Oliver Hunt. + + Strip BOMs from source before passing to V8 + https://bugs.webkit.org/show_bug.cgi?id=42102 + + This extra copy may carry a performance penalty. We should investigate + whether this allows any simplification in v8/scanner.cc:SkipJavaScriptWhiteSpace(). + + No new tests because no new functionality. + + * bindings/v8/ScriptSourceCode.h: + (WebCore::ScriptSourceCode::ScriptSourceCode): + +2010-07-12 Gustavo Noronha Silva <gns@gnome.org> + + Unreviewed. make distcheck fix. + + * GNUmakefile.am: + +2010-07-12 Yuta Kitamura <yutak@chromium.org> + + Reviewed by Alexey Proskuryakov. + + Fix crash caused by unintentional deletion of worker bridge and channel. + + WebSocket: Crash caused by calling close() within onmessage handler + https://bugs.webkit.org/show_bug.cgi?id=41507 + + Test: websocket/tests/workers/close-in-onmessage-crash.html + + * websockets/WebSocket.cpp: + (WebCore::WebSocket::close): bufferedAmount() may call WebSocket::didClose(), + which causes m_channel to get freed. + * websockets/WorkerThreadableWebSocketChannel.cpp: + (WebCore::WorkerThreadableWebSocketChannel::Bridge::send): Add reference to + the bridge because waitForMethodCompletion() may dereference the bridge. + (WebCore::WorkerThreadableWebSocketChannel::Bridge::bufferedAmount): Ditto. + (WebCore::WorkerThreadableWebSocketChannel::Bridge::waitForMethodCompletion): + The root cause is a call to WorkerRunLoop::runInMode in this function. + It may call WebSocket::didClose() even inside WebSocket::close(), which frees + everything including the worker bridge and the channel. + +2010-07-12 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + REGRESSION (HTML5 parser?): Impossible to get past the CAPTCHA on postcode.royalmail.com + https://bugs.webkit.org/show_bug.cgi?id=41797 + + Once we resume parsing after script execution, we want to clear the + preload scanner so we don't scan any bytes it might have accumulated. + + Test: http/tests/loading/preload-slow-loading.php + + * html/HTMLDocumentParser.cpp: + (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution): + +2010-07-12 Albert J. Wong <ajwong@chromium.org> + + Reviewed by Jian Li. + + Adding directional property enums back into + CSSComputedStyleDeclaration::getPropertyCSSValue(). + + https://bugs.webkit.org/show_bug.cgi?id=42122 + + The four directional -webkit- properties -- CSSPropertyWebkitMarginEnd, + CSSPropertyWebkitMarginStart, CSSPropertyWebkitPaddingEnd, and + CSSPropertyWebkitPaddingStart -- are resolved into other css + properties before the swtich statement via a call to + CSSProperty::resolveDirectionAwareProperty(). Thus, they are never + seen by the switch statement. However, if you leave out a potential + enum value from the switch, gcc will generate a warning if -Wall is + specified. This warning breaks the Chromium build. To avoid this, + we add in the enum values and ASSERT_NOT_REACHED() if they are hit. + + + * css/CSSComputedStyleDeclaration.cpp: + (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): + +2010-07-12 Chris Fleizach <cfleizach@apple.com> + + Reviewed by Darin Adler. + + AX converts AtomicStrings to .string() more than needed + https://bugs.webkit.org/show_bug.cgi?id=42056 + + No behavior change. No new tests. + + * accessibility/AccessibilityRenderObject.cpp: + (WebCore::AccessibilityRenderObject::isPressed): + (WebCore::siblingWithAriaRole): + (WebCore::AccessibilityRenderObject::intValue): + (WebCore::AccessibilityRenderObject::accessibilityDescription): + (WebCore::AccessibilityRenderObject::hasTextAlternative): + (WebCore::AccessibilityRenderObject::supportsARIAFlowTo): + (WebCore::AccessibilityRenderObject::supportsARIADropping): + (WebCore::AccessibilityRenderObject::supportsARIADragging): + (WebCore::AccessibilityRenderObject::determineARIADropEffects): + (WebCore::AccessibilityRenderObject::isExpanded): + (WebCore::AccessibilityRenderObject::isRequired): + (WebCore::AccessibilityRenderObject::isSelected): + (WebCore::AccessibilityRenderObject::supportsARIAOwns): + (WebCore::AccessibilityRenderObject::isEnabled): + (WebCore::AccessibilityRenderObject::activeDescendant): + (WebCore::AccessibilityRenderObject::determineAriaRoleAttribute): + (WebCore::AccessibilityRenderObject::orientation): + (WebCore::AccessibilityRenderObject::canSetExpandedAttribute): + (WebCore::AccessibilityRenderObject::canSetValueAttribute): + +2010-07-12 Tony Chang <tony@chromium.org> + + Reviewed by David Hyatt. + + crash in FrameView::detachCustomScrollbars + https://bugs.webkit.org/show_bug.cgi?id=41196 + + Test: scrollbars/hidden-iframe-scrollbar-crash.html + + * page/FrameView.cpp: + (WebCore::FrameView::detachCustomScrollbars): + +2010-07-12 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + HTML tags should break out of foreign content + https://bugs.webkit.org/show_bug.cgi?id=42106 + + Implement another paragraph of the spec to pass another + bunch of foreign content tests. + + This fixes a bunch of tests in html5lib/runner.html. + After this change we only have 4 remaining foreign content failures. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTag): + +2010-07-12 Zhenyao Mo <zmo@google.com> + + Reviewed by Darin Fisher. + + Bring bufferData and clear to GLES2 compliant + https://bugs.webkit.org/show_bug.cgi?id=41574 + + * html/canvas/WebGLRenderingContext.cpp: + (WebCore::WebGLRenderingContext::bufferData): Call validateBufferDataUsage(). + (WebCore::WebGLRenderingContext::clear): Check mask. + (WebCore::WebGLRenderingContext::validateBufferDataUsage): Check usage. + * html/canvas/WebGLRenderingContext.h: Declare validateBufferDataUsage. + +2010-07-12 Eric Seidel <eric@webkit.org> + + Unreviewed. Attempt to fix Chromium Windows build. + + Always generate SVGNames and MathMLNames for all ports (to support HTML5) + https://bugs.webkit.org/show_bug.cgi?id=42050 + + Another way to fix this might be to mark all the .in files with + svn:eol=native. But fixing the perl to be more robust against + stray whitespace seems to be a better long-term fix. + + No functional change, thus no tests. + + * bindings/scripts/InFilesParser.pm: + +2010-07-12 Andreas Kling <andreas.kling@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + Remove dependency on PlatformString.h in Color.h + https://bugs.webkit.org/show_bug.cgi?id=42109 + + * platform/graphics/Color.cpp: + * platform/graphics/Color.h: + +2010-07-12 Eric Seidel <eric@webkit.org> + + Unreviewed, build fix. + + Update HTMLTreeBuilder now that MathMLNames is always generated + https://bugs.webkit.org/show_bug.cgi?id=42059 + + Fix the Windows project file to build MathMLNames.*. + Also added MathMLElementFactory.* which is a NOOP now, but will + prevent folks from breaking the build when they turn MathML on. + + * WebCore.vcproj/WebCore.vcproj: + +2010-07-12 Eric Carlson <eric.carlson@apple.com> + + Reviewed by Darin Adler. + + Update media element's handling of empty 'src' attribute + https://bugs.webkit.org/show_bug.cgi?id=42001 + + * html/HTMLMediaElement.cpp: + (WebCore::HTMLMediaElement::src): Return getNonEmptyURLAttribute(). + (WebCore::HTMLMediaElement::selectMediaResource): Call noneSupported() for empty 'src'. + (WebCore::HTMLMediaElement::selectNextSourceChild): Use getNonEmptyURLAttribute() to convert + 'src' to URL instead of document()->completeURL(). Don't consider a <source> with an empty 'src'. + + * html/HTMLMediaElement.idl: Add 'NonEmpty' option to 'src' attribute. + + * html/HTMLSourceElement.cpp: + (WebCore::HTMLSourceElement::src): Return getNonEmptyURLAttribute(). + (WebCore::HTMLSourceElement::isURLAttribute): New, 'src' is a URL attribute. + * html/HTMLSourceElement.h: + + * html/HTMLSourceElement.idl: Add 'NonEmpty' option to 'src' attribute. + + * html/HTMLVideoElement.cpp: + (WebCore::HTMLVideoElement::parseMappedAttribute): Use getNonEmptyURLAttribute() to convert + 'poster' to URL instead of document()->completeURL(). + + * html/HTMLVideoElement.idl: Add 'NonEmpty' option to 'poster' attribute. + +2010-07-12 Martin Robinson <mrobinson@igalia.com> + + Reviewed by Xan Lopez. + + [GTK] make dist is broken because of missing headers and other miscellaneous reasons + https://bugs.webkit.org/show_bug.cgi?id=42107 + + * GNUmakefile.am: Remove InspectorFrontend2.idl from the list of IDL files, so + that it is not built into libWebCoreJS. Add missing header to the source list. + Make sure to distribute the new file: WebCore/inspector/CodeGeneratorInspector.pm. + +2010-07-12 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + HTMLTreeBuilder needs to support mixing SVG and MathML content + https://bugs.webkit.org/show_bug.cgi?id=42096 + + This is just a direct transcription of another paragraph of the + HTML5 spec. + + This improved a couple results in html5lib/runner.html, but more + work to do yet to pass all the foreign content tests. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTag): + (WebCore::HTMLTreeBuilder::processEndTag): + (WebCore::HTMLTreeBuilder::processUsingSecondaryInsertionModeAndAdjustInsertionMode): + * html/HTMLTreeBuilder.h: + * mathml/mathtags.in: + +2010-07-12 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Update HTMLTreeBuilder now that MathMLNames is always generated + https://bugs.webkit.org/show_bug.cgi?id=42059 + + Fix the HTMLTreeBuilder MathML code path to compile and remove + the MathML and SVG guards now that SVGNames and MathMLNames are + always compiled into ever port after: + https://bugs.webkit.org/show_bug.cgi?id=42050 + + This fixed a whole bunch of libhtml5 tests now that we have the + mathml code paths enabled. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTagForInBody): + (WebCore::HTMLTreeBuilder::processStartTag): + (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately): + (WebCore::HTMLTreeBuilder::processEndTag): + * page/Frame.cpp: + (WebCore::Frame::Frame): + - Always init SVGNames and MathML names. + +2010-07-12 Simon Fraser <simon.fraser@apple.com> + + Reviewed by Dan Bernstein. + + Don't go into compositing mode for 0x0 plugins + https://bugs.webkit.org/show_bug.cgi?id=34009 + + Don't use compositing for small (0-height or width, or 1x1) plugins, or iframes whose + height or width is zero. + + Previously we made all compositing decisions inside styleChanged(). However, + now that plugin and iframe compositing behavior depends on renderer size, we have + to wait until layout before deciding whether to composite these. This behavior + change is controlled by the m_compositingDependsOnGeometry flag. When set, + updateCompositingLayers() always does a hierarchy update. + + Tests: compositing/iframes/iframe-size-from-zero.html + compositing/iframes/iframe-size-to-zero.html + compositing/plugins/1x1-composited-plugin.html + compositing/plugins/large-to-small-composited-plugin.html + compositing/plugins/small-to-large-composited-plugin.html + + * page/FrameView.cpp: + (WebCore::FrameView::updateCompositingLayers): No longer bail if usesCompositing() is false; we + have to always enter updateCompositingLayers(). + (WebCore::FrameView::repaintFixedElementsAfterScrolling): Ditto + (WebCore::FrameView::enterCompositingMode): Remove bogus return of a void. + + * rendering/RenderLayerCompositor.h: Add m_compositingDependsOnGeometry. + * rendering/RenderLayerCompositor.cpp: + (WebCore::RenderLayerCompositor::RenderLayerCompositor): Initialize m_compositingDependsOnGeometry to false. + (WebCore::RenderLayerCompositor::updateCompositingLayers): If m_compositingDependsOnGeometry is true, + we always need to run through the layer hierarchy looking for things which need to be composited, even if + we're not (yet) in compositing mode. + + (WebCore::RenderLayerCompositor::computeCompositingRequirements): Because we can enter compositing mode + on the fly inside updateCompositingLayers() now, the state of willBeComposited needs to be updated + when processing the root layer, for the case where the compositing mode changes. + + (WebCore::RenderLayerCompositor::requiresCompositingForPlugin): Set the m_compositingDependsOnGeometry + flag if we see a potentially-composited plugin. Once we have layout information, only composite the plugin + if height * width > 1. + + (WebCore::RenderLayerCompositor::requiresCompositingForIFrame): Set the m_compositingDependsOnGeometry + flag if we see a potentially-composited iframe. Once we have layout information, only composite the plugin + if height or width is greater than zero. + +2010-07-12 Simon Fraser <simon.fraser@apple.com> + + Reviewed by Dan Bernstein. + + Need to do a layout when RenderLayers come and go because of compositing + https://bugs.webkit.org/show_bug.cgi?id=42108 + + If we create or destroy RenderLayers for reasons other than style changes + (e.g. because of composited iframes or plugins), then we need to ensure + that we do a layout. + + Test: compositing/iframes/layout-on-compositing-change.html + + * rendering/RenderObject.cpp: + (WebCore::RenderObject::adjustStyleDifference): + +2010-07-11 Eric Seidel <eric@webkit.org> + + Reviewed by Darin Adler. + + Always generate SVGNames and MathMLNames for all ports (to support HTML5) + https://bugs.webkit.org/show_bug.cgi?id=42050 + + Historically, FOONames has only been generate when ENABLE(FOO) is defined. + However, for HTML5 parser support, we need to have access to the SVG + and MathML tag names regardless of whether we the engine is configured + to render SVG or MathML content. + + This change enables generation of SVGNames and MathMLNames on all ports and + makes it so that ports can include FOOElementFactory.* regardless of whether + ENABLE(FOO) is defined (and have it do the right thing). + + No functional change (yet) so no tests. + + * DerivedSources.make: + * GNUmakefile.am: + * WebCore.gyp/WebCore.gyp: + * WebCore.pri: + * dom/make_names.pl: + +2010-07-10 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + make_names.pl should always generate all names in Names.* files + https://bugs.webkit.org/show_bug.cgi?id=42023 + + Only the *ElementFactory files need to have conditional contents + based on enabled features. WebCore should always have all known + names for SVG, MathML, XML, XLink, HTML, etc. generated in the + various *Names files, even if features are disabled. + + make_names.pl is kinda a big hack at this point. I tried to clean + up a little as I went. The way I made *Names include all names was to + read the .in files twice, once using the preprocessor and once without. + + * dom/make_names.pl: + +2010-07-12 Andreas Kling <andreas.kling@nokia.com> + + Reviewed by Oliver Hunt. + + Canvas: Move fillRect() save/restore into GraphicsContext implementations + https://bugs.webkit.org/show_bug.cgi?id=42088 + + Saving the platform painter state is an expensive operation, + so don't do it in fillRect() for platforms that don't need it. (CG, Qt) + + * html/canvas/CanvasRenderingContext2D.cpp: + (WebCore::CanvasRenderingContext2D::fillRect): + * platform/graphics/cairo/GraphicsContextCairo.cpp: + (WebCore::GraphicsContext::fillRect): + * platform/graphics/skia/GraphicsContextSkia.cpp: + (WebCore::GraphicsContext::fillRect): + * platform/graphics/wince/GraphicsContextWince.cpp: + (WebCore::GraphicsContext::fillRect): + * platform/graphics/wx/GraphicsContextWx.cpp: + (WebCore::GraphicsContext::fillRect): + +2010-07-12 Nate Chapin <japhet@chromium.org> + + Reviewed by Darin Fisher. + + Ensure that a cache policy that forces validation is cleared once + the load event is fired, rather than only doing so at the next + navigation. This leads to a lot of unnecessary load on AJAX-y + websites. + + https://bugs.webkit.org/show_bug.cgi?id=41813 + + Test: http/tests/xmlhttprequest/cache-headers-after-reload.html + + * loader/FrameLoader.cpp: + (WebCore::FrameLoader::handledOnloadEvents): Reset m_loadType to FrameLoadTypeStandard. + (WebCore::FrameLoader::addExtraFieldsToRequest): Only respect the original request's cache policy if the + DocumentLoader is still loading, and handle the other cache policy settings that were scattered around the loader. + (WebCore::FrameLoader::loadResourceSynchronously): Merge cachePolicy setting into FrameLoader::addExtraFieldsToRequest. + * loader/SubresourceLoader.cpp: + (WebCore::SubresourceLoader::create): Merge cachePolicy setting into FrameLoader::addExtraFieldsToRequest. + +2010-07-12 Andreas Kling <andreas.kling@nokia.com> + + Reviewed by Oliver Hunt. + + CSS color parsing optimizations + https://bugs.webkit.org/show_bug.cgi?id=42073 + + - Avoid instantiating a CSSParser in parseColor() unless necessary. + - Fixed hex color fast-path to support strings starting with '#'. + - Avoid allocating a new string for the value part of a '#' color. + + * css/CSSParser.cpp: + (WebCore::CSSParser::parseColor): + * platform/graphics/Color.cpp: + (WebCore::Color::parseHexColor): + (WebCore::Color::Color): + * platform/graphics/Color.h: + +2010-07-09 Alexey Proskuryakov <ap@apple.com> + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=13075 + XMLHttpRequest with failed authentication should set status to 401 + + https://bugs.webkit.org/show_bug.cgi?id=6871 + <rdar://problem/3363403> 401 error page is never shown + + * platform/network/mac/ResourceHandleMac.mm: (WebCore::ResourceHandle::receivedCredential): + Added a comment explaining why we handle empty credentials differently here. + + * platform/network/cf/ResourceHandleCFNet.cpp: (WebCore::ResourceHandle::receivedCredential): + Bring this code in sync with Mac. + +2010-07-12 Anders Carlsson <andersca@apple.com> + + Reviewed by Adam Roben. + + Add a PluginController class, use it for invalidation and getting the user agent + https://bugs.webkit.org/show_bug.cgi?id=42084 + + * WebCore.exp.in: + Export Widget::convertToContainingWindow. + +2010-07-12 Andreas Kling <andreas.kling@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] Dragging within webkit with a drag created via Javascript ends up misinterpreting the data + https://bugs.webkit.org/show_bug.cgi?id=41457 + + Treat non-special-cased mime-types as Unicode strings in ClipboardQt's getData() + Fixes corruption when retrieving data that was set with anything other than text/plain + + Also use QMimeData::setHtml() when applicable to be consistent with PasteboardQt. + + * platform/qt/ClipboardQt.cpp: + (WebCore::isHtmlMimeType): + (WebCore::ClipboardQt::getData): + (WebCore::ClipboardQt::setData): + +2010-07-12 Steve Block <steveblock@google.com> + + Reviewed by Jeremy Orlow. + + add ANDROID to STORE_FONT_CUSTOM_PLATFORM_DATA + https://bugs.webkit.org/show_bug.cgi?id=32273 + + Tested by existing tests, just adding ANDROID to the list of platforms that use this feature. + + * loader/CachedFont.cpp: + +2010-07-12 Lucas De Marchi <lucas.demarchi@profusion.mobi> + + Unreviewed. + + [EFL] Move ScriptConcotrollerEfl.cpp from CMakeLists.txt to + CMakeListsEfl.txt. + + * CMakeLists.txt: + * CMakeListsEfl.txt: + +2010-07-12 Lucas De Marchi <lucas.demarchi@profusion.mobi> + + Unreviewed build fix after r60050. + + * CMakeLists.txt: Add WebCore/bindings to the include path. + +2010-07-09 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk> + + Reviewed by Xan Lopez. + + [GTK] Crashes when going back with page cache in unknown circunstances + https://bugs.webkit.org/show_bug.cgi?id=41710 + + Could not yet find a way to reproduce this in a layout test. The + issue is document being NULL, so this NULL-check should be enough + to get rid of the crash. We are working on trying to find a better + solution for these null cases, like attaching the document earlier + when openning a cached page. + + * page/EventHandler.cpp: + (WebCore::EventHandler::sendScrollEvent): + +2010-07-12 Alexander Pavlov <apavlov@chromium.org> + + Reviewed by Yury Semikhatsky. + + [Chromium] Crash when stepping on a breakpoint while debugging Web Inspector + https://bugs.webkit.org/show_bug.cgi?id=41958 + + * page/PageGroupLoadDeferrer.cpp: + (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer): + * page/PageGroupLoadDeferrer.h: + +2010-07-12 François Sausset <sausset@gmail.com> + + Reviewed by Kenneth Rohde Christiansen. + + Make the mathsize MathML attribute handle values in em, px, pt,... + https://bugs.webkit.org/show_bug.cgi?id=42067 + + Test: mathml/presentation/attributes.xhtml + + * css/mathml.css: + (math[mathsize="small"], mstyle[mathsize="small"], mo[mathsize="small"], mn[mathsize="small"], mi[mathsize="small"], mtext[mathsize="small"], mspace[mathsize="small"], ms[mathsize="small"]): + (math[mathsize="normal"], mstyle[mathsize="normal"], mo[mathsize="normal"], mn[mathsize="normal"], mi[mathsize="normal"], mtext[mathsize="normal"], mspace[mathsize="normal"], ms[mathsize="normal"]): + (math[mathsize="big"], mstyle[mathsize="big"], mo[mathsize="big"], mn[mathsize="big"], mi[mathsize="big"], mtext[mathsize="big"], mspace[mathsize="big"], ms[mathsize="big"]): + * mathml/MathMLElement.cpp: + (WebCore::MathMLElement::parseMappedAttribute): + +2010-07-12 Xan Lopez <xlopez@igalia.com> + + Reviewed by Gustavo Noronha. + + Fix compilation with sealed GTK+. + + * platform/gtk/GtkVersioning.h: + * platform/gtk/PasteboardHelper.cpp: + (WebCore::PasteboardHelper::fillDataObjectFromDropData): + +2010-07-12 François Sausset <sausset@gmail.com> + + Reviewed by Kenneth Rohde Christiansen. + + Fix a bug preventing msqrt and mfrac to use style color to draw themselves. + In mfrac, the fraction bar is now using the color defined by the element style instead of black. + In msqrt, the radical was always drawn in black due to a colorSpace problem. + https://bugs.webkit.org/show_bug.cgi?id=41889 + + Test: mathml/presentation/roots.xhtml + Test: mathml/presentation/fractions.xhtml + + * mathml/RenderMathMLFraction.cpp: + (WebCore::RenderMathMLFraction::paint): + * mathml/RenderMathMLSquareRoot.cpp: + (WebCore::RenderMathMLSquareRoot::paint): + +2010-07-12 Andreas Kling <andreas.kling@nokia.com> + + Reviewed by Antti Koivisto. + + Canvas: arc() with startAngle == endAngle shouldn't add to the path + https://bugs.webkit.org/show_bug.cgi?id=41420 + + Spec link: + http://www.whatwg.org/specs/web-apps/current-work/#dom-context-2d-stroke + + * html/canvas/CanvasRenderingContext2D.cpp: + (WebCore::CanvasRenderingContext2D::arc): + +2010-07-12 Shinichiro Hamaji <hamaji@chromium.org> + + Reviewed by Ojan Vafai. + + Update padding on Windows? + https://bugs.webkit.org/show_bug.cgi?id=38016 + + Remove internal padding and add 1px vertical padding for Windows. + + * css/themeWin.css: + (input[type="button"], input[type="submit"], input[type="reset"], input[type="file"]::-webkit-file-upload-button, button): + * rendering/RenderButton.cpp: + (WebCore::RenderButton::setupInnerStyle): + * rendering/RenderTheme.h: + * rendering/RenderThemeWin.cpp: + * rendering/RenderThemeWin.h: + * rendering/RenderThemeWince.cpp: + * rendering/RenderThemeWince.h: + +2010-07-12 Pavel Feldman <pfeldman@chromium.org> + + Not reviewed. Chromium tests fix. + + [Chromium, V8] r63057 regressed url tests. + + https://bugs.webkit.org/show_bug.cgi?id=42063 + + * bindings/scripts/CodeGeneratorV8.pm: + +2010-07-12 Steve Block <steveblock@google.com> + + Reviewed by Alexey Proskuryakov. + + XPath substring function does not correctly handle non-positive values for the position argument + https://bugs.webkit.org/show_bug.cgi?id=41913 + + This patch changes the behavior of the XPath evaluate function when a non-positive + position argument is supplied and no length argument is supplied. In this case, + we reset the position to 1. This follows the spec and matches the current behaviour + when a length argument is supplied. + + Test: fast/xpath/substring-non-positive-postion.html + + * xml/XPathFunctions.cpp: + (WebCore::XPath::FunSubstring::evaluate): + +2010-06-27 Jeremy Orlow <jorlow@chromium.org> + + Reviewed by Dumitru Daniliuc. + + Implement IDBObjectStore.get/set/remove + https://bugs.webkit.org/show_bug.cgi?id=41250 + + Implement these functions in IDBObjectStore, + add plumbing, teach IDBAny/Callbacks how to deal + with IDBKey, and a few small bits of cleanup. + + Test: Modified existing test to provide basic coverage. + Will add much more extensive layout test coverage + in future patches. + + * Android.derived.jscbindings.mk: + * Android.derived.v8bindings.mk: + * Android.jscbindings.mk: + * Android.mk: + * Android.v8bindings.mk: + * CMakeLists.txt: + * WebCore.gypi: + * WebCore.pri: + * WebCore.pro: + * WebCore.vcproj/WebCore.vcproj: + * WebCore.xcodeproj/project.pbxproj: + * bindings/js/JSIDBAnyCustom.cpp: + (WebCore::toJS): + * bindings/v8/custom/V8IDBAnyCustom.cpp: + (WebCore::toV8): + * storage/IDBAny.cpp: + (WebCore::IDBAny::idbKey): + (WebCore::IDBAny::set): + * storage/IDBAny.h: + (WebCore::IDBAny::): + * storage/IDBAny.idl: + * storage/IDBCallbacks.h: + * storage/IDBDatabaseRequest.h: + * storage/IDBDatabaseRequest.idl: + * storage/IDBKeyRange.h: + * storage/IDBObjectStore.h: + (WebCore::IDBObjectStore::): + * storage/IDBObjectStoreImpl.cpp: + (WebCore::IDBObjectStoreImpl::IDBObjectStoreImpl): + (WebCore::IDBObjectStoreImpl::get): + (WebCore::IDBObjectStoreImpl::set): + (WebCore::IDBObjectStoreImpl::remove): + * storage/IDBObjectStoreImpl.h: + * storage/IDBObjectStoreRequest.cpp: + (WebCore::IDBObjectStoreRequest::get): + (WebCore::IDBObjectStoreRequest::add): + (WebCore::IDBObjectStoreRequest::modify): + (WebCore::IDBObjectStoreRequest::addOrModify): + (WebCore::IDBObjectStoreRequest::remove): + * storage/IDBObjectStoreRequest.h: + * storage/IDBObjectStoreRequest.idl: + * storage/IDBRequest.cpp: + (WebCore::IDBRequest::onSuccess): + * storage/IDBRequest.h: + +2010-07-11 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Dan Bernstein. + + Implement animation-related methods for WebKitTestRunner + https://bugs.webkit.org/show_bug.cgi?id=42053 + + * WebCore.exp.in: Export Document::getElementById for WebKit2's benefit. + +2010-07-11 Adam Barth <abarth@webkit.org> + + Rubber-stamped by Eric Seidel + + Add a complete list of the HTML5 entities in JSON format. + + * html/HTMLEntityNames.json: Added. + +2010-07-11 Martin Robinson <mrobinson@igalia.com> + + Reviewed by Xan Lopez. + + [GTK] WebKitWebView should support drops + https://bugs.webkit.org/show_bug.cgi?id=39843 + + Add support for dropping content onto GTK+ WebViews. + + No new tests, as the DRT does not support simulating drops yet. + + * platform/gtk/ClipboardUtilitiesGtk.cpp: + (WebCore::dragOperationToGdkDragAction): Added. + (WebCore::gdkDragActionToDragOperation): Properly detect DragOperationEvery. + * platform/gtk/ClipboardUtilitiesGtk.h: Add declaration for dragOperationToGdkDragAction. + * platform/gtk/PasteboardHelper.cpp: + Add new target atom and rename the markup target type to match the others. + Add a method which fills a data object from drop data. + (WebCore::PasteboardHelper::initializeTargetList): Add support for new atoms. + (WebCore::selectionDataToUTF8String): Added this helper. + (WebCore::PasteboardHelper::getClipboardContents): Use the selectionDataToUTF8String helper. + (WebCore::PasteboardHelper::targetListForDataObject): Change to reflect markup atom rename. + (WebCore::PasteboardHelper::fillDataObjectFromDropData): Added. + (WebCore::PasteboardHelper::dropAtoms): Added. + * platform/gtk/PasteboardHelper.h: Add declarations of new methods. + +2010-07-10 Darin Adler <darin@apple.com> + + Reviewed by Anders Carlsson. + + Enhance content attribute reflection for URL attributes, including adding a non-empty option + https://bugs.webkit.org/show_bug.cgi?id=42040 + + Test: fast/dom/URL-attribute-reflection.html + + Changed syntax from [ReflectURL] to [Reflect,URL] and also added support for + a new option, NonEmpty, which implements the non-empty URL concept from the + HTML5 specification. + + * bindings/scripts/CodeGenerator.pm: Changed code to expect the Reflect and URL + extended attributes to come in separately. The URL one simply means "the string + of this attribute is a URL", since we don't have a distinct type for URL. Also + added a new NonEmpty extended attribute. + + * bindings/scripts/CodeGeneratorJS.pm: Removed now-unneeded code to handle ReflectURL. + * bindings/scripts/CodeGeneratorV8.pm: Ditto. + + * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Updated for new added test cases + and the fix I made to the reflectedCustomURLAttr test. + * bindings/scripts/test/CPP/WebDOMTestObj.h: Ditto. + * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp: Ditto. + * bindings/scripts/test/GObject/WebKitDOMTestObj.h: Ditto. + * bindings/scripts/test/JS/JSTestObj.cpp: Ditto. + * bindings/scripts/test/JS/JSTestObj.h: Ditto. + * bindings/scripts/test/ObjC/DOMTestObj.h: Ditto. + * bindings/scripts/test/ObjC/DOMTestObj.mm: Ditto. + * bindings/scripts/test/V8/V8TestObj.cpp: Ditto. Also, for some reason the V8 + bindig writes out the keywords into the generated file as comments, so the keyword + change had a direct efffect on the output file. + + * bindings/scripts/test/TestObj.idl: Changed the test cases for ReflectURL to use + the new syntax. Added test cases for NonEmpty. Fixed the name of + reflectedNonEmptyURLAttr, which accidentally was repeating reflectedURLAttr + instead; never noticed because we never compile the test output. + + * dom/Element.cpp: + (WebCore::Element::getNonEmptyURLAttribute): Added. For use by NonEmpty and also + by any code that wants to implement the non-empty URL content attribute semantic. + * dom/Element.h: Ditto. + + * html/HTMLAnchorElement.idl: Use Reflect,URL instead of ReflectURL. + * html/HTMLAreaElement.idl: Ditto. + * html/HTMLFrameElement.idl: Ditto. + * html/HTMLImageElement.idl: Ditto. + * html/HTMLInputElement.idl: Ditto. + * html/HTMLLinkElement.idl: Ditto. + * html/HTMLMediaElement.idl: Ditto. + * html/HTMLObjectElement.idl: Ditto. + * html/HTMLScriptElement.idl: Ditto. + * html/HTMLVideoElement.idl: Ditto. + +2010-07-10 Tony Gentilcore <tonyg@chromium.org> + + Reviewed by Darin Adler. + + Add missing derrived sources to xcode project + https://bugs.webkit.org/show_bug.cgi?id=42034 + + This allows --web-timing to work with build-webkit on OSX with JSC. + This should have been done in bug 41442. + + No new tests because no new functionality. + + * WebCore.xcodeproj/project.pbxproj: + +2010-07-10 Anders Carlsson <andersca@apple.com> + + Reviewed by Sam Weinig. + + Don't initialize plug-ins until allowed by the page + https://bugs.webkit.org/show_bug.cgi?id=42033 + + * WebCore.exp.in: + Export Document::addMediaCanStartListener and Document::removeMediaCanStartListener. + +2010-07-10 Sam Weinig <sam@webkit.org> + + Reviewed by Anders Carlsson. + + Patch for https://bugs.webkit.org/show_bug.cgi?id=42021 + isEqualNode should work for DocumentType nodes + + Test: fast/dom/Node/isEqualNode.html + + * dom/Node.cpp: + (WebCore::Node::isEqualNode): Add DocumentType logic from the DOM3 spec. + +2010-07-10 Daniel Bates <dbates@rim.com> + + Reviewed by Adam Barth. + + Move enum ReasonForCallingCanExecuteScripts to header ScriptControllerBase.h + https://bugs.webkit.org/show_bug.cgi?id=39339 + + Moved the enum ReasonForCallingCanExecuteScripts, which was + defined in both the JSC and V8 ScriptController.h file, into + a shared file called ScriptControllerBase.h. + + No functionality was changed, so no new tests. + + * GNUmakefile.am: Added file bindings/ScriptControllerBase.h. + * WebCore.gypi: Ditto. + * WebCore.pro: Ditto. + * WebCore.vcproj/WebCore.vcproj: Ditto. + * WebCore.vcproj/WebCoreCommon.vsprops: Ditto. + * WebCore.xcodeproj/project.pbxproj: Ditto. + * bindings/ScriptControllerBase.h: Added. + (WebCore::): + * bindings/js/ScriptController.h: #include ScriptControllerBase.h + * bindings/v8/ScriptController.h: Ditto. + +2010-07-10 Dan Bernstein <mitz@apple.com> + + Reviewed by Anders Carlsson. + + <rdar://problem/8153214> Continuation outlines in layers do not paint correctly + + Test: fast/inline/continuation-outlines-with-layers-2.html + + Continuation outlines are normally painted by the containing block. However, when the + block and the inline are not enclosed by the same self-painting layer, the inline has to + paint its own outlines. This was handled correctly only for the case where the inline had + its own self-painting layer, but now when an ancestor inline had the self-painting layer. + + * rendering/InlineFlowBox.cpp: + (WebCore::InlineFlowBox::paint): Instead of testing for having a self-painting layer, test + whether any intermediate box between the inline and the containing block has a self-painting + layer. + * rendering/RenderBlock.cpp: + (WebCore::RenderBlock::paintObject): Ditto. + * rendering/RenderObject.cpp: + (WebCore::RenderObject::enclosingBoxModelObject): Added this utility method. + * rendering/RenderObject.h: + +2010-07-10 François Sausset <sausset@gmail.com> + + Reviewed by Kenneth Rohde Christiansen. + + Build fix: syntax and typo issues + https://bugs.webkit.org/show_bug.cgi?id=41859 + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTagForInBody): + (WebCore::HTMLTreeBuilder::processStartTag): + +2010-07-10 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + HTMLTreeBuilder needs adjustForeignAttributes support + https://bugs.webkit.org/show_bug.cgi?id=42022 + + To add adjust foreign attributes support I had to add an + AtomicString (prefixed name) to QualifiedName hash. Once I had + done that, I decided it would be best for the other "adjust" functions + to share the same hash logic, so I moved them to using the same + AtomicString -> QualifiedName hash as well. + + Tested by html5lib/runner.html + + * dom/Attribute.h: + (WebCore::Attribute::parserSetName): + * html/HTMLTreeBuilder.cpp: + +2010-07-10 Rob Buis <rwlbuis@gmail.com> + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=41978 + Remove namespace prefixes from idl files + + No new tests, idl syntax fixes. + + * css/CSSImportRule.idl: + * css/CSSMediaRule.idl: + * css/CSSStyleSheet.idl: + * css/CSSVariablesRule.idl: + * svg/SVGAnimatedString.idl: + * svg/SVGColor.idl: + * svg/SVGDocument.idl: + * svg/SVGLangSpace.idl: + * svg/SVGSVGElement.idl: + * svg/SVGStringList.idl: + * svg/SVGStylable.idl: + * svg/SVGStyleElement.idl: + * svg/SVGTests.idl: + * svg/SVGZoomEvent.idl: + * xml/XPathEvaluator.idl: + +2010-07-10 Dumitru Daniliuc <dumi@chromium.org> + + Unreviewed, GTK build fix. + + * bindings/gobject/GObjectEventListener.h: + +2010-07-10 Dumitru Daniliuc <dumi@chromium.org> + + Reviewed by Darin Adler. + + Remove unnecessary includes in header files in WebCore/dom. + https://bugs.webkit.org/show_bug.cgi?id=41941 + + * css/StyleMedia.h: + * dom/BeforeLoadEvent.h: + * dom/CustomEvent.h: + * dom/DOMStringMap.h: + * dom/DeviceOrientationEvent.h: + * dom/EventListener.h: + * dom/MessagePort.h: + * dom/Node.cpp: + * dom/NodeFilter.h: + * dom/NodeRareData.h: + * dom/RegisteredEventListener.h: + * dom/SelectorNodeList.cpp: + * dom/SelectorNodeList.h: + * dom/StyleElement.h: + * dom/Traversal.h: + +2010-07-09 Tony Chang <tony@chromium.org> + + Reviewed by Ojan Vafai. + + crash in WebCore::CompositeEditCommand::splitTreeToNode when indenting pre + https://bugs.webkit.org/show_bug.cgi?id=38231 + + Test: editing/execCommand/indent-pre.html + + * editing/IndentOutdentCommand.cpp: + (WebCore::countParagraphs): + (WebCore::IndentOutdentCommand::indentRegion): Split text nodes into one node per paragraph + so moveParagraph doesn't get confused. + (WebCore::IndentOutdentCommand::splitTextNodes): + * editing/IndentOutdentCommand.h: + +2010-07-09 Erik Arvidsson <arv@chromium.org> + + Reviewed by Darin Adler. + + Computed style is not implemented for padding-start, padding-end, margin-start, margin-end + https://bugs.webkit.org/show_bug.cgi?id=41496 + + * css/CSSComputedStyleDeclaration.cpp: + (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): + * css/CSSProperty.cpp: + (WebCore::CSSProperty::resolveDirectionAwareProperty): This function resolves the property ID for a direction aware property. + * css/CSSProperty.h: + * css/CSSStyleSelector.cpp: Use helper function. + (WebCore::CSSStyleSelector::applyProperty): + +2010-07-09 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + HTML5 tree builder should pass some LayoutTests + https://bugs.webkit.org/show_bug.cgi?id=41991 + + Before this patch, we weren't attaching text nodes to the render tree, + which turns out to be important. :) + + This patch fixes more than 10,000 LayoutTests. + + * html/HTMLConstructionSite.cpp: + (WebCore::HTMLConstructionSite::attach): + (WebCore::HTMLConstructionSite::attachAtSite): + +2010-07-09 Patrick Gansterer <paroga@paroga.com> + + Reviewed by Darin Adler. + + [WINCE] Buildfix for TextEncodingRegistry + https://bugs.webkit.org/show_bug.cgi?id=41992 + + Renamed TextCodecWince to TextCodecWinCE. + + * platform/text/TextEncodingRegistry.cpp: + (WebCore::buildBaseTextCodecMaps): + (WebCore::extendTextCodecMaps): + +2010-07-09 Leon Clarke <leonclarke@google.com> + + Reviewed by Adam Barth. + + add support for link prefetching + https://bugs.webkit.org/show_bug.cgi?id=3652 + + Test: fast/dom/HTMLLinkElement/prefetch.html + + * Configurations/FeatureDefines.xcconfig: + * html/HTMLLinkElement.cpp: + (WebCore::HTMLLinkElement::tokenizeRelAttribute): + (WebCore::HTMLLinkElement::process): + * html/HTMLLinkElement.h: + (WebCore::HTMLLinkElement::RelAttribute::RelAttribute): + * loader/Cache.cpp: + (WebCore::createResource): + * loader/CachedResource.cpp: + (WebCore::CachedResource::data): + (WebCore::CachedResource::didAddClient): + * loader/CachedResource.h: + (WebCore::CachedResource::): + (WebCore::CachedResource::error): + (WebCore::CachedResource::isPrefetch): + (WebCore::CachedResource::schedule): + * loader/CachedScript.cpp: + * loader/CachedScript.h: + * loader/DocLoader.cpp: + (WebCore::DocLoader::requestLinkPrefetch): + (WebCore::DocLoader::canRequest): + (WebCore::DocLoader::incrementRequestCount): + (WebCore::DocLoader::decrementRequestCount): + * loader/DocLoader.h: + * loader/loader.cpp: + (WebCore::cachedResourceTypeToTargetType): + (WebCore::Loader::determinePriority): + (WebCore::Loader::load): + (WebCore::Loader::Host::servePendingRequests): + (WebCore::Loader::Host::didFinishLoading): + (WebCore::Loader::Host::didFail): + (WebCore::Loader::Host::didReceiveResponse): + (WebCore::Loader::Host::cancelPendingRequests): + * loader/loader.h: + (WebCore::Loader::): + * platform/network/ResourceRequestBase.h: + (WebCore::ResourceRequestBase::): + +2010-07-09 James Robinson <jamesr@chromium.org> + + Unreviewed build fix. Add #include to pick up ExceptionCode values for config (like Qt) where it's not picked up indirectly. + + * html/HTMLCanvasElement.cpp: + +2010-07-09 James Robinson <jamesr@chromium.org> + + Reviewed by Darin Adler. + + Removes CanvasSurface and moves all of its functionality to HTMLCanvasElement. + https://bugs.webkit.org/show_bug.cgi?id=42005 + + http://trac.webkit.org/changeset/55201 introduced a new base class for HTMLCanvasElement called CanvasSurface. + The intention was that this would allow for code sharing with the then-proposed OffscreenCanvas. However, + there is no OffscreenCanvas and there's unlikely to be one soon. Additionally CanvasSurface breaks + encapsulation pretty badly by doing "static_cast<HTMLCanvasElement* const>(this)". Until an abstraction is + really needed we should just use HTMLCanvasElement when we want to talk about a canvas. + + This patch moves all of CanvasSurface's functionality back up to HTMLCanvasElement and reorders the header + to be a bit more logical. + + Refactor with no behavior change, thus no new tests. + + * CMakeLists.txt: + * GNUmakefile.am: + * WebCore.gypi: + * WebCore.pro: + * WebCore.vcproj/WebCore.vcproj: + * WebCore.xcodeproj/project.pbxproj: + * dom/CanvasSurface.cpp: Removed. + * dom/CanvasSurface.h: Removed. + * html/HTMLCanvasElement.cpp: + (WebCore::HTMLCanvasElement::HTMLCanvasElement): + (WebCore::HTMLCanvasElement::willDraw): + (WebCore::HTMLCanvasElement::setSurfaceSize): + (WebCore::HTMLCanvasElement::toDataURL): + (WebCore::HTMLCanvasElement::convertLogicalToDevice): + (WebCore::HTMLCanvasElement::securityOrigin): + (WebCore::HTMLCanvasElement::styleSelector): + (WebCore::HTMLCanvasElement::createImageBuffer): + (WebCore::HTMLCanvasElement::drawingContext): + (WebCore::HTMLCanvasElement::buffer): + (WebCore::HTMLCanvasElement::baseTransform): + * html/HTMLCanvasElement.h: + (WebCore::HTMLCanvasElement::setObserver): + (WebCore::HTMLCanvasElement::width): + (WebCore::HTMLCanvasElement::height): + (WebCore::HTMLCanvasElement::size): + (WebCore::HTMLCanvasElement::toDataURL): + (WebCore::HTMLCanvasElement::setOriginTainted): + (WebCore::HTMLCanvasElement::originClean): + (WebCore::HTMLCanvasElement::hasCreatedImageBuffer): + +2010-07-09 Simon Fraser <simon.fraser@apple.com> + + Reviewed by Darin Adler. + + Calling layoutTestController.layerTreeAsText() should update layout + https://bugs.webkit.org/show_bug.cgi?id=41818 + + Need to call updateLayout() before we check for any layers, not after, + since layout will update compositing, and may create layers. + + * page/Frame.cpp: + (WebCore::Frame::layerTreeAsText): + +2010-07-09 Kenneth Russell <kbr@google.com> + + Reviewed by Nate Chapin. + + bufferSubData causes crash in WebGLBuffer::associateBufferSubData + https://bugs.webkit.org/show_bug.cgi?id=42004 + + Test: fast/canvas/webgl/index-validation-crash-with-buffer-sub-data.html + + * html/canvas/WebGLBuffer.cpp: + (WebCore::WebGLBuffer::associateBufferData): + - Allocate m_elementArrayBuffer for entry point taking only size. + Guard against allocation failures of m_elementArrayBuffer. + (WebCore::WebGLBuffer::associateBufferSubData): + - Guard against any possibility of crashes due to m_elementArrayBuffer being NULL. + +2010-07-09 Dumitru Daniliuc <dumi@chromium.org> + + Unreviewed, but pre-approved by Eric Seidel. + + Remove unnecessary includes in header files in WebCore/css. + https://bugs.webkit.org/show_bug.cgi?id=41941 + + * css/CSSComputedStyleDeclaration.h: + * css/CSSFontFaceSource.cpp: + (WebCore::CSSFontFaceSource::getFontData): + * css/CSSFontFaceSource.h: + * css/CSSPrimitiveValueMappings.h: + * css/StyleMedia.h: + +2010-07-09 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Get rid of manual case maps in HTMLTreeBuilder + https://bugs.webkit.org/show_bug.cgi?id=42000 + + No functional change, thus no tests. + + * html/HTMLTreeBuilder.cpp: + +2010-07-09 Tony Gentilcore <tonyg@chromium.org> + + Reviewed by Dimitri Glazkov. + + Implement performance.timing.navigationStart + https://bugs.webkit.org/show_bug.cgi?id=41815 + + See: http://dev.w3.org/2006/webapi/WebTiming/#nt-navigation-start + + * loader/FrameLoader.cpp: + (WebCore::FrameLoader::loadWithDocumentLoader): + * loader/FrameLoaderTypes.h: + (WebCore::FrameLoadTimeline::FrameLoadTimeline): + * page/Timing.cpp: + (WebCore::Timing::navigationStart): + +2010-07-09 Jesus Sanchez-Palencia <jesus.palencia@openbossa.org> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] GraphicsLayerQt must have syncCompositingStateForThisLayerOnly() implemented + https://bugs.webkit.org/show_bug.cgi?id=41954 + + Add GraphicsLayerQt::syncCompositingStateForThisLayerOnly, a non-recursive + implementation of GraphicsLayerQt::syncCompositingState and which targets + the current layer only. + + * platform/graphics/qt/GraphicsLayerQt.cpp: + (WebCore::GraphicsLayerQt::syncCompositingStateForThisLayerOnly): + * platform/graphics/qt/GraphicsLayerQt.h: + +2010-07-09 David Kozub <zub@linux.fjfi.cvut.cz> + + Reviewed by Darin Adler. + + Fix build by adding missing html/TimeRanges.idl to CMakeLists.txt. + + https://bugs.webkit.org/show_bug.cgi?id=41945 + + No functional changes, thus no tests. + + * CMakeLists.txt: + +2010-07-09 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Fix SVG tag name casing for HTMLTreeBuilder + https://bugs.webkit.org/show_bug.cgi?id=41998 + + Tested by html5lib/runner.html + + * html/HTMLTreeBuilder.cpp: + (WebCore::): + +2010-07-09 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Implement SVG attribute case mapping for HTMLTreeBuilder + https://bugs.webkit.org/show_bug.cgi?id=41949 + + Tested by html5lib/runner.html. + + * html/HTMLTreeBuilder.cpp: + +2010-07-09 Andy Estes <aestes@apple.com> + + Reviewed by Adele Peterson. + + Remove the workaround for a Core Animation bug on platforms where the + bug has been fixed. + https://bugs.webkit.org/show_bug.cgi?id=41927 + <rdar://problem/7920153> + + * platform/graphics/mac/GraphicsLayerCA.mm: + (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): Add + a compile-time check for platforms that have a Core Animation bug that + needs working around. + +2010-07-08 Tony Gentilcore <tonyg@chromium.org> + + Reviewed by Nate Chapin. + + Implement unloadEventEnd, loadEventStart, and loadEventEnd for Web Timing + https://bugs.webkit.org/show_bug.cgi?id=41332 + + Test: fast/dom/webtiming.html + + * loader/FrameLoader.cpp: + (WebCore::FrameLoader::stopLoading): + (WebCore::FrameLoader::loadWithDocumentLoader): + * loader/FrameLoader.h: + (WebCore::FrameLoader::frameLoadTimeline): + * loader/FrameLoaderTypes.h: + (WebCore::FrameLoadTimeline::FrameLoadTimeline): + * page/DOMWindow.cpp: + (WebCore::DOMWindow::dispatchLoadEvent): + * page/Timing.cpp: + (WebCore::Timing::navigationStart): + (WebCore::Timing::unloadEventEnd): + (WebCore::Timing::loadEventStart): + (WebCore::Timing::loadEventEnd): + * page/Timing.h: + * page/Timing.idl: + +2010-07-09 Dumitru Daniliuc <dumi@chromium.org> + + Unreviewed, but pre-approved by Eric Seidel. + + Remove all unnecessary includes from the header files in WebCore/accessibility/. + https://bugs.webkit.org/show_bug.cgi?id=41941 + + * accessibility/AXObjectCache.h: + * accessibility/AccessibilityListBox.cpp: + * accessibility/AccessibilityListBox.h: + * accessibility/AccessibilityMenuList.h: + * accessibility/mac/AccessibilityObjectWrapper.h: + +2010-07-09 Patrick Gansterer <paroga@paroga.com> + + Reviewed by Kent Tamura. + + [WINCE] Buildfix for EventHandlerWin + https://bugs.webkit.org/show_bug.cgi?id=41909 + + Use Clipboard.h instead of ClipboardWin.h on WinCE. + + * page/win/EventHandlerWin.cpp: + +2010-07-09 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r62946. + http://trac.webkit.org/changeset/62946 + https://bugs.webkit.org/show_bug.cgi?id=41965 + + AppCache inspector support should be enabled in WebKit ToT. + (Requested by pfeldman_ on #webkit). + + * inspector/front-end/StoragePanel.js: + (WebInspector.StoragePanel): + (WebInspector.StoragePanel.prototype.reset): + (WebInspector.StoragePanel.prototype.addApplicationCache): + +2010-07-09 François Sausset <sausset@gmail.com> + + Reviewed by Kenneth Rohde Christiansen. + + Implement MathML mathcolor & mathbackground attributes + https://bugs.webkit.org/show_bug.cgi?id=41895 + + Test: mathml/presentation/attributes.xhtml + + * dom/MappedAttributeEntry.h: + (WebCore::): + * mathml/MathMLElement.cpp: + (WebCore::MathMLElement::MathMLElement): + (WebCore::MathMLElement::mapToEntry): + (WebCore::MathMLElement::parseMappedAttribute): + * mathml/MathMLElement.h: + * mathml/mathattrs.in: + +2010-07-09 Xiaomei Ji <xji@chromium.org> + + Reviewed by David Levin. + + Fix characters with unicode-bidi-mirror property are not correctly + mirrored in Linux. + https://bugs.webkit.org/show_bug.cgi?id=41305 + + Since harfbuzz does not do mirroring, chromium should iterate each + character in the string and mirror it if needed before passing the + string to harfbuzz for shaping. + + Test: fast/text/international/bidi-mirror-he-ar.html + + * platform/graphics/chromium/FontLinux.cpp: + (WebCore::TextRunWalker::TextRunWalker): + (WebCore::TextRunWalker::~TextRunWalker): + (WebCore::TextRunWalker::mirrorCharacters): + + +2010-07-09 Anders Carlsson <andersca@apple.com> + + Reviewed by Simon Fraser. + + Instantiate Netscape plug-ins, pass geometry information to Plugin + https://bugs.webkit.org/show_bug.cgi?id=41960 + + * WebCore.exp.in: + Export ScrollView::contentsToWindow. + +2010-07-09 Patrick Gansterer <paroga@paroga.com> + + Reviewed by Kent Tamura. + + [WINCE] Buildfix for FrameWince after r47440 + https://bugs.webkit.org/show_bug.cgi?id=41904 + + * page/wince/FrameWince.cpp: Added property svn:eol-style. + (WebCore::computePageRectsForFrame): + (WebCore::imageFromSelection): + +2010-07-09 Vitaly Repeshko <vitalyr@chromium.org> + + Reviewed by Pavel Feldman. + + [v8] Call JS gc in a fresh context to avoid retaining the current one. + https://bugs.webkit.org/show_bug.cgi?id=41963 + http://crbug.com/46571 + + * bindings/v8/ScriptController.cpp: + (WebCore::ScriptController::collectGarbage): + +2010-07-09 Kenneth Russell <kbr@google.com> + + Reviewed by Dimitri Glazkov. + + Crash with uniform array test + https://bugs.webkit.org/show_bug.cgi?id=36028 + + * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp: + (WebCore::vertexAttribAndUniformHelperf): + (WebCore::uniformHelperi): + (WebCore::uniformMatrixHelper): + - Fixed type tests and casting of incoming arrays. + * html/canvas/WebGLRenderingContext.cpp: + (WebCore::WebGLRenderingContext::getUniform): + - Fixed crash when null WebGLUniform is passed to getUniform. + +2010-07-09 Chris Fleizach <cfleizach@apple.com> + + Reviewed by Darin Adler. + + AX: text editing not spoken by VO on web view contenteditable textbox + https://bugs.webkit.org/show_bug.cgi?id=41912 + + Test: platform/mac/accessibility/selection-value-changes-for-aria-textbox.html + + * accessibility/AccessibilityRenderObject.cpp: + (WebCore::AccessibilityRenderObject::renderObjectIsObservable): + +2010-07-09 Michael Nordman <michaeln@google.com> + + Reviewed by Dumitru Daniliuc. + + Use class ProgressEvent when raising appcache related progress events and + set the 'total', 'loaded', and 'lengthComputable' attributes. + Also raise the final progress event with the 'total' and 'loaded' attribute + values are equal to one another to keep pace with the spec for this feature. + https://bugs.webkit.org/show_bug.cgi?id=37602 + + Test: http/tests/appcache/progress-counter.html + + * loader/appcache/ApplicationCacheGroup.cpp: + (WebCore::ApplicationCacheGroup::ApplicationCacheGroup): + (WebCore::ApplicationCacheGroup::didFinishLoadingManifest): + (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete): + (WebCore::ApplicationCacheGroup::startLoadingEntry): + (WebCore::CallCacheListenerTask::create): + (WebCore::CallCacheListenerTask::performTask): + (WebCore::CallCacheListenerTask::CallCacheListenerTask): + (WebCore::ApplicationCacheGroup::postListenerTask): + * loader/appcache/ApplicationCacheGroup.h: + (WebCore::ApplicationCacheGroup::postListenerTask): + * loader/appcache/ApplicationCacheHost.cpp: + (WebCore::ApplicationCacheHost::notifyDOMApplicationCache): + (WebCore::ApplicationCacheHost::stopDeferringEvents): + (WebCore::ApplicationCacheHost::dispatchDOMEvent): + * loader/appcache/ApplicationCacheHost.h: + (WebCore::ApplicationCacheHost::DeferredEvent::DeferredEvent): + +2010-07-09 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + Reviewed by Gustavo Noronha Silva. + + Bug 41340 - [GStreamer] Subtle race condition during seeks + https://bugs.webkit.org/show_bug.cgi?id=41340 + + * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp: + (webKitWebSrcStop): + (webKitWebSrcNeedDataMainCb): + (webKitWebSrcNeedDataCb): + (webKitWebSrcEnoughDataMainCb): + (webKitWebSrcEnoughDataCb): + (webKitWebSrcSeekDataCb): + (StreamingClient::didFinishLoading): + Fix two subtle race conditions that can happen during seeks: + - The timeout callback could be called before the callback ID is + assigned to the instance private data. This causes the ID to + be set after the callback has finished and breaks all future + processing. + - The source must not go EOS while a seek is pending because + this confuses appsrc due to the different threads involved here. + +2010-07-09 Simon Hausmann <simon.hausmann@nokia.com> + + Reviewed by Tor Arne Vestbø. + + [Qt] Removed hard-coded enabled default of video support + + Properly detect video/audio instead of defaulting to true.Properly detect video/audio instead of defaulting to true.Properly detect video/audio instead of defaulting to true.Properly detect video/audio instead of defaulting to true. + + * WebCore.pri: + +2010-07-09 Ben Murdoch <benm@google.com> + + Reviewed by Steve Block. + + [Arm] Missing NaN check in XPath substring function + https://bugs.webkit.org/show_bug.cgi?id=41862 + + Test: fast/xpath/substring-nan-position.html + + * xml/XPathFunctions.cpp: + (WebCore::XPath::FunSubstring::evaluate): Add an isnan() + to the value returned from evaluating the position + argument and early out and return the empty string. + +2010-07-09 Simon Hausmann <simon.hausmann@nokia.com> + + Reviewed by Tor Arne Vestbø. + + [Qt] Prospective build fix. + + Moved the media element detection from WebCore.pro into WebCore.pri, where + all the features are detected. This is also used by build-webkit to determine + the defaults, which may be the reason for the build breakage. + + * WebCore.pri: + * WebCore.pro: + +2010-07-09 Simon Hausmann <simon.hausmann@nokia.com> + + Reviewed by Tor Arne Vestbø. + + [Qt] Re-enable support for QtMultimediaKit as backend for the media elements + + Experimental support is re-enabled if QtMobility is available and the Qt + version is 4.7 or above. + + * WebCore.pro: + * platform/graphics/MediaPlayer.cpp: + * platform/graphics/qt/MediaPlayerPrivateQt.cpp: + (WebCore::MediaPlayerPrivate::supportsType): Adapt to latest QtMultimediaKit API changes. + (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): + (WebCore::MediaPlayerPrivate::totalBytes): + +2010-07-09 Pavel Feldman <pfeldman@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: do not show default tooltip when detailed network info is available. + + https://bugs.webkit.org/show_bug.cgi?id=41957 + + * English.lproj/localizedStrings.js: + * inspector/front-end/ResourcesPanel.js: + (WebInspector.ResourcesPanel): + (WebInspector.ResourcesPanel.prototype.reset): + (WebInspector.ResourcesPanel.prototype.showResource): + (WebInspector.ResourcesPanel.prototype._getPopoverAnchor): + (WebInspector.ResourcesPanel.prototype._showPopover): + (WebInspector.ResourceTimeCalculator.prototype.computeBarGraphLabels): + +2010-07-09 François Sausset <sausset@gmail.com> + + Reviewed by Beth Dakin. + + Correct the default font variant of mtext (regular instead of italic). + https://bugs.webkit.org/show_bug.cgi?id=41626 + + Add test to be sure that only <mi> elements use italic fonts by default. + Update test with fractions to take into account the correct behaviour of mtext (regular instead of italic). + + * css/mathml.css: + (mi): + +2010-07-09 Tony Gentilcore <tonyg@chromium.org> + + Reviewed by Dimitri Glazkov. + + Implement performance.navigation.type + https://bugs.webkit.org/show_bug.cgi?id=41564 + + Tests: fast/dom/navigation-type-back-forward.html + fast/dom/navigation-type-navigate.html + fast/dom/navigation-type-reload.html + + * page/Navigation.cpp: + (WebCore::Navigation::type): + * page/Navigation.h: + (WebCore::Navigation::): + * page/Navigation.idl: + +2010-07-09 Pavel Feldman <pfeldman@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: hide AppCache until implemented. + + https://bugs.webkit.org/show_bug.cgi?id=41858 + + * inspector/front-end/StoragePanel.js: + (WebInspector.StoragePanel): + (WebInspector.StoragePanel.prototype.reset): + (WebInspector.StoragePanel.prototype.addApplicationCache): + +2010-07-09 François Sausset <sausset@gmail.com> + + Reviewed by Kenneth Rohde Christiansen. + + Set the good default behaviour for the columalign attribute on MathML mtable element + https://bugs.webkit.org/show_bug.cgi?id=41631 + + Test update: mathml/tables.xhtml + + * css/mathml.css: + (math): + +2010-07-09 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r62937. + http://trac.webkit.org/changeset/62937 + https://bugs.webkit.org/show_bug.cgi?id=41955 + + Crashes SnowLeopard leaks and Windows debug bot in fast/xsl + /xslt-relative-path.xml, with assertion in + XSLTProcessorLibxslt.cpp:264 (Requested by WildFox on + #webkit). + + * xml/XSLTProcessor.h: + (WebCore::XSLTProcessor::XSLTProcessor): + * xml/XSLTProcessorLibxslt.cpp: + (WebCore::docLoaderFunc): + (WebCore::setXSLTLoadCallBack): + (WebCore::xsltStylesheetPointer): + (WebCore::XSLTProcessor::transformToString): + +2010-07-09 Yael Aharon <yael.aharon@nokia.com> + + Reviewed by Laszlo Gombos. + + NotificationPresenter needs a cancelRequestPermission API + https://bugs.webkit.org/show_bug.cgi?id=41783 + + Updated NotificationPresenter API, to use ScriptExecutionContext instead of origin. + Added new API NotificationPresenter::cancelRequestsForPermision + The new API will be implemented and a test will be added in a followup patch. + + * notifications/Notification.cpp: + (WebCore::Notification::Notification): + * notifications/NotificationCenter.cpp: + (WebCore::NotificationCenter::checkPermission): + (WebCore::NotificationCenter::requestPermission): + (WebCore::NotificationCenter::disconnectFrame): + * notifications/NotificationCenter.h: + * notifications/NotificationPresenter.h: + +2010-07-09 Andreas Wictor <andreas.wictor@xcerion.com> + + Reviewed by Alexey Proskuryakov. + + Remove global variables from XSLTProcessorLibxslt.cpp + https://bugs.webkit.org/show_bug.cgi?id=41348 + + Remove the globalProcessor and globalDocLoader global variables + by using the _private field that exists on most libxml structs. + + No new tests, existing tests covers this. + + * xml/XSLTProcessor.h: + (WebCore::XSLTProcessor::sourceNode): + (WebCore::XSLTProcessor::XSLTProcessor): + * xml/XSLTProcessorLibxslt.cpp: + (WebCore::registeredXSLTProcessors): + (WebCore::registeredXSLStyleSheets): + (WebCore::docLoaderFunc): + (WebCore::clearSavedStyleSheetPointers): + (WebCore::xsltStylesheetPointer): + (WebCore::XSLTProcessor::transformToString): + +2010-07-09 Adam Barth <abarth@webkit.org> + + Unreviewed build fix. + + We recently taught the HTMLTokenizer to recognize self-closing tags, + <http://trac.webkit.org/changeset/62926>, but that confused the + LegacyHTMLTreeBuilder. It turns out that it's much happier if we never + say a tag is self-closing. + + * html/HTMLTreeBuilder.cpp: + (WebCore::convertToOldStyle): + +2010-07-09 Nikolas Zimmermann <nzimmermann@rim.com> + + Reviewed by Rob Buis. + + svg/custom/use-instanceRoot-event-bubbling.xhtml test crashes + https://bugs.webkit.org/show_bug.cgi?id=41931 + + Be careful to not mutate (marking it for recreation) the shadow tree, while building it. + The recent change that cloneNode() properly synchronizes the style/SVG attributes caused this problem. + + Fixes crash seen on the buildbots in svg/custom/use-instanceRoot-event-bubbling.xhtml. + + * svg/SVGUseElement.cpp: + (WebCore::SVGUseElement::SVGUseElement): + (WebCore::SVGUseElement::recalcStyle): + (WebCore::SVGUseElement::buildShadowAndInstanceTree): + (WebCore::SVGUseElement::invalidateShadowTree): + * svg/SVGUseElement.h: + (WebCore::SVGUseElement::setUpdatesBlocked): + +2010-07-09 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Skip leading newlines in <textarea> + https://bugs.webkit.org/show_bug.cgi?id=41947 + + We would have caught this earlier with the ASSERT. + + * html/HTMLTokenizer.cpp: + (WebCore::HTMLTokenizer::nextToken): + +2010-07-08 Pavel Feldman <pfeldman@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: Provide detailed network info in the resources panel. + + https://bugs.webkit.org/show_bug.cgi?id=40227 + + * English.lproj/localizedStrings.js: + * inspector/InspectorController.cpp: + (WebCore::InspectorController::willSendRequest): + (WebCore::InspectorController::didReceiveResponse): + * inspector/InspectorController.h: + * inspector/InspectorResource.cpp: + (WebCore::InspectorResource::InspectorResource): + (WebCore::InspectorResource::updateResponse): + (WebCore::InspectorResource::updateScriptObject): + (WebCore::InspectorResource::buildObjectForTiming): + * inspector/InspectorResource.h: + * inspector/front-end/ResourcesPanel.js: + (WebInspector.ResourcesPanel): + (WebInspector.ResourcesPanel.prototype.elementsToRestoreScrollPositionsFor): + (WebInspector.ResourcesPanel.prototype._getPopoverAnchor): + (WebInspector.ResourcesPanel.prototype._showPopover): + (WebInspector.ResourcesPanel.prototype.hide): + (WebInspector.ResourceTimeCalculator.prototype.computeBarGraphLabels): + (WebInspector.ResourceGraph): + * inspector/front-end/inspector.js: + (WebInspector.updateResource): + * platform/network/ResourceLoadTiming.h: + (WebCore::ResourceLoadTiming::create): + (WebCore::ResourceLoadTiming::deepCopy): + (WebCore::ResourceLoadTiming::operator==): + (WebCore::ResourceLoadTiming::ResourceLoadTiming): + * platform/network/ResourceRequestBase.h: + (WebCore::ResourceRequestBase::reportLoadTiming): + (WebCore::ResourceRequestBase::setReportLoadTiming): + (WebCore::ResourceRequestBase::ResourceRequestBase): + * platform/network/ResourceResponseBase.cpp: + (WebCore::ResourceResponseBase::connectionID): + (WebCore::ResourceResponseBase::setConnectionID): + * platform/network/ResourceResponseBase.h: + +2010-07-09 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Implement self closing start tag state in the tokenizer + https://bugs.webkit.org/show_bug.cgi?id=41946 + + Amazingly we got this far w/o needing self closing. + The LegacyHTMLTreeBuilder clearly uses the self-closing + state, but the fact that we never exposed it seems to + not have caused any test failures. Sad. + + The new HTMLTreeBuilder only needs the self closing state + for foreign content mode (and a few parse error cases). + + * html/HTMLToken.h: + (WebCore::HTMLToken::setSelfClosing): + * html/HTMLTokenizer.cpp: + (WebCore::HTMLTokenizer::nextToken): + * html/HTMLTreeBuilder.cpp: + (WebCore::): + +2010-07-09 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Add basic "in foreign content" support to the TreeBuilder + https://bugs.webkit.org/show_bug.cgi?id=41943 + + This is covered by numerous tests in html5lib/runner.html. + + "in foreign content" mode requires us to be able to process + tokens using the "secondary insertion mode". We have to set + a fake insertion mode to do that, so much of this code is enabling + setting of fake insertion modes, and then later restoration of the + insertion mode after execution. + + There is a lot more of foreign content mode to implement, but this is + a good start resulting in huge test progressions. + + * html/HTMLConstructionSite.cpp: + (WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement): + - Use createHTMLElementAndAttachToCurrent instead of copy/paste code. + - No need to include HTMLElementFactory in this file. + * html/HTMLConstructionSite.h: + - RedirectToFosterParentGuard does not need to be a friend class. + * html/HTMLElementStack.cpp: + (WebCore::HTMLElementStack::isOnlyHTMLElementsInScope): + * html/HTMLElementStack.h: + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTagForInBody): + (WebCore::): + * html/HTMLTreeBuilder.h: + (WebCore::HTMLTreeBuilder::setInsertionMode): + (WebCore::HTMLTreeBuilder::isFakeInsertionMode): + (WebCore::HTMLTreeBuilder::setFakeInsertionMode): + +2010-07-09 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Coalesce text nodes when foster parenting + https://bugs.webkit.org/show_bug.cgi?id=41921 + + Introduces the notion of an AttachmentSite to the overall + HTMLConstructionSite. Maybe we should rename HTMLConstructionSite to + HTMLConstructionArea since we construct things all over the tree? :) + + There's something wrong in the internal layering in this class, but I + can't quite see what it is. I added a FIXME for the some of the + symptoms. + + * html/HTMLConstructionSite.cpp: + (WebCore::HTMLConstructionSite::attach): + (WebCore::HTMLConstructionSite::attachAtSite): + (WebCore::HTMLConstructionSite::insertTextNode): + (WebCore::HTMLConstructionSite::findFosterSite): + (WebCore::HTMLConstructionSite::fosterParent): + * html/HTMLConstructionSite.h: + +2010-07-08 Nikolas Zimmermann <nzimmermann@rim.com> + + Reviewed by Dirk Schulze. + + RenderSVGRoot does not include border/padding while repainting + https://bugs.webkit.org/show_bug.cgi?id=41854 + + RenderSVGRoot does not include border/padding in the repaint rect. + clippedOverflowRectForRepaint() was missing. Affects all DRT results, + as <svg> now gets properly sized. + + Test: svg/custom/repaint-moving-svg-and-div.xhtml + + * rendering/RenderSVGRoot.cpp: + (WebCore::RenderSVGRoot::repaintRectInLocalCoordinates): + (WebCore::RenderSVGRoot::clippedOverflowRectForRepaint): + * rendering/RenderSVGRoot.h: + +2010-07-09 Albert J. Wong <ajwong@chromium.org> + + Reviewed by Nikolas Zimmermann. + + Add RuntimeEnabledFeatures::timeRangesEnabled() required by r62880 + + https://bugs.webkit.org/show_bug.cgi?id=41935 + + * bindings/generic/RuntimeEnabledFeatures.cpp: + (WebCore::RuntimeEnabledFeatures::timeRangesEnabled): + Add in timeRangesEnabled() implementation. + * bindings/generic/RuntimeEnabledFeatures.h: + Add in timeRangesEnabled() declaration. + + +2010-07-09 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Add setInsertionMode setter in preparation for "in foreign content" mode + https://bugs.webkit.org/show_bug.cgi?id=41942 + + "in foreign content" mode needs to be able to use a fake + insertion mode for processing. We need to be able to save the + original insertion mode, set a fake one, and then restore the original + if it wasn't changed. To detect changes, we need all callsites to + use a setInsertionMode accessor instead of m_insertionMode = + + No functional changes, thus no tests. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTagForInBody): + (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup): + (WebCore::HTMLTreeBuilder::processStartTagForInTable): + (WebCore::HTMLTreeBuilder::processStartTag): + (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody): + (WebCore::HTMLTreeBuilder::setInsertionModeAndEnd): + (WebCore::HTMLTreeBuilder::processEndTagForInTableBody): + (WebCore::HTMLTreeBuilder::processEndTagForInCell): + (WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption): + (WebCore::HTMLTreeBuilder::processTrEndTagForInRow): + (WebCore::HTMLTreeBuilder::processEndTag): + (WebCore::HTMLTreeBuilder::processCharacter): + (WebCore::HTMLTreeBuilder::processDefaultForInTableTextMode): + (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag): + (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag): + (WebCore::HTMLTreeBuilder::processScriptStartTag): + +2010-07-09 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Add insertForeignElement in preparation for adding "in foreign content" support + https://bugs.webkit.org/show_bug.cgi?id=41940 + + No functional changes, thus no tests. + + * html/HTMLConstructionSite.cpp: + (WebCore::HTMLConstructionSite::insertForeignElement): + (WebCore::HTMLConstructionSite::createElement): + (WebCore::HTMLConstructionSite::createHTMLElement): + * html/HTMLConstructionSite.h: + +2010-07-09 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Implementing pending table characters + https://bugs.webkit.org/show_bug.cgi?id=41916 + + This turned out to not be as scary as I thought it would be. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processDoctypeToken): + (WebCore::HTMLTreeBuilder::processStartTag): + (WebCore::HTMLTreeBuilder::processEndTag): + (WebCore::HTMLTreeBuilder::processComment): + (WebCore::HTMLTreeBuilder::processCharacter): + (WebCore::HTMLTreeBuilder::processEndOfFile): + (WebCore::HTMLTreeBuilder::processDefaultForInTableTextMode): + * html/HTMLTreeBuilder.h: + +2010-07-08 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Handle whitespace correctly + https://bugs.webkit.org/show_bug.cgi?id=41907 + + This patch introduces an extra memcpy in the character token pipeline. + I'll remove the memcpy in a future patch. + + * html/HTMLConstructionSite.cpp: + (WebCore::HTMLConstructionSite::insertTextNode): + * html/HTMLConstructionSite.h: + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processCharacter): + * html/HTMLTreeBuilder.h: + +2010-07-09 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Move more mode handling into functions for later re-use + https://bugs.webkit.org/show_bug.cgi?id=41939 + + No functional changes, thus no tests. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processEndTagForInTableBody): + (WebCore::HTMLTreeBuilder::processEndTagForInRow): + (WebCore::HTMLTreeBuilder::processEndTagForInCell): + (WebCore::HTMLTreeBuilder::processEndTag): + * html/HTMLTreeBuilder.h: + +2010-07-09 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Add new popUntilPopped functions to clean up code + https://bugs.webkit.org/show_bug.cgi?id=41936 + + Pretty self explanatory. Much awesome code reduction. + + No functional changes, thus no tests. + + * html/HTMLElementStack.cpp: + (WebCore::HTMLElementStack::popUntilPopped): + * html/HTMLElementStack.h: + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody): + (WebCore::HTMLTreeBuilder::callTheAdoptionAgency): + (WebCore::HTMLTreeBuilder::processEndTagForInBody): + (WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption): + (WebCore::HTMLTreeBuilder::processTableEndTagForInTable): + (WebCore::HTMLTreeBuilder::processEndTag): + +2010-07-09 Eric Seidel <eric@webkit.org> + + Unreviewed. Just renaming (discussed with Adam Barth). + + Rename createElement* to createHTMLElement* to better reflect + behavior. This is in preparation for adding foreign content support. + + * html/HTMLConstructionSite.cpp: + (WebCore::HTMLConstructionSite::createHTMLElementAndAttachToCurrent): + (WebCore::HTMLConstructionSite::insertHTMLHtmlElement): + (WebCore::HTMLConstructionSite::insertHTMLHeadElement): + (WebCore::HTMLConstructionSite::insertHTMLBodyElement): + (WebCore::HTMLConstructionSite::insertHTMLElement): + (WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement): + (WebCore::HTMLConstructionSite::createHTMLElement): + * html/HTMLConstructionSite.h: + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::callTheAdoptionAgency): + +2010-07-09 Eric Seidel <eric@webkit.org> + + Unreviewed. Just renaming (discussed with Adam Barth). + + Rename insertElement to insertHTMLElement and + insertSelfClosingElement to insertSelfClosingHTMLElement + to better reflect what they actually do. This is in preparation + for adding foreign content support. + + * html/HTMLConstructionSite.cpp: + (WebCore::HTMLConstructionSite::insertHTMLElement): + (WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement): + (WebCore::HTMLConstructionSite::insertFormattingElement): + (WebCore::HTMLConstructionSite::reconstructTheActiveFormattingElements): + (WebCore::HTMLConstructionSite::fosterParent): + * html/HTMLConstructionSite.h: + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processCloseWhenNestedTag): + (WebCore::HTMLTreeBuilder::processStartTagForInBody): + (WebCore::HTMLTreeBuilder::processStartTagForInTable): + (WebCore::HTMLTreeBuilder::processStartTag): + (WebCore::HTMLTreeBuilder::callTheAdoptionAgency): + (WebCore::HTMLTreeBuilder::processStartTagForInHead): + (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag): + (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag): + +2010-07-08 Rob Buis <rwlbuis@gmail.com> + + Reviewed by Eric Seidel. + + Implement SVGSVGElement.getElementById + https://bugs.webkit.org/show_bug.cgi?id=41655 + + Implement getElementById for SVGSVGElement by trying to + reuse Document.getElementById. If that fails to find an + SVG element in the document fragent do a subtree search. + + Test: svg/custom/svg-getelementid.xhtml + + * svg/SVGSVGElement.cpp: + (WebCore::SVGSVGElement::getElementById): + * svg/SVGSVGElement.h: + * svg/SVGSVGElement.idl: + +2010-07-08 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Unwrap a few || blocks for easier readability + https://bugs.webkit.org/show_bug.cgi?id=41838 + + No functional change, thus no tests. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::adjustedLexerState): + (WebCore::HTMLTreeBuilder::processStartTagForInBody): + (WebCore::HTMLTreeBuilder::processStartTagForInTable): + (WebCore::HTMLTreeBuilder::processStartTag): + (WebCore::HTMLTreeBuilder::processEndTagForInBody): + (WebCore::HTMLTreeBuilder::processEndTag): + (WebCore::HTMLTreeBuilder::processComment): + (WebCore::HTMLTreeBuilder::processStartTagForInHead): + +2010-07-08 Sam Magnuson <smagnuson@netflix.com> + + Reviewed by Simon Hausmann. + + [Qt] for debugging purposes nice I'm contributing back my FPS + counter in the AnimationQtBase + https://bugs.webkit.org/show_bug.cgi?id=40381 + + Simply start a timer and count frames in the AnimationQtBase and + spit out the FPS count at the end of a single animation. + + No new tests: this is a simple debugging aid. + + * platform/graphics/qt/GraphicsLayerQt.cpp: + (WebCore::AnimationQt::updateState): + (WebCore::AnimationQt::updateCurrentTime): + (WebCore::TransformAnimationQt::updateState): + (WebCore::OpacityAnimationQt::updateState): + +2010-07-08 Sam Magnuson <smagnuson@netflix.com> + + Reviewed by Simon Hausmann. + + [Qt] instance objects created for QObjects are somtimes GC'd + https://bugs.webkit.org/show_bug.cgi?id=40352 + + In markAggregate loop over all the current fields and for any that + still have a dynamic property or a child, mark them as + well. Otherwise the proxy instance will go away and the JS that + was bound to it will be lost. + + * bridge/qt/qt_instance.cpp: + (JSC::Bindings::QtInstance::getQtInstance): + (JSC::Bindings::QtInstance::removeCachedMethod): + (JSC::Bindings::QtInstance::markAggregate): + (JSC::Bindings::QtInstance::getPropertyNames): + +2010-07-08 Ilya Tikhonovsky <loislo@chromium.org> + + Reviewed by Pavel Feldman. + + WebInspector: migrate InspectorDOMAgent to the generated version of + InspectorFrontend interface. This is the next step on the way to + Remote Debugging. + + * bindings/js/ScriptEventListener.cpp: + (WebCore::eventListenerHandlerBody): + (WebCore::eventListenerHandlerLocation): + * bindings/js/ScriptEventListener.h: + * bindings/v8/ScriptEventListener.cpp: + (WebCore::eventListenerHandlerBody): + (WebCore::eventListenerHandlerLocation): + * bindings/v8/ScriptEventListener.h: + * inspector/CodeGeneratorInspector.pm: + * inspector/InspectorCSSStore.cpp: + (WebCore::InspectorCSSStore::inspectorStyleSheet): + * inspector/InspectorController.cpp: + (WebCore::InspectorController::connectFrontend): + * inspector/InspectorController.h: + (WebCore::InspectorController::inspectorFrontend2): + * inspector/InspectorDOMAgent.cpp: + (WebCore::InspectorDOMAgent::InspectorDOMAgent): + (WebCore::InspectorDOMAgent::setDocument): + (WebCore::InspectorDOMAgent::handleEvent): + (WebCore::InspectorDOMAgent::pushChildNodesToFrontend): + (WebCore::InspectorDOMAgent::getEventListenersForNode): + (WebCore::InspectorDOMAgent::buildObjectForNode): + (WebCore::InspectorDOMAgent::buildArrayForElementAttributes): + (WebCore::InspectorDOMAgent::buildArrayForContainerChildren): + (WebCore::InspectorDOMAgent::buildObjectForEventListener): + (WebCore::InspectorDOMAgent::didInsertDOMNode): + (WebCore::InspectorDOMAgent::getStyles): + (WebCore::InspectorDOMAgent::getAllStyles): + (WebCore::InspectorDOMAgent::getStyleSheet): + (WebCore::InspectorDOMAgent::getRuleRangesForStyleSheetId): + (WebCore::InspectorDOMAgent::getInlineStyle): + (WebCore::InspectorDOMAgent::getComputedStyle): + (WebCore::InspectorDOMAgent::buildObjectForAttributeStyles): + (WebCore::InspectorDOMAgent::buildArrayForCSSRules): + (WebCore::InspectorDOMAgent::buildArrayForPseudoElements): + (WebCore::InspectorDOMAgent::applyStyleText): + (WebCore::InspectorDOMAgent::toggleStyleEnabled): + (WebCore::InspectorDOMAgent::setRuleSelector): + (WebCore::InspectorDOMAgent::addRule): + (WebCore::InspectorDOMAgent::buildObjectForStyle): + (WebCore::InspectorDOMAgent::populateObjectWithStyleProperties): + (WebCore::InspectorDOMAgent::buildArrayForDisabledStyleProperties): + (WebCore::InspectorDOMAgent::buildObjectForStyleSheet): + (WebCore::InspectorDOMAgent::buildObjectForRule): + (WebCore::InspectorDOMAgent::toArray): + (WebCore::InspectorDOMAgent::reportNodesAsSearchResults): + * inspector/InspectorDOMAgent.h: + (WebCore::InspectorDOMAgent::create): + * inspector/InspectorFrontend.cpp: + * inspector/InspectorFrontend.h: + * inspector/InspectorFrontend2.idl: + * inspector/front-end/inspector.js: + (WebInspector.dispatchMessageFromBackend): + +2010-07-08 Simon Fraser <simon.fraser@apple.com> + + Reviewed by Darin Adler. + + compositing/iframes/iframe-resize.html displays incorrectly after the resize + https://bugs.webkit.org/show_bug.cgi?id=41794 + + The clip and scroll layers of a composited iframe's RenderLayerCompositor are updated from + from updateGraphicsLayerGeometry(), but this is too early to get the correct layoutWidth and + layoutHeight from the FrameView which happen later in layout. So when a widget size changes, + call updateAfterWidgetResize() directly on the RenderLayerBacking (if any). + + * rendering/RenderLayerBacking.cpp: + (WebCore::RenderLayerBacking::updateAfterWidgetResize): New method that updates the clip + and scroll layers of the iframe's content RenderLayerCompositor. + (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Call updateAfterWidgetResize() + * rendering/RenderLayerBacking.h: Add updateAfterWidgetResize(). + * rendering/RenderWidget.cpp: + (WebCore::RenderWidget::setWidgetGeometry): Call updateAfterWidgetResize(). + +2010-07-08 Simon Fraser <simon.fraser@apple.com> + + Reviewed by Dan Bernstein. + + Calling layoutTestController.layerTreeAsText() should update layout + https://bugs.webkit.org/show_bug.cgi?id=41818 + + Call updateLayout() on the document before obtaining the layer tree. + This will update compositing layers. + + * page/Frame.cpp: + (WebCore::Frame::layerTreeAsText): + +2010-07-08 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Get my head wrapped around processCharacter + https://bugs.webkit.org/show_bug.cgi?id=41812 + + The bulk of the patch is just stubbing out functions to document what + the spec tells us to do. I'll implement these functions in subsequent + patches. + + * html/HTMLConstructionSite.h: + (WebCore::HTMLConstructionSite::insertLeadingWhitespace): + (WebCore::HTMLConstructionSite::insertLeadingWhitespaceWithActiveFormattingElements): + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processCharacter): + * html/HTMLTreeBuilder.h: + (WebCore::HTMLTreeBuilder::skipLeadingWhitespace): + +2010-07-08 Tony Chang <tony@chromium.org> + + Reviewed by Ojan Vafai. + + WebCore::InsertLineBreakCommand::shouldUseBreakElement ReadAV@NULL + https://bugs.webkit.org/show_bug.cgi?id=30116 + Fixing the crash causes text insertions on hidden elements to get ignored + (not a new bug). This is https://bugs.webkit.org/show_bug.cgi?id=40342 + + Test: editing/inserting/return-key-in-hidden-textarea.html + + * editing/InsertLineBreakCommand.cpp: + (WebCore::InsertLineBreakCommand::doApply): + * editing/InsertParagraphSeparatorCommand.cpp: + (WebCore::InsertParagraphSeparatorCommand::doApply): + +2010-07-08 Sam Weinig <sam@webkit.org> + + Reviewed by Oliver Hunt. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=41923 + TimeRanges should expose a JS constructor + + * html/TimeRanges.idl: Remove [OmitConstructor]. + * page/DOMWindow.idl: Add constructor. + +2010-07-08 Erik Arvidsson <arv@chromium.org> + + Reviewed by Ojan Vafai. + + Add missing padding-end and margin-end CSS properties. + https://bugs.webkit.org/show_bug.cgi?id=25761 + + Tests: fast/css/margin-start-end.html + fast/css/padding-start-end.html + + * css/CSSComputedStyleDeclaration.cpp: + (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): + * css/CSSParser.cpp: + (WebCore::CSSParser::parseValue): + * css/CSSPropertyNames.in: + * css/CSSStyleSelector.cpp: + (WebCore::CSSStyleSelector::applyProperty): + * inspector/front-end/SourceCSSTokenizer.js: + (WebInspector.SourceCSSTokenizer): + +2010-07-08 Aaron Boodman <aa@chromium.org> + + Reviewed by Timothy Hatcher. + + Add the ability for user scripts and user styles to affect just the top frame. + + https://bugs.webkit.org/show_bug.cgi?id=41529 + + Tests: userscripts/user-script-all-frames.html + userscripts/user-script-top-frame-only.html + userscripts/user-style-all-frames.html + userscripts/user-style-top-frame-only.html + + * WebCore.base.exp: Update PageGroup method signatures. + * dom/Document.cpp: + (WebCore::Document::pageGroupUserSheets): Check allFrames before injecting. + * page/Frame.cpp: + (WebCore::Frame::injectUserScriptsForWorld): Ditto. + * page/PageGroup.cpp: + (WebCore::PageGroup::addUserScriptToWorld): + (WebCore::PageGroup::addUserStyleSheetToWorld): + * page/PageGroup.h: + * page/UserScript.h: + (WebCore::UserScript::UserScript): + (WebCore::UserScript::injectedFrames): + * page/UserScriptTypes.h: + (WebCore::): + * page/UserStyleSheet.h: + (WebCore::UserStyleSheet::UserStyleSheet): + (WebCore::UserStyleSheet::injectedFrames): + +2010-07-08 Adele Peterson <adele@apple.com> + + Reviewed by Jon Honeycutt, Adam Roben, and Darin Adler. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=41721 + <rdar://problem/8158561> Missing plug-in indicator should have a pressed state + + Test: plugins/clicking-missing-plugin-fires-delegate.html + + * html/HTMLPlugInElement.cpp: + (WebCore::HTMLPlugInElement::HTMLPlugInElement): Initialize m_isCapturingMouseEvents. + (WebCore::HTMLPlugInElement::detach): If we're still capturing when getting detached, clear the capturing node on the EventHandler. + (WebCore::HTMLPlugInElement::defaultEventHandler): Call handleMissingPluginIndicatorEvent when the missing plugin indicator is showing. + * html/HTMLPlugInElement.h: + (WebCore::HTMLPlugInElement::isCapturingMouseEvents): + (WebCore::HTMLPlugInElement::setIsCapturingMouseEvents): + * page/ChromeClient.h: + (WebCore::ChromeClient::shouldMissingPluginMessageBeButton): Added default implementation. + * rendering/RenderEmbeddedObject.cpp: + (WebCore::replacementTextRoundedRectPressedColor): + (WebCore::RenderEmbeddedObject::RenderEmbeddedObject): + (WebCore::RenderEmbeddedObject::setMissingPluginIndicatorIsPressed): Added. Causes a repaint when the state changes. + (WebCore::RenderEmbeddedObject::paintReplaced): Call getReplacementTextGeometry. + (WebCore::RenderEmbeddedObject::getReplacementTextGeometry): Factored this out so it can be used in paintReplaced and in isInMissingPluginIndicator. + (WebCore::RenderEmbeddedObject::isInMissingPluginIndicator): Hit test to see if the mouse event is in the missing plugin indicator. + (WebCore::RenderEmbeddedObject::handleMissingPluginIndicatorEvent): Capture mouse events as needed and track the pressed appearance. + * rendering/RenderEmbeddedObject.h: + +2010-07-08 James Robinson <jamesr@google.com> + + Reviewed by Darin Fisher. + + Allow resizing and getting the texture id from an offscreen GLES2Context + https://bugs.webkit.org/show_bug.cgi?id=41828 + + When using an offscreen GLES2Context the caller needs to be able to resize the backing store + managed by the embedder and get access to a texture id to pass to the compositor. WebGL + does these actions in an indirect way, it will be refactored to use this path. + + * platform/chromium/GLES2Context.h: + +2010-07-02 Ojan Vafai <ojan@chromium.org> + + Reviewed by Adam Barth. + + Crash in RenderObject::containingBlock when clearing selection in a display:none node. + https://bugs.webkit.org/show_bug.cgi?id=41523 + + updateStyleIfNeeded before clearing the selection in the RenderView. Otherwise, + m_selectionStart and m_selectionEnd in RenderView point to garbage object. + This fixes the crash because updateStyleIfNeeded clears the selection before + clobbering nodes that contain the selection. + + Test: editing/selection/crash-on-clear-selection.html + + * editing/SelectionController.cpp: + (WebCore::SelectionController::updateAppearance): + +2010-07-08 Brent Fulgham <bfulgham@webkit.org> + + Reviewed by Xan Lopez. + + Correct a mistake in calculating squiggle extents. The entire + quantity was being divided by two, rather than just the unitWidth. + This error caused the squiggle to be about half the expected length. + + * platform/graphics/cairo/DrawErrorUnderline.h: + (drawErrorUnderline): + +2010-07-08 John Abd-El-Malek <jam@chromium.org> + + Reviewed by Darin Fisher. + + [V8] Navigation policy doesn't play nicely with pepper plugins + https://bugs.webkit.org/show_bug.cgi?id=41864 + + * bindings/v8/V8Utilities.cpp: + (WebCore::callingOrEnteredFrame): + (WebCore::shouldAllowNavigation): + (WebCore::navigateIfAllowed): + +2010-07-08 Jon Honeycutt <jhoneycutt@apple.com> + + Missing plug-ins may cause an assertion failure. + https://bugs.webkit.org/show_bug.cgi?id=41900 + + Reviewed by Adele Peterson. + + Test: plugins/missing-plugin.html + + * plugins/PluginView.cpp: + (WebCore::PluginView::~PluginView): + Check whether m_instance is null before trying to remove it from the + map. Trying to remove a null instance results in an assertion failure. + (WebCore::PluginView::PluginView): + Initialize m_instance to 0, because there is an early return that may + skip its being assigned its proper value. + +2010-07-08 Darin Adler <darin@apple.com> + + Reviewed by Oliver Hunt. + + Fix a test failure seen only on the Leopard bot. + + * bindings/js/JSSharedWorkerCustom.cpp: + (WebCore::JSSharedWorkerConstructor::constructJSSharedWorker): + If SharedWorker::create returns an exception, don't try to create a wrapper + for its return value, which can be 0. + +2010-07-08 Albert J. Wong <ajwong@chromium.org> + + Not reviewed, build break fix for chromium. + + A new MediaControlElementType enum was added which caused a warning in + the Chromium build. + + * rendering/RenderMediaControlsChromium.cpp: + (WebCore::RenderMediaControlsChromium::paintMediaControlsPart): + Add MediaVolumeSliderMuteButton enumartion entry. + +2010-07-08 Dmitry Titov <dimich@chromium.org> + + Reviewed by David Levin. + + Remove IDL declarations and stubs for navigator.registerProtocolHandler and navigator.registerContentHandler. + https://bugs.webkit.org/show_bug.cgi?id=41878 + + This is practically a rollback of http://trac.webkit.org/changeset/50477. + + * page/Chrome.cpp: + * page/Chrome.h: + * page/ChromeClient.h: + * page/Navigator.cpp: + * page/Navigator.h: + * page/Navigator.idl: + +2010-07-08 Xan Lopez <xlopez@igalia.com> + + Reviewed by Darin Adler. + + Fix adoptRef assertion failures caused by stack-allocated ResourceHandle objects + https://bugs.webkit.org/show_bug.cgi?id=41823 + + Create the ResourceHandle manually for now instead of calling + ::create, since that methods does a few extra checks that make us + fail a couple of HTTP tests. + + * platform/network/soup/ResourceHandleSoup.cpp: + (WebCore::): + +2010-07-08 Alexey Proskuryakov <ap@apple.com> + + Reviewed by David Levin. + + https://bugs.webkit.org/show_bug.cgi?id=41886 + Shorten access control failure explanation messages + + * loader/CrossOriginAccessControl.cpp: + (WebCore::passesAccessControlCheck): + * loader/CrossOriginPreflightResultCache.cpp: + (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginMethod): + (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders): + Removed "response header field" parts from error text - it's long, but doesn't add much + to header field name. + + * platform/network/ResourceErrorBase.cpp: + * platform/network/ResourceErrorBase.h: + * xml/XMLHttpRequest.cpp: + (WebCore::XMLHttpRequest::didFail): + * loader/DocumentThreadableLoader.cpp: + (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): + (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest): + (WebCore::DocumentThreadableLoader::didReceiveResponse): + (WebCore::DocumentThreadableLoader::preflightFailure): + Renamed the constant for domain. WebCore shouldn't be creating errors observable by WebKit + clients, because it can't create a platform error, and cannot load a localized string. + We don't treat cross origin access check failures as true loading failures, so we don't tell + clients about these. + +2010-07-08 Eric Carlson <eric.carlson@apple.com> + + Reviewed by Dan Bernstein. + + Mac OS X media controls should have a way to adjust volume incrementally + https://bugs.webkit.org/show_bug.cgi?id=41718 + <rdar://problem/5679472> + + * css/CSSPrimitiveValueMappings.h: + (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Handle MediaVolumeSliderMuteButtonPart. + + * css/CSSSelector.cpp: + (WebCore::CSSSelector::pseudoId): Handle PseudoMediaControlsVolumeSliderMuteButton. + (WebCore::nameToPseudoTypeMap): Define mediaControlsVolumeSliderMuteButton. + (WebCore::CSSSelector::extractPseudoType): Handle PseudoMediaControlsVolumeSliderMuteButton. + + * css/CSSSelector.h: + (WebCore::CSSSelector::): Define PseudoMediaControlsVolumeSliderMuteButton. + + * css/CSSValueKeywords.in: Define media-volume-slider-mute-button. + + * css/mediaControls.css: + (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button): New. + + * css/mediaControlsQuickTime.css: + (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel): Add "overflow: visible" + so volume slider pop-up will be visible. + + (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button): Make + mute button 14x12 instead of 15x14 so it matches the size in the volume slider. + + (audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container): + (audio::-webkit-media-controls-volume-slider, video::-webkit-media-controls-volume-slider): + (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button): + New. + + * platform/ThemeTypes.h: Define MediaVolumeSliderMuteButtonPart. + + * rendering/MediaControlElements.cpp: + (WebCore::MediaControlInputElement::MediaControlInputElement): Handle MEDIA_CONTROLS_VOLUME_SLIDER_MUTE_BUTTON. + (WebCore::MediaControlMuteButtonElement::MediaControlMuteButtonElement): Add ButtonLocation + parameter both mute buttons can be created. + (WebCore::MediaControlMuteButtonElement::create): Ditto. + + * rendering/MediaControlElements.h: Define MediaVolumeSliderMuteButton and ButtonLocation. + + * rendering/RenderMedia.cpp: + (WebCore::RenderMedia::styleDidChange): Update volume slider mute button. + (WebCore::RenderMedia::createMuteButton): Pass ButtonLocation parameter to MediaControlMuteButtonElement::create. + (WebCore::RenderMedia::createVolumeSliderMuteButton): New. + (WebCore::RenderMedia::updateControls): Deal with volume slider mute button. + (WebCore::RenderMedia::updateVolumeSliderContainer): Don't assume all ports want to position + the volume slider in the same place, call new volumeSliderOffsetFromMuteButton theme function. + (WebCore::RenderMedia::forwardEvent): Handle volume slider mute button. + * rendering/RenderMedia.h: + + * rendering/RenderTheme.cpp: + (WebCore::RenderTheme::paint): Handle MediaVolumeSliderMuteButtonPart. + (WebCore::RenderTheme::volumeSliderOffsetFromMuteButton): New, return location previously hard + coded in RenderMedia::updateVolumeSliderContainer. + * rendering/RenderTheme.h: + + * rendering/RenderThemeMac.h: + * rendering/RenderThemeMac.mm: + (WebCore::RenderThemeMac::adjustMediaSliderThumbSize): Deal with the volume slider thumb. + (WebCore::RenderThemeMac::paintMediaVolumeSliderContainer): New, call the WKSI paint function + for this button. + (WebCore::RenderThemeMac::paintMediaVolumeSliderTrack): Ditto. + (WebCore::RenderThemeMac::paintMediaVolumeSliderThumb): Ditto. + (WebCore::RenderThemeMac::shouldRenderMediaControlPart): Draw the volume slider parts when + using the new controller UI for a movie that has audio. + (WebCore::RenderThemeMac::volumeSliderOffsetFromMuteButton): New, position the volume slider + directly above the mute button. + + * rendering/style/RenderStyleConstants.h: Define MEDIA_CONTROLS_VOLUME_SLIDER_MUTE_BUTTON. + +2010-07-08 Antonio Gomes <tonikitoo@webkit.org> + + Unreviewed complementary fix for r62815 + + One last time change made me blind to a "!" in a if statment. + + * editing/EditorCommand.cpp: + (WebCore::executeToggleStyle): + +2010-07-07 Ojan Vafai <ojan@chromium.org> + + Reviewed by Darin Adler. + + Regression: Selection anchor + focus swap when arrow keys after setBaseAndExtent + https://bugs.webkit.org/show_bug.cgi?id=32605 + + Only have selections be non-directional when they are set via the mouse. + Otherwise, all selections are directional. + + Test: editing/selection/extend-forward-after-set-base-and-extent.html + + * WebCore.base.exp: + * editing/SelectionController.cpp: + (WebCore::SelectionController::setSelection): + * editing/SelectionController.h: + (WebCore::SelectionController::setSelection): + * page/EventHandler.cpp: + (WebCore::EventHandler::selectClosestWordFromMouseEvent): + (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent): + (WebCore::EventHandler::handleMousePressEventTripleClick): + (WebCore::EventHandler::handleMousePressEventSingleClick): + (WebCore::EventHandler::updateSelectionForMouseDrag): + +2010-07-08 Antonio Gomes <tonikitoo@webkit.org> + + Reviewed by Ojan Vafai. + + Refactor platform dependent editing behavior code out of Settings (part II) + https://bugs.webkit.org/show_bug.cgi?id=39854 + + Mac port is currently the only port relying on a style to be present on the start + of a selection to consider the style as applied or not. All other ports + have to have the style present in all text node of the selection for such. + + Patch makes situations that depend on this check like this to be controlled by + the EditingBehavior class. + + Refactoring, so no new tests needed. + + * editing/EditingBehavior.h: + (WebCore::EditingBehavior::shouldToggleStyleBasedOnStartOfSelection): + * editing/EditorCommand.cpp: + (WebCore::executeToggleStyle): + +2010-07-08 Anders Carlsson <andersca@apple.com> + + Reviewed by Sam Weinig. + + Add stubbed out PluginView class + https://bugs.webkit.org/show_bug.cgi?id=41879 + + Export functions needed by WebKit2. + + * WebCore.exp.in: + +2010-07-08 Ben Murdoch <benm@google.com> + + Reviewed by Pavel Feldman. + + Fix build break in V8ConsoleCustom.cpp + https://bugs.webkit.org/show_bug.cgi?id=40825 + + No new tests as just fixing a build break. + + * bindings/v8/custom/V8ConsoleCustom.cpp: Guard profilesAccessorGetter + appropriately. + +2010-07-08 Sam Weinig <sam@webkit.org> + + Reviewed by Anders Carlsson. + + Pass Page to BackForwardControllerClient::createBackForwardList since it + may be called before implementations of BackForwardControllerClient have + access to a Page. + + * history/BackForwardController.cpp: + (WebCore::BackForwardController::BackForwardController): + * history/BackForwardControllerClient.h: + +2010-07-08 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r62778. + http://trac.webkit.org/changeset/62778 + https://bugs.webkit.org/show_bug.cgi?id=41866 + + Broke svg/W3C-SVG-1.1/text-intro-05-t.svg in debug (Requested + by pfeldman on #webkit). + + * platform/graphics/chromium/FontLinux.cpp: + (WebCore::TextRunWalker::TextRunWalker): + (WebCore::TextRunWalker::~TextRunWalker): + +2010-07-08 Vitaly Repeshko <vitalyr@chromium.org> + + Reviewed by Pavel Feldman. + + Fix adoptRef usage violation in IDBObjectStoreRequest + https://bugs.webkit.org/show_bug.cgi?id=41869 + + * storage/IDBObjectStoreRequest.cpp: + (WebCore::IDBObjectStoreRequest::IDBObjectStoreRequest): + +2010-07-08 Sam Weinig <sam@webkit.org> + + Another chromium build fix. + + * history/BackForwardListChromium.cpp: + (WebCore::BackForwardListImpl::goBack): + (WebCore::BackForwardListImpl::goForward): + (WebCore::BackForwardListImpl::backListWithLimit): + (WebCore::BackForwardListImpl::forwardListWithLimit): + (WebCore::BackForwardListImpl::containsItem): + (WebCore::BackForwardListImpl::removeItem): + +2010-07-08 Sam Weinig <sam@webkit.org> + + Fix Chromium build. + + * WebCore.gyp/WebCore.gyp: + +2010-07-08 Sam Weinig <sam@webkit.org> + + Reviewed by Anders Carlsson. + + Patch for https://bugs.webkit.org/show_bug.cgi?id=41826 + Convert BackForwardList to an abstract base class and add BackForwardListImpl + as the concrete implementation of it. + + * CMakeLists.txt: + * GNUmakefile.am: + * WebCore.exp.in: + * WebCore.gypi: + * WebCore.pro: + * WebCore.vcproj/WebCore.vcproj: + * WebCore.xcodeproj/project.pbxproj: + * history/BackForwardController.cpp: + (WebCore::BackForwardController::BackForwardController): + * history/BackForwardController.h: + * history/BackForwardList.cpp: Removed. + * history/BackForwardList.h: + (WebCore::BackForwardList::~BackForwardList): + (WebCore::BackForwardList::isBackForwardListImpl): + (WebCore::BackForwardList::BackForwardList): + * history/BackForwardListChromium.cpp: + * history/BackForwardListImpl.cpp: Copied from WebCore/history/BackForwardList.cpp. + * history/BackForwardListImpl.h: Copied from WebCore/history/BackForwardList.h. + (WebCore::BackForwardListImpl::isBackForwardListImpl): + +2010-07-08 Vitaly Repeshko <vitalyr@chromium.org> + + Reviewed by Pavel Feldman. + + Fix adoptRef usage violations (mostly in chromium) + https://bugs.webkit.org/show_bug.cgi?id=41863 + + * bindings/v8/V8DOMWrapper.cpp: + (WebCore::V8DOMWrapper::wrapNativeNodeFilter): + * bindings/v8/V8NodeFilterCondition.h: + (WebCore::V8NodeFilterCondition::create): + * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp: + (WebCore::getNamedItems): + * bindings/v8/custom/V8HTMLCollectionCustom.cpp: + (WebCore::getNamedItems): + * bindings/v8/custom/V8HTMLFormElementCustom.cpp: + (WebCore::V8HTMLFormElement::namedPropertyGetter): + * bindings/v8/custom/V8HTMLSelectElementCustom.cpp: + (WebCore::V8HTMLSelectElement::namedPropertyGetter): + * bindings/v8/custom/V8NamedNodesCollection.h: + (WebCore::V8NamedNodesCollection::create): + (WebCore::V8NamedNodesCollection::V8NamedNodesCollection): + * storage/IDBDatabaseRequest.cpp: + (WebCore::IDBDatabaseRequest::IDBDatabaseRequest): + * storage/IndexedDatabaseRequest.cpp: + (WebCore::IndexedDatabaseRequest::IndexedDatabaseRequest): + +2010-07-08 Xan Lopez <xlopez@igalia.com> + + Reviewed by Gustavo Noronha. + + Silence a few noisy build rules. + + * GNUmakefile.am: + +2010-07-08 Andreas Kling <andreas.kling@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] Canvas putImageData() resets painter state + https://bugs.webkit.org/show_bug.cgi?id=41827 + + Use drawImage() to copy pixels in putImageData() instead of QPixmap::operator= + + Test: fast/canvas/canvas-state-intact-after-putImageData.html + + * platform/graphics/qt/ImageBufferQt.cpp: + (WebCore::putImageData): + +2010-07-08 Andrey Kosyakov <caseq@chromium.org> + + Reviewed by Pavel Feldman. + + Web Inspector: Do not invoke shortcuts popup upon bare '?' if it's typed + into an input field. + https://bugs.webkit.org/show_bug.cgi?id=41760 + + * inspector/front-end/inspector.js: + (WebInspector.documentKeyDown): + +2010-07-08 Patrick Gansterer <paroga@paroga.com> + + Reviewed by Kent Tamura. + + [WINCE] Buildfix for EventHandler + https://bugs.webkit.org/show_bug.cgi?id=41829 + + SM_MENUDROPALIGNMENT isn't supported on WinCE. + + * page/EventHandler.cpp: + (WebCore::EventHandler::sendContextMenuEventForKey): + +2010-07-08 Xiaomei Ji <xji@chromium.org> + + Reviewed by David Levin. + + Fix characters with unicode-bidi-mirror property are not correctly + mirrored in Linux. + https://bugs.webkit.org/show_bug.cgi?id=41305 + + Since harfbuzz does not do mirroring, chromium should iterate each + character in the string and mirror it if needed before passing the + string to harfbuzz for shaping. + + Test: fast/text/international/bidi-mirror-he-ar.html + + * platform/graphics/chromium/FontLinux.cpp: + (WebCore::TextRunWalker::TextRunWalker): + (WebCore::TextRunWalker::~TextRunWalker): + +2010-07-08 Nikolas Zimmermann <nzimmermann@rim.com> + + Reviewed by Rob Buis & Dirk Schulze. + + SVG text transformed incorrectly when a transform and gradient applied + https://bugs.webkit.org/show_bug.cgi?id=41563 + + When rendering filled/stroked text with a gradient, RenderSVGResourceGradient creates a mask image, + renders the text into the image, and then clips the current context against that image buffer, + and filling a rect afterwards. This happened in the wrong coordinate space so far. Don't actually + try to compute the right transformation matrix (which failed), but extract it directly from the + GraphicsContext and apply this transformation to the mask image context. + + Fixes pixellation in svg/batik/text/textEffect3.svg and makes the new test svg/custom/text-rotated-gradient.svg pass. + Only affects CoreGraphics platforms. + + Test: svg/custom/text-rotated-gradient.svg + + * rendering/RenderSVGResourceGradient.cpp: + (WebCore::absoluteTransformFromContext): + (WebCore::createMaskAndSwapContextForTextGradient): + (WebCore::clipToTextMask): + +2010-07-07 Alexander Pavlov <apavlov@chromium.org> + + Reviewed by Darin Fisher. + + [Chromium] Crash when re-entering message loop + https://bugs.webkit.org/show_bug.cgi?id=41697 + + A Chromium-specific test case will be submitted into Chromium shortly. + + * page/PageGroupLoadDeferrer.cpp: + (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer): + * page/PageGroupLoadDeferrer.h: + (WebCore::PageGroupLoadDeferrer::nextDeferrer): + +2010-07-07 Yury Semikhatsky <yurys@chromium.org> + + Reviewed by Pavel Feldman. + + Web Inspector: skip breakpoints when script is already paused + https://bugs.webkit.org/show_bug.cgi?id=41768 + + Test: inspector/debugger-no-nested-pause.html + + * bindings/v8/ScriptDebugServer.cpp: + (WebCore::ScriptDebugServer::handleV8DebugEvent): + +2010-07-08 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + WebCore/benchmarks/parser/html-parser.html spends a lot of time in deprecatedParseURL + https://bugs.webkit.org/show_bug.cgi?id=41807 + + Wow. This was an awful bug. We were always taking the slow case + every time we parsed a URL. This is about a 10% speedup on our + parsing benchmark, and might cause as much as a 1% speedup for Apple's + PLT (even though I can't run that). + + We still spend a lot of time in deprecatedParseURL. We might consider + inlining it if its being kept around much longer. + + No behavioral change, just fixing a broken optimization. + + * css/CSSHelper.cpp: + (WebCore::deprecatedParseURL): + - We only need to strip characters <= '\r', not >. + +2010-07-08 Yury Semikhatsky <yurys@chromium.org> + + Reviewed by Pavel Feldman. + + Web Inspector: factor out common part of debugger tests + https://bugs.webkit.org/show_bug.cgi?id=41836 + + * bindings/js/ScriptDebugServer.cpp: + (WebCore::ScriptDebugServer::recompileAllJSFunctions): postpone script recompilation if JS stack is not empty. + +2010-07-08 Patrick Gansterer <paroga@paroga.com> + + Reviewed by Kent Tamura. + + Buildfix for !ENABLE(SVG_ANIMATION) after r51567. + https://bugs.webkit.org/show_bug.cgi?id=41803 + + * svg/SVGDocumentExtensions.cpp: + (WebCore::SVGDocumentExtensions::sampleAnimationAtTime): + +2010-07-07 Pavel Podivilov <podivilov@chromium.org> + + Reviewed by Nate Chapin. + + [V8] Fix document wrapper memory leak in bindings. + https://bugs.webkit.org/show_bug.cgi?id=41771 + + * bindings/v8/custom/V8HTMLDocumentCustom.cpp: + (WebCore::V8HTMLDocument::WrapInShadowObject): Do not create static persistent handle + to shadowConstructor because it keeps the first context alive forever. + +2010-07-07 Andreas Kling <andreas.kling@nokia.com> + + Reviewed by Tor Arne Vestbø. + + [Qt] Enable smooth pixmap transforms by default + https://bugs.webkit.org/show_bug.cgi?id=41774 + + * platform/graphics/qt/GraphicsContextQt.cpp: + (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate): + (WebCore::GraphicsContext::setImageInterpolationQuality): + +2010-07-07 Jesus Sanchez-Palencia <jesus@webkit.org> + + Reviewed by Antti Koivisto. + + [Qt] Missing include to build QtWebKit with WebKit2 in MediaPlayerPrivatePhonon.cpp + https://bugs.webkit.org/show_bug.cgi?id=41767 + + * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp: Add Logging.h include + +2010-07-07 Pavel Podivilov <podivilov@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: Move v8-related script offset conversion to DebuggerScript.js + https://bugs.webkit.org/show_bug.cgi?id=41755 + + * bindings/v8/ScriptDebugServer.cpp: + (WebCore::ScriptDebugServer::dispatchDidParseSource): + +2010-07-07 Nicolas Weber <thakis@chromium.org> + + Reviewed by Dimitri Glazkov. + https://bugs.webkit.org/show_bug.cgi?id=41580 + + Fix rendering of radial gradients in skia if both points of the + gradient are the same and r0 > 0. + + Test: fast/gradients/radial-centered.html + + * platform/graphics/skia/GradientSkia.cpp: + (WebCore::Gradient::platformGradient): + +2010-06-18 MORITA Hajime <morrita@google.com> + + Reviewed by Ojan Vafai. + + https://bugs.webkit.org/show_bug.cgi?id=26526 + Add support for input events (oninput) to contentEditable elements + + Made a default event handler on the Node to dispatch an input event when + webkitEditableContentChanged arrived. + + Test: fast/events/event-input-contentEditable.html + + * dom/Node.cpp: + (WebCore::Node::defaultEventHandler): + +2010-07-07 Darin Adler <darin@apple.com> + + Reviewed by Anders Carlsson. + + Fix adoptRef assertion failures caused by stack-allocated ResourceHandle objects + https://bugs.webkit.org/show_bug.cgi?id=41823 + + * platform/network/android/ResourceHandleAndroid.cpp: + (WebCore::ResourceHandle::loadResourceSynchronously): Use adoptRef and new instead + of allocating an object on the stack. + * platform/network/curl/ResourceHandleCurl.cpp: + (WebCore::ResourceHandle::loadResourceSynchronously): Ditto. + * platform/network/qt/ResourceHandleQt.cpp: + (WebCore::ResourceHandle::loadResourceSynchronously): Ditto. + + * platform/network/soup/ResourceHandleSoup.cpp: + (WebCore::ResourceHandle::loadResourceSynchronously): Use create instead of + allocating an object on the stack. + +2010-07-07 Joseph Pecoraro <joepeck@webkit.org> + + Rubber-stamped by Pavel Feldman. + + Web Inspector: All RefPtr arguments and return values should be changed to PassRefPtr according to common practice. + https://bugs.webkit.org/show_bug.cgi?id=41759 + + * inspector/CodeGeneratorInspector.pm: + +2010-07-07 Chris Fleizach <cfleizach@apple.com> + + Reviewed by Darin Adler. + + AX: TextArea should return AXSelectedTextRange of 0,0 if the cursor is not in the text area + https://bugs.webkit.org/show_bug.cgi?id=41810 + + Test: platform/mac/accessibility/selected-text-range-for-empty-textarea.html + + * accessibility/mac/AccessibilityObjectWrapper.mm: + (-[AccessibilityObjectWrapper accessibilityAttributeValue:]): + +2010-07-07 Chris Fleizach <cfleizach@apple.com> + + Reviewed by Beth Dakin. + + AX: Data table heuristics: assume data table if at least one row or column of TH cells exist + https://bugs.webkit.org/show_bug.cgi?id=41806 + + Test: platform/mac/accessibility/table-with-row-col-of-headers.html + + * accessibility/AccessibilityTable.cpp: + (WebCore::AccessibilityTable::isTableExposableThroughAccessibility): + +2010-07-07 Mark Rowe <mrowe@apple.com> + + Fix the build. + + Xcode decided to change the reference type from "Relative to Build Product" to "Relative to Group" + when I moved the file between folders. That's incredibly confusing so I'll file a bug against Xcode. + + * WebCore.xcodeproj/project.pbxproj: + +2010-07-07 Mark Rowe <mrowe@apple.com> + + Fix the MathML build. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately): Fix a typo in a variable name. + +2010-07-07 James Hawkins <jhawkins@chromium.org> + + Reviewed by Dimitri Glazkov. + + Move setSuggestedValue() and suggestedValue() back to public as it's + now used by WebInputElement. + https://bugs.webkit.org/show_bug.cgi?id=41785 + + No new tests, as the method is only being used by Chromium's WebKit + API. + + * html/HTMLInputElement.h: + +2010-07-07 Mark Rowe <mrowe@apple.com> + + Rubber-stamped by Sam Weinig. + + Clean up the project file slightly. + + Remove obsolete .exp files, add the new .exp.in file, and move ExportFileGenerator.cpp in to the Exports collection. + + * WebCore.xcodeproj/project.pbxproj: + +2010-07-07 James Robinson <jamesr@chromium.org> and Vincent Scheib <schieb@chromium.org> + + Reviewed by Dimitri Glazkov. + + WebCore::GLES2Context should allow creating onscreen and offscreen contexts + https://bugs.webkit.org/show_bug.cgi?id=41492 + + You should be able to create a GLES2Context for rendering both on screen + and off screen (to a texture). Chromium's layer renderer (used for compositing) + does the former. Currently WebGL does the latter by side stepping the + WebCore::GLES2Context API completely. Longer term it should move over to using this. + + * platform/chromium/GLES2Context.h: + * platform/graphics/chromium/LayerRendererChromium.cpp: + (WebCore::LayerRendererChromium::initGL): + +2010-07-07 Simon Fraser <simon.fraser@apple.com> + + Reviewed by Dan Bernstein. + + Document::ownerElement() should return an HTMLFrameOwnerElement + https://bugs.webkit.org/show_bug.cgi?id=41789 + + Change return type of RenderLayerCompositor::enclosingIFrameElement() to + HTMLFrameOwnerElement*. No behavioral changes. + + * rendering/RenderLayerCompositor.cpp: + (WebCore::RenderLayerCompositor::shouldPropagateCompositingToEnclosingIFrame): + (WebCore::RenderLayerCompositor::enclosingIFrameElement): + * rendering/RenderLayerCompositor.h: + +2010-07-07 Adam Barth <abarth@webkit.org> + + Reviewed by Sam Weinig. + + Add reverseFind to Vector and deploy in HTML5 parser + https://bugs.webkit.org/show_bug.cgi?id=41778 + + This patch moves reverseFind from begin an + HTMLFormattingElementList-specific concept to begin a general Vector + concept. Also, instead of using Entry as the type for operator==, we + now use elements directly. The old code compiled because the Entry + constructor wasn't explicit, which means we were churning refs on every + comparison! + + * html/HTMLFormattingElementList.cpp: + (WebCore::HTMLFormattingElementList::find): + (WebCore::HTMLFormattingElementList::bookmarkFor): + (WebCore::HTMLFormattingElementList::insertAt): + (WebCore::HTMLFormattingElementList::remove): + * html/HTMLFormattingElementList.h: + (WebCore::HTMLFormattingElementList::Entry::operator==): + (WebCore::HTMLFormattingElementList::Entry::operator!=): + +2010-07-07 Darin Adler <darin@apple.com> + + Reviewed by Adam Barth. + + Turn on adoptRef assertion for RefCounted + https://bugs.webkit.org/show_bug.cgi?id=41547 + + The WebCore part of this fixes all the assertions I saw in testing. + + * html/FileReader.cpp: + (WebCore::FileReader::readAsBinaryString): Added null checks. + Callers from JavaScript can pass the wrong type, which becomes null. + (WebCore::FileReader::readAsText): Ditto. + (WebCore::FileReader::readAsDataURL): Ditto. + + * html/FileStreamClient.h: Removed unneeded include. + + * html/FileStreamProxy.cpp: + (WebCore::FileStreamProxy::FileStreamProxy): Made inline and moved + some of the code, including the ref, into the create function. + (WebCore::FileStreamProxy::create): Moved some of the code from + the constructor here. It's safe to ref once the object has been + created and adopted. + + * html/FileStreamProxy.h: Changed create function to no longer be + inlined. Also removed an unneeded include. + + * page/EventSource.cpp: + (WebCore::EventSource::EventSource): Made inline, changed arguments + and moved code that involves the need to ref this object into the + create function. Also moved failure handling out there since it's + cleaner to have a function that fails than a constructor. For + example, the function can return 0. + (WebCore::EventSource::create): Moved some of the code from the + constructor here. + + * page/EventSource.h: Removed unneeded includes. Made the + creation function non-inline. Changed the arguments to the constructor. + + * storage/StorageAreaSync.cpp: + (WebCore::StorageAreaSync::StorageAreaSync): Made inline. Moved + code that requires ref'ing this object out to the create function. + (WebCore::StorageAreaSync::create): Moved some of the code from the + constructor here. + + * storage/StorageAreaSync.h: Removed unneeded includes. Changed + the type of one of the constructor arguments from String to + const String&. + + * workers/SharedWorker.cpp: + (WebCore::SharedWorker::SharedWorker): Made inline. Moved most of + the setup code out of here into the create function. + (WebCore::SharedWorker::create): Moved the code here. + + * workers/SharedWorker.h: Removed unneeded includes. Made the + create function non-inline. Marked the toSharedWorker override private + to catch people doing an unnecessary virtual function call if they + already have a SharedWorker*. + + * workers/Worker.cpp: + (WebCore::Worker::Worker): Made inline. Moved most of the setup code + out of here into the create function. + (WebCore::Worker::create): Moved the code here. + + * workers/Worker.h: Made the create function non-inline. Changed + the arguments to the constructor. + +2010-07-07 Chris Fleizach <cfleizach@apple.com> + + Reviewed by Beth Dakin. + + AX: when a node's role changes, the AX tree might need to be updated + https://bugs.webkit.org/show_bug.cgi?id=41784 + + Test: platform/mac/accessibility/update-children-when-aria-role-changes.html + + * accessibility/AccessibilityRenderObject.cpp: + (WebCore::AccessibilityRenderObject::AccessibilityRenderObject): + (WebCore::AccessibilityRenderObject::updateAccessibilityRole): + +2010-07-07 Chris Fleizach <cfleizach@apple.com> + + Reviewed by Beth Dakin. + + AX: when an element uses role="text" but no aria-label, it should default to textUnderElement() + https://bugs.webkit.org/show_bug.cgi?id=41780 + + Test: platform/mac/accessibility/static-text-role-uses-text-under-element.html + + * accessibility/AccessibilityRenderObject.cpp: + (WebCore::AccessibilityRenderObject::stringValue): + Fallback to textUnderElement() if text() does not return any explicitly set text. + (WebCore::AccessibilityRenderObject::accessibilityIsIgnored): + Remove erroneous check to ignore text elements that didn't have a explicit text value. + +2010-07-07 Simon Fraser <simon.fraser@apple.com> + + Reviewed by Darin Adler. + + Document::ownerElement() should return an HTMLFrameOwnerElement + https://bugs.webkit.org/show_bug.cgi?id=41789 + + Change the return type of Document::ownerElement() to an HTMLFrameOwnerElement, for better + type checking. No behavioral changes. + + * accessibility/mac/AccessibilityObjectWrapper.mm: + * dom/Document.cpp: + (WebCore::Document::ownerElement): + * dom/Document.h: + * editing/SelectionController.cpp: + * rendering/RenderBoxModelObject.cpp: + * rendering/RenderLayer.cpp: + * rendering/RenderView.cpp: + +2010-07-07 Simon Fraser <simon.fraser@apple.com> + + Reviewed by Dan Bernstein. + + REGRESSION: GMail becomes blank after closing other tabs + https://bugs.webkit.org/show_bug.cgi?id=40421 + + RenderLayerCompositor's attach/detachRootPlatformLayer methods use + setNeedsStyleRecalc() in order to trigger acclerated compositing layers + to be hooked together across iframe boundaries. However, it was possible + for these to get called while inside of Document::recalcStyle(), which + is bad because it can cause the recalc to fail to get processed. + + Fix this by using the existing queuePostAttachCallback() functionality + to delay the call to setNeedsStyleRecalc() if post-attach callbacks + are suspended (indicating that we're inside recalcStyle()). + + No new tests because I wasn't able to make a test that shows the problem. + + * dom/ContainerNode.h: Make queuePostAttachCallback() public. + * dom/ContainerNode.cpp: + (WebCore::ContainerNode::postAttachCallbacksAreSuspended): Added; returns + whether s_attachDepth is non-zero. + + * rendering/RenderLayerCompositor.cpp: + (WebCore::RenderLayerCompositor::attachRootPlatformLayer): Call scheduleNeedsStyleRecalc() + instead of setNeedsStyleRecalc(). + (WebCore::RenderLayerCompositor::detachRootPlatformLayer): Ditto. + (WebCore::needsStyleRecalcCallback): Here we call setNeedsStyleRecalc(). + (WebCore::RenderLayerCompositor::scheduleNeedsStyleRecalc): + (WebCore::RenderLayerCompositor::notifyIFramesOfCompositingChange): + * rendering/RenderLayerCompositor.h: Add scheduleNeedsStyleRecalc(). + +2010-07-06 Simon Fraser <simon.fraser@apple.com> + + Reviewed by Dan Bernstein. + + Incorrect compositing order with negative z-index + https://bugs.webkit.org/show_bug.cgi?id=38959 + + When painting the contents of compositing layers whose phase is "GraphicsLayerPaintBackground" + (indicating that they are used for the background of elements with negative z-index children), + we need to paint the non-composited negative-z-order descendants at the end of the background phase, so + they appear behind composited negative-z-order descendants. + + Test: compositing/z-order/negative-z-index.html + + * rendering/RenderLayerBacking.cpp: + (WebCore::RenderLayerBacking::paintIntoLayer): + +2010-07-06 Simon Fraser <simon.fraser@apple.com> + + Reviewed by Dan Bernstein. + + Incorrect compositing order with negative z-index + https://bugs.webkit.org/show_bug.cgi?id=38959 + + Prerequisite: adopt new paintList() method that was added when painting compositing layer contents. + No behavioral changes. + + * rendering/RenderLayerBacking.cpp: + (WebCore::RenderLayerBacking::paintIntoLayer): + +2010-07-07 Adam Barth <abarth@webkit.org> + + Unreviewed. + + Fix ASSERT in Eric's previous patch. I think he tested his patch in + Release and not Debug. + + * html/HTMLFormattingElementList.h: + (WebCore::HTMLFormattingElementList::Entry::Entry): + (WebCore::HTMLFormattingElementList::findIndex): + +2010-07-07 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Grease the TreeBuilder's lightning + https://bugs.webkit.org/show_bug.cgi?id=41756 + + Brings the new TreeBuilder from 7s to 3s on the parser benchmark. + This makes performance comparable to the old parser. + + We have not begun to fight! There is so much fat left on these bones. + + * html/HTMLFormattingElementList.cpp: + (WebCore::HTMLFormattingElementList::find): + (WebCore::HTMLFormattingElementList::bookmarkFor): + (WebCore::HTMLFormattingElementList::insertAt): + (WebCore::HTMLFormattingElementList::remove): + * html/HTMLFormattingElementList.h: + (WebCore::HTMLFormattingElementList::findIndex): + +2010-07-07 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + HTMLTreeBuilder is way too slow + https://bugs.webkit.org/show_bug.cgi?id=41754 + + This takes us from 14s to 7s on our parsing benchmark. + That's still much slower than the old tree builder, but there + is a huge amount of fat left to trim. + + Vector<T> wasn't able to inline all the Entry functions when + they were buried in the cpp. Turns out the active formatting elements + list is very hot. + + I'm not sure Vector<T> is going to be the right data structure for us + in the end, but it has done alright for bring-up. + + * html/HTMLFormattingElementList.cpp: + * html/HTMLFormattingElementList.h: + (WebCore::HTMLFormattingElementList::Entry::Entry): + (WebCore::HTMLFormattingElementList::Entry::~Entry): + (WebCore::HTMLFormattingElementList::Entry::isMarker): + (WebCore::HTMLFormattingElementList::Entry::element): + (WebCore::HTMLFormattingElementList::Entry::replaceElement): + (WebCore::HTMLFormattingElementList::Entry::operator==): + (WebCore::HTMLFormattingElementList::Entry::operator!=): + +2010-07-06 Darin Adler <darin@apple.com> + + Reviewed by Adam Barth. + + More OwnPtr work, including making clear set the pointer to 0 before deletion + https://bugs.webkit.org/show_bug.cgi?id=41727 + + * WebCore.exp.in: Updated. + + * css/CSSSelector.h: + (WebCore::CSSSelector::RareData::RareData): Use adoptPtr. + (WebCore::CSSSelector::createRareData): Ditto. + * dom/SpaceSplitString.h: + (WebCore::SpaceSplitString::SpaceSplitString): Ditto. + (WebCore::SpaceSplitString::set): Ditto. + * history/CachedFrame.cpp: + (WebCore::CachedFrame::CachedFrame): Ditto. + (WebCore::CachedFrame::setCachedFramePlatformData): Ditto. + + * history/CachedFrame.h: Use PassOwnPtr. + + * loader/appcache/ApplicationCacheGroup.cpp: + (WebCore::CallCacheListenerTask::create): Use adoptPtr. + * loader/appcache/ApplicationCacheStorage.cpp: + (WebCore::ApplicationCacheStorage::storeCopyOfCache): Ditto. + * platform/PurgeableBuffer.h: + (WebCore::PurgeableBuffer::create): Ditto. + * platform/graphics/GlyphMetricsMap.h: + (WebCore::::locatePageSlowCase): Ditto. + * platform/graphics/GraphicsLayer.h: + (WebCore::AnimationValue::AnimationValue): Ditto. + (WebCore::TransformAnimationValue::TransformAnimationValue): Ditto. + * platform/graphics/MediaPlayer.h: + (WebCore::MediaPlayer::create): Ditto. + * platform/graphics/SimpleFontData.h: + (WebCore::SimpleFontData::boundsForGlyph): Ditto. + * platform/mac/PurgeableBufferMac.cpp: + (WebCore::PurgeableBuffer::create): Ditto. + * rendering/InlineFlowBox.h: + (WebCore::InlineFlowBox::setHorizontalOverflowPositions): Ditto. + (WebCore::InlineFlowBox::setVerticalOverflowPositions): Ditto. + * rendering/RootInlineBox.h: + (WebCore::RootInlineBox::floats): Ditto. + * rendering/style/RenderStyle.h: + (WebCore::InheritedFlags::inheritAnimations): Ditto. + (WebCore::InheritedFlags::inheritTransitions): Ditto. + + * rendering/style/SVGRenderStyleDefs.h: Use PassOwnPtr. + +2010-07-07 Sam Weinig <sam@webkit.org> + + Reviewed by Anders Carlsson. + + Patch for https://bugs.webkit.org/show_bug.cgi?id=41772 + Add basic piping for BackForwardControllerClient. + + * WebCore.exp.in: + * WebCore.xcodeproj/project.pbxproj: + * history/BackForwardController.cpp: + (WebCore::BackForwardController::BackForwardController): + * history/BackForwardControllerClient.h: + * page/Page.cpp: + (WebCore::Page::Page): + * page/Page.h: + * svg/graphics/SVGImage.cpp: + (WebCore::SVGImage::dataChanged): + +2010-07-07 Lucas De Marchi <lucas.demarchi@profusion.mobi> + + Unreviewed build fix after r62577. + + [EFL] build fix after r62577 + https://bugs.webkit.org/show_bug.cgi?id=41764 + + No new functionality so no new tests. + +2010-07-07 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk> + + Reviewed by Xan Lopez. + + [GTK] Scrollbars sometimes go dead and stop scrolling the view + https://bugs.webkit.org/show_bug.cgi?id=41711 + + Rework the setGtkAdjustment function slightly, make it have an + early return, and be more readable. + + * platform/gtk/ScrollViewGtk.cpp: + (WebCore::ScrollView::setGtkAdjustments): + +2010-07-07 Kristian Monsen <kristianm@google.com> + + Reviewed by Steve Block. + + Updating Android to use the UserGestureIndicator class instead of Android specific code. + The rest of the changes are in parts of the Android port which are yet to be upstreamed. + + No change in behavior, so no new test. + + * platform/network/android/ResourceRequest.h: + (WebCore::ResourceRequest::ResourceRequest): + (WebCore::ResourceRequest::doUpdateResourceRequest): + +2010-07-07 Andy Estes <aestes@apple.com> + + Reviewed by Adam Barth. + + Allow a beforeload listener to prevent loading of images in <object> tags. + https://bugs.webkit.org/show_bug.cgi?id=41027 + <rdar://problem/8120596> + + Tests: fast/dom/beforeload/image-object-before-load-innerHTML.html + fast/dom/beforeload/image-object-before-load.html + + * html/HTMLObjectElement.cpp: + (WebCore::HTMLObjectElement::attach): Do not call + RenderImage::setCachedImage() at the end of attach(). Instead, allow + this to happen conditionally after beforeload is dispatched. + * loader/ImageLoader.cpp: + (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent): Render fallback + content if an object's load was cancelled. + +2010-07-06 Nikolas Zimmermann <nzimmermann@rim.com> + + Reviewed by Dirk Schulze. + + <use> on <font-face> causes crashes, if SVGUseElement gets detached + https://bugs.webkit.org/show_bug.cgi?id=41621 + + Do not call removeFromMappedElementSheet() from the SVGFontFaceElement destructor, + as that can potentially cause the element to be reattached while destructing. + + In order to fix the crash in the testcase, the order of calling the base-class detach + method in SVGUseElement and the instance/shadow tree destruction has to be reversed, + matching the order in removedFromDocument(). + + Test: svg/custom/use-font-face-crash.svg + + * svg/SVGFontFaceElement.cpp: + (WebCore::SVGFontFaceElement::~SVGFontFaceElement): Remove removeFromMappedElementSheet() call. + * svg/SVGUseElement.cpp: + (WebCore::SVGUseElement::detach): Reverse order of calling base-class detach method and instance/shadow tree destruction. + +2010-07-07 Steve Block <steveblock@google.com> + + Reviewed by Adam Barth. + + document.createEvent() should support DeviceOrientationEvent + https://bugs.webkit.org/show_bug.cgi?id=41618 + + Tests: fast/dom/DeviceOrientation/create-event.html + + * dom/Document.cpp: + (WebCore::Document::createEvent): + +2010-07-07 Yury Semikhatsky <yurys@chromium.org> + + Reviewed by Pavel Feldman. + + Web Inspector: show functions from internal browser scripts on the call stack if they + are there. + https://bugs.webkit.org/show_bug.cgi?id=41762 + + * English.lproj/localizedStrings.js: + * inspector/front-end/CallStackSidebarPane.js: + (WebInspector.CallStackSidebarPane.prototype.update): + +2010-07-07 Ilya Tikhonovsky <loislo@chromium.org> + + Reviewed by Pavel Feldman. + + Web Inspector: All RefPtr arguments and return values should be + changed to PassRefPtr whenever it is possible according to common practice. + https://bugs.webkit.org/show_bug.cgi?id=41759 + + * inspector/CodeGeneratorInspector.pm: + * inspector/InspectorTimelineAgent.cpp: + (WebCore::InspectorTimelineAgent::pushGCEventRecords): + (WebCore::InspectorTimelineAgent::didInstallTimer): + (WebCore::InspectorTimelineAgent::didRemoveTimer): + (WebCore::InspectorTimelineAgent::didScheduleResourceRequest): + (WebCore::InspectorTimelineAgent::willSendResourceRequest): + (WebCore::InspectorTimelineAgent::didFinishLoadingResource): + (WebCore::InspectorTimelineAgent::didMarkTimeline): + (WebCore::InspectorTimelineAgent::didMarkDOMContentEvent): + (WebCore::InspectorTimelineAgent::didMarkLoadEvent): + (WebCore::InspectorTimelineAgent::addRecordToTimeline): + (WebCore::InspectorTimelineAgent::setHeapSizeStatistic): + (WebCore::InspectorTimelineAgent::pushCurrentRecord): + * inspector/InspectorTimelineAgent.h: + (WebCore::InspectorTimelineAgent::TimelineRecordEntry::TimelineRecordEntry): + * inspector/TimelineRecordFactory.cpp: + (WebCore::TimelineRecordFactory::createGenericRecord): + (WebCore::TimelineRecordFactory::createGCEventData): + (WebCore::TimelineRecordFactory::createFunctionCallData): + (WebCore::TimelineRecordFactory::createEventDispatchData): + (WebCore::TimelineRecordFactory::createGenericTimerData): + (WebCore::TimelineRecordFactory::createTimerInstallData): + (WebCore::TimelineRecordFactory::createXHRReadyStateChangeData): + (WebCore::TimelineRecordFactory::createXHRLoadData): + (WebCore::TimelineRecordFactory::createEvaluateScriptData): + (WebCore::TimelineRecordFactory::createMarkTimelineData): + (WebCore::TimelineRecordFactory::createScheduleResourceRequestData): + (WebCore::TimelineRecordFactory::createResourceSendRequestData): + (WebCore::TimelineRecordFactory::createResourceReceiveResponseData): + (WebCore::TimelineRecordFactory::createResourceFinishData): + (WebCore::TimelineRecordFactory::createReceiveResourceData): + (WebCore::TimelineRecordFactory::createPaintData): + (WebCore::TimelineRecordFactory::createParseHTMLData): + * inspector/TimelineRecordFactory.h: + +2010-07-07 Antti Koivisto <koivisto@iki.fi> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Initial WebKit2 implementation + https://bugs.webkit.org/show_bug.cgi?id=40233 + + Export some event conversion functions needed for WebKit2. + + * platform/PlatformKeyboardEvent.h: + * platform/qt/PlatformKeyboardEventQt.cpp: + (WebCore::keyIdentifierForQtKeyCode): + (WebCore::windowsKeyCodeForKeyEvent): + +2010-07-06 Steve Block <steveblock@google.com> + + Reviewed by Adam Barth. + + DeviceOrientationEventConstructor should be exposed at window.DeviceOrientationEvent + https://bugs.webkit.org/show_bug.cgi?id=41685 + + Test: fast/dom/Window/window-properties-device-orientation.html + fast/dom/DeviceOrientation/window-property.txt + + * page/DOMWindow.idl: + +2010-07-07 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r62645. + http://trac.webkit.org/changeset/62645 + https://bugs.webkit.org/show_bug.cgi?id=41757 + + "Broken inspector tests on several platforms" (Requested by + eseidel on #webkit). + + * inspector/front-end/ScriptView.js: + (WebInspector.ScriptView.prototype._addBreakpoint): + * inspector/front-end/ScriptsPanel.js: + (WebInspector.ScriptsPanel): + (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished): + (WebInspector.ScriptsPanel.prototype._breakpointAdded): + (WebInspector.ScriptsPanel.prototype._scriptOrResourceForURLAndLine): + (WebInspector.ScriptsPanel.prototype._showScriptOrResource): + (WebInspector.ScriptsPanel.prototype._toggleBreakpointsClicked): + * inspector/front-end/SourceView.js: + (WebInspector.SourceView.prototype._addBreakpoint): + +2010-07-07 Steve Block <steveblock@google.com> + + Reviewed by Adam Barth. + + JavaInstanceV8 needs to push a local reference frame to avoid table overflow. + https://bugs.webkit.org/show_bug.cgi?id=41516 + + This change is required to help prevent the Java virtual machine from + running out of local references. The Java virtual machine supports only + a limited number of local references. Normally, local references are + cleared when the native method returns. + + This change adds calls to PushLocalFrame() and PopLocalFrame() around + each invocation of a method on JavaInstance. These calls instruct the + virtual machine to clear local references when the frame is popped. + This means that in the case where many calls to JavaInstance methods + are made within the same native call, local references are cleared as + soon as they are no longer needed, thus conserving references. + + This change mirrors exactly JavaInstanceJSC. + + No new tests. + + * bridge/jni/v8/JavaInstanceV8.cpp: + (JavaInstance::virtualBegin): + (JavaInstance::virtualEnd): + * bridge/jni/v8/JavaInstanceV8.h: + +2010-07-06 Yury Semikhatsky <yurys@chromium.org> + + Reviewed by Pavel Feldman. + + Inspector should remember the size of sidebars set by the user + https://bugs.webkit.org/show_bug.cgi?id=19207 + + * inspector/front-end/AbstractTimelinePanel.js: + (WebInspector.AbstractTimelinePanel): + * inspector/front-end/AuditsPanel.js: + (WebInspector.AuditsPanel): + * inspector/front-end/ConsolePanel.js: + (WebInspector.ConsolePanel): + * inspector/front-end/ElementsPanel.js: + (WebInspector.ElementsPanel.prototype.rightSidebarResizerDragEnd): + * inspector/front-end/Panel.js: + (WebInspector.Panel): + (WebInspector.Panel.prototype.get toolbarItemClass): + (WebInspector.Panel.prototype.show): + (WebInspector.Panel.prototype.createSidebar): + (WebInspector.Panel.prototype.get _sidebarWidthSettingName): + (WebInspector.Panel.prototype._endSidebarDragging): + (WebInspector.Panel.prototype.updateSidebarWidth): + (WebInspector.Panel.prototype.restoreSidebarWidth): + (WebInspector.Panel.prototype.saveSidebarWidth): + * inspector/front-end/ProfilesPanel.js: + (WebInspector.ProfilesPanel): + * inspector/front-end/ResourcesPanel.js: + (WebInspector.ResourcesPanel): + (WebInspector.ResourcesPanel.prototype.resourceTrackingWasEnabled): + * inspector/front-end/ScriptsPanel.js: + (WebInspector.ScriptsPanel): + (WebInspector.ScriptsPanel.prototype._endSidebarResizeDrag): + (WebInspector.ScriptsPanel.prototype._sidebarResizeDrag): + (WebInspector.ScriptsPanel.prototype.setSidebarWidth): + * inspector/front-end/Settings.js: + (WebInspector.populateApplicationSettings): + * inspector/front-end/StoragePanel.js: + (WebInspector.StoragePanel): + * inspector/front-end/TimelinePanel.js: + (WebInspector.TimelinePanel): + +2010-07-05 Steve Block <steveblock@google.com> + + Reviewed by Adam Barth. + + DeviceOrientation should be renamed to DeviceOrientationController + https://bugs.webkit.org/show_bug.cgi?id=41608 + + No new tests, renaming only. + + * Android.mk: + * CMakeLists.txt: + * GNUmakefile.am: + * WebCore.gypi: + * WebCore.pro: + * WebCore.vcproj/WebCore.vcproj: + * WebCore.xcodeproj/project.pbxproj: + * dom/DeviceOrientation.cpp: Removed. + * dom/DeviceOrientation.h: Removed. + * dom/DeviceOrientationController.cpp: Copied from WebCore/dom/DeviceOrientation.cpp. + (WebCore::DeviceOrientationController::DeviceOrientationController): + (WebCore::DeviceOrientationController::onDeviceOrientationChange): + * dom/DeviceOrientationController.h: Copied from WebCore/dom/DeviceOrientation.h. + * page/Page.cpp: + (WebCore::Page::Page): + * page/Page.h: + (WebCore::Page::deviceOrientationController): + +2010-07-07 Pavel Podivilov <podivilov@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: do not activate all breakpoints on page reload + https://bugs.webkit.org/show_bug.cgi?id=41461 + + Test: inspector/debugger-breakpoints-not-activated-on-reload.html + + * inspector/front-end/ScriptView.js: + (WebInspector.ScriptView.prototype._addBreakpoint): + * inspector/front-end/ScriptsPanel.js: + (WebInspector.ScriptsPanel): + (WebInspector.ScriptsPanel.prototype._breakpointAdded): + (WebInspector.ScriptsPanel.prototype.toggleBreakpointsClicked): + * inspector/front-end/SourceView.js: + (WebInspector.SourceView.prototype._addBreakpoint): + +2010-07-07 Nikolas Zimmermann <nzimmermann@rim.com> + + Not reviewed. Rollout r62633 - test crashes after some last-minute modifications. + + * svg/SVGFontFaceElement.cpp: + (WebCore::SVGFontFaceElement::~SVGFontFaceElement): + +2010-07-07 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Fix </html> handling in before head mode + https://bugs.webkit.org/show_bug.cgi?id=41752 + + Covered by html5lib/runner.html. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processEndTag): + +2010-07-07 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + </div> pops too many <div> elements in body + https://bugs.webkit.org/show_bug.cgi?id=41751 + + Another missing return! + + While tracking this down I added some debugging code to both the + open elements stack and the active formatting elements list. + + I also unwrapped a very long || chain to make it more readable. + + * html/HTMLElementStack.cpp: + (WebCore::HTMLElementStack::show): + * html/HTMLElementStack.h: + * html/HTMLFormattingElementList.cpp: + (WebCore::HTMLFormattingElementList::show): + * html/HTMLFormattingElementList.h: + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processEndTagForInBody): + +2010-07-06 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + HTMLTreeBuilder needs to handle <table><input> + https://bugs.webkit.org/show_bug.cgi?id=41744 + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTagForInTable): + +2010-07-06 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Teach HTMLTreeBuilder how to handle <button><button> + https://bugs.webkit.org/show_bug.cgi?id=41743 + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTagForInBody): + +2010-07-06 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Teach TreeBuilder how to handle <form><form> + https://bugs.webkit.org/show_bug.cgi?id=41741 + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTagForInBody): + +2010-07-06 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + <table> should auto-close <p> when not in quirks mode + https://bugs.webkit.org/show_bug.cgi?id=41740 + + This is already covered by multiple tests in html5lib/runner.html + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTagForInBody): + +2010-07-06 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Make "in body" character handling reconstruct active formatting elements + https://bugs.webkit.org/show_bug.cgi?id=41739 + + This fixes a bunch of tests, and due to some other bug in our + formatting code, regresses two. I'll fix that bug in a separate + patch. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processCharacter): + +2010-07-06 Nikolas Zimmermann <nzimmermann@rim.com> + + Reviewed by Darin Adler. + + <use> on <font-face> causes crashes, if SVGUseElement gets detached + https://bugs.webkit.org/show_bug.cgi?id=41621 + + Do not call removeFromMappedElementSheet() from the destructor, as the call to document()->updateStyleSelector() that can potentially + cause the element to be reattached while destructing. It's not needed at all, because removedFromDocument() is called before destruction, + which already calls removeFromMappedElementSheet() - at this point it's still safe to update the style selector. + + The crash is reproducable when using <use> on <font-face>. + + Test: svg/custom/use-font-face-crash.svg + + * svg/SVGFontFaceElement.cpp: + (WebCore::SVGFontFaceElement::~SVGFontFaceElement): + +2010-07-07 Hayato Ito <hayato@chromium.org> + + Reviewed by Darin Adler. + + Rolling out 'page-break-inside:avoid' part of the r54929. + Rebased the related layout tests, which are now expected to fail, as well. + + https://bugs.webkit.org/show_bug.cgi?id=41532 + + * rendering/RenderBlock.cpp: + (WebCore::RenderBlock::paintChildren): + +2010-07-07 Mark Rowe <mrowe@apple.com> + + Fix failures in a handful of Java-related tests. + + * WebCore.exp.in: Remove an extraneous ENABLE_ from an #if so that the condition + evalutes to true when we expect it to. + +2010-07-06 Pavel Feldman <pfeldman@chromium.org> + + Reviewed by Joseph Pecoraro. + + Web Inspector: provide line numbers for inline styles. + + https://bugs.webkit.org/show_bug.cgi?id=41691 + + Test: inspector/styles-source-lines-inline.html + + * css/CSSParser.cpp: + (WebCore::CSSParser::parseSheet): + * css/CSSParser.h: + * css/CSSStyleSheet.cpp: + (WebCore::CSSStyleSheet::parseString): + (WebCore::CSSStyleSheet::parseStringAtLine): + * css/CSSStyleSheet.h: + * dom/StyleElement.cpp: + (WebCore::StyleElement::process): + (WebCore::StyleElement::createSheet): + * dom/StyleElement.h: + * html/HTMLStyleElement.cpp: + (WebCore::HTMLStyleElement::HTMLStyleElement): + (WebCore::HTMLStyleElement::finishParsingChildren): + * html/HTMLStyleElement.h: + * inspector/InspectorCSSStore.cpp: + (WebCore::InspectorCSSStore::getRuleRangesForStyleSheet): + * inspector/InspectorDOMAgent.cpp: + (WebCore::InspectorDOMAgent::buildObjectForRule): + * inspector/front-end/DOMAgent.js: + (WebInspector.CSSStyleDeclaration.parseRule): + * inspector/front-end/StylesSidebarPane.js: + (WebInspector.StylePropertiesSection.else.linkifyUncopyable): + (WebInspector.StylePropertiesSection): + +2010-07-06 Dan Bernstein <mitz@apple.com> + + Reviewed by Jon Honeycutt. + + <rdar://problem/8163651> Wrong value type being supplied for kCTTypesetterOptionForcedEmbeddingLevel key + + No change in behavior, so no new test. + + * platform/graphics/mac/ComplexTextControllerCoreText.cpp: + (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText): Use CFNumber instances + as the values of the kCTTypesetterOptionForcedEmbeddingLevel key, instead of CFBooleans. + +2010-07-06 Mark Rowe <mrowe@apple.com> + + Fix production builds on Mac OS X. + + * DerivedSources.make: Don't try and generate the export file during the installhdrs build phase. + It's not useful until much later in the build process, and it's not possible to generate it until + after the tool has been compiled anyway. + * WebCore.xcodeproj/project.pbxproj: Tweak how the ICU and forwarding headers are copied so that it + works in production builds once more. + +2010-07-06 Steve Falkenburg <sfalken@apple.com> + + Reviewed by Simon Fraser. + + Expose URL matching from WebUserContentURLPattern + https://bugs.webkit.org/show_bug.cgi?id=41726 + <rdar://problem/7910144> + + * WebCore.exp.in: Export UserContentURLPattern::matches for use in WebKit. + +2010-07-06 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Fix <nobr><nobr> case in HTMLTreeBuilder + https://bugs.webkit.org/show_bug.cgi?id=41735 + + We were both not handling <nobr> correctly, as well as + never hitting the <nobr> case because our formatting + elements check was overzealous. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTagForInBody): + +2010-07-06 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Implement start table tag in table mode + https://bugs.webkit.org/show_bug.cgi?id=41736 + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTagForInTable): + (WebCore::HTMLTreeBuilder::processTableEndTagForInTable): + (WebCore::HTMLTreeBuilder::processEndTagForInTable): + * html/HTMLTreeBuilder.h: + +2010-07-06 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Implement "act as if the banana has been peeled" (for lack of a better term) + https://bugs.webkit.org/show_bug.cgi?id=41734 + + The spec has a tricky passage that says "whenever a node would be + inserted into the current node, it must instead be foster parented." + This patch attempts to implement that requirement. + + * html/HTMLConstructionSite.cpp: + (WebCore::HTMLConstructionSite::attach): + (WebCore::HTMLConstructionSite::HTMLConstructionSite): + (WebCore::HTMLConstructionSite::insertHTMLHtmlElement): + (WebCore::HTMLConstructionSite::insertHTMLHeadElement): + (WebCore::HTMLConstructionSite::insertHTMLBodyElement): + (WebCore::HTMLConstructionSite::insertScriptElement): + (WebCore::HTMLConstructionSite::fosterParent): + * html/HTMLConstructionSite.h: + (WebCore::HTMLConstructionSite::RedirectToFosterParentGuard::RedirectToFosterParentGuard): + (WebCore::HTMLConstructionSite::RedirectToFosterParentGuard::~RedirectToFosterParentGuard): + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTagForInTable): + (WebCore::HTMLTreeBuilder::processEndTagForInTable): + * html/HTMLTreeBuilder.h: + +2010-07-06 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Fix </optgroup> in "in select" mode + https://bugs.webkit.org/show_bug.cgi?id=41733 + + I had to add a oneBelowTop() accessor. + I added some ASSERTs after looking at the fragment case + documentation. I'm now convinced that top() and oneBeforeTop() + should never be NULL, so we just ASSERT they aren't. + + This is a very obscure corner of the HTML spec, but at least + we have a test for it. This makes one more html5lib test pass. + + * html/HTMLConstructionSite.h: + (WebCore::HTMLConstructionSite::oneBelowTop): + * html/HTMLElementStack.cpp: + (WebCore::HTMLElementStack::topRecord): + (WebCore::HTMLElementStack::top): + (WebCore::HTMLElementStack::oneBelowTop): + * html/HTMLElementStack.h: + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processEndTag): + +2010-07-06 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Fix "in row" "Anything else" handling of end tags + https://bugs.webkit.org/show_bug.cgi?id=41731 + + I also fixed </br> handling to follow the spec more closely + since it implementation was old and didn't use all our + new processFake* hotness. + + This is already covered by 3 tests, however we don't + pass them yet, due to lack of table foster parenting + code (which Adam is working on as we speak). + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processEndTagForInBody): + (WebCore::HTMLTreeBuilder::processEndTag): + +2010-07-06 Mark Rowe <mrowe@apple.com> + + Fix clean builds on Mac OS X. + + Since "Copy Forwarding and ICU Headers" was split in to a separate target + from the WebCore framework it no longer had automatica access to the + PRIVATE_HEADERS_FOLDER_PATH variable. This caused it to copy the header + files in to the wrong location. Fix that by giving PRIVATE_HEADERS_FOLDER_PATH + its correct value and ensuring that the path exists. + + * WebCore.xcodeproj/project.pbxproj: + +2010-07-06 Sam Weinig <sam@webkit.org> + + Fix Gtk build. + + * GNUmakefile.am: + +2010-07-06 Mark Rowe <mrowe@apple.com> + + Tiger build fix. + + Don't use WebCore's LDFLAGS when building WebCoreExportFileGenerator. + + * WebCore.xcodeproj/project.pbxproj: + +2010-07-06 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + "In cell" does not correctly handle <td><tr> or <td><td> + https://bugs.webkit.org/show_bug.cgi?id=41729 + + This change is mostly cleanup to try and prevent forgetting + tag name checks in the future by using inlines to reduce + copy/paste code. + + 3 little bugs in InCellMode: + - Missing trTag from the long or statement (reason for the cleanup) + - Used || instead of && + - Forgot to reprocess the tag after closeTheCell() + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTagForInBody): + (WebCore::HTMLTreeBuilder::processStartTagForInTable): + (WebCore::HTMLTreeBuilder::processStartTag): + (WebCore::HTMLTreeBuilder::processEndTagForInTable): + (WebCore::HTMLTreeBuilder::processEndTag): + +2010-07-06 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Move fosterParent to HTMLConstructionSite + https://bugs.webkit.org/show_bug.cgi?id=41728 + + This paves the way for handling the default case of InTableMode + properly. + + * html/HTMLConstructionSite.cpp: + (WebCore::HTMLConstructionSite::fosterParent): + * html/HTMLConstructionSite.h: + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::callTheAdoptionAgency): + +2010-07-06 Adam Barth <abarth@webkit.org> + + Rubber-stamped by Eric Seidel. + + Move HTMLConstructionSite to its own file. No behavior change. + + * Android.mk: + * CMakeLists.txt: + * GNUmakefile.am: + * WebCore.gypi: + * WebCore.pro: + * WebCore.vcproj/WebCore.vcproj: + * WebCore.xcodeproj/project.pbxproj: + * html/HTMLConstructionSite.cpp: Copied from WebCore/html/HTMLTreeBuilder.cpp. + (WebCore::HTMLNames::hasImpliedEndTag): + (WebCore::HTMLConstructionSite::attach): + (WebCore::HTMLConstructionSite::HTMLConstructionSite): + (WebCore::HTMLConstructionSite::~HTMLConstructionSite): + (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML): + (WebCore::HTMLConstructionSite::mergeAttributesFromTokenIntoElement): + (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagInBody): + (WebCore::HTMLConstructionSite::insertHTMLBodyStartTagInBody): + * html/HTMLConstructionSite.h: Copied from WebCore/html/HTMLTreeBuilder.h. + * html/HTMLTreeBuilder.cpp: + * html/HTMLTreeBuilder.h: + +2010-07-06 Mark Rowe <mrowe@apple.com> + + Build fix. + + The path to the generated file needs to be relative to the built product directory, + not to the project file. + + * WebCore.xcodeproj/project.pbxproj: + +2010-07-06 Mark Rowe <mrowe@apple.com> + + Reviewed by Darin Adler. + + <http://webkit.org/b/41725> REGRESSION(r62283): No longer possible to build for Tiger from SnowLeopard due to export file shenanigans + + Change how the exports file is generated. Rather than having the logic for which symbols + to include be encoded in a Makefile that concatenated separate files, the logic is now + encoded as #if's in the base exports file. This ensures that the exact same preprocessor + settings are used when determining which symbols to export as when compiling the code that + defines the symbols. + + * DerivedSources.make: Remove logic that determines which export files to concatenate. + Replace with an invocation of WebCoreExportFileGenerator. + * WebCore.3DRendering.exp: Removed. + * WebCore.AcceleratedCompositing.exp: Removed. + * WebCore.ClientBasedGeolocation.exp: Removed. + * WebCore.ContextMenus.exp: Removed. + * WebCore.DashboardSupport.exp: Removed. + * WebCore.DragSupport.exp: Removed. + * WebCore.Geolocation.exp: Removed. + * WebCore.Inspector.exp: Removed. + * WebCore.JNI.exp: Removed. + * WebCore.NPAPI.exp: Removed. + * WebCore.OrientationEvents.exp: Removed. + * WebCore.PluginHostProcess.exp: Removed. + * WebCore.ProtectionSpaceAuthCallback.exp: Removed. + * WebCore.SVG.Animation.exp: Removed. + * WebCore.SVG.Filters.exp: Removed. + * WebCore.SVG.ForeignObject.exp: Removed. + * WebCore.SVG.exp: Removed. + * WebCore.Tiger.exp: Removed. + * WebCore.Video.exp: Removed. + * WebCore.VideoProxy.exp: Removed. + * WebCore.exp.in: Renamed from WebCore/WebCore.base.exp. Merge the individual .exp + files in, wrapping the appropriate parts with the necessary #if's. + * WebCore.xcodeproj/project.pbxproj: + * make-exports-file-generator: Added. + +2010-07-06 Sam Weinig <sam@webkit.org> + + Reviewed by Anders Carlsson. + + Patch for https://bugs.webkit.org/show_bug.cgi?id=41723 + Add BackForwardController class + + - Add BackForwardController which currently only forwards to the existing + BackForwardList implementation. This is a first step toward allowing + for a proxying BackForwardList implementation. + + * CMakeLists.txt: + * GNUmakefile.am: + * WebCore.base.exp: + * WebCore.gypi: + * WebCore.pro: + * WebCore.vcproj/WebCore.vcproj: + * WebCore.xcodeproj/project.pbxproj: + * history/BackForwardController.cpp: Added. + (WebCore::BackForwardController::BackForwardController): + (WebCore::BackForwardController::~BackForwardController): + * history/BackForwardController.h: Added. + (WebCore::BackForwardController::client): + (WebCore::BackForwardController::list): + * history/BackForwardControllerClient.h: Added. + (WebCore::BackForwardControllerClient::~BackForwardControllerClient): + * page/Page.cpp: + (WebCore::Page::Page): + (WebCore::Page::~Page): + (WebCore::Page::backForwardList): + (WebCore::Page::goBack): + (WebCore::Page::goForward): + (WebCore::Page::canGoBackOrForward): + (WebCore::Page::goBackOrForward): + (WebCore::Page::getHistoryLength): + * page/Page.h: + +2010-07-06 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk> + + Unreviewed. + + Fixes regression on API test by disabling the scrollbars before + configuring the adjustments. + + * platform/gtk/ScrollViewGtk.cpp: + (WebCore::ScrollView::setGtkAdjustments): + +2010-07-06 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Add support for <li>, <dd> and <dt> nested tag closing + https://bugs.webkit.org/show_bug.cgi?id=41720 + + li, dd, and dt have nearly identical logic in HTML5, so I + attempted to make them share as much code as possible. + + This fixes a bunch of subtests for html5lib/runner.html + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processCloseWhenNestedTag): + (WebCore::HTMLTreeBuilder::processStartTagForInBody): + (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody): + (WebCore::HTMLTreeBuilder::furthestBlockForFormattingElement): + * html/HTMLTreeBuilder.h: + +2010-07-06 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Factor HTMLConstructionSite out of HTMLTreeBuilder + https://bugs.webkit.org/show_bug.cgi?id=41716 + + The HTMLContructionSite is the model object on which the + HTMLTreeBuilder (a controller) acts. + + No behavior change. I'll move this class into its own file in a + followup patch. + + * html/HTMLFormattingElementList.h: + (WebCore::HTMLFormattingElementList::at): + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::HTMLTreeBuilder): + (WebCore::HTMLConstructionSite::HTMLConstructionSite): + (WebCore::HTMLTreeBuilder::passTokenToLegacyParser): + (WebCore::HTMLTreeBuilder::processDoctypeToken): + (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML): + (WebCore::HTMLConstructionSite::mergeAttributesFromTokenIntoElement): + (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagInBody): + (WebCore::HTMLConstructionSite::insertHTMLBodyStartTagInBody): + (WebCore::HTMLTreeBuilder::processFakePEndTagIfPInScope): + (WebCore::HTMLTreeBuilder::processIsindexStartTagForInBody): + (WebCore::HTMLTreeBuilder::processStartTagForInBody): + (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup): + (WebCore::HTMLTreeBuilder::closeTheCell): + (WebCore::HTMLTreeBuilder::processStartTagForInTable): + (WebCore::HTMLTreeBuilder::processStartTag): + (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody): + (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody): + (WebCore::HTMLTreeBuilder::furthestBlockForFormattingElement): + (WebCore::HTMLTreeBuilder::findFosterParentFor): + (WebCore::HTMLTreeBuilder::callTheAdoptionAgency): + (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately): + (WebCore::HTMLTreeBuilder::processEndTagForInBody): + (WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption): + (WebCore::HTMLTreeBuilder::processTrEndTagForInRow): + (WebCore::HTMLTreeBuilder::processEndTagForInTable): + (WebCore::HTMLTreeBuilder::processEndTag): + (WebCore::HTMLTreeBuilder::processComment): + (WebCore::HTMLTreeBuilder::processCharacter): + (WebCore::HTMLTreeBuilder::processEndOfFile): + (WebCore::HTMLTreeBuilder::processDefaultForBeforeHTMLMode): + (WebCore::HTMLTreeBuilder::processStartTagForInHead): + (WebCore::HTMLConstructionSite::insertDoctype): + (WebCore::HTMLConstructionSite::insertComment): + (WebCore::HTMLConstructionSite::insertCommentOnDocument): + (WebCore::HTMLConstructionSite::insertCommentOnHTMLHtmlElement): + (WebCore::HTMLConstructionSite::createElementAndAttachToCurrent): + (WebCore::HTMLConstructionSite::insertHTMLHtmlElement): + (WebCore::HTMLConstructionSite::insertHTMLHeadElement): + (WebCore::HTMLConstructionSite::insertHTMLBodyElement): + (WebCore::HTMLConstructionSite::insertElement): + (WebCore::HTMLConstructionSite::insertSelfClosingElement): + (WebCore::HTMLConstructionSite::insertFormattingElement): + (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag): + (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag): + (WebCore::HTMLConstructionSite::insertScriptElement): + (WebCore::HTMLTreeBuilder::processScriptStartTag): + (WebCore::HTMLConstructionSite::insertTextNode): + (WebCore::HTMLConstructionSite::createElement): + (WebCore::HTMLTreeBuilder::indexOfFirstUnopenFormattingElement): + (WebCore::HTMLTreeBuilder::reconstructTheActiveFormattingElements): + (WebCore::HTMLTreeBuilder::generateImpliedEndTagsWithExclusion): + (WebCore::HTMLTreeBuilder::generateImpliedEndTags): + * html/HTMLTreeBuilder.h: + (WebCore::HTMLConstructionSite::currentElement): + (WebCore::HTMLConstructionSite::openElements): + (WebCore::HTMLConstructionSite::activeFormattingElements): + (WebCore::HTMLConstructionSite::head): + (WebCore::HTMLConstructionSite::form): + (WebCore::HTMLConstructionSite::releaseForm): + (WebCore::HTMLConstructionSite::setForm): + (WebCore::HTMLConstructionSite::fragmentScriptingPermission): + (WebCore::HTMLConstructionSite::attach): + +2010-07-06 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk> + + Reviewed by Xan Lopez. + + [GTK] Scrollbars sometimes go dead and stop scrolling the view + https://bugs.webkit.org/show_bug.cgi?id=41711 + + Fixes GtkScrolledWindow scrollbars not actually scrolling the page + in certain conditions. No tests because it is hard to reproduce, + and depends on interaction with a widget that is outside of the + WebView, which is tricky. + + * platform/gtk/ScrollViewGtk.cpp: + (WebCore::ScrollView::setGtkAdjustments): + +2010-07-06 Darin Adler <darin@apple.com> + + Reviewed by Geoffrey Garen. + + Simplify access to element attribute map, removing unneeded functions + https://bugs.webkit.org/show_bug.cgi?id=41703 + + * css/CSSStyleSelector.cpp: + (WebCore::CSSStyleSelector::canShareStyleWithElement): Use the + attributeMap function instead of the mappedAttributes function. + (WebCore::CSSStyleSelector::styleForElement): Ditto. + + * dom/Element.cpp: + (WebCore::Element::~Element): Renamed namedAttrMap to m_attributeMap. + (WebCore::Element::removeAttribute): Ditto. + (WebCore::Element::getAttribute): Ditto. + (WebCore::Element::setAttribute): Ditto. + (WebCore::Element::setAttributeMap): Ditto. + (WebCore::Element::hasAttributes): Ditto. + (WebCore::Element::createAttributeMap): Ditto. + (WebCore::Element::insertedIntoDocument): Ditto. + (WebCore::Element::removedFromDocument): Ditto. + (WebCore::Element::getURLAttribute): Ditto. + + * dom/Element.h: Removed unneeded virtual attributes function. + Made read-only argument to attributes function default to false. + (Later, we'll eliminate this.) Renamed namedAttrMap to m_attributeMap + and made it private instead of protected. + + * dom/StyledElement.cpp: + (WebCore::StyledElement::attributeChanged): Use attributeMap function + instead of namedAttrMap data member or mappedAttributes function. + (WebCore::StyledElement::classAttributeChanged): Ditto. + (WebCore::StyledElement::parseMappedAttribute): Ditto. + + * dom/StyledElement.h: Removed mappedAttributes function and changed + callers to use attributeMap function instead. + + * html/HTMLInputElement.cpp: + (WebCore::HTMLInputElement::setInputType): Use attributeMap instead of + mappedAttributes. + * svg/SVGStyledElement.cpp: + (WebCore::SVGStyledElement::getPresentationAttribute): Ditto. + +2010-07-06 Anders Carlsson <andersca@apple.com> + + Reviewed by Sam Weinig. + + Add a build rule that removes the old generated Obj-C bindings for PluginArray and MimeTypeArray. + + * DerivedSources.make: + +2010-07-06 Adam Barth <abarth@webkit.org> + + Unreviewed. + + Make the remaining insertion modes explicit. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTag): + (WebCore::HTMLTreeBuilder::processEndTag): + (WebCore::HTMLTreeBuilder::processCharacter): + (WebCore::HTMLTreeBuilder::processEndOfFile): + +2010-07-06 Alexey Proskuryakov <ap@apple.com> + + Not reviewed, fixing a simple copy/paste mistake. + + https://bugs.webkit.org/show_bug.cgi?id=41156 + Cross origin XMLHttpRequest should log the reason why connection failed + + Covered by xmlhttprequest/access-control-basic-non-simple-deny-cached.html + + * loader/CrossOriginPreflightResultCache.cpp: + (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders): Fix incorrectly + copy/pasted header field name. + +2010-07-06 Xan Lopez <xlopez@igalia.com> + + GTK+ fixes for the DOM plug-in renaming Apocalypse. + + * GNUmakefile.am: + +2010-07-06 Anders Carlsson <andersca@apple.com> + + Yet another Windows build fix. + + * DerivedSources.cpp: + +2010-07-06 Anders Carlsson <andersca@apple.com> + + Fix Windows build. + + * WebCore.vcproj/WebCore.vcproj: + +2010-07-06 Anders Carlsson <andersca@apple.com> + + More build fixes. + + * WebCore.gypi: + * WebCore.pro: + +2010-07-06 Anders Carlsson <andersca@apple.com> + + Try to fix Qt build. + + * WebCore.pro: + +2010-07-06 Anders Carlsson <andersca@apple.com> + + Attempt to fix GTK+ build. + + * GNUmakefile.am: + +2010-07-06 Adam Barth <abarth@webkit.org> + + Address reviewer comments from https://bugs.webkit.org/show_bug.cgi?id=41671 + + Deploy isTableBodyContextTag where possible. No behavior change. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTagForInBody): + (WebCore::HTMLTreeBuilder::processStartTag): + (WebCore::HTMLTreeBuilder::processEndTagForInTable): + (WebCore::HTMLTreeBuilder::processEndTag): + +2010-07-06 Anders Carlsson <andersca@apple.com> + + Build fixes. + + * WebCore.gypi: + * bindings/js/JSBindingsAllInOne.cpp: + +2010-07-06 Anders Carlsson <andersca@apple.com> + + Reviewed by Sam Weinig. + + DOM plug-in related renames + https://bugs.webkit.org/show_bug.cgi?id=41709 + + This is in preparation for using "Plugin" for something other than a DOM object. + + MimeType => DOMMimeType + MimeTypeArray => DOMMimeTypeArray + Plugin => DOMPlugin + PluginArray => DOMPluginArray + + * CMakeLists.txt: + * DerivedSources.make: + * GNUmakefile.am: + * WebCore.pri: + * WebCore.vcproj/WebCore.vcproj: + * WebCore.xcodeproj/project.pbxproj: + * bindings/js/JSDOMMimeTypeArrayCustom.cpp: Added. + (WebCore::JSDOMMimeTypeArray::canGetItemsForName): + (WebCore::JSDOMMimeTypeArray::nameGetter): + * bindings/js/JSDOMPluginArrayCustom.cpp: Added. + (WebCore::JSDOMPluginArray::canGetItemsForName): + (WebCore::JSDOMPluginArray::nameGetter): + * bindings/js/JSDOMPluginCustom.cpp: Added. + (WebCore::JSDOMPlugin::canGetItemsForName): + (WebCore::JSDOMPlugin::nameGetter): + * bindings/js/JSMimeTypeArrayCustom.cpp: Removed. + * bindings/js/JSPluginArrayCustom.cpp: Removed. + * bindings/js/JSPluginCustom.cpp: Removed. + * bindings/scripts/CodeGeneratorJS.pm: + * page/DOMWindow.idl: + * page/Navigator.cpp: + (WebCore::Navigator::plugins): + (WebCore::Navigator::mimeTypes): + * page/Navigator.h: + * page/Navigator.idl: + * plugins/DOMMimeType.cpp: Added. + (WebCore::DOMMimeType::DOMMimeType): + (WebCore::DOMMimeType::~DOMMimeType): + (WebCore::DOMMimeType::type): + (WebCore::DOMMimeType::suffixes): + (WebCore::DOMMimeType::description): + (WebCore::DOMMimeType::enabledPlugin): + * plugins/DOMMimeType.h: Added. + (WebCore::DOMMimeType::create): + (WebCore::DOMMimeType::mimeClassInfo): + * plugins/DOMMimeType.idl: Added. + * plugins/DOMMimeTypeArray.cpp: Added. + (WebCore::DOMMimeTypeArray::DOMMimeTypeArray): + (WebCore::DOMMimeTypeArray::~DOMMimeTypeArray): + (WebCore::DOMMimeTypeArray::length): + (WebCore::DOMMimeTypeArray::item): + (WebCore::DOMMimeTypeArray::canGetItemsForName): + (WebCore::DOMMimeTypeArray::namedItem): + (WebCore::DOMMimeTypeArray::getPluginData): + * plugins/DOMMimeTypeArray.h: Added. + (WebCore::DOMMimeTypeArray::create): + (WebCore::DOMMimeTypeArray::disconnectFrame): + * plugins/DOMMimeTypeArray.idl: Added. + * plugins/DOMPlugin.cpp: Added. + (WebCore::DOMPlugin::DOMPlugin): + (WebCore::DOMPlugin::~DOMPlugin): + (WebCore::DOMPlugin::name): + (WebCore::DOMPlugin::filename): + (WebCore::DOMPlugin::description): + (WebCore::DOMPlugin::length): + (WebCore::DOMPlugin::item): + (WebCore::DOMPlugin::canGetItemsForName): + (WebCore::DOMPlugin::namedItem): + * plugins/DOMPlugin.h: Added. + (WebCore::DOMPlugin::create): + (WebCore::DOMPlugin::pluginInfo): + * plugins/DOMPlugin.idl: Added. + * plugins/DOMPluginArray.cpp: Added. + (WebCore::DOMPluginArray::DOMPluginArray): + (WebCore::DOMPluginArray::~DOMPluginArray): + (WebCore::DOMPluginArray::length): + (WebCore::DOMPluginArray::item): + (WebCore::DOMPluginArray::canGetItemsForName): + (WebCore::DOMPluginArray::namedItem): + (WebCore::DOMPluginArray::refresh): + (WebCore::DOMPluginArray::pluginData): + * plugins/DOMPluginArray.h: Added. + (WebCore::DOMPluginArray::create): + (WebCore::DOMPluginArray::disconnectFrame): + * plugins/DOMPluginArray.idl: Added. + * plugins/MimeType.cpp: Removed. + * plugins/MimeType.h: Removed. + * plugins/MimeType.idl: Removed. + * plugins/MimeTypeArray.cpp: Removed. + * plugins/MimeTypeArray.h: Removed. + * plugins/MimeTypeArray.idl: Removed. + * plugins/Plugin.cpp: Removed. + * plugins/Plugin.h: Removed. + * plugins/Plugin.idl: Removed. + * plugins/PluginArray.cpp: Removed. + * plugins/PluginArray.h: Removed. + * plugins/PluginArray.idl: Removed. + +2010-07-06 Alexey Proskuryakov <ap@apple.com> + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=41156 + Cross origin XMLHttpRequest should log the reason why connection failed + + Covered by multiple existing tests. + + * loader/CrossOriginAccessControl.cpp: + (WebCore::passesAccessControlCheck): + * loader/CrossOriginAccessControl.h: + * loader/CrossOriginPreflightResultCache.cpp: + (WebCore::CrossOriginPreflightResultCacheItem::parse): + (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginMethod): + (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders): + (WebCore::CrossOriginPreflightResultCacheItem::allowsRequest): + * loader/CrossOriginPreflightResultCache.h: + Functions that check requests now take a string argument for error explanation. + + * loader/DocumentThreadableLoader.cpp: + (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): Make an informative error + if crossOriginRequestPolicy is DenyCrossOriginRequests. This doesn't currently go anywhere, + since XMLHttpRequest is the only client that logs from didFail(), and it of course supports + cross origin requests. + (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest): Make an informative + error when trying to e.g. send a cross origin XMLHttpRequest to ftp://. + (WebCore::DocumentThreadableLoader::didReceiveResponse): Pass error explanation from cross + origin access control code. + (WebCore::DocumentThreadableLoader::preflightFailure): Ditto. + + * loader/DocumentThreadableLoader.h: preflightFailure() now takes arguments. + + * platform/network/ResourceErrorBase.cpp: + * platform/network/ResourceErrorBase.h: + Added a constant for WebKit error domain. + + * xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::didFail): Report the error to console. + One day we'll be able to also provide script file and line number here, so it's best to + pass error all the way down to XHR for reporting. + +2010-07-06 Pavel Podivilov <podivilov@chromium.org> + + Reviewed by Pavel Feldman. + + Web Inspector: convert script offset to webkit format in v8 ScriptDebugServer + https://bugs.webkit.org/show_bug.cgi?id=41696 + + * bindings/v8/ScriptDebugServer.cpp: + (WebCore::ScriptDebugServer::dispatchDidParseSource): + +2010-07-06 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Implement InTableBodyMode + https://bugs.webkit.org/show_bug.cgi?id=41671 + + In the process of implementing this patch, Eric and I discussed some of + the high-level organization of the HTMLTreeBuilder class. We'd like to + split it up into smaller pieces. In the meantime, I've reordered some + of the declarations in the header to make the relations between the + different kinds of functions clearer. + + * html/HTMLElementStack.cpp: + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processIsindexStartTagForInBody): + (WebCore::HTMLTreeBuilder::processStartTagForInBody): + (WebCore::HTMLTreeBuilder::processStartTagForInTable): + (WebCore::HTMLTreeBuilder::processStartTag): + (WebCore::HTMLTreeBuilder::processEndTagForInTable): + (WebCore::HTMLTreeBuilder::processEndTag): + (WebCore::HTMLTreeBuilder::processCharacter): + (WebCore::HTMLTreeBuilder::processEndOfFile): + * html/HTMLTreeBuilder.h: + +2010-07-06 Leandro Pereira <leandro@profusion.mobi> + + Unreviewed build fix. + + [EFL] Generate code for RemoteInspector. + + * CMakeLists.txt: + +2010-07-06 Varun Jain <varunjain@chromium.org> + + Reviewed by Oliver Hunt. + + Implementing CURVE_TO_CUBIC specification for SVG Path Segments. Currently, + curves specified in relative cordinates such as using createCurvetoCubicRel() + javascript function are not displayed. + + SVG CurvetoCubic Path not implemented for relative cordinates + https://bugs.webkit.org/show_bug.cgi?id=41294 + + Test: svg/custom/svg-curve-with-relative-cordinates.html + + * svg/SVGPathSegList.cpp: + (WebCore::SVGPathSegList::toPathData): + +2010-07-06 Alexey Proskuryakov <ap@apple.com> + + Roll out patch for https://bugs.webkit.org/show_bug.cgi?id=41348 "Remove global variables + from XSLTProcessorLibxslt.cpp", as it causes crashes on buildbot. + + * xml/XSLTProcessor.h: + (WebCore::XSLTProcessor::xslStylesheet): + (WebCore::XSLTProcessor::XSLTProcessor): + * xml/XSLTProcessorLibxslt.cpp: + (WebCore::docLoaderFunc): + (WebCore::setXSLTLoadCallBack): + (WebCore::xsltStylesheetPointer): + (WebCore::XSLTProcessor::transformToString): + +2010-07-06 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Add processing for "in cell" mode and end tag processing for "in row" + https://bugs.webkit.org/show_bug.cgi?id=41688 + + I added several new table tests, not all of which pass yet. + Remaining failures exist due to lack of full "in table body" mode + support, which Adam has an outstanding patch for. + I believe all of the various branches added by this change are + covered now by our tests. + + * html/HTMLElementStack.cpp: + - Added QualifiedName versions of inScope functions. + Using tagName.localName() is wrong for non-HTML elements, + in preparation for supporting foreign content we should centralize + our handling of QualifiedName in these functions instead of + sprinkling more .localName() calls around the code. + (WebCore::HTMLElementStack::inScope): + (WebCore::HTMLElementStack::inListItemScope): + (WebCore::HTMLElementStack::inTableScope): + * html/HTMLElementStack.h: + * html/HTMLFormattingElementList.cpp: + (WebCore::HTMLFormattingElementList::Entry::operator==): + (WebCore::HTMLFormattingElementList::Entry::operator!=): + - Calling element() on markers will assert, so use m_element. + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::closeTheCell): + - Implemented per the spec. + (WebCore::HTMLTreeBuilder::processStartTag): + - Use isTableBodyContextTag where possible. + - Add InCellMode. + (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately): + - Use isTableBodyContextTag where possible. + (WebCore::HTMLTreeBuilder::processTrEndTagForInRow): + - This code is needed from at least two callsites. + (WebCore::HTMLTreeBuilder::processEndTag): + - Add InCellMode and InRowMode + (WebCore::HTMLTreeBuilder::processCharacter): + (WebCore::HTMLTreeBuilder::processEndOfFile): + * html/HTMLTreeBuilder.h: + +2010-07-06 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Make <a> auto-close any parent <a> tag + https://bugs.webkit.org/show_bug.cgi?id=41684 + + I first fixed <a> to auto-close surrounding <a> tags. + That caused about 3 more test passes and one new test failure. + The test failure was due to <marque> not adding a marker + to the active formatting elements. + + So I made a one-line change to fix <marque>. However that hit an + ASSERT due to a bug in indexOfFirstUnopenFormattingElement. + Fixing indexOfFirstUnopenFormattingElement fixed another bunch of + Adoption Agency related tests (clearly this was the second typo + which was causing all the adoption agency failures). + + However fixing <marque> and indexOfFirstUnopenFormattingElement, + added yet another failure due to missing support for </p> + automatically adding an implicit <p> tag. Fixing </p> finally + got the tests to a stable (all improving) state. + + In the end, these 4 minor (and very well tested) tweaks fixed a total + of 9 subtests in html5lib/runner.html. + Another subtest progressed, but did not fully pass due to missing + <table> foster-parenting support. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTagForInBody): + (WebCore::HTMLTreeBuilder::processEndTagForInBody): + (WebCore::HTMLTreeBuilder::indexOfFirstUnopenFormattingElement): + +2010-07-02 Philippe Normand <pnormand@igalia.com> + + Reviewed by Xan Lopez + + [GStreamer] can't seek past maxTimeLoaded value + https://bugs.webkit.org/show_bug.cgi?id=40526 + + Extended the seekable range to the whole media. This allows video + played with progressive download to be seeked past the current + buffered position. + + * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: + (WebCore::MediaPlayerPrivateGStreamer::maxTimeSeekable): + (WebCore::MediaPlayerPrivateGStreamer::updateStates): + +2010-07-06 Andreas Wictor <andreas.wictor@xcerion.com> + + Reviewed by Alexey Proskuryakov. + + Remove global variables from XSLTProcessorLibxslt.cpp + https://bugs.webkit.org/show_bug.cgi?id=41348 + + Remove the globalProcessor and globalDocLoader global variables + by using the _private field that exists on most libxml structs. + + No new tests, existing tests covers this. + + * xml/XSLTProcessor.h: + (WebCore::XSLTProcessor::sourceNode): + (WebCore::XSLTProcessor::XSLTProcessor): + * xml/XSLTProcessorLibxslt.cpp: + (WebCore::registredXSLTProcessors): + (WebCore::registredXSLStyleSheets): + (WebCore::docLoaderFunc): + (WebCore::xsltStylesheetPointer): + (WebCore::XSLTProcessor::transformToString): + +2010-07-06 Darin Adler <darin@apple.com> + + Fix Cairo build. + + * platform/graphics/cairo/GraphicsContextCairo.cpp: + (WebCore::GraphicsContext::createPlatformShadow): Removed unnneded release + in code that passes a PassOwnPtr to another PassOwnPtr. + +2010-07-06 Darin Adler <darin@apple.com> + + Fix Chromium build. + + * platform/graphics/skia/SkiaUtils.cpp: + (WebCore::scratchContext): Use leakPtr instead of release. + +2010-07-06 Martin Robinson <mrobinson@igalia.com> + + Unreviewed. + + Build fix after r62549. + + * GNUmakefile.am: Generate RemoteInspector files by manually listing + them instead of building them into libWebCoreJS.la. + +2010-07-06 Darin Adler <darin@apple.com> + + Reviewed by Adam Barth. + + Add adoptPtr and leakPtr functions for OwnPtr and PassOwnPtr + https://bugs.webkit.org/show_bug.cgi?id=41320 + + Made code changes required because of the change to the release function. + The equivalent to the old release function is now named leakPtr and + should be used sparingly. The new release function returns a PassOwnPtr. + + * css/CSSFontFaceSource.cpp: + (WebCore::CSSFontFaceSource::getFontData): Changed code to call + leakPtr instead of release. + * css/CSSParser.cpp: + (WebCore::CSSParser::addProperty): Ditto. + + * css/CSSSegmentedFontFace.cpp: + (WebCore::CSSSegmentedFontFace::getFontData): Removed unneeded type + casting. Not sure why this changed the type to FontData* and then + casted back to SimpleFontData*. + + * css/MediaQuery.cpp: + (WebCore::MediaQuery::MediaQuery): Removed call to release on a + PassOwnPtr, since the data member is now an OwnPtr. + (WebCore::MediaQuery::~MediaQuery): Removed now-unneeded delete. + * css/MediaQuery.h: Changed m_expressions to be an OwnPtr. + + * html/HTMLToken.h: + (WebCore::AtomicHTMLToken::AtomicHTMLToken): Use assignment instead + of the set function since there are no raw pointers involved. + * loader/CachedResource.cpp: + (WebCore::CachedResource::makePurgeable): Ditto. + + * loader/CrossOriginPreflightResultCache.cpp: + (WebCore::CrossOriginPreflightResultCache::appendEntry): Use + leakPtr instead of release, and also add FIXME about deleting the + old value if the original and URL are already in the map. I + believe dealing with this FIXME may fix a storage leak. + + * loader/CrossOriginPreflightResultCache.h: Change the argument + to be PassOwnPtr instead of a raw pointer, since this function + does take ownership. + + * loader/DocumentThreadableLoader.cpp: + (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): + Use assignment instead of the set function since there are no raw + pointers involved. + * loader/FrameLoader.cpp: + (WebCore::FrameLoader::startIconLoader): Ditto. + * loader/TextResourceDecoder.cpp: + (WebCore::TextResourceDecoder::decode): Ditto. + (WebCore::TextResourceDecoder::flush): Ditto. + + * page/DOMTimer.cpp: + (WebCore::DOMTimer::fired): Use OwnPtr instead of an explicit + delete. + + * platform/CrossThreadCopier.h: Removed explicit code that tried + to copy PassOwnPtr in a complicated way. It did nothing different + from just returning the PassOwnPtr. This presumably was done because + PassRefPtr has issues when copied cross-thread, but there are no + similar issues for PassOwnPtr. Someone with more experience than I + might be able to remove the specialization altogether, because + CrossThreadCopierPassThrough does the right thing in this case. + + * platform/SharedBuffer.cpp: + (WebCore::SharedBuffer::adoptPurgeableBuffer): Changed argument to + be a PassOwnPtr. + (WebCore::SharedBuffer::releasePurgeableBuffer): Changed result to + be a PassOwnPtr. + * platform/SharedBuffer.h: Updated for changes above. + + * rendering/RenderSVGResourceFilter.cpp: + (WebCore::RenderSVGResourceFilter::applyResource): Changed one site + to use assignment instead of the set function since there are no raw + pointers involved. Changed another site to use leakPtr instead + of release. + + * rendering/RenderSVGResourceGradient.cpp: + (WebCore::createMaskAndSwapContextForTextGradient): Use assignment + instead of the set function since there are no raw pointers involved. + + * rendering/style/RenderStyle.cpp: + (WebCore::RenderStyle::setContent): Use leakPtr instead of release. + (WebCore::RenderStyle::setBoxShadow): Ditto. + + * workers/DefaultSharedWorkerRepository.cpp: + (WebCore::DefaultSharedWorkerRepository::connectToWorker): + Removed unneeded call to release function in a code path that passes + a PassOwnPtr to a function that takes a PassOwnPtr. + + * workers/WorkerContext.cpp: + (WebCore::WorkerContext::setTimeout): Changed argument type to PassOwnPtr. + (WebCore::WorkerContext::setInterval): Ditto. + * workers/WorkerContext.h: Updated for changes above. + + * workers/WorkerMessagingProxy.cpp: + (WebCore::WorkerMessagingProxy::postMessageToWorkerObject): + (WebCore::WorkerMessagingProxy::postMessageToWorkerContext): + Removed unneeded call to release function in code paths that pass + a PassOwnPtr to a function that takes a PassOwnPtr. + +2010-07-06 Ilya Tikhonovsky <loislo@chromium.org> + + Reviewed by Yury Semikhatsky. + + WebInspector: generator part of the patch for bug 40675. + On the way to Remote Debugging we want to support JSON serialization + on both sides of WebInspector transport. + As far as InspectorFrontend class is a simple proxy to WebInspector + it would be better to generate it from an IDL file. + We have generator infrastructure for binding and will reuse it for + new generator. + https://bugs.webkit.org/show_bug.cgi?id=41692 + + + * CMakeLists.txt: + * DerivedSources.make: + * GNUmakefile.am: + * WebCore.gyp/WebCore.gyp: + * WebCore.gyp/scripts/rule_binding.py: + * WebCore.gypi: + * WebCore.pri: + * WebCore.vcproj/WebCore.vcproj: + * WebCore.xcodeproj/project.pbxproj: + * bindings/scripts/CodeGenerator.pm: + * bindings/scripts/IDLParser.pm: + * bindings/scripts/generate-bindings.pl: + * inspector/CodeGeneratorInspector.pm: Added. + * inspector/InspectorController.cpp: + (WebCore::InspectorController::connectFrontend): + (WebCore::InspectorController::startTimelineProfiler): + * inspector/InspectorController.h: + * inspector/InspectorFrontend.cpp: + * inspector/InspectorFrontend.h: + * inspector/InspectorFrontend2.idl: Added. + * inspector/InspectorTimelineAgent.cpp: + (WebCore::InspectorTimelineAgent::InspectorTimelineAgent): + (WebCore::InspectorTimelineAgent::resetFrontendProxyObject): + (WebCore::InspectorTimelineAgent::addRecordToTimeline): + * inspector/InspectorTimelineAgent.h: + +2010-07-06 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk> + + Rubber-stamped by Xan Lopez. + + [GTK] Crashes when going back with page cache in unknown circunstances + https://bugs.webkit.org/show_bug.cgi?id=41710 + + Also NULL-check document, in hopes of fixing this hard to + reproduce crash that we are getting reported quite a bit. + + * page/FrameView.cpp: + (WebCore::FrameView::windowClipRect): + +2010-07-05 Ilya Tikhonovsky <loislo@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: On the way to Remote Debuging we want to support JSON + serialization on both sides of WebInspector transport. As far as + InspectorFrontend class is a simple proxy to WebInspector it would + be better to generate it from an IDL file. We have generator + infostructure for binding and will reuse it for new generator. + https://bugs.webkit.org/show_bug.cgi?id=40675 + + * bindings/js/ScriptCallStack.cpp: + (WebCore::ScriptCallStack::stackTrace): + * bindings/js/ScriptCallStack.h: + * bindings/v8/ScriptCallStack.cpp: + (WebCore::ScriptCallStack::stackTrace): + * bindings/v8/ScriptCallStack.h: + * inspector/InspectorFrontend.cpp: + (WebCore::InspectorFrontend::addRecordToTimeline): + * inspector/InspectorFrontend.h: + * inspector/InspectorTimelineAgent.cpp: + (WebCore::InspectorTimelineAgent::pushGCEventRecords): + (WebCore::InspectorTimelineAgent::willCallFunction): + (WebCore::InspectorTimelineAgent::willDispatchEvent): + (WebCore::InspectorTimelineAgent::willLayout): + (WebCore::InspectorTimelineAgent::willRecalculateStyle): + (WebCore::InspectorTimelineAgent::willPaint): + (WebCore::InspectorTimelineAgent::willWriteHTML): + (WebCore::InspectorTimelineAgent::didWriteHTML): + (WebCore::InspectorTimelineAgent::didInstallTimer): + (WebCore::InspectorTimelineAgent::didRemoveTimer): + (WebCore::InspectorTimelineAgent::willFireTimer): + (WebCore::InspectorTimelineAgent::willChangeXHRReadyState): + (WebCore::InspectorTimelineAgent::willLoadXHR): + (WebCore::InspectorTimelineAgent::willEvaluateScript): + (WebCore::InspectorTimelineAgent::didScheduleResourceRequest): + (WebCore::InspectorTimelineAgent::willSendResourceRequest): + (WebCore::InspectorTimelineAgent::willReceiveResourceData): + (WebCore::InspectorTimelineAgent::willReceiveResourceResponse): + (WebCore::InspectorTimelineAgent::didFinishLoadingResource): + (WebCore::InspectorTimelineAgent::didMarkTimeline): + (WebCore::InspectorTimelineAgent::didMarkDOMContentEvent): + (WebCore::InspectorTimelineAgent::didMarkLoadEvent): + (WebCore::InspectorTimelineAgent::addRecordToTimeline): + (WebCore::InspectorTimelineAgent::setHeapSizeStatistic): + (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord): + (WebCore::InspectorTimelineAgent::pushCurrentRecord): + * inspector/InspectorTimelineAgent.h: + (WebCore::InspectorTimelineAgent::TimelineRecordEntry::TimelineRecordEntry): + * inspector/TimelineRecordFactory.cpp: + (WebCore::TimelineRecordFactory::createGenericRecord): + (WebCore::TimelineRecordFactory::createGCEventData): + (WebCore::TimelineRecordFactory::createFunctionCallData): + (WebCore::TimelineRecordFactory::createEventDispatchData): + (WebCore::TimelineRecordFactory::createGenericTimerData): + (WebCore::TimelineRecordFactory::createTimerInstallData): + (WebCore::TimelineRecordFactory::createXHRReadyStateChangeData): + (WebCore::TimelineRecordFactory::createXHRLoadData): + (WebCore::TimelineRecordFactory::createEvaluateScriptData): + (WebCore::TimelineRecordFactory::createMarkTimelineData): + (WebCore::TimelineRecordFactory::createScheduleResourceRequestData): + (WebCore::TimelineRecordFactory::createResourceSendRequestData): + (WebCore::TimelineRecordFactory::createResourceReceiveResponseData): + (WebCore::TimelineRecordFactory::createResourceFinishData): + (WebCore::TimelineRecordFactory::createReceiveResourceData): + (WebCore::TimelineRecordFactory::createPaintData): + (WebCore::TimelineRecordFactory::createParseHTMLData): + * inspector/TimelineRecordFactory.h: + +2010-07-06 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Implement InColgroupMode + https://bugs.webkit.org/show_bug.cgi?id=41663 + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup): + (WebCore::HTMLTreeBuilder::processStartTag): + (WebCore::HTMLTreeBuilder::processEndTag): + (WebCore::HTMLTreeBuilder::processCharacter): + (WebCore::HTMLTreeBuilder::processEndOfFile): + * html/HTMLTreeBuilder.h: + +2010-07-06 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Implement bookmarking for HTML5 Adoption Agency algorithm + https://bugs.webkit.org/show_bug.cgi?id=41659 + + Was easier than I expected it to be. + Fixes a bunch of html5lib/runner.html tests. + + * html/HTMLFormattingElementList.cpp: + (WebCore::HTMLFormattingElementList::bookmarkFor): + (WebCore::HTMLFormattingElementList::insertAt): + * html/HTMLFormattingElementList.h: + (WebCore::HTMLFormattingElementList::Bookmark::Bookmark): + (WebCore::HTMLFormattingElementList::Bookmark::moveToAfter): + (WebCore::HTMLFormattingElementList::Bookmark::elementBefore): + (WebCore::HTMLFormattingElementList::Bookmark::elementAfter): + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::callTheAdoptionAgency): + +2010-07-06 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Implement more of InTableMode + https://bugs.webkit.org/show_bug.cgi?id=41652 + + By the time we got around to landing this patch, it turns out to be + just a bit of cleanup (the functional changes where landed already.) + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processCharacter): + (WebCore::HTMLTreeBuilder::processEndOfFile): + +2010-07-06 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r62529. + http://trac.webkit.org/changeset/62529 + https://bugs.webkit.org/show_bug.cgi?id=41661 + + http/tests/inspector/resource-har-conversion.html is broken + (Requested by yutak on #webkit). + + * inspector/InspectorController.cpp: + (WebCore::InspectorController::addResource): + (WebCore::InspectorController::removeResource): + * inspector/InspectorController.h: + * inspector/InspectorResource.cpp: + (WebCore::InspectorResource::InspectorResource): + (WebCore::InspectorResource::updateScriptObject): + (WebCore::InspectorResource::cachedResource): + (WebCore::InspectorResource::type): + (WebCore::InspectorResource::resourceData): + * inspector/InspectorResource.h: + (WebCore::InspectorResource::): + (WebCore::InspectorResource::create): + * inspector/front-end/Resource.js: + (WebInspector.Resource.Type.toString): + (WebInspector.Resource.prototype.set type): + (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType): + * inspector/front-end/ResourceView.js: + (WebInspector.ResourceView.prototype._refreshRequestHeaders): + (WebInspector.ResourceView.prototype._refreshResponseHeaders): + (WebInspector.ResourceView.prototype._refreshHeaders): + * inspector/front-end/inspector.css: + (.resources-category-scripts, .resources-category-xhr, .resources-category-fonts, .resources-category-other): + * inspector/front-end/inspector.js: + (WebInspector.loaded): + (WebInspector.updateResource): + * websockets/WebSocketChannel.cpp: + (WebCore::WebSocketChannel::WebSocketChannel): + (WebCore::WebSocketChannel::disconnect): + (WebCore::WebSocketChannel::didOpen): + (WebCore::WebSocketChannel::didClose): + (WebCore::WebSocketChannel::processBuffer): + * websockets/WebSocketChannel.h: + +2010-07-06 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Implement InCaptionMode + https://bugs.webkit.org/show_bug.cgi?id=41660 + + Implementing this mode also turned up a subtle bug in the adoption + agency code. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTag): + (WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption): + (WebCore::HTMLTreeBuilder::processEndTag): + (WebCore::HTMLTreeBuilder::processCharacter): + (WebCore::HTMLTreeBuilder::indexOfFirstUnopenFormattingElement): + - We're supposed to reutrn the first *unopened* formatting element. + The old code returned the first *opened* formatting element. + * html/HTMLTreeBuilder.h: + +2010-07-06 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Implement defaut cases for InTableMode + https://bugs.webkit.org/show_bug.cgi?id=41656 + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTag): + (WebCore::HTMLTreeBuilder::processEndTagForInBody): + (WebCore::HTMLTreeBuilder::processEndTag): + * html/HTMLTreeBuilder.h: + +2010-07-05 Nikolas Zimmermann <nzimmermann@rim.com> + + Reviewed by Dirk Schulze. + + SVGRenderContainer forces too many kids to relayout + https://bugs.webkit.org/show_bug.cgi?id=15391 + + Fixing a long-standing performance issue. We should only ever need to relayout container children when the parent bounds change. + The bounds of a container can only change, if the outermost RenderSVGRoot container uses relative length values and its size changes. + This can either happen when the window resizes for standalone SVG documents, or if an enclosing RenderBox changes width/height values. + + Only relayout container children if the container has selfNeedsLayout() true, or if the parent bounds change. + Lively Kernel doesn't do any relayouts anymore, except if you change the Safari window size, this is a great progression. + + * rendering/RenderPath.cpp: + (WebCore::RenderPath::layout): No need to special case Path updates, if the element uses relative lengths. SVGRenderSupport now handles this case. + * rendering/RenderSVGContainer.cpp: + (WebCore::RenderSVGContainer::layout): Fix some style issues. + * rendering/RenderSVGContainer.h: + (WebCore::RenderSVGContainer::setDrawsContents): Inlined for speed. + (WebCore::RenderSVGContainer::drawsContents): Ditto. + * rendering/RenderSVGRoot.cpp: + (WebCore::RenderSVGRoot::RenderSVGRoot): Initialize m_isLayoutSizeChanged to false. + (WebCore::RenderSVGRoot::layout): Set m_isLayoutSizeChanged=true when the RenderSVGRoot size changes during layout. + (WebCore::RenderSVGRoot::calcViewport): Remove hasRelativeLengths() special case. + * rendering/RenderSVGRoot.h: + (WebCore::RenderSVGRoot::isLayoutSizeChanged): New function, which returns true during layout() if the outermost <svg> size changes. + * rendering/RenderSVGViewportContainer.cpp: + (WebCore::RenderSVGViewportContainer::calcViewport): Cleanup code, and remove obsolete hasRelativeLengths() special case. + * rendering/SVGRenderSupport.cpp: + (WebCore::svgRootTreeObject): Added helper function, that returns the RenderSVGRoot for a given RenderObject. + (WebCore::SVGRenderSupport::layoutChildren): Remove FIXME, only relayout container children, if the parent bounds change and the child uses relative lengths. + * svg/SVGStyledElement.cpp: + (WebCore::SVGStyledElement::updateRelativeLengthsInformation): Implemented this function. Keeps track of relative lengths elements, so that the + hasRelativeLengths() information is always up2date. + * svg/SVGStyledElement.h: + (WebCore::SVGStyledElement::hasRelativeLengths): Don't call the virtual selfHasRelativeLengths() information, just return wheter m_elementsWithRelativeLengths is not empty. + +2010-07-05 Yuzo Fujishima <yuzo@google.com> + + Reviewed by Dan Bernstein. + + Fix for Bug 41509 - Ranges for @font-face unicode-range must be separated by commas + https://bugs.webkit.org/show_bug.cgi?id=41509 + + Test: fast/css/font-face-multiple-ranges-for-unicode-range.html + + * css/CSSParser.cpp: + (WebCore::CSSParser::parseFontFaceUnicodeRange): + +2010-07-05 Yuta Kitamura <yutak@chromium.org> + + Reviewed by Pavel Feldman. + + Add WebSocket resource type to Web Inspector. + + When a new WebSocket connection is established, a line for that connection + will appear in Web Inspector's Resources tab. If the resource name is + clicked, the details of handshake request and response will be shown. + + Web Inspector: WebSocket in Resources tab + https://bugs.webkit.org/show_bug.cgi?id=40768 + + * inspector/InspectorController.cpp: + (WebCore::InspectorController::addResource): WebSocket resource does not + have an associated loader, thus frame might be null. Need to check it. + (WebCore::InspectorController::removeResource): Ditto. + (WebCore::InspectorController::didCreateWebSocket): + (WebCore::InspectorController::willSendWebSocketHandshakeRequest): + (WebCore::InspectorController::didReceiveWebSocketHandshakeResponse): + (WebCore::InspectorController::didCloseWebSocket): + * inspector/InspectorController.h: + * inspector/InspectorResource.cpp: Add null checks of m_loader and m_frame, + because WebSocket does not have a loader and we need to allow null for + these variables. + (WebCore::createReadableStringFromBinary): + (WebCore::InspectorResource::InspectorResource): + (WebCore::InspectorResource::create): Factory function of + regular (non-WebSocket) resources. + (WebCore::InspectorResource::createWebSocket): Factory function of + WebSocket resources. + (WebCore::InspectorResource::updateWebSocketRequest): + (WebCore::InspectorResource::updateWebSocketResponse): + (WebCore::InspectorResource::updateScriptObject): + (WebCore::InspectorResource::cachedResource): + (WebCore::InspectorResource::type): + (WebCore::InspectorResource::resourceData): + * inspector/InspectorResource.h: + (WebCore::InspectorResource::): + (WebCore::InspectorResource::markWebSocket): + * inspector/front-end/Resource.js: + (WebInspector.Resource.Type.toString): + (WebInspector.Resource.prototype.set type): + (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType): + * inspector/front-end/ResourceView.js: + (WebInspector.ResourceView.prototype._refreshRequestHeaders): + (WebInspector.ResourceView.prototype._refreshResponseHeaders): + (WebInspector.ResourceView.prototype._refreshHeaders): + * inspector/front-end/inspector.css: + (.resources-category-websockets, .resources-category-other): + (.resources-category-websockets .resources-graph-bar): + (.resources-category-websockets.resource-cached .resources-graph-bar): + * inspector/front-end/inspector.js: + (WebInspector.loaded): + (WebInspector.updateResource): + * websockets/WebSocketChannel.cpp: + (WebCore::WebSocketChannel::WebSocketChannel): + (WebCore::WebSocketChannel::disconnect): + (WebCore::WebSocketChannel::didOpen): + (WebCore::WebSocketChannel::didClose): + (WebCore::WebSocketChannel::processBuffer): + (WebCore::WebSocketChannel::identifier): + * websockets/WebSocketChannel.h: + +2010-07-05 Yury Semikhatsky <yurys@chromium.org> + + Unreviewed. Fix Chromium build. + + * inspector/InspectorApplicationCacheAgent.cpp: + (WebCore::InspectorApplicationCacheAgent::fillResourceList): + (WebCore::InspectorApplicationCacheAgent::getApplicationCaches): + +2010-07-05 Adam Barth <abarth@webkit.org> + + Unreviewed. + + Move processStartTagForInBody to its own function. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTagForInBody): + (WebCore::HTMLTreeBuilder::processStartTag): + * html/HTMLTreeBuilder.cpp.orig: Added. + * html/HTMLTreeBuilder.h: + +2010-07-05 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Fix one more notImplemented in h1-h6 start tag handling + https://bugs.webkit.org/show_bug.cgi?id=41654 + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTag): + +2010-07-05 Eric Seidel <eric@webkit.org> + + Unreviewed. Just fixing proess to process. + Clearly Adam and I can't spell. Thankfully MikeSmith can. + + Add <isindex> support, per HTML5 + https://bugs.webkit.org/show_bug.cgi?id=41650 + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processFakeStartTag): + (WebCore::HTMLTreeBuilder::processFakeEndTag): + (WebCore::HTMLTreeBuilder::processIsindexStartTagForBody): + (WebCore::HTMLTreeBuilder::processStartTag): + * html/HTMLTreeBuilder.h: + +2010-07-05 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Add <isindex> support, per HTML5 + https://bugs.webkit.org/show_bug.cgi?id=41650 + + Covered by html5lib/runner.html including a new + isindex.dat test suite. + + * html/HTMLToken.h: + (WebCore::AtomicHTMLToken::AtomicHTMLToken): + - Support passing attributes to the constructor. + (WebCore::AtomicHTMLToken::name): + (WebCore::AtomicHTMLToken::setName): + (WebCore::AtomicHTMLToken::getAttributeItem): + (WebCore::AtomicHTMLToken::attributes): + (WebCore::AtomicHTMLToken::takeAtributes): + - Reduces ref-churn, and makes it possible for callers + to modify attributes w/o affecting future uses of the attributes. + (WebCore::AtomicHTMLToken::usesName): + - Used by ASSERTS. + (WebCore::AtomicHTMLToken::usesAttributes): + - Used by ASSERTS. + * html/HTMLTreeBuilder.cpp: + (WebCore::convertToOldStyle): + - Can't be const, now that we use takeAttributes() + (WebCore::HTMLTreeBuilder::insertHTMLStartTagBeforeHTML): + (WebCore::HTMLTreeBuilder::proesssFakeStartTag): + - New function. I'm not sure this is the perfect design + (I'd kinda like AtomicHTMLToken to be copyable so we can + have create functions for it), but this makes the callsites + using fake tokens much more readable. + (WebCore::HTMLTreeBuilder::proesssFakeEndTag): + (WebCore::HTMLTreeBuilder::processFakeCharacters): + (WebCore::HTMLTreeBuilder::attributesForIsindexInput): + (WebCore::HTMLTreeBuilder::processIsindexStartTagForBody): + (WebCore::HTMLTreeBuilder::processStartTag): + (WebCore::HTMLTreeBuilder::insertScriptElement): + - Use takeAttributes() for less ref-churn. + (WebCore::HTMLTreeBuilder::createElement): ditto + (WebCore::HTMLTreeBuilder::finished): + - Remove bogus use of AtomicHTMLToken constructor which + wasn't even being used now that we support emitting EOF tokens + from the Tokenizer directly. + * html/HTMLTreeBuilder.h: + +2010-07-05 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + ASSERT that we're processing the correct type of token + https://bugs.webkit.org/show_bug.cgi?id=41647 + + Making these asserts work required a small (non-observable) tweak to + some old code. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processDoctypeToken): + (WebCore::HTMLTreeBuilder::processStartTag): + (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody): + (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody): + (WebCore::HTMLTreeBuilder::processEndTag): + (WebCore::HTMLTreeBuilder::processComment): + (WebCore::HTMLTreeBuilder::processCharacter): + (WebCore::HTMLTreeBuilder::processEndOfFile): + (WebCore::HTMLTreeBuilder::processStartTagForInHead): + +2010-07-05 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Implement in select in table + https://bugs.webkit.org/show_bug.cgi?id=41646 + + This mode is mostly a fall-through to the InSelectMode. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTag): + (WebCore::HTMLTreeBuilder::processEndTag): + (WebCore::HTMLTreeBuilder::processCharacter): + (WebCore::HTMLTreeBuilder::processEndOfFile): + +2010-07-05 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Implement basic text node coalescing + https://bugs.webkit.org/show_bug.cgi?id=41623 + + This patch isn't the end-all, be-all of text node coalescing, but it's + a good start. + + * dom/CharacterData.cpp: + (WebCore::CharacterData::parserAppendData): + (WebCore::CharacterData::appendData): + * dom/CharacterData.h: + - Added a new method to dance around mutation events. + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::insertTextNode): + +2010-07-05 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Implement InSelectMode + https://bugs.webkit.org/show_bug.cgi?id=41627 + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTag): + (WebCore::HTMLTreeBuilder::processEndTag): + (WebCore::HTMLTreeBuilder::processCharacter): + (WebCore::HTMLTreeBuilder::processEndOfFile): + +2010-07-05 Fady Samuel <fsamuel@chromium.org> + + Reviewed by Darin Adler. + + Fixed a svg crash when setting class of an svg ellipse object. + + Altering the CSS class of an attached SVG element causes WebKit to crash + https://bugs.webkit.org/show_bug.cgi?id=40857 + + Test: svg/css/svg-ellipse-render-crash.html + + * dom/StyledElement.cpp: + (WebCore::StyledElement::classAttributeChanged): + +2010-07-05 Dan Bernstein <mitz@apple.com> + + Reviewed by Sam Weinig. + + Reproducible crash with Optimize Legibility extension + https://bugs.webkit.org/show_bug.cgi?id=41585 + + Test: fast/css/text-rendering-priority.html + + Moved the text-rendering CSS property to the “high priority” group, because applying it + during style selection invalidates the font. + + * css/CSSPropertyNames.in: Moved text-rendering to the “high priority” section at the top. + * css/CSSStyleSelector.cpp: + (WebCore::CSSStyleSelector::applyDeclarations): Updated compile-time assertion. + +2010-07-05 Dan Bernstein <mitz@apple.com> + + Reviewed by Sam Weinig. + + optimizeLegibility doesn't play nice with fonts that do not have a space glyph + https://bugs.webkit.org/show_bug.cgi?id=41599 + + No test because none of the fonts available to DumpRenderTree are missing a space glyph. + + * rendering/RenderBlockLineLayout.cpp: + (WebCore::RenderBlock::findNextLineBreak): When the font does not map the space character + to a glyph, a fallback font is used for space. Therefore, wordTrailingSpaceWidth must be + initialized with the width of a space as measured by the Font rather than with the cached + space width. + +2010-07-05 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Implement HTML5's "reset insertion mode appropriately" + https://bugs.webkit.org/show_bug.cgi?id=41628 + + This has some minimal testing. One from my previous + </table> patch, and a few from the main suite. + + Mostly resetInsertionModeAppropriately isn't used yet + but we're about to add a bunch of states which do use it + and our test coverage will expand further as we do. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::HTMLTreeBuilder): + (WebCore::HTMLTreeBuilder::setInsertionModeAndEnd): + (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately): + * html/HTMLTreeBuilder.h: + +2010-07-04 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Add </table> support for "in table" insertion mode + https://bugs.webkit.org/show_bug.cgi?id=41591 + + resetInsertionModeAppropriately isn't implemented yet, however + I've added a test for the usage I added. + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately): + (WebCore::HTMLTreeBuilder::processEndTag): + * html/HTMLTreeBuilder.h: + +2010-07-05 Joseph Pecoraro <joepeck@webkit.org> + + Unreviewed build fix for r62503. + + Chromium missing method. Filed bug 41632 to track. + + * loader/appcache/ApplicationCacheHost.h: + (WebCore::ApplicationCacheHost::applicationCache): + +2010-07-05 Joseph Pecoraro <joepeck@webkit.org> + + Unreviewed build fix for r62503. + + Missed GTK's build file. + + * GNUmakefile.am: + +2010-07-05 Joseph Pecoraro <joepeck@webkit.org> + + Unreviewed build fix for r62503. + + Pass a blank ResourceResponse instead of passing 0. + + * loader/appcache/ApplicationCacheGroup.cpp: + (WebCore::ApplicationCacheGroup::createResourceHandle): + +2010-07-05 Joseph Pecoraro <joepeck@webkit.org> + + Unreviewed build fix for r62503. + + Forward declare ApplicationCache for Chromium. + + * loader/appcache/ApplicationCacheHost.h: + +2010-07-05 Joseph Pecoraro <joepeck@webkit.org> + + Reviewed by Pavel Feldman. + + WebInspector: HTML5 Offline Web Applications Support (ApplicationCache) + https://bugs.webkit.org/show_bug.cgi?id=24529 + + Parts of this patch were written by Kavita Kanetkar <kkanetkar@chromium.org>. + + Part 2: Pulling ApplicationCache Resources to Display in the Inspector. + + The InspectorApplicationCacheAgent gathers the information it + needs and forwards it on to the inspector. + + * inspector/InspectorApplicationCacheAgent.cpp: + (WebCore::InspectorApplicationCacheAgent::fillResourceList): get information about the resources. + (WebCore::InspectorApplicationCacheAgent::getApplicationCaches): gathers all the information from the ApplicationCacheHost. + (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCache): + (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources): + (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource): + * inspector/InspectorApplicationCacheAgent.h: defines structures to hold information about caches and resources. + (WebCore::InspectorApplicationCacheAgent::ApplicationCacheInfo::ApplicationCacheInfo): + (WebCore::InspectorApplicationCacheAgent::ResourceInfo::ResourceInfo): + (WebCore::InspectorApplicationCacheAgent::~InspectorApplicationCacheAgent): + * loader/appcache/ApplicationCacheHost.h: + (WebCore::ApplicationCacheHost::applicationCacheForInspector): new convention, public cache accessor for the inspector. + (WebCore::ApplicationCacheHost::documentLoader): added const. + + The User Interface uses a DataGrid, like Cookies. + + * inspector/front-end/ApplicationCacheItemsView.js: + (WebInspector.ApplicationCacheItemsView.prototype._update): + (WebInspector.ApplicationCacheItemsView.prototype._updateCallback): + (WebInspector.ApplicationCacheItemsView.prototype._createDataGrid): + (WebInspector.ApplicationCacheItemsView.prototype._populateDataGrid.numberCompare): + (WebInspector.ApplicationCacheItemsView.prototype._populateDataGrid.localeCompare): + (WebInspector.ApplicationCacheItemsView.prototype._populateDataGrid): + + The usual frontend pull workflow, except this goes through + InspectorApplicationCacheAgent instead of InspectorController. + + * inspector/InspectorBackend.cpp: + (WebCore::InspectorBackend::getApplicationCaches): + (WebCore::InspectorBackend::inspectorApplicationCacheAgent): + * inspector/InspectorBackend.h: + * inspector/InspectorBackend.idl: + * inspector/InspectorFrontend.cpp: + (WebCore::InspectorFrontend::didGetApplicationCaches): + * inspector/InspectorFrontend.h: + * inspector/front-end/DOMAgent.js: + (WebInspector.DOMNode.prototype.hasChildNodes): style fix. + (WebInspector.DOMAgent.prototype.nodeForId): style fix. + (WebInspector.ApplicationCache.getApplicationCachesAsync): pull. + (WebInspector.Cookies.getCookiesAsync): + * inspector/front-end/StoragePanel.js: + (WebInspector.StoragePanel.prototype.updateManifest): + (WebInspector.ApplicationCacheSidebarTreeElement.prototype.onselect): + * inspector/front-end/inspector.js: + (WebInspector.updateResource): + (WebInspector._addAppCacheDomain): + (WebInspector.reset): + + Miscellaneous. Localized Strings and fixes. + + * English.lproj/localizedStrings.js: "Type", "%s (%s)" + * inspector/InspectorController.cpp: + (WebCore::InspectorController::deleteCookie): + * inspector/InspectorController.h: + +2010-07-04 Joseph Pecoraro <joepeck@webkit.org> + + Reviewed by Pavel Feldman. + + WebInspector: HTML5 Offline Web Applications Support (ApplicationCache) + https://bugs.webkit.org/show_bug.cgi?id=24529 + + Part 1: Backend -> Frontend Messages. ApplicationCache Status and Connectivity Status. + + This patch adds an InspectorApplicationCacheAgent to monitor application + cache changes, starts a UI in the Storage panel, handles the boilerplate + of adding new files. + + Added an agent to encapsulate and handle the application cache logic. + This is similar to the timeline agent. + + * inspector/InspectorApplicationCacheAgent.cpp: Added. + (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent): + (WebCore::InspectorApplicationCacheAgent::~InspectorApplicationCacheAgent): + (WebCore::InspectorApplicationCacheAgent::didReceiveManifestResponse): + (WebCore::InspectorApplicationCacheAgent::updateApplicationCacheStatus): + (WebCore::InspectorApplicationCacheAgent::updateNetworkState): + * inspector/InspectorApplicationCacheAgent.h: Added. + + InspectorController owns an InspectorApplicationCacheAgent. This + handles its lifetime management. + + * inspector/InspectorController.cpp: + (WebCore::InspectorController::~InspectorController): + (WebCore::InspectorController::connectFrontend): create the agent with a frontend. + (WebCore::InspectorController::disconnectFrontend): remove the agent when closing. + (WebCore::InspectorController::releaseFrontendLifetimeAgents): + * inspector/InspectorController.h: + + User Interface for ApplicationCache in the StoragePanel. This follows + very closely to Cookies, it will have a sortable table of items. The + status bar contains connectivity and application cache status + indicators which update when backend messages are received. There + are some stubs which the next part will implement. + + * inspector/front-end/ApplicationCacheItemsView.js: Added. + (WebInspector.ApplicationCacheItemsView): + (WebInspector.ApplicationCacheItemsView.prototype.get statusBarItems): refresh, delete, connectivity, application cache status. + (WebInspector.ApplicationCacheItemsView.prototype.show): + (WebInspector.ApplicationCacheItemsView.prototype.hide): + (WebInspector.ApplicationCacheItemsView.prototype.updateStatus): this is the application cache status indicator. + (WebInspector.ApplicationCacheItemsView.prototype.updateNetworkState): this is the online/offline connectivity indicator. + (WebInspector.ApplicationCacheItemsView.prototype._update): + (WebInspector.ApplicationCacheItemsView.prototype._updateCallback): + (WebInspector.ApplicationCacheItemsView.prototype._createDataGrid): + (WebInspector.ApplicationCacheItemsView.prototype._populateDataGrid): + (WebInspector.ApplicationCacheItemsView.prototype.resize): + (WebInspector.ApplicationCacheItemsView.prototype._deleteButtonClicked): + (WebInspector.ApplicationCacheItemsView.prototype._deleteCallback): + (WebInspector.ApplicationCacheItemsView.prototype._refreshButtonClicked): + + The usual dispatch flow from the backend, to the frontend, to the + panel, and then to the visible view. Some slight refactoring to + eliminate duplicated code. + + * inspector/InspectorFrontend.cpp: + (WebCore::InspectorFrontend::updateDOMStorage): + (WebCore::InspectorFrontend::didGetApplicationCaches): + (WebCore::InspectorFrontend::updateApplicationCacheStatus): + * inspector/InspectorFrontend.h: + * inspector/front-end/StoragePanel.js: + (WebInspector.StoragePanel): + (WebInspector.StoragePanel.prototype.reset): + (WebInspector.StoragePanel.prototype.addApplicationCache): + (WebInspector.StoragePanel.prototype.showDatabase): + (WebInspector.StoragePanel.prototype.showDOMStorage): + (WebInspector.StoragePanel.prototype.showCookies): + (WebInspector.StoragePanel.prototype.showApplicationCache): + (WebInspector.StoragePanel.prototype._genericViewSetup): + (WebInspector.StoragePanel.prototype.updateApplicationCacheStatus): + (WebInspector.StoragePanel.prototype.updateNetworkState): + (WebInspector.CookieSidebarTreeElement.prototype.set subtitle): + (WebInspector.ApplicationCacheSidebarTreeElement): + (WebInspector.ApplicationCacheSidebarTreeElement.prototype.onselect): + (WebInspector.ApplicationCacheSidebarTreeElement.prototype.get mainTitle): + (WebInspector.ApplicationCacheSidebarTreeElement.prototype.set mainTitle): + (WebInspector.ApplicationCacheSidebarTreeElement.prototype.get subtitle): + (WebInspector.ApplicationCacheSidebarTreeElement.prototype.set subtitle): + * inspector/front-end/inspector.js: + (WebInspector.dispatch.delayDispatch): + (WebInspector.dispatch): + (WebInspector._addAppCacheDomain): + (WebInspector.addDOMStorage): + (WebInspector.updateDOMStorage): + + Notify the InspectorApplicationCacheAgent on application cache changes + or specifics. Notify the InspectorController on generic resource events. + That is because ApplicationCacheController is a ResourceClient and needs + to trigger the resource events normally handled by ResourceLoader. + + * loader/appcache/ApplicationCacheGroup.cpp: + (WebCore::inspectorUpdateApplicationCacheStatus): helper method to prevent duplicated code. + (WebCore::ApplicationCacheGroup::setNewestCache): status change. + (WebCore::ApplicationCacheGroup::makeObsolete): status change. + (WebCore::ApplicationCacheGroup::update): status change. + (WebCore::ApplicationCacheGroup::createResourceHandle): resource event. + (WebCore::ApplicationCacheGroup::willSendRequest): resource event. + (WebCore::ApplicationCacheGroup::didReceiveResponse): resource event. + (WebCore::ApplicationCacheGroup::didReceiveData): resource event. + (WebCore::ApplicationCacheGroup::didFinishLoading): resource event. + (WebCore::ApplicationCacheGroup::didFail): resource event. + (WebCore::ApplicationCacheGroup::didFinishLoadingManifest): resource event. + (WebCore::ApplicationCacheGroup::manifestNotFound): status change. + (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete): status change. + (WebCore::ApplicationCacheGroup::setUpdateStatus): single access point for status changes. + * loader/appcache/ApplicationCacheGroup.h: + * page/Page.cpp: + (WebCore::networkStateChanged): connectivity status change. + + Final inspector details to add the new file, style new elements, + images, and localized strings. + + * inspector/front-end/inspector.css: + (.application-cache-sidebar-tree-item .icon): + (.timeline-records-counter, .storage-application-cache-status, .storage-application-cache-connectivity): + (.storage-application-cache-status-icon, .storage-application-cache-connectivity-icon): + (.status-bar-divider): + (.storage-application-cache-status, .storage-application-cache-connectivity): + * inspector/front-end/inspector.html: + * inspector/front-end/Images/applicationCache.png: Added. + * English.lproj/localizedStrings.js: "APPLICATION CACHE", "No Application Cache information available.", "Online", "Offline" + + Updated build files. + + * CMakeLists.txt: + * WebCore.gypi: + * WebCore.pro: + * WebCore.vcproj/WebCore.vcproj: + * WebCore.xcodeproj/project.pbxproj: + * inspector/front-end/WebKit.qrc: + +2010-07-05 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Add basic <col> support to the treebuilder + https://bugs.webkit.org/show_bug.cgi?id=41590 + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTag): + +2010-07-05 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Add basic "in row" mode to support <td> and <th> insertion + https://bugs.webkit.org/show_bug.cgi?id=41588 + + Also fixed <td> or <th> as a direct child of <table>. + + Most of this was covered by html5lib/runner.html tests, + but I had to add a new tables01.dat to cover the <th> cases. + + * html/HTMLElementStack.cpp: + (WebCore::HTMLNames::isTableRowScopeMarker): + (WebCore::HTMLElementStack::popUntilTableRowScopeMarker): + * html/HTMLElementStack.h: + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processStartTag): + +2010-07-05 Eric Seidel <eric@webkit.org> + + Reviewed by Adam Barth. + + Finish implementing "any other end tag" for "in body" mode + https://bugs.webkit.org/show_bug.cgi?id=41582 + + I believe I found a "bug" in the HTML5 spec when writing this: + http://www.w3.org/Bugs/Public/show_bug.cgi?id=10080 + + * html/HTMLTreeBuilder.cpp: + (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody): + (WebCore::HTMLTreeBuilder::processEndTag): + * html/HTMLTreeBuilder.h: + +2010-07-05 Martin Robinson <mrobinson@igalia.com> + + Unreviewed. + + Add a missing slash to the list of generated sources. This + was missing from a previous build fix. + + * GNUmakefile.am: + 2010-07-05 Pavel Feldman <pfeldman@chromium.org> Reviewed by Joseph Pecoraro. diff --git a/WebCore/Configurations/FeatureDefines.xcconfig b/WebCore/Configurations/FeatureDefines.xcconfig index 8f86fc3..9a3ec0b 100644 --- a/WebCore/Configurations/FeatureDefines.xcconfig +++ b/WebCore/Configurations/FeatureDefines.xcconfig @@ -31,6 +31,8 @@ // Set any ENABLE_FEATURE_NAME macro to an empty string to disable that feature. +ENABLE_LINK_PREFETCH = ; + ENABLE_3D_CANVAS = $(ENABLE_3D_CANVAS_$(TARGET_MAC_OS_X_VERSION_MAJOR)); ENABLE_3D_CANVAS_1050 = ENABLE_3D_CANVAS; ENABLE_3D_CANVAS_1060 = ENABLE_3D_CANVAS; @@ -84,5 +86,4 @@ ENABLE_XHTMLMP = ; ENABLE_XPATH = ENABLE_XPATH; ENABLE_XSLT = ENABLE_XSLT; -FEATURE_DEFINES = $(ENABLE_3D_CANVAS) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB_SLICE) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_READER) $(ENABLE_FILE_WRITER) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PROGRESS_TAG) $(ENABLE_RUBY) $(ENABLE_SANDBOX) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT); - +FEATURE_DEFINES = $(ENABLE_LINK_PREFETCH) $(ENABLE_3D_CANVAS) $(ENABLE_3D_RENDERING) $(ENABLE_BLOB_SLICE) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CLIENT_BASED_GEOLOCATION) $(ENABLE_DATABASE) $(ENABLE_DATAGRID) $(ENABLE_DATALIST) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DOM_STORAGE) $(ENABLE_EVENTSOURCE) $(ENABLE_FILTERS) $(ENABLE_FILE_READER) $(ENABLE_FILE_WRITER) $(ENABLE_GEOLOCATION) $(ENABLE_ICONDATABASE) $(ENABLE_IMAGE_RESIZER) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_MATHML) $(ENABLE_METER_TAG) $(ENABLE_NOTIFICATIONS) $(ENABLE_OFFLINE_WEB_APPLICATIONS) $(ENABLE_PROGRESS_TAG) $(ENABLE_RUBY) $(ENABLE_SANDBOX) $(ENABLE_SHARED_WORKERS) $(ENABLE_SVG) $(ENABLE_SVG_ANIMATION) $(ENABLE_SVG_AS_IMAGE) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_FOREIGN_OBJECT) $(ENABLE_SVG_USE) $(ENABLE_VIDEO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WML) $(ENABLE_WORKERS) $(ENABLE_XHTMLMP) $(ENABLE_XPATH) $(ENABLE_XSLT); diff --git a/WebCore/DerivedSources.cpp b/WebCore/DerivedSources.cpp index 5f2fe58..78c523f 100644 --- a/WebCore/DerivedSources.cpp +++ b/WebCore/DerivedSources.cpp @@ -79,7 +79,11 @@ #include "JSDOMCoreException.cpp" #include "JSDOMFormData.cpp" #include "JSDOMImplementation.cpp" +#include "JSDOMMimeType.cpp" +#include "JSDOMMimeTypeArray.cpp" #include "JSDOMParser.cpp" +#include "JSDOMPlugin.cpp" +#include "JSDOMPluginArray.cpp" #include "JSDOMSelection.cpp" #include "JSDOMStringList.cpp" #include "JSDOMStringMap.cpp" @@ -178,6 +182,7 @@ #include "JSIDBErrorEvent.cpp" #include "JSIDBEvent.cpp" #include "JSIDBIndexRequest.cpp" +#include "JSIDBKey.cpp" #include "JSIDBKeyRange.cpp" #include "JSIDBObjectStoreRequest.cpp" #include "JSIDBRequest.cpp" @@ -196,8 +201,6 @@ #include "JSMessageChannel.cpp" #include "JSMessageEvent.cpp" #include "JSMessagePort.cpp" -#include "JSMimeType.cpp" -#include "JSMimeTypeArray.cpp" #include "JSMouseEvent.cpp" #include "JSMutationEvent.cpp" #include "JSNamedNodeMap.cpp" @@ -213,8 +216,6 @@ #include "JSOverflowEvent.cpp" #include "JSPageTransitionEvent.cpp" #include "JSPerformance.cpp" -#include "JSPlugin.cpp" -#include "JSPluginArray.cpp" #include "JSPopStateEvent.cpp" #include "JSPositionError.cpp" #include "JSProcessingInstruction.cpp" diff --git a/WebCore/DerivedSources.make b/WebCore/DerivedSources.make index 5e80f2e..8430024 100644 --- a/WebCore/DerivedSources.make +++ b/WebCore/DerivedSources.make @@ -113,7 +113,11 @@ DOM_CLASSES = \ DOMCoreException \ DOMFormData \ DOMImplementation \ + DOMMimeType \ + DOMMimeTypeArray \ DOMParser \ + DOMPlugin \ + DOMPluginArray \ DOMSelection \ DOMStringList \ DOMStringMap \ @@ -221,6 +225,7 @@ DOM_CLASSES = \ IDBErrorEvent \ IDBEvent \ IDBIndexRequest \ + IDBKey \ IDBKeyRange \ IDBObjectStoreRequest \ IDBRequest \ @@ -238,8 +243,6 @@ DOM_CLASSES = \ MessageChannel \ MessageEvent \ MessagePort \ - MimeType \ - MimeTypeArray \ MouseEvent \ MutationEvent \ NamedNodeMap \ @@ -255,8 +258,6 @@ DOM_CLASSES = \ OverflowEvent \ PageTransitionEvent \ Performance \ - Plugin \ - PluginArray \ PopStateEvent \ PositionError \ ProcessingInstruction \ @@ -470,11 +471,15 @@ DOM_CLASSES = \ XSLTProcessor \ # +INSPECTOR_CLASSES = InspectorFrontend2 + .PHONY : all -JS_DOM_HEADERS=$(filter-out JSEventListener.h JSEventTarget.h,$(DOM_CLASSES:%=JS%.h)) +JS_DOM_HEADERS=$(filter-out JSEventListener.h JSEventTarget.h,$(DOM_CLASSES:%=JS%.h) $(INSPECTOR_CLASSES:%=Remote%.h)) all : \ + remove-stray-plugin-and-mime-type-files \ + \ $(JS_DOM_HEADERS) \ \ JSJavaScriptCallFrame.h \ @@ -540,6 +545,12 @@ endif # -------- +# Temporary build rule. Take out once some time has passed. + +.PHONY : remove-stray-plugin-and-mime-type-files +remove-stray-plugin-and-mime-type-files : + (rm DOMMimeTypeArray.h DOMMimeTypeArray.mm DOMMimeTypeArrayInternal.h DOMPluginArray.h DOMPluginArray.mm DOMPluginArrayInternal.h 2> /dev/null) || echo -n + # CSS property names and value keywords WEBCORE_CSS_PROPERTY_NAMES := $(WebCore)/css/CSSPropertyNames.in @@ -703,12 +714,6 @@ XMLNames.cpp : dom/make_names.pl xml/xmlattrs.in # SVG tag and attribute names, and element factory -ifeq ($(findstring ENABLE_SVG,$(FEATURE_DEFINES)), ENABLE_SVG) - -ifeq ($(findstring ENABLE_SVG_DOM_OBJC_BINDINGS,$(FEATURE_DEFINES)), ENABLE_SVG_DOM_OBJC_BINDINGS) - WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.SVG.exp -endif - ifeq ($(findstring ENABLE_SVG_USE,$(FEATURE_DEFINES)), ENABLE_SVG_USE) SVG_FLAGS := $(SVG_FLAGS) ENABLE_SVG_USE=1 endif @@ -719,9 +724,6 @@ endif ifeq ($(findstring ENABLE_FILTERS,$(FEATURE_DEFINES)), ENABLE_FILTERS) SVG_FLAGS := $(SVG_FLAGS) ENABLE_FILTERS=1 -ifeq ($(findstring ENABLE_SVG_DOM_OBJC_BINDINGS,$(FEATURE_DEFINES)), ENABLE_SVG_DOM_OBJC_BINDINGS) - WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.SVG.Filters.exp -endif endif ifeq ($(findstring ENABLE_SVG_AS_IMAGE,$(FEATURE_DEFINES)), ENABLE_SVG_AS_IMAGE) @@ -730,16 +732,10 @@ endif ifeq ($(findstring ENABLE_SVG_ANIMATION,$(FEATURE_DEFINES)), ENABLE_SVG_ANIMATION) SVG_FLAGS := $(SVG_FLAGS) ENABLE_SVG_ANIMATION=1 -ifeq ($(findstring ENABLE_SVG_DOM_OBJC_BINDINGS,$(FEATURE_DEFINES)), ENABLE_SVG_DOM_OBJC_BINDINGS) - WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.SVG.Animation.exp -endif endif ifeq ($(findstring ENABLE_SVG_FOREIGN_OBJECT,$(FEATURE_DEFINES)), ENABLE_SVG_FOREIGN_OBJECT) SVG_FLAGS := $(SVG_FLAGS) ENABLE_SVG_FOREIGN_OBJECT=1 -ifeq ($(findstring ENABLE_SVG_DOM_OBJC_BINDINGS,$(FEATURE_DEFINES)), ENABLE_SVG_DOM_OBJC_BINDINGS) - WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.SVG.ForeignObject.exp -endif endif # SVG tag and attribute names (need to pass an extra flag if svg experimental features are enabled) @@ -760,24 +756,6 @@ JSSVGElementWrapperFactory.cpp : SVGNames.cpp XLinkNames.cpp : dom/make_names.pl svg/xlinkattrs.in perl -I $(WebCore)/bindings/scripts $< --attrs $(WebCore)/svg/xlinkattrs.in -else - -SVGElementFactory.cpp : - echo > $@ - -SVGNames.cpp : - echo > $@ - -XLinkNames.cpp : - echo > $@ - -# This file is autogenerated by make_names.pl when SVG is enabled. - -JSSVGElementWrapperFactory.cpp : - echo > $@ - -endif - # -------- # WML tag and attribute names, and element factory @@ -801,39 +779,37 @@ endif # MathML tag and attribute names, and element factory -ifeq ($(findstring ENABLE_MATHML,$(FEATURE_DEFINES)), ENABLE_MATHML) - MathMLElementFactory.cpp MathMLNames.cpp : dom/make_names.pl mathml/mathtags.in mathml/mathattrs.in perl -I $(WebCore)/bindings/scripts $< --tags $(WebCore)/mathml/mathtags.in --attrs $(WebCore)/mathml/mathattrs.in --factory --wrapperFactory -else +# -------- -MathMLElementFactory.cpp : - echo > $@ +# Common generator things -MathMLNames.cpp : - echo > $@ +GENERATE_SCRIPTS = \ + bindings/scripts/CodeGenerator.pm \ + bindings/scripts/IDLParser.pm \ + bindings/scripts/IDLStructure.pm \ + bindings/scripts/generate-bindings.pl -endif +generator_script = perl $(addprefix -I $(WebCore)/, $(sort $(dir $(1)))) $(WebCore)/bindings/scripts/generate-bindings.pl +# JS bindings generator +IDL_INCLUDES = dom html css page notifications xml svg +IDL_COMMON_ARGS = $(IDL_INCLUDES:%=--include %) --write-dependencies --outputDir . -# -------- +JS_BINDINGS_SCRIPTS = $(GENERATE_SCRIPTS) bindings/scripts/CodeGeneratorJS.pm -# JavaScript bindings +JS%.h : %.idl $(JS_BINDINGS_SCRIPTS) + $(call generator_script, $(JS_BINDINGS_SCRIPTS)) $(IDL_COMMON_ARGS) --defines "$(FEATURE_DEFINES) $(ADDITIONAL_IDL_DEFINES) LANGUAGE_JAVASCRIPT" --generator JS $< -GENERATE_BINDINGS = perl -I $(WebCore)/bindings/scripts $(WebCore)/bindings/scripts/generate-bindings.pl \ - --include dom --include html --include css --include page --include notifications --include xml --include svg --write-dependencies --outputDir . +# Inspector interfaces generator -GENERATE_BINDINGS_SCRIPTS = \ - bindings/scripts/CodeGenerator.pm \ - bindings/scripts/IDLParser.pm \ - bindings/scripts/IDLStructure.pm \ - bindings/scripts/generate-bindings.pl \ -# +INSPECTOR_GENERATOR_SCRIPTS = $(GENERATE_SCRIPTS) inspector/CodeGeneratorInspector.pm -JS%.h : %.idl $(GENERATE_BINDINGS_SCRIPTS) bindings/scripts/CodeGeneratorJS.pm - $(GENERATE_BINDINGS) --defines "$(FEATURE_DEFINES) $(ADDITIONAL_IDL_DEFINES) LANGUAGE_JAVASCRIPT" --generator JS $< +Remote%.h : %.idl $(INSPECTOR_GENERATOR_SCRIPTS) + $(call generator_script, $(INSPECTOR_GENERATOR_SCRIPTS)) --outputDir . --defines "LANGUAGE_JAVASCRIPT" --generator Inspector $< -include $(JS_DOM_HEADERS:.h=.dep) @@ -843,11 +819,11 @@ JS%.h : %.idl $(GENERATE_BINDINGS_SCRIPTS) bindings/scripts/CodeGeneratorJS.pm ifeq ($(OS),MACOS) -OBJC_DOM_HEADERS=$(filter-out DOMDOMWindow.h DOMMimeType.h DOMPlugin.h,$(DOM_CLASSES:%=DOM%.h)) +OBJC_DOM_HEADERS=$(filter-out DOMDOMWindow.h DOMDOMMimeType.h DOMDOMPlugin.h,$(DOM_CLASSES:%=DOM%.h)) all : $(OBJC_DOM_HEADERS) -all : CharsetData.cpp WebCore.exp WebCore.LP64.exp +all : CharsetData.cpp # -------- @@ -858,88 +834,26 @@ CharsetData.cpp : platform/text/mac/make-charset-table.pl platform/text/mac/char # -------- -# export file - -ifeq ($(shell gcc -E -P -dM $(FRAMEWORK_FLAGS) WebCore/ForwardingHeaders/wtf/Platform.h | grep ENABLE_JAVA_BRIDGE | cut -d' ' -f3), 1) - WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.JNI.exp -endif - -ifeq ($(shell gcc -E -P -dM $(FRAMEWORK_FLAGS) WebCore/ForwardingHeaders/wtf/Platform.h | grep ENABLE_NETSCAPE_PLUGIN_API | cut -d' ' -f3), 1) - WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.NPAPI.exp -endif - -# FIXME: WTF_USE_PLUGIN_HOST_PROCESS is only true when building for x86_64, but we shouldn't have to know about that here. -ifeq ($(findstring x86_64,$(ARCHS)) $(findstring x86_64,$(VALID_ARCHS)), x86_64 x86_64) -ifeq ($(shell gcc -arch x86_64 -E -P -dM $(FRAMEWORK_FLAGS) WebCore/ForwardingHeaders/wtf/Platform.h | grep WTF_USE_PLUGIN_HOST_PROCESS | cut -d' ' -f3), 1) - WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.PluginHostProcess.exp -endif -endif +ifneq ($(ACTION),installhdrs) -ifeq ($(findstring ENABLE_3D_RENDERING,$(FEATURE_DEFINES)), ENABLE_3D_RENDERING) - WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.3DRendering.exp -endif +all : WebCore.exp WebCore.LP64.exp -ifeq ($(shell gcc -arch x86_64 -E -P -dM $(FRAMEWORK_FLAGS) WebCore/ForwardingHeaders/wtf/Platform.h | grep WTF_USE_ACCELERATED_COMPOSITING | cut -d' ' -f3), 1) - WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.AcceleratedCompositing.exp -endif - -ifeq ($(shell gcc -E -P -dM $(FRAMEWORK_FLAGS) WebCore/ForwardingHeaders/wtf/Platform.h | grep ENABLE_CONTEXT_MENUS | cut -d' ' -f3), 1) - WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.ContextMenus.exp -endif - -ifeq ($(ENABLE_DASHBOARD_SUPPORT), 1) - WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.DashboardSupport.exp -endif - -ifeq ($(shell gcc -E -P -dM $(FRAMEWORK_FLAGS) WebCore/ForwardingHeaders/wtf/Platform.h | grep ENABLE_DRAG_SUPPORT | cut -d' ' -f3), 1) - WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.DragSupport.exp -endif - -ifeq ($(shell gcc -E -P -dM $(FRAMEWORK_FLAGS) WebCore/ForwardingHeaders/wtf/Platform.h | grep ENABLE_INSPECTOR | cut -d' ' -f3), 1) - WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.Inspector.exp -endif +WebCore.exp : $(BUILT_PRODUCTS_DIR)/WebCoreExportFileGenerator + $^ > $@ -ifeq ($(ENABLE_ORIENTATION_EVENTS), 1) - WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.OrientationEvents.exp -endif - -ifeq ($(findstring 10.4,$(MACOSX_DEPLOYMENT_TARGET)), 10.4) - WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.Tiger.exp -endif - -ifeq ($(findstring ENABLE_PLUGIN_PROXY_FOR_VIDEO,$(FEATURE_DEFINES)), ENABLE_PLUGIN_PROXY_FOR_VIDEO) - WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.VideoProxy.exp -endif - -ifeq ($(findstring ENABLE_VIDEO,$(FEATURE_DEFINES)), ENABLE_VIDEO) - WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.Video.exp -endif - -ifeq ($(findstring ENABLE_GEOLOCATION,$(FEATURE_DEFINES)), ENABLE_GEOLOCATION) -ifeq ($(findstring ENABLE_CLIENT_BASED_GEOLOCATION,$(FEATURE_DEFINES)), ENABLE_CLIENT_BASED_GEOLOCATION) - WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.ClientBasedGeolocation.exp -else - WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.Geolocation.exp -endif -endif - -ifeq ($(shell gcc -E -P -dM $(FRAMEWORK_FLAGS) WebCore/ForwardingHeaders/wtf/Platform.h | grep WTF_USE_PROTECTION_SPACE_AUTH_CALLBACK | cut -d' ' -f3), 1) - WEBCORE_EXPORT_DEPENDENCIES := $(WEBCORE_EXPORT_DEPENDENCIES) WebCore.ProtectionSpaceAuthCallback.exp -endif - -WebCore.exp : WebCore.base.exp $(WEBCORE_EXPORT_DEPENDENCIES) - cat $^ > $@ - -# Switch NSRect, NSSize and NSPoint with their CG counterparts for 64-bit. +# Switch NSRect, NSSize and NSPoint with their CG counterparts for the 64-bit exports file. WebCore.LP64.exp : WebCore.exp cat $^ | sed -e s/7_NSRect/6CGRect/ -e s/7_NSSize/6CGSize/ -e s/8_NSPoint/7CGPoint/ > $@ +endif # installhdrs + # -------- # Objective-C bindings -DOM%.h : %.idl $(GENERATE_BINDINGS_SCRIPTS) bindings/scripts/CodeGeneratorObjC.pm bindings/objc/PublicDOMInterfaces.h - $(GENERATE_BINDINGS) --defines "$(FEATURE_DEFINES) $(ADDITIONAL_IDL_DEFINES) LANGUAGE_OBJECTIVE_C" --generator ObjC $< +DOM_BINDINGS_SCRIPTS = $(GENERATE_BINDING_SCRIPTS) bindings/scripts/CodeGeneratorObjC.pm +DOM%.h : %.idl $(DOM_BINDINGS_SCRIPTS) bindings/objc/PublicDOMInterfaces.h + $(call generator_script, $(DOM_BINDINGS_SCRIPTS)) $(IDL_COMMON_ARGS) --defines "$(FEATURE_DEFINES) $(ADDITIONAL_IDL_DEFINES) LANGUAGE_OBJECTIVE_C" --generator ObjC $< -include $(OBJC_DOM_HEADERS:.h=.dep) diff --git a/WebCore/English.lproj/localizedStrings.js b/WebCore/English.lproj/localizedStrings.js Binary files differindex 7ffafdf..e624b16 100644 --- a/WebCore/English.lproj/localizedStrings.js +++ b/WebCore/English.lproj/localizedStrings.js diff --git a/WebCore/GNUmakefile.am b/WebCore/GNUmakefile.am index bf197fc..278aa9b 100644 --- a/WebCore/GNUmakefile.am +++ b/WebCore/GNUmakefile.am @@ -99,11 +99,13 @@ webcore_built_sources += \ DerivedSources/WebCore/HTMLNames.cpp \ DerivedSources/WebCore/HTMLNames.h \ DerivedSources/WebCore/JSHTMLElementWrapperFactory.cpp \ + DerivedSources/WebCore/RemoteInspectorFrontend2.cpp \ + DerivedSources/WebCore/RemoteInspectorFrontend2.h \ DerivedSources/WebCore/UserAgentStyleSheets.h \ DerivedSources/WebCore/UserAgentStyleSheetsData.cpp \ DerivedSources/WebCore/XMLNSNames.cpp \ DerivedSources/WebCore/XMLNSNames.h \ - DerivedSources/WebCore/XMLNames.cpp + DerivedSources/WebCore/XMLNames.cpp \ DerivedSources/WebCore/XMLNames.h IDL_BINDINGS += \ @@ -314,10 +316,10 @@ IDL_BINDINGS += \ WebCore/page/Timing.idl \ WebCore/page/WebKitPoint.idl \ WebCore/page/WorkerNavigator.idl \ - WebCore/plugins/MimeType.idl \ - WebCore/plugins/MimeTypeArray.idl \ - WebCore/plugins/Plugin.idl \ - WebCore/plugins/PluginArray.idl \ + WebCore/plugins/DOMMimeType.idl \ + WebCore/plugins/DOMMimeTypeArray.idl \ + WebCore/plugins/DOMPlugin.idl \ + WebCore/plugins/DOMPluginArray.idl \ WebCore/workers/AbstractWorker.idl \ WebCore/workers/DedicatedWorkerContext.idl \ WebCore/workers/SharedWorker.idl \ @@ -333,6 +335,12 @@ IDL_BINDINGS += \ WebCore/xml/XMLSerializer.idl \ WebCore/xml/XSLTProcessor.idl +# This IDL file should not be used when calculating the source list +# of libWebCoreJS, so we add it directly to the header list here, so +# that it will be included in the distribution. +noinst_HEADERS += \ + WebCore/inspector/InspectorFrontend2.idl + webcoregtk_dom_sources = \ WebCore/bindings/gobject/ConvertToUTF8String.cpp \ WebCore/bindings/gobject/ConvertToUTF8String.h \ @@ -493,7 +501,7 @@ webcore_sources += \ WebCore/bindings/js/JSMessageEventCustom.cpp \ WebCore/bindings/js/JSMessagePortCustom.cpp \ WebCore/bindings/js/JSMessagePortCustom.h \ - WebCore/bindings/js/JSMimeTypeArrayCustom.cpp \ + WebCore/bindings/js/JSDOMMimeTypeArrayCustom.cpp \ WebCore/bindings/js/JSNamedNodeMapCustom.cpp \ WebCore/bindings/js/JSNavigatorCustom.cpp \ WebCore/bindings/js/JSNodeCustom.cpp \ @@ -505,8 +513,8 @@ webcore_sources += \ WebCore/bindings/js/JSNodeListCustom.cpp \ WebCore/bindings/js/JSOptionConstructor.cpp \ WebCore/bindings/js/JSOptionConstructor.h \ - WebCore/bindings/js/JSPluginArrayCustom.cpp \ - WebCore/bindings/js/JSPluginCustom.cpp \ + WebCore/bindings/js/JSDOMPluginArrayCustom.cpp \ + WebCore/bindings/js/JSDOMPluginCustom.cpp \ WebCore/bindings/js/JSPluginElementFunctions.cpp \ WebCore/bindings/js/JSPluginElementFunctions.h \ WebCore/bindings/js/JSPopStateEventCustom.cpp \ @@ -565,6 +573,7 @@ webcore_sources += \ WebCore/bindings/js/StringSourceProvider.h \ WebCore/bindings/js/WebCoreJSClientData.h \ WebCore/bindings/ScriptControllerBase.cpp \ + WebCore/bindings/ScriptControllerBase.h \ WebCore/bridge/Bridge.h \ WebCore/bridge/IdentifierRep.cpp \ WebCore/bridge/IdentifierRep.h \ @@ -753,8 +762,6 @@ webcore_sources += \ WebCore/dom/CDATASection.h \ WebCore/dom/CSSMappedAttributeDeclaration.cpp \ WebCore/dom/CSSMappedAttributeDeclaration.h \ - WebCore/dom/CanvasSurface.cpp \ - WebCore/dom/CanvasSurface.h \ WebCore/dom/CharacterData.cpp \ WebCore/dom/CharacterData.h \ WebCore/dom/CheckedRadioButtons.cpp \ @@ -793,9 +800,9 @@ webcore_sources += \ WebCore/dom/DatasetDOMStringMap.h \ WebCore/dom/DecodedDataDocumentParser.cpp \ WebCore/dom/DecodedDataDocumentParser.h \ - WebCore/dom/DeviceOrientation.cpp \ - WebCore/dom/DeviceOrientation.h \ WebCore/dom/DeviceOrientationClient.h \ + WebCore/dom/DeviceOrientationController.cpp \ + WebCore/dom/DeviceOrientationController.h \ WebCore/dom/DeviceOrientationEvent.cpp \ WebCore/dom/DeviceOrientationEvent.h \ WebCore/dom/Document.cpp \ @@ -1049,8 +1056,12 @@ webcore_sources += \ WebCore/editing/visible_units.cpp \ WebCore/editing/visible_units.h \ WebCore/editing/gtk/SelectionControllerGtk.cpp \ - WebCore/history/BackForwardList.cpp \ + WebCore/history/BackForwardController.cpp \ + WebCore/history/BackForwardController.h \ + WebCore/history/BackForwardControllerClient.h \ WebCore/history/BackForwardList.h \ + WebCore/history/BackForwardListImpl.cpp \ + WebCore/history/BackForwardListImpl.h \ WebCore/history/CachedFrame.cpp \ WebCore/history/CachedFrame.h \ WebCore/history/CachedFramePlatformData.h \ @@ -1168,6 +1179,8 @@ webcore_sources += \ WebCore/html/HTMLDivElement.h \ WebCore/html/HTMLDocument.cpp \ WebCore/html/HTMLDocument.h \ + WebCore/html/HTMLConstructionSite.cpp \ + WebCore/html/HTMLConstructionSite.h \ WebCore/html/HTMLElement.cpp \ WebCore/html/HTMLElement.h \ WebCore/html/HTMLElementStack.cpp \ @@ -1348,6 +1361,8 @@ webcore_sources += \ WebCore/inspector/InjectedScript.h \ WebCore/inspector/InjectedScriptHost.cpp \ WebCore/inspector/InjectedScriptHost.h \ + WebCore/inspector/InspectorApplicationCacheAgent.cpp \ + WebCore/inspector/InspectorApplicationCacheAgent.h \ WebCore/inspector/InspectorBackend.cpp \ WebCore/inspector/InspectorBackend.h \ WebCore/inspector/InspectorCSSStore.cpp \ @@ -1590,6 +1605,7 @@ webcore_sources += \ WebCore/page/Timing.h \ WebCore/page/UserContentURLPattern.cpp \ WebCore/page/UserContentURLPattern.h \ + WebCore/page/UserContentTypes.h \ WebCore/page/UserScript.h \ WebCore/page/UserScriptTypes.h \ WebCore/page/UserStyleSheet.h \ @@ -1892,14 +1908,14 @@ webcore_sources += \ WebCore/platform/text/UnicodeRange.h \ WebCore/platform/text/transcoder/FontTranscoder.cpp \ WebCore/platform/text/transcoder/FontTranscoder.h \ - WebCore/plugins/MimeType.cpp \ - WebCore/plugins/MimeType.h \ - WebCore/plugins/MimeTypeArray.cpp \ - WebCore/plugins/MimeTypeArray.h \ - WebCore/plugins/Plugin.cpp \ - WebCore/plugins/Plugin.h \ - WebCore/plugins/PluginArray.cpp \ - WebCore/plugins/PluginArray.h \ + WebCore/plugins/DOMMimeType.cpp \ + WebCore/plugins/DOMMimeType.h \ + WebCore/plugins/DOMMimeTypeArray.cpp \ + WebCore/plugins/DOMMimeTypeArray.h \ + WebCore/plugins/DOMPlugin.cpp \ + WebCore/plugins/DOMPlugin.h \ + WebCore/plugins/DOMPluginArray.cpp \ + WebCore/plugins/DOMPluginArray.h \ WebCore/plugins/PluginData.cpp \ WebCore/plugins/PluginData.h \ WebCore/plugins/PluginDatabase.cpp \ @@ -2493,6 +2509,7 @@ webcore_sources += \ WebCore/storage/DatabaseTracker.cpp \ WebCore/storage/DatabaseTracker.h \ WebCore/storage/DatabaseTrackerClient.h \ + WebCore/storage/IDBKey.h \ WebCore/storage/OriginQuotaManager.cpp \ WebCore/storage/OriginQuotaManager.h \ WebCore/storage/OriginUsageRecord.cpp \ @@ -3126,6 +3143,8 @@ webcore_sources += \ WebCore/mathml/RenderMathMLUnderOver.cpp \ WebCore/mathml/RenderMathMLUnderOver.h +endif # END ENABLE_MATHML + webcore_built_sources += \ DerivedSources/WebCore/MathMLElementFactory.cpp \ DerivedSources/WebCore/MathMLElementFactory.h \ @@ -3139,14 +3158,7 @@ DerivedSources/WebCore/MathMLNames.h: DerivedSources/WebCore/MathMLNames.cpp DerivedSources/WebCore/MathMLElementFactory.cpp DerivedSources/WebCore/MathMLNames.cpp: $(WebCore)/dom/make_names.pl $(WebCore)/mathml/mathtags.in $(WebCore)/mathml/mathattrs.in $(AM_V_GEN)$(PERL) -I$(WebCore)/bindings/scripts $< --tags $(WebCore)/mathml/mathtags.in --attrs $(WebCore)/mathml/mathattrs.in --factory --wrapperFactory --outputDir "$(GENSOURCES_WEBCORE)" -else -DerivedSources/WebCore/MathMLElementFactory.cpp: - echo > $@ - -DerivedSources/WebCore/MathMLNames.cpp: - echo > $@ -endif # END ENABLE_MATHML # ---- # Notifications support @@ -3178,12 +3190,6 @@ FEATURE_DEFINES += ENABLE_SVG=1 WEBCORE_CSS_PROPERTY_NAMES += $(WebCore)/css/SVGCSSPropertyNames.in WEBCORE_CSS_VALUE_KEYWORDS += $(WebCore)/css/SVGCSSValueKeywords.in -webcore_built_sources += \ - DerivedSources/WebCore/JSSVGElementWrapperFactory.cpp \ - DerivedSources/WebCore/SVGElementFactory.cpp \ - DerivedSources/WebCore/SVGNames.cpp \ - DerivedSources/WebCore/XLinkNames.cpp - IDL_BINDINGS += \ WebCore/svg/ElementTimeControl.idl \ WebCore/svg/SVGAElement.idl \ @@ -3790,6 +3796,14 @@ SVG_FEATURES += ENABLE_SVG_ANIMATION=1 webcore_cppflags += -DENABLE_SVG_ANIMATION=1 endif +endif # END ENABLE_SVG + +webcore_built_sources += \ + DerivedSources/WebCore/JSSVGElementWrapperFactory.cpp \ + DerivedSources/WebCore/SVGElementFactory.cpp \ + DerivedSources/WebCore/SVGNames.cpp \ + DerivedSources/WebCore/XLinkNames.cpp + # SVG tag and attribute names (need to pass an extra flag if svg experimental features are enabled) DerivedSources/WebCore/SVGNames.cpp: DerivedSources/WebCore/SVGElementFactory.cpp; DerivedSources/WebCore/JSSVGElementWrapperFactory.cpp: DerivedSources/WebCore/SVGElementFactory.cpp @@ -3810,8 +3824,6 @@ DerivedSources/WebCore/XLinkNames.h: DerivedSources/WebCore/XLinkNames.cpp; DerivedSources/WebCore/XLinkNames.cpp : $(WebCore)/dom/make_names.pl $(WebCore)/svg/xlinkattrs.in $(AM_V_GEN)$(PERL) -I$(WebCore)/bindings/scripts $< --attrs $(WebCore)/svg/xlinkattrs.in --outputDir "$(GENSOURCES_WEBCORE)" -endif # END ENABLE_SVG - # ---- # Web Sockets Support # ---- @@ -3970,6 +3982,10 @@ DerivedSources/WebCore/XMLNSNames.cpp DerivedSources/WebCore/XMLNSNames.h: $(Web DerivedSources/WebCore/XMLNames.cpp DerivedSources/WebCore/XMLNames.h: $(WebCore)/dom/make_names.pl $(WebCore)/xml/xmlattrs.in $(AM_V_GEN)$(PERL) -I$(WebCore)/bindings/scripts $< --attrs $(WebCore)/xml/xmlattrs.in --outputDir "$(GENSOURCES_WEBCORE)" +# Remote Inspector frontend +DerivedSources/WebCore/RemoteInspectorFrontend2.cpp DerivedSources/WebCore/RemoteInspectorFrontend2.h: $(WebCore)/inspector/InspectorFrontend2.idl $(SCRIPTS_BINDINGS) $(WebCore)/inspector/CodeGeneratorInspector.pm + $(AM_V_GEN)$(PERL) -I$(WebCore)/bindings/scripts -I$(WebCore)/inspector $(WebCore)/bindings/scripts/generate-bindings.pl $(IDL_PATH:%=--include "%") --outputDir "$(GENSOURCES_WEBCORE)" --defines "LANGUAGE_JAVASCRIPT=1 $(FEATURE_DEFINES)" --generator Inspector $< + IDL_PATH := \ $(WebCore)/bindings/js \ $(WebCore)/css \ @@ -4041,7 +4057,7 @@ libWebCoreJS.la: $(libWebCoreJS_objects) DerivedSources/webkit/webkitdomdummy.c: - mkdir -p DerivedSources/webkit || echo > $@ + $(AM_V_GEN)mkdir -p DerivedSources/webkit || echo > $@ # Because WebCore/bindings/gobject/WebKitDOMObject.h is static source but is also a distributed header # required by other distributed headers (both static and auto-generated), need to move this to the @@ -4163,10 +4179,10 @@ IDL_BINDINGS_GDOM += \ WebCore/page/Navigator.idl \ WebCore/page/Screen.idl \ WebCore/page/WebKitPoint.idl \ - WebCore/plugins/MimeType.idl \ - WebCore/plugins/MimeTypeArray.idl \ - WebCore/plugins/Plugin.idl \ - WebCore/plugins/PluginArray.idl \ + WebCore/plugins/DOMMimeType.idl \ + WebCore/plugins/DOMMimeTypeArray.idl \ + WebCore/plugins/DOMPlugin.idl \ + WebCore/plugins/DOMPluginArray.idl \ WebCore/storage/Database.idl \ WebCore/storage/Storage.idl \ WebCore/xml/XPathExpression.idl \ @@ -4268,6 +4284,8 @@ webcore_dist += \ WebCore/css/SVGCSSValueKeywords.in \ WebCore/css/makegrammar.pl \ WebCore/dom/make_names.pl \ + WebCore/inspector/CodeGeneratorInspector.pm \ + WebCore/mathml/mathattrs.in \ WebCore/mathml/mathtags.in \ WebCore/platform/text/mac/make-charset-table.pl \ WebCore/platform/ColorData.gperf \ diff --git a/WebCore/WebCore.3DRendering.exp b/WebCore/WebCore.3DRendering.exp deleted file mode 100644 index 4a84c63..0000000 --- a/WebCore/WebCore.3DRendering.exp +++ /dev/null @@ -1 +0,0 @@ -_WebCoreHas3DRendering diff --git a/WebCore/WebCore.AcceleratedCompositing.exp b/WebCore/WebCore.AcceleratedCompositing.exp deleted file mode 100644 index 40abc69..0000000 --- a/WebCore/WebCore.AcceleratedCompositing.exp +++ /dev/null @@ -1,2 +0,0 @@ -__ZN7WebCore13GraphicsLayer17removeAllChildrenEv -__ZN7WebCore13GraphicsLayer6createEPNS_19GraphicsLayerClientE diff --git a/WebCore/WebCore.ClientBasedGeolocation.exp b/WebCore/WebCore.ClientBasedGeolocation.exp deleted file mode 100644 index c624acb..0000000 --- a/WebCore/WebCore.ClientBasedGeolocation.exp +++ /dev/null @@ -1,2 +0,0 @@ -__ZN7WebCore21GeolocationController13errorOccurredEPNS_16GeolocationErrorE -__ZN7WebCore21GeolocationController15positionChangedEPNS_19GeolocationPositionE diff --git a/WebCore/WebCore.ContextMenus.exp b/WebCore/WebCore.ContextMenus.exp deleted file mode 100644 index 62b2c1f..0000000 --- a/WebCore/WebCore.ContextMenus.exp +++ /dev/null @@ -1,5 +0,0 @@ -__ZN7WebCore11ContextMenu22setPlatformDescriptionEP14NSMutableArray -__ZN7WebCore12EventHandler20sendContextMenuEventEP7NSEvent -__ZN7WebCore15ContextMenuItem26releasePlatformDescriptionEv -__ZN7WebCore21ContextMenuController16clearContextMenuEv -__ZNK7WebCore11ContextMenu19platformDescriptionEv diff --git a/WebCore/WebCore.DashboardSupport.exp b/WebCore/WebCore.DashboardSupport.exp deleted file mode 100644 index 70fed73..0000000 --- a/WebCore/WebCore.DashboardSupport.exp +++ /dev/null @@ -1,3 +0,0 @@ -.objc_class_name_WebDashboardRegion -__ZN7WebCore5Frame26dashboardRegionsDictionaryEv -__ZN7WebCore8Settings41setUsesDashboardBackwardCompatibilityModeEb diff --git a/WebCore/WebCore.DragSupport.exp b/WebCore/WebCore.DragSupport.exp deleted file mode 100644 index 30786ba..0000000 --- a/WebCore/WebCore.DragSupport.exp +++ /dev/null @@ -1,9 +0,0 @@ -__ZN7WebCore12EventHandler17dragSourceEndedAtERKNS_18PlatformMouseEventENS_13DragOperationE -__ZN7WebCore12EventHandler17eventMayStartDragEP7NSEvent -__ZN7WebCore14DragController10dragExitedEPNS_8DragDataE -__ZN7WebCore14DragController11dragEnteredEPNS_8DragDataE -__ZN7WebCore14DragController11dragUpdatedEPNS_8DragDataE -__ZN7WebCore14DragController11performDragEPNS_8DragDataE -__ZN7WebCore14DragController14placeDragCaretERKNS_8IntPointE -__ZN7WebCore14DragController9dragEndedEv -__ZN7WebCore8DragDataC1EP11objc_objectRKNS_8IntPointES5_NS_13DragOperationEPNS_16PasteboardHelperE diff --git a/WebCore/WebCore.Geolocation.exp b/WebCore/WebCore.Geolocation.exp deleted file mode 100644 index 296c8aa..0000000 --- a/WebCore/WebCore.Geolocation.exp +++ /dev/null @@ -1,2 +0,0 @@ -__ZN7WebCore22GeolocationServiceMock11setPositionEN3WTF10PassRefPtrINS_11GeopositionEEE -__ZN7WebCore22GeolocationServiceMock8setErrorEN3WTF10PassRefPtrINS_13PositionErrorEEE diff --git a/WebCore/WebCore.Inspector.exp b/WebCore/WebCore.Inspector.exp deleted file mode 100644 index 5bf6f05..0000000 --- a/WebCore/WebCore.Inspector.exp +++ /dev/null @@ -1,30 +0,0 @@ -__ZN7WebCore19InspectorController10setSettingERKNS_6StringES3_ -__ZN7WebCore19InspectorController14enableDebuggerEv -__ZN7WebCore19InspectorController14enableProfilerEbb -__ZN7WebCore19InspectorController15disableDebuggerEb -__ZN7WebCore19InspectorController15disableProfilerEb -__ZN7WebCore19InspectorController18disconnectFrontendEv -__ZN7WebCore19InspectorController20stopTimelineProfilerEv -__ZN7WebCore19InspectorController21startTimelineProfilerEv -__ZN7WebCore19InspectorController25evaluateForTestInFrontendElRKNS_6StringE -__ZN7WebCore19InspectorController26setInspectorFrontendClientEN3WTF10PassOwnPtrINS_23InspectorFrontendClientEEE -__ZN7WebCore19InspectorController26stopUserInitiatedProfilingEv -__ZN7WebCore19InspectorController27startUserInitiatedProfilingEPNS_5TimerIS0_EE -__ZN7WebCore19InspectorController4showEv -__ZN7WebCore19InspectorController5closeEv -__ZN7WebCore19InspectorController7inspectEPNS_4NodeE -__ZN7WebCore19InspectorController9showPanelENS0_13SpecialPanelsE -__ZN7WebCore28InspectorFrontendClientLocal12moveWindowByEff -__ZN7WebCore28InspectorFrontendClientLocal14frontendLoadedEv -__ZN7WebCore28InspectorFrontendClientLocal15canAttachWindowEv -__ZN7WebCore28InspectorFrontendClientLocal17setAttachedWindowEb -__ZN7WebCore28InspectorFrontendClientLocal19requestAttachWindowEv -__ZN7WebCore28InspectorFrontendClientLocal19requestDetachWindowEv -__ZN7WebCore28InspectorFrontendClientLocal19windowObjectClearedEv -__ZN7WebCore28InspectorFrontendClientLocal26changeAttachedWindowHeightEj -__ZN7WebCore28InspectorFrontendClientLocal27restoreAttachedWindowHeightEv -__ZN7WebCore28InspectorFrontendClientLocalC2EPNS_19InspectorControllerEPNS_4PageE -__ZN7WebCore28InspectorFrontendClientLocalD2Ev -__ZNK7WebCore19InspectorController17drawNodeHighlightERNS_15GraphicsContextE -__ZNK7WebCore19InspectorController7enabledEv -__ZNK7WebCore19InspectorController7settingERKNS_6StringE diff --git a/WebCore/WebCore.JNI.exp b/WebCore/WebCore.JNI.exp deleted file mode 100644 index d57b8c7..0000000 --- a/WebCore/WebCore.JNI.exp +++ /dev/null @@ -1,10 +0,0 @@ -_KJS_JSCreateNativeJSObject -_KJS_JSObject_JSFinalize -_KJS_JSObject_JSObjectCall -_KJS_JSObject_JSObjectEval -_KJS_JSObject_JSObjectGetMember -_KJS_JSObject_JSObjectGetSlot -_KJS_JSObject_JSObjectRemoveMember -_KJS_JSObject_JSObjectSetMember -_KJS_JSObject_JSObjectSetSlot -_KJS_JSObject_JSObjectToString diff --git a/WebCore/WebCore.NPAPI.exp b/WebCore/WebCore.NPAPI.exp deleted file mode 100644 index 781332e..0000000 --- a/WebCore/WebCore.NPAPI.exp +++ /dev/null @@ -1,28 +0,0 @@ -__NPN_Construct -__NPN_CreateObject -__NPN_Enumerate -__NPN_Evaluate -__NPN_GetIntIdentifier -__NPN_GetProperty -__NPN_GetStringIdentifier -__NPN_GetStringIdentifiers -__NPN_HasMethod -__NPN_HasProperty -__NPN_IdentifierIsString -__NPN_IntFromIdentifier -__NPN_Invoke -__NPN_InvokeDefault -__NPN_ReleaseObject -__NPN_ReleaseVariantValue -__NPN_RemoveProperty -__NPN_RetainObject -__NPN_SetException -__NPN_SetProperty -__NPN_UTF8FromIdentifier -__ZN7WebCore16ScriptController20windowScriptNPObjectEv -__ZN7WebCore16ScriptController29cleanupScriptObjectsForPluginEPv -__ZNK7WebCore12RenderObject4viewEv -__ZNK7WebCore14SecurityOrigin9canAccessEPKS0_ -__ZNK7WebCore4KURL7hasPathEv -__ZNK7WebCore4KURL9prettyURLEv -__ZNK7WebCore9FrameView22windowClipRectForLayerEPKNS_11RenderLayerEb diff --git a/WebCore/WebCore.OrientationEvents.exp b/WebCore/WebCore.OrientationEvents.exp deleted file mode 100644 index ec0978d..0000000 --- a/WebCore/WebCore.OrientationEvents.exp +++ /dev/null @@ -1 +0,0 @@ -__ZN7WebCore5Frame26sendOrientationChangeEventEi diff --git a/WebCore/WebCore.PluginHostProcess.exp b/WebCore/WebCore.PluginHostProcess.exp deleted file mode 100644 index e9d4734..0000000 --- a/WebCore/WebCore.PluginHostProcess.exp +++ /dev/null @@ -1,28 +0,0 @@ -# This file gets appended to WebCore.exp when USE(PLUGIN_HOST_PROCESS) is 1. -__ZN3JSC13RuntimeMethod11getCallDataERNS_8CallDataE -__ZN3JSC13RuntimeMethod18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE -__ZN3JSC13RuntimeMethod24getOwnPropertyDescriptorEPNS_9ExecStateERKNS_10IdentifierERNS_18PropertyDescriptorE -__ZN3JSC13RuntimeMethod6s_infoE -__ZN3JSC13RuntimeMethodC2EPNS_9ExecStateEPNS_14JSGlobalObjectERKNS_10IdentifierERN3WTF6VectorIPNS_8Bindings6MethodELm0EEE -__ZN3JSC8Bindings10RootObjectD1Ev -__ZN3JSC8Bindings13RuntimeObject11getCallDataERNS_8CallDataE -__ZN3JSC8Bindings13RuntimeObject14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE -__ZN3JSC8Bindings13RuntimeObject16getConstructDataERNS_13ConstructDataE -__ZN3JSC8Bindings13RuntimeObject18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE -__ZN3JSC8Bindings13RuntimeObject19getOwnPropertyNamesEPNS_9ExecStateERNS_17PropertyNameArrayENS_15EnumerationModeE -__ZN3JSC8Bindings13RuntimeObject24getOwnPropertyDescriptorEPNS_9ExecStateERKNS_10IdentifierERNS_18PropertyDescriptorE -__ZN3JSC8Bindings13RuntimeObject3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE -__ZN3JSC8Bindings13RuntimeObject6s_infoE -__ZN3JSC8Bindings13RuntimeObjectC2EPNS_9ExecStateEPNS_14JSGlobalObjectEN3WTF10PassRefPtrINS0_8InstanceEEE -__ZN3JSC8Bindings13RuntimeObjectD2Ev -__ZN3JSC8Bindings8Instance19createRuntimeObjectEPNS_9ExecStateE -__ZN3JSC8Bindings8InstanceC2EN3WTF10PassRefPtrINS0_10RootObjectEEE -__ZN3JSC8Bindings8InstanceD2Ev -__ZN7WebCore13IdentifierRep3getEPKc -__ZN7WebCore13IdentifierRep3getEi -__ZN7WebCore13IdentifierRep7isValidEPS0_ -__ZN7WebCore16ScriptController16createRootObjectEPv -__ZN7WebCore16ScriptController17canExecuteScriptsENS_33ReasonForCallingCanExecuteScriptsE -__ZN7WebCore16ScriptController24jsObjectForPluginElementEPNS_17HTMLPlugInElementE -__ZNK3JSC8Bindings13RuntimeObject12defaultValueEPNS_9ExecStateENS_22PreferredPrimitiveTypeE -__ZTVN3JSC13RuntimeMethodE diff --git a/WebCore/WebCore.ProtectionSpaceAuthCallback.exp b/WebCore/WebCore.ProtectionSpaceAuthCallback.exp deleted file mode 100644 index 4c27ed9..0000000 --- a/WebCore/WebCore.ProtectionSpaceAuthCallback.exp +++ /dev/null @@ -1,2 +0,0 @@ -__ZN7WebCore3macERKNS_15ProtectionSpaceE -__ZNK7WebCore15ProtectionSpace20authenticationSchemeEv diff --git a/WebCore/WebCore.SVG.Animation.exp b/WebCore/WebCore.SVG.Animation.exp deleted file mode 100644 index e90aec7..0000000 --- a/WebCore/WebCore.SVG.Animation.exp +++ /dev/null @@ -1,2 +0,0 @@ -.objc_class_name_DOMSVGAnimateElement -.objc_class_name_DOMSVGAnimateTransformElement diff --git a/WebCore/WebCore.SVG.Filters.exp b/WebCore/WebCore.SVG.Filters.exp deleted file mode 100644 index 5698258..0000000 --- a/WebCore/WebCore.SVG.Filters.exp +++ /dev/null @@ -1,25 +0,0 @@ -.objc_class_name_DOMSVGComponentTransferFunctionElement -.objc_class_name_DOMSVGFEBlendElement -.objc_class_name_DOMSVGFEColorMatrixElement -.objc_class_name_DOMSVGFEComponentTransferElement -.objc_class_name_DOMSVGFECompositeElement -.objc_class_name_DOMSVGFEDiffuseLightingElement -.objc_class_name_DOMSVGFEDisplacementMapElement -.objc_class_name_DOMSVGFEDistantLightElement -.objc_class_name_DOMSVGFEFloodElement -.objc_class_name_DOMSVGFEFuncAElement -.objc_class_name_DOMSVGFEFuncBElement -.objc_class_name_DOMSVGFEFuncGElement -.objc_class_name_DOMSVGFEFuncRElement -.objc_class_name_DOMSVGFEGaussianBlurElement -.objc_class_name_DOMSVGFEImageElement -.objc_class_name_DOMSVGFEMergeElement -.objc_class_name_DOMSVGFEMergeNodeElement -.objc_class_name_DOMSVGFEMorphologyElement -.objc_class_name_DOMSVGFEOffsetElement -.objc_class_name_DOMSVGFEPointLightElement -.objc_class_name_DOMSVGFESpecularLightingElement -.objc_class_name_DOMSVGFESpotLightElement -.objc_class_name_DOMSVGFETileElement -.objc_class_name_DOMSVGFETurbulenceElement -.objc_class_name_DOMSVGFilterElement diff --git a/WebCore/WebCore.SVG.ForeignObject.exp b/WebCore/WebCore.SVG.ForeignObject.exp deleted file mode 100644 index 255f600..0000000 --- a/WebCore/WebCore.SVG.ForeignObject.exp +++ /dev/null @@ -1 +0,0 @@ -.objc_class_name_DOMSVGForeignObjectElement diff --git a/WebCore/WebCore.SVG.exp b/WebCore/WebCore.SVG.exp deleted file mode 100644 index 1e56700..0000000 --- a/WebCore/WebCore.SVG.exp +++ /dev/null @@ -1,95 +0,0 @@ -.objc_class_name_DOMSVGAElement -.objc_class_name_DOMSVGAltGlyphElement -.objc_class_name_DOMSVGAngle -.objc_class_name_DOMSVGAnimateColorElement -.objc_class_name_DOMSVGAnimatedAngle -.objc_class_name_DOMSVGAnimatedBoolean -.objc_class_name_DOMSVGAnimatedEnumeration -.objc_class_name_DOMSVGAnimatedInteger -.objc_class_name_DOMSVGAnimatedLength -.objc_class_name_DOMSVGAnimatedLengthList -.objc_class_name_DOMSVGAnimatedNumber -.objc_class_name_DOMSVGAnimatedNumberList -.objc_class_name_DOMSVGAnimatedPreserveAspectRatio -.objc_class_name_DOMSVGAnimatedRect -.objc_class_name_DOMSVGAnimatedString -.objc_class_name_DOMSVGAnimatedTransformList -.objc_class_name_DOMSVGAnimationElement -.objc_class_name_DOMSVGCircleElement -.objc_class_name_DOMSVGClipPathElement -.objc_class_name_DOMSVGColor -.objc_class_name_DOMSVGCursorElement -.objc_class_name_DOMSVGDefsElement -.objc_class_name_DOMSVGDescElement -.objc_class_name_DOMSVGDocument -.objc_class_name_DOMSVGElement -.objc_class_name_DOMSVGElementInstance -.objc_class_name_DOMSVGElementInstanceList -.objc_class_name_DOMSVGEllipseElement -.objc_class_name_DOMSVGGElement -.objc_class_name_DOMSVGGradientElement -.objc_class_name_DOMSVGImageElement -.objc_class_name_DOMSVGLength -.objc_class_name_DOMSVGLengthList -.objc_class_name_DOMSVGLineElement -.objc_class_name_DOMSVGLinearGradientElement -.objc_class_name_DOMSVGMarkerElement -.objc_class_name_DOMSVGMaskElement -.objc_class_name_DOMSVGMatrix -.objc_class_name_DOMSVGMetadataElement -.objc_class_name_DOMSVGNumber -.objc_class_name_DOMSVGNumberList -.objc_class_name_DOMSVGPaint -.objc_class_name_DOMSVGPathElement -.objc_class_name_DOMSVGPathSeg -.objc_class_name_DOMSVGPathSegArcAbs -.objc_class_name_DOMSVGPathSegArcRel -.objc_class_name_DOMSVGPathSegClosePath -.objc_class_name_DOMSVGPathSegCurvetoCubicAbs -.objc_class_name_DOMSVGPathSegCurvetoCubicRel -.objc_class_name_DOMSVGPathSegCurvetoCubicSmoothAbs -.objc_class_name_DOMSVGPathSegCurvetoCubicSmoothRel -.objc_class_name_DOMSVGPathSegCurvetoQuadraticAbs -.objc_class_name_DOMSVGPathSegCurvetoQuadraticRel -.objc_class_name_DOMSVGPathSegCurvetoQuadraticSmoothAbs -.objc_class_name_DOMSVGPathSegCurvetoQuadraticSmoothRel -.objc_class_name_DOMSVGPathSegLinetoAbs -.objc_class_name_DOMSVGPathSegLinetoHorizontalAbs -.objc_class_name_DOMSVGPathSegLinetoHorizontalRel -.objc_class_name_DOMSVGPathSegLinetoRel -.objc_class_name_DOMSVGPathSegLinetoVerticalAbs -.objc_class_name_DOMSVGPathSegLinetoVerticalRel -.objc_class_name_DOMSVGPathSegList -.objc_class_name_DOMSVGPathSegMovetoAbs -.objc_class_name_DOMSVGPathSegMovetoRel -.objc_class_name_DOMSVGPatternElement -.objc_class_name_DOMSVGPoint -.objc_class_name_DOMSVGPointList -.objc_class_name_DOMSVGPolygonElement -.objc_class_name_DOMSVGPolylineElement -.objc_class_name_DOMSVGPreserveAspectRatio -.objc_class_name_DOMSVGRadialGradientElement -.objc_class_name_DOMSVGRect -.objc_class_name_DOMSVGRectElement -.objc_class_name_DOMSVGRenderingIntent -.objc_class_name_DOMSVGSVGElement -.objc_class_name_DOMSVGScriptElement -.objc_class_name_DOMSVGSetElement -.objc_class_name_DOMSVGStopElement -.objc_class_name_DOMSVGStringList -.objc_class_name_DOMSVGStyleElement -.objc_class_name_DOMSVGSwitchElement -.objc_class_name_DOMSVGSymbolElement -.objc_class_name_DOMSVGTRefElement -.objc_class_name_DOMSVGTSpanElement -.objc_class_name_DOMSVGTextContentElement -.objc_class_name_DOMSVGTextElement -.objc_class_name_DOMSVGTextPathElement -.objc_class_name_DOMSVGTextPositioningElement -.objc_class_name_DOMSVGTitleElement -.objc_class_name_DOMSVGTransform -.objc_class_name_DOMSVGTransformList -.objc_class_name_DOMSVGUnitTypes -.objc_class_name_DOMSVGUseElement -.objc_class_name_DOMSVGViewElement -.objc_class_name_DOMSVGZoomEvent diff --git a/WebCore/WebCore.Tiger.exp b/WebCore/WebCore.Tiger.exp deleted file mode 100644 index b45c753..0000000 --- a/WebCore/WebCore.Tiger.exp +++ /dev/null @@ -1,13 +0,0 @@ -_wkClearGlyphVector -_wkConvertCharToGlyphs -_wkCopyFullFontName -_wkGetATSStyleGroup -_wkGetCGFontFromNSFont -_wkGetFontMetrics -_wkGetGlyphVectorFirstRecord -_wkGetGlyphVectorNumGlyphs -_wkGetGlyphVectorRecordSize -_wkGetNSFontATSUFontId -_wkInitializeGlyphVector -_wkReleaseStyleGroup -_wkSupportsMultipartXMixedReplace diff --git a/WebCore/WebCore.Video.exp b/WebCore/WebCore.Video.exp deleted file mode 100644 index 631a601..0000000 --- a/WebCore/WebCore.Video.exp +++ /dev/null @@ -1,18 +0,0 @@ -__ZN7WebCore16HTMLMediaElement10screenRectEv -__ZN7WebCore16HTMLMediaElement12endScrubbingEv -__ZN7WebCore16HTMLMediaElement14beginScrubbingEv -__ZN7WebCore16HTMLMediaElement14exitFullscreenEv -__ZN7WebCore16HTMLMediaElement14setCurrentTimeEfRi -__ZN7WebCore16HTMLMediaElement4playEb -__ZN7WebCore16HTMLMediaElement5pauseEb -__ZN7WebCore16HTMLMediaElement6rewindEf -__ZN7WebCore16HTMLMediaElement8setMutedEb -__ZN7WebCore16HTMLMediaElement9setVolumeEfRi -__ZNK7WebCore16HTMLMediaElement11currentTimeEv -__ZNK7WebCore16HTMLMediaElement13platformMediaEv -__ZNK7WebCore16HTMLMediaElement21processingUserGestureEv -__ZNK7WebCore16HTMLMediaElement5mutedEv -__ZNK7WebCore16HTMLMediaElement6volumeEv -__ZNK7WebCore16HTMLMediaElement7canPlayEv -__ZNK7WebCore16HTMLMediaElement12playbackRateEv -__ZNK7WebCore16HTMLMediaElement8durationEv diff --git a/WebCore/WebCore.VideoProxy.exp b/WebCore/WebCore.VideoProxy.exp deleted file mode 100644 index 6412d2c..0000000 --- a/WebCore/WebCore.VideoProxy.exp +++ /dev/null @@ -1,4 +0,0 @@ -__ZN7WebCore16HTMLMediaElement19deliverNotificationE32MediaPlayerProxyNotificationType -__ZN7WebCore16HTMLMediaElement19setMediaPlayerProxyEP19WebMediaPlayerProxy -__ZN7WebCore9HTMLNames8audioTagE -__ZN7WebCore9HTMLNames8videoTagE diff --git a/WebCore/WebCore.base.exp b/WebCore/WebCore.exp.in index beb5b44..71c632f 100644 --- a/WebCore/WebCore.base.exp +++ b/WebCore/WebCore.exp.in @@ -142,7 +142,7 @@ __ZN7WebCore10handCursorEv __ZN7WebCore10setCookiesEPNS_8DocumentERKNS_4KURLERKNS_6StringE __ZN7WebCore11BitmapImageC1EP7CGImagePNS_13ImageObserverE __ZN7WebCore11CachedFrame23cachedFramePlatformDataEv -__ZN7WebCore11CachedFrame26setCachedFramePlatformDataEPNS_23CachedFramePlatformDataE +__ZN7WebCore11CachedFrame26setCachedFramePlatformDataEN3WTF10PassOwnPtrINS_23CachedFramePlatformDataEEE __ZN7WebCore11EditCommand7reapplyEv __ZN7WebCore11EditCommand7unapplyEv __ZN7WebCore11FileChooser10chooseFileERKNS_6StringE @@ -317,29 +317,6 @@ __ZN7WebCore14SecurityOrigin40setDomainRelaxationForbiddenForURLSchemeEbRKNS_6St __ZN7WebCore14SecurityOrigin6createERKNS_4KURLEi __ZN7WebCore14SecurityOrigin7canLoadERKNS_4KURLERKNS_6StringEPNS_8DocumentE __ZN7WebCore15ArchiveResource6createEN3WTF10PassRefPtrINS_12SharedBufferEEERKNS_4KURLERKNS_6StringESA_SA_RKNS_16ResourceResponseE -__ZN7WebCore15BackForwardList10removeItemEPNS_11HistoryItemE -__ZN7WebCore15BackForwardList10setEnabledEb -__ZN7WebCore15BackForwardList11currentItemEv -__ZN7WebCore15BackForwardList11forwardItemEv -__ZN7WebCore15BackForwardList11itemAtIndexEi -__ZN7WebCore15BackForwardList11setCapacityEi -__ZN7WebCore15BackForwardList12containsItemEPNS_11HistoryItemE -__ZN7WebCore15BackForwardList13backListCountEv -__ZN7WebCore15BackForwardList16forwardListCountEv -__ZN7WebCore15BackForwardList17backListWithLimitEiRN3WTF6VectorINS1_6RefPtrINS_11HistoryItemEEELm0EEE -__ZN7WebCore15BackForwardList20forwardListWithLimitEiRN3WTF6VectorINS1_6RefPtrINS_11HistoryItemEEELm0EEE -__ZN7WebCore15BackForwardList5closeEv -__ZN7WebCore15BackForwardList6closedEv -__ZN7WebCore15BackForwardList6goBackEv -__ZN7WebCore15BackForwardList7addItemEN3WTF10PassRefPtrINS_11HistoryItemEEE -__ZN7WebCore15BackForwardList7enabledEv -__ZN7WebCore15BackForwardList7entriesEv -__ZN7WebCore15BackForwardList8backItemEv -__ZN7WebCore15BackForwardList8capacityEv -__ZN7WebCore15BackForwardList8goToItemEPNS_11HistoryItemE -__ZN7WebCore15BackForwardList9goForwardEv -__ZN7WebCore15BackForwardListC1EPNS_4PageE -__ZN7WebCore15BackForwardListD1Ev __ZN7WebCore15DOMWrapperWorld15unregisterWorldEv __ZN7WebCore15DOMWrapperWorldD1Ev __ZN7WebCore15DatabaseTracker12deleteOriginEPNS_14SecurityOriginE @@ -422,10 +399,11 @@ __ZN7WebCore19AnimationController16resumeAnimationsEPNS_8DocumentE __ZN7WebCore19AnimationController17suspendAnimationsEPNS_8DocumentE __ZN7WebCore19AnimationController20pauseAnimationAtTimeEPNS_12RenderObjectERKNS_6StringEd __ZN7WebCore19AnimationController21pauseTransitionAtTimeEPNS_12RenderObjectERKNS_6StringEd +__ZN7WebCore19BackForwardListImplC1EPNS_4PageE __ZN7WebCore19CSSStyleDeclaration11setPropertyERKNS_6StringES3_Ri __ZN7WebCore19InspectorController34inspectorStartsAttachedSettingNameEv __ZN7WebCore19SelectionController10setFocusedEb -__ZN7WebCore19SelectionController12setSelectionERKNS_16VisibleSelectionEbbbNS0_19CursorAlignOnScrollENS_15TextGranularityE +__ZN7WebCore19SelectionController12setSelectionERKNS_16VisibleSelectionEbbbNS0_19CursorAlignOnScrollENS_15TextGranularityENS_20DirectionalityPolicyE __ZN7WebCore19SelectionController16setSelectedRangeEPNS_5RangeENS_9EAffinityEb __ZN7WebCore19SelectionController5clearEv __ZN7WebCore19SelectionController6modifyENS0_11EAlterationENS0_10EDirectionENS_15TextGranularityEb @@ -515,7 +493,6 @@ __ZN7WebCore4Page13didStopPluginEPNS_14HaltablePluginE __ZN7WebCore4Page14didStartPluginEPNS_14HaltablePluginE __ZN7WebCore4Page14setMediaVolumeEf __ZN7WebCore4Page15addSchedulePairEN3WTF10PassRefPtrINS_12SchedulePairEEE -__ZN7WebCore4Page15backForwardListEv __ZN7WebCore4Page15didMoveOnscreenEv __ZN7WebCore4Page16setCanStartMediaEb __ZN7WebCore4Page16setDefersLoadingEb @@ -531,7 +508,7 @@ __ZN7WebCore4Page6goBackEv __ZN7WebCore4Page8goToItemEPNS_11HistoryItemENS_13FrameLoadTypeE __ZN7WebCore4Page9goForwardEv __ZN7WebCore4Page9initGroupEv -__ZN7WebCore4PageC1EPNS_12ChromeClientEPNS_17ContextMenuClientEPNS_12EditorClientEPNS_10DragClientEPNS_15InspectorClientEPNS_18PluginHalterClientEPNS_27GeolocationControllerClientEPNS_23DeviceOrientationClientE +__ZN7WebCore4PageC1EPNS_12ChromeClientEPNS_17ContextMenuClientEPNS_12EditorClientEPNS_10DragClientEPNS_15InspectorClientEPNS_18PluginHalterClientEPNS_27GeolocationControllerClientEPNS_23DeviceOrientationClientEPNS_27BackForwardControllerClientE __ZN7WebCore4PageD1Ev __ZN7WebCore4coreEP20NSURLProtectionSpace __ZN7WebCore4toJSEPN3JSC9ExecStateEPNS_17JSDOMGlobalObjectEPNS_19CSSStyleDeclarationE @@ -617,6 +594,7 @@ __ZN7WebCore6WidgetD2Ev __ZN7WebCore7Console21shouldPrintExceptionsEv __ZN7WebCore7Console24setShouldPrintExceptionsEb __ZN7WebCore7IntRect5uniteERKS0_ +__ZN7WebCore7IntRect9intersectERKS0_ __ZN7WebCore7IntRectC1ERKNS_9FloatRectE __ZN7WebCore7IntSizeC1ERK7_NSSize __ZN7WebCore7cookiesEPKNS_8DocumentERKNS_4KURLE @@ -630,8 +608,10 @@ __ZN7WebCore8Document17getFocusableNodesERN3WTF6VectorINS1_6RefPtrINS_4NodeEEELm __ZN7WebCore8Document19accessSVGExtensionsEv __ZN7WebCore8Document22createDocumentFragmentEv __ZN7WebCore8Document23renderedRectsForMarkersENS_14DocumentMarker10MarkerTypeE +__ZN7WebCore8Document24addMediaCanStartListenerEPNS_21MediaCanStartListenerE __ZN7WebCore8Document24setShouldCreateRenderersEb __ZN7WebCore8Document26pageSizeAndMarginsInPixelsEiRNS_7IntSizeERiS3_S3_S3_ +__ZN7WebCore8Document27removeMediaCanStartListenerEPNS_21MediaCanStartListenerE __ZN7WebCore8Document36updateLayoutIgnorePendingStylesheetsEv __ZN7WebCore8Document4headEv __ZN7WebCore8FormDataD1Ev @@ -772,10 +752,10 @@ __ZN7WebCore9PageCache11setCapacityEi __ZN7WebCore9PageCache27releaseAutoreleasedPagesNowEv __ZN7WebCore9PageGroup14addVisitedLinkEPKtm __ZN7WebCore9PageGroup17closeLocalStorageEv -__ZN7WebCore9PageGroup20addUserScriptToWorldEPNS_15DOMWrapperWorldERKNS_6StringERKNS_4KURLEN3WTF10PassOwnPtrINS9_6VectorIS3_Lm0EEEEESD_NS_23UserScriptInjectionTimeE +__ZN7WebCore9PageGroup20addUserScriptToWorldEPNS_15DOMWrapperWorldERKNS_6StringERKNS_4KURLEN3WTF10PassOwnPtrINS9_6VectorIS3_Lm0EEEEESD_NS_23UserScriptInjectionTimeENS_25UserContentInjectedFramesE __ZN7WebCore9PageGroup20removeAllUserContentEv __ZN7WebCore9PageGroup21removeAllVisitedLinksEv -__ZN7WebCore9PageGroup24addUserStyleSheetToWorldEPNS_15DOMWrapperWorldERKNS_6StringERKNS_4KURLEN3WTF10PassOwnPtrINS9_6VectorIS3_Lm0EEEEESD_ +__ZN7WebCore9PageGroup24addUserStyleSheetToWorldEPNS_15DOMWrapperWorldERKNS_6StringERKNS_4KURLEN3WTF10PassOwnPtrINS9_6VectorIS3_Lm0EEEEESD_NS_25UserContentInjectedFramesE __ZN7WebCore9PageGroup25removeUserScriptFromWorldEPNS_15DOMWrapperWorldERKNS_4KURLE __ZN7WebCore9PageGroup26removeUserScriptsFromWorldEPNS_15DOMWrapperWorldE __ZN7WebCore9PageGroup26setShouldTrackVisitedLinksEb @@ -799,6 +779,7 @@ __ZNK7WebCore10RenderText9firstRunXEv __ZNK7WebCore10RenderText9firstRunYEv __ZNK7WebCore10ScrollView12documentViewEv __ZNK7WebCore10ScrollView14scrollbarModesERNS_13ScrollbarModeES2_ +__ZNK7WebCore10ScrollView16contentsToWindowERKNS_7IntRectE __ZNK7WebCore10ScrollView18visibleContentRectEb __ZNK7WebCore11CachedImage5imageEv __ZNK7WebCore11FrameLoader10isCompleteEv @@ -873,6 +854,8 @@ __ZNK7WebCore14RenderListItem10markerTextEv __ZNK7WebCore14ResourceHandle10connectionEv __ZNK7WebCore14ResourceLoader11frameLoaderEv __ZNK7WebCore14SecurityOrigin5equalEPKS0_ +__ZNK7WebCore15GraphicsContext15platformContextEv +__ZNK7WebCore15GraphicsContext16paintingDisabledEv __ZNK7WebCore15ProgressTracker17estimatedProgressEv __ZNK7WebCore15ResourceRequest12nsURLRequestEv __ZNK7WebCore15VisiblePosition14characterAfterEv @@ -901,6 +884,7 @@ __ZNK7WebCore20ResourceResponseBase16textEncodingNameEv __ZNK7WebCore20ResourceResponseBase17suggestedFilenameEv __ZNK7WebCore20ResourceResponseBase3urlEv __ZNK7WebCore20ResourceResponseBase8mimeTypeEv +__ZNK7WebCore21UserContentURLPattern7matchesERKNS_4KURLE __ZNK7WebCore23FrameLoaderStateMachine15firstLayoutDoneEv __ZNK7WebCore23FrameLoaderStateMachine23committingFirstRealLoadEv __ZNK7WebCore26NetscapePlugInStreamLoader6isDoneEv @@ -916,6 +900,7 @@ __ZNK7WebCore4Node14isDescendantOfEPKS0_ __ZNK7WebCore4Node18getSubresourceURLsERN3WTF11ListHashSetINS_4KURLELm256ENS_8KURLHashEEE __ZNK7WebCore4Node9nodeIndexEv __ZNK7WebCore4Page10pluginDataEv +__ZNK7WebCore4Page15backForwardListEv __ZNK7WebCore4Page34inLowQualityImageInterpolationModeEv __ZNK7WebCore4Page9groupNameEv __ZNK7WebCore5Frame11currentFormEv @@ -966,6 +951,7 @@ __ZNK7WebCore6Widget23convertToContainingViewERKNS_7IntRectE __ZNK7WebCore6Widget23convertToContainingViewERKNS_8IntPointE __ZNK7WebCore6Widget25convertFromContainingViewERKNS_7IntRectE __ZNK7WebCore6Widget25convertFromContainingViewERKNS_8IntPointE +__ZNK7WebCore6Widget25convertToContainingWindowERKNS_7IntRectE __ZNK7WebCore6Widget9frameRectEv __ZNK7WebCore7Element12getAttributeERKNS_13QualifiedNameE __ZNK7WebCore7Element9innerTextEv @@ -974,6 +960,7 @@ __ZNK7WebCore7IntRectcv7_NSRectEv __ZNK7WebCore7IntSizecv7_NSSizeEv __ZNK7WebCore8Document11completeURLERKNS_6StringE __ZNK7WebCore8Document13axObjectCacheEv +__ZNK7WebCore8Document14getElementByIdERKNS_12AtomicStringE __ZNK7WebCore8Document20cacheDocumentElementEv __ZNK7WebCore8Document31displayStringModifiedByEncodingERKNS_6StringE __ZNK7WebCore8Document4bodyEv @@ -1066,3 +1053,343 @@ _wkSetUpFontCache _wkSignalCFReadStreamEnd _wkSignalCFReadStreamError _wkSignalCFReadStreamHasBytes + +#if ENABLE(3D_RENDERING) +_WebCoreHas3DRendering +#endif + +#if USE(ACCELERATED_COMPOSITING) +__ZN7WebCore13GraphicsLayer17removeAllChildrenEv +__ZN7WebCore13GraphicsLayer6createEPNS_19GraphicsLayerClientE +#endif + +#if ENABLE(CONTEXT_MENUS) +__ZN7WebCore11ContextMenu22setPlatformDescriptionEP14NSMutableArray +__ZN7WebCore12EventHandler20sendContextMenuEventEP7NSEvent +__ZN7WebCore15ContextMenuItem26releasePlatformDescriptionEv +__ZN7WebCore21ContextMenuController16clearContextMenuEv +__ZNK7WebCore11ContextMenu19platformDescriptionEv +#endif + +#if ENABLE(DASHBOARD_SUPPORT) +.objc_class_name_WebDashboardRegion +__ZN7WebCore5Frame26dashboardRegionsDictionaryEv +__ZN7WebCore8Settings41setUsesDashboardBackwardCompatibilityModeEb +#endif + +#if ENABLE(DRAG_SUPPORT) +__ZN7WebCore12EventHandler17dragSourceEndedAtERKNS_18PlatformMouseEventENS_13DragOperationE +__ZN7WebCore12EventHandler17eventMayStartDragEP7NSEvent +__ZN7WebCore14DragController10dragExitedEPNS_8DragDataE +__ZN7WebCore14DragController11dragEnteredEPNS_8DragDataE +__ZN7WebCore14DragController11dragUpdatedEPNS_8DragDataE +__ZN7WebCore14DragController11performDragEPNS_8DragDataE +__ZN7WebCore14DragController14placeDragCaretERKNS_8IntPointE +__ZN7WebCore14DragController9dragEndedEv +__ZN7WebCore8DragDataC1EP11objc_objectRKNS_8IntPointES5_NS_13DragOperationEPNS_16PasteboardHelperE +#endif + +#if ENABLE(GEOLOCATION) +#if ENABLE(CLIENT_BASED_GEOLOCATION) +__ZN7WebCore21GeolocationController13errorOccurredEPNS_16GeolocationErrorE +__ZN7WebCore21GeolocationController15positionChangedEPNS_19GeolocationPositionE +#else +__ZN7WebCore22GeolocationServiceMock11setPositionEN3WTF10PassRefPtrINS_11GeopositionEEE +__ZN7WebCore22GeolocationServiceMock8setErrorEN3WTF10PassRefPtrINS_13PositionErrorEEE +#endif +#endif + +#if ENABLE(INSPECTOR) +__ZN7WebCore19InspectorController10setSettingERKNS_6StringES3_ +__ZN7WebCore19InspectorController14enableDebuggerEv +__ZN7WebCore19InspectorController14enableProfilerEbb +__ZN7WebCore19InspectorController15disableDebuggerEb +__ZN7WebCore19InspectorController15disableProfilerEb +__ZN7WebCore19InspectorController18disconnectFrontendEv +__ZN7WebCore19InspectorController20stopTimelineProfilerEv +__ZN7WebCore19InspectorController21startTimelineProfilerEv +__ZN7WebCore19InspectorController25evaluateForTestInFrontendElRKNS_6StringE +__ZN7WebCore19InspectorController26setInspectorFrontendClientEN3WTF10PassOwnPtrINS_23InspectorFrontendClientEEE +__ZN7WebCore19InspectorController26stopUserInitiatedProfilingEv +__ZN7WebCore19InspectorController27startUserInitiatedProfilingEPNS_5TimerIS0_EE +__ZN7WebCore19InspectorController4showEv +__ZN7WebCore19InspectorController5closeEv +__ZN7WebCore19InspectorController7inspectEPNS_4NodeE +__ZN7WebCore19InspectorController9showPanelENS0_13SpecialPanelsE +__ZN7WebCore28InspectorFrontendClientLocal12moveWindowByEff +__ZN7WebCore28InspectorFrontendClientLocal14frontendLoadedEv +__ZN7WebCore28InspectorFrontendClientLocal15canAttachWindowEv +__ZN7WebCore28InspectorFrontendClientLocal17setAttachedWindowEb +__ZN7WebCore28InspectorFrontendClientLocal19requestAttachWindowEv +__ZN7WebCore28InspectorFrontendClientLocal19requestDetachWindowEv +__ZN7WebCore28InspectorFrontendClientLocal19windowObjectClearedEv +__ZN7WebCore28InspectorFrontendClientLocal26changeAttachedWindowHeightEj +__ZN7WebCore28InspectorFrontendClientLocal27restoreAttachedWindowHeightEv +__ZN7WebCore28InspectorFrontendClientLocalC2EPNS_19InspectorControllerEPNS_4PageE +__ZN7WebCore28InspectorFrontendClientLocalD2Ev +__ZNK7WebCore19InspectorController17drawNodeHighlightERNS_15GraphicsContextE +__ZNK7WebCore19InspectorController7enabledEv +__ZNK7WebCore19InspectorController7settingERKNS_6StringE +#endif + +#if ENABLE(JAVA_BRIDGE) +_KJS_JSCreateNativeJSObject +_KJS_JSObject_JSFinalize +_KJS_JSObject_JSObjectCall +_KJS_JSObject_JSObjectEval +_KJS_JSObject_JSObjectGetMember +_KJS_JSObject_JSObjectGetSlot +_KJS_JSObject_JSObjectRemoveMember +_KJS_JSObject_JSObjectSetMember +_KJS_JSObject_JSObjectSetSlot +_KJS_JSObject_JSObjectToString +#endif + +#if ENABLE(NETSCAPE_PLUGIN_API) +__NPN_Construct +__NPN_CreateObject +__NPN_Enumerate +__NPN_Evaluate +__NPN_GetIntIdentifier +__NPN_GetProperty +__NPN_GetStringIdentifier +__NPN_GetStringIdentifiers +__NPN_HasMethod +__NPN_HasProperty +__NPN_IdentifierIsString +__NPN_IntFromIdentifier +__NPN_Invoke +__NPN_InvokeDefault +__NPN_ReleaseObject +__NPN_ReleaseVariantValue +__NPN_RemoveProperty +__NPN_RetainObject +__NPN_SetException +__NPN_SetProperty +__NPN_UTF8FromIdentifier +__ZN7WebCore16ScriptController20windowScriptNPObjectEv +__ZN7WebCore16ScriptController29cleanupScriptObjectsForPluginEPv +__ZNK7WebCore12RenderObject4viewEv +__ZNK7WebCore14SecurityOrigin9canAccessEPKS0_ +__ZNK7WebCore4KURL7hasPathEv +__ZNK7WebCore4KURL9prettyURLEv +__ZNK7WebCore9FrameView22windowClipRectForLayerEPKNS_11RenderLayerEb +#endif + +#if ENABLE(ORIENTATION_EVENTS) +__ZN7WebCore5Frame26sendOrientationChangeEventEi +#endif + +#if USE(PLUGIN_HOST_PROCESS) +__ZN3JSC13RuntimeMethod11getCallDataERNS_8CallDataE +__ZN3JSC13RuntimeMethod18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSC13RuntimeMethod24getOwnPropertyDescriptorEPNS_9ExecStateERKNS_10IdentifierERNS_18PropertyDescriptorE +__ZN3JSC13RuntimeMethod6s_infoE +__ZN3JSC13RuntimeMethodC2EPNS_9ExecStateEPNS_14JSGlobalObjectERKNS_10IdentifierERN3WTF6VectorIPNS_8Bindings6MethodELm0EEE +__ZN3JSC8Bindings10RootObjectD1Ev +__ZN3JSC8Bindings13RuntimeObject11getCallDataERNS_8CallDataE +__ZN3JSC8Bindings13RuntimeObject14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE +__ZN3JSC8Bindings13RuntimeObject16getConstructDataERNS_13ConstructDataE +__ZN3JSC8Bindings13RuntimeObject18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSC8Bindings13RuntimeObject19getOwnPropertyNamesEPNS_9ExecStateERNS_17PropertyNameArrayENS_15EnumerationModeE +__ZN3JSC8Bindings13RuntimeObject24getOwnPropertyDescriptorEPNS_9ExecStateERKNS_10IdentifierERNS_18PropertyDescriptorE +__ZN3JSC8Bindings13RuntimeObject3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE +__ZN3JSC8Bindings13RuntimeObject6s_infoE +__ZN3JSC8Bindings13RuntimeObjectC2EPNS_9ExecStateEPNS_14JSGlobalObjectEN3WTF10PassRefPtrINS0_8InstanceEEE +__ZN3JSC8Bindings13RuntimeObjectD2Ev +__ZN3JSC8Bindings8Instance19createRuntimeObjectEPNS_9ExecStateE +__ZN3JSC8Bindings8InstanceC2EN3WTF10PassRefPtrINS0_10RootObjectEEE +__ZN3JSC8Bindings8InstanceD2Ev +__ZN7WebCore13IdentifierRep3getEPKc +__ZN7WebCore13IdentifierRep3getEi +__ZN7WebCore13IdentifierRep7isValidEPS0_ +__ZN7WebCore16ScriptController16createRootObjectEPv +__ZN7WebCore16ScriptController17canExecuteScriptsENS_33ReasonForCallingCanExecuteScriptsE +__ZN7WebCore16ScriptController24jsObjectForPluginElementEPNS_17HTMLPlugInElementE +__ZNK3JSC8Bindings13RuntimeObject12defaultValueEPNS_9ExecStateENS_22PreferredPrimitiveTypeE +__ZTVN3JSC13RuntimeMethodE +#endif + +#if USE(PROTECTION_SPACE_AUTH_CALLBACK) +__ZN7WebCore3macERKNS_15ProtectionSpaceE +__ZNK7WebCore15ProtectionSpace20authenticationSchemeEv +#endif + +#if ENABLE(SVG_ANIMATION) && ENABLE(SVG_DOM_OBJC_BINDINGS) +.objc_class_name_DOMSVGAnimateElement +.objc_class_name_DOMSVGAnimateTransformElement +#endif + +#if ENABLE(SVG) && ENABLE(SVG_DOM_OBJC_BINDINGS) +.objc_class_name_DOMSVGAElement +.objc_class_name_DOMSVGAltGlyphElement +.objc_class_name_DOMSVGAngle +.objc_class_name_DOMSVGAnimateColorElement +.objc_class_name_DOMSVGAnimatedAngle +.objc_class_name_DOMSVGAnimatedBoolean +.objc_class_name_DOMSVGAnimatedEnumeration +.objc_class_name_DOMSVGAnimatedInteger +.objc_class_name_DOMSVGAnimatedLength +.objc_class_name_DOMSVGAnimatedLengthList +.objc_class_name_DOMSVGAnimatedNumber +.objc_class_name_DOMSVGAnimatedNumberList +.objc_class_name_DOMSVGAnimatedPreserveAspectRatio +.objc_class_name_DOMSVGAnimatedRect +.objc_class_name_DOMSVGAnimatedString +.objc_class_name_DOMSVGAnimatedTransformList +.objc_class_name_DOMSVGAnimationElement +.objc_class_name_DOMSVGCircleElement +.objc_class_name_DOMSVGClipPathElement +.objc_class_name_DOMSVGColor +.objc_class_name_DOMSVGCursorElement +.objc_class_name_DOMSVGDefsElement +.objc_class_name_DOMSVGDescElement +.objc_class_name_DOMSVGDocument +.objc_class_name_DOMSVGElement +.objc_class_name_DOMSVGElementInstance +.objc_class_name_DOMSVGElementInstanceList +.objc_class_name_DOMSVGEllipseElement +.objc_class_name_DOMSVGGElement +.objc_class_name_DOMSVGGradientElement +.objc_class_name_DOMSVGImageElement +.objc_class_name_DOMSVGLength +.objc_class_name_DOMSVGLengthList +.objc_class_name_DOMSVGLineElement +.objc_class_name_DOMSVGLinearGradientElement +.objc_class_name_DOMSVGMarkerElement +.objc_class_name_DOMSVGMaskElement +.objc_class_name_DOMSVGMatrix +.objc_class_name_DOMSVGMetadataElement +.objc_class_name_DOMSVGNumber +.objc_class_name_DOMSVGNumberList +.objc_class_name_DOMSVGPaint +.objc_class_name_DOMSVGPathElement +.objc_class_name_DOMSVGPathSeg +.objc_class_name_DOMSVGPathSegArcAbs +.objc_class_name_DOMSVGPathSegArcRel +.objc_class_name_DOMSVGPathSegClosePath +.objc_class_name_DOMSVGPathSegCurvetoCubicAbs +.objc_class_name_DOMSVGPathSegCurvetoCubicRel +.objc_class_name_DOMSVGPathSegCurvetoCubicSmoothAbs +.objc_class_name_DOMSVGPathSegCurvetoCubicSmoothRel +.objc_class_name_DOMSVGPathSegCurvetoQuadraticAbs +.objc_class_name_DOMSVGPathSegCurvetoQuadraticRel +.objc_class_name_DOMSVGPathSegCurvetoQuadraticSmoothAbs +.objc_class_name_DOMSVGPathSegCurvetoQuadraticSmoothRel +.objc_class_name_DOMSVGPathSegLinetoAbs +.objc_class_name_DOMSVGPathSegLinetoHorizontalAbs +.objc_class_name_DOMSVGPathSegLinetoHorizontalRel +.objc_class_name_DOMSVGPathSegLinetoRel +.objc_class_name_DOMSVGPathSegLinetoVerticalAbs +.objc_class_name_DOMSVGPathSegLinetoVerticalRel +.objc_class_name_DOMSVGPathSegList +.objc_class_name_DOMSVGPathSegMovetoAbs +.objc_class_name_DOMSVGPathSegMovetoRel +.objc_class_name_DOMSVGPatternElement +.objc_class_name_DOMSVGPoint +.objc_class_name_DOMSVGPointList +.objc_class_name_DOMSVGPolygonElement +.objc_class_name_DOMSVGPolylineElement +.objc_class_name_DOMSVGPreserveAspectRatio +.objc_class_name_DOMSVGRadialGradientElement +.objc_class_name_DOMSVGRect +.objc_class_name_DOMSVGRectElement +.objc_class_name_DOMSVGRenderingIntent +.objc_class_name_DOMSVGSVGElement +.objc_class_name_DOMSVGScriptElement +.objc_class_name_DOMSVGSetElement +.objc_class_name_DOMSVGStopElement +.objc_class_name_DOMSVGStringList +.objc_class_name_DOMSVGStyleElement +.objc_class_name_DOMSVGSwitchElement +.objc_class_name_DOMSVGSymbolElement +.objc_class_name_DOMSVGTRefElement +.objc_class_name_DOMSVGTSpanElement +.objc_class_name_DOMSVGTextContentElement +.objc_class_name_DOMSVGTextElement +.objc_class_name_DOMSVGTextPathElement +.objc_class_name_DOMSVGTextPositioningElement +.objc_class_name_DOMSVGTitleElement +.objc_class_name_DOMSVGTransform +.objc_class_name_DOMSVGTransformList +.objc_class_name_DOMSVGUnitTypes +.objc_class_name_DOMSVGUseElement +.objc_class_name_DOMSVGViewElement +.objc_class_name_DOMSVGZoomEvent +#endif + +#if ENABLE(SVG_FILTERS) && ENABLE(SVG_DOM_OBJC_BINDINGS) +.objc_class_name_DOMSVGComponentTransferFunctionElement +.objc_class_name_DOMSVGFEBlendElement +.objc_class_name_DOMSVGFEColorMatrixElement +.objc_class_name_DOMSVGFEComponentTransferElement +.objc_class_name_DOMSVGFECompositeElement +.objc_class_name_DOMSVGFEDiffuseLightingElement +.objc_class_name_DOMSVGFEDisplacementMapElement +.objc_class_name_DOMSVGFEDistantLightElement +.objc_class_name_DOMSVGFEFloodElement +.objc_class_name_DOMSVGFEFuncAElement +.objc_class_name_DOMSVGFEFuncBElement +.objc_class_name_DOMSVGFEFuncGElement +.objc_class_name_DOMSVGFEFuncRElement +.objc_class_name_DOMSVGFEGaussianBlurElement +.objc_class_name_DOMSVGFEImageElement +.objc_class_name_DOMSVGFEMergeElement +.objc_class_name_DOMSVGFEMergeNodeElement +.objc_class_name_DOMSVGFEMorphologyElement +.objc_class_name_DOMSVGFEOffsetElement +.objc_class_name_DOMSVGFEPointLightElement +.objc_class_name_DOMSVGFESpecularLightingElement +.objc_class_name_DOMSVGFESpotLightElement +.objc_class_name_DOMSVGFETileElement +.objc_class_name_DOMSVGFETurbulenceElement +.objc_class_name_DOMSVGFilterElement +#endif + +#if ENABLE(SVG_FOREIGN_OBJECT) && ENABLE(SVG_DOM_OBJC_BINDINGS) +.objc_class_name_DOMSVGForeignObjectElement +#endif + +#if defined(BUILDING_ON_TIGER) +_wkClearGlyphVector +_wkConvertCharToGlyphs +_wkCopyFullFontName +_wkGetATSStyleGroup +_wkGetCGFontFromNSFont +_wkGetFontMetrics +_wkGetGlyphVectorFirstRecord +_wkGetGlyphVectorNumGlyphs +_wkGetGlyphVectorRecordSize +_wkGetNSFontATSUFontId +_wkInitializeGlyphVector +_wkReleaseStyleGroup +_wkSupportsMultipartXMixedReplace +#endif + +#if ENABLE(VIDEO) +__ZN7WebCore16HTMLMediaElement10screenRectEv +__ZN7WebCore16HTMLMediaElement12endScrubbingEv +__ZN7WebCore16HTMLMediaElement14beginScrubbingEv +__ZN7WebCore16HTMLMediaElement14exitFullscreenEv +__ZN7WebCore16HTMLMediaElement14setCurrentTimeEfRi +__ZN7WebCore16HTMLMediaElement4playEb +__ZN7WebCore16HTMLMediaElement5pauseEb +__ZN7WebCore16HTMLMediaElement6rewindEf +__ZN7WebCore16HTMLMediaElement8setMutedEb +__ZN7WebCore16HTMLMediaElement9setVolumeEfRi +__ZNK7WebCore16HTMLMediaElement11currentTimeEv +__ZNK7WebCore16HTMLMediaElement13platformMediaEv +__ZNK7WebCore16HTMLMediaElement21processingUserGestureEv +__ZNK7WebCore16HTMLMediaElement5mutedEv +__ZNK7WebCore16HTMLMediaElement6volumeEv +__ZNK7WebCore16HTMLMediaElement7canPlayEv +__ZNK7WebCore16HTMLMediaElement12playbackRateEv +__ZNK7WebCore16HTMLMediaElement8durationEv +#endif + +#if ENABLE(PLUGIN_PROXY_FOR_VIDEO) +__ZN7WebCore16HTMLMediaElement19deliverNotificationE32MediaPlayerProxyNotificationType +__ZN7WebCore16HTMLMediaElement19setMediaPlayerProxyEP19WebMediaPlayerProxy +__ZN7WebCore9HTMLNames8audioTagE +__ZN7WebCore9HTMLNames8videoTagE +#endif diff --git a/WebCore/WebCore.gyp/WebCore.gyp b/WebCore/WebCore.gyp/WebCore.gyp index 1821ffc..3b94644 100644 --- a/WebCore/WebCore.gyp/WebCore.gyp +++ b/WebCore/WebCore.gyp/WebCore.gyp @@ -388,6 +388,27 @@ ], }, { + 'action_name': 'MathMLNames', + 'inputs': [ + '../dom/make_names.pl', + '../mathml/mathtags.in', + '../mathml/mathattrs.in', + ], + 'outputs': [ + '<(SHARED_INTERMEDIATE_DIR)/webkit/MathMLNames.cpp', + '<(SHARED_INTERMEDIATE_DIR)/webkit/MathMLNames.h', + ], + 'action': [ + 'python', + 'scripts/action_makenames.py', + '<@(_outputs)', + '--', + '<@(_inputs)', + '--', + '--extraDefines', '<(feature_defines)' + ], + }, + { 'action_name': 'UserAgentStyleSheets', 'inputs': [ '../css/make-css-file-arrays.pl', @@ -454,6 +475,40 @@ ], }, { + 'action_name': 'InspectorFrontend2', + 'inputs': [ + '../bindings/scripts/generate-bindings.pl', + '../bindings/scripts/CodeGenerator.pm', + '../bindings/scripts/IDLParser.pm', + '../bindings/scripts/IDLStructure.pm', + '../inspector/CodeGeneratorInspector.pm', + '../inspector/InspectorFrontend2.idl', + ], + 'outputs': [ + '<(SHARED_INTERMEDIATE_DIR)/webcore/bindings/RemoteInspectorFrontend2.cpp', + '<(SHARED_INTERMEDIATE_DIR)/webkit/bindings/RemoteInspectorFrontend2.h', + ], + 'variables': { + 'generator_include_dirs': [ + ], + }, + 'action': [ + 'python', + 'scripts/rule_binding.py', + '../inspector/InspectorFrontend2.idl', + '<(SHARED_INTERMEDIATE_DIR)/webcore/bindings', + '<(SHARED_INTERMEDIATE_DIR)/webkit/bindings', + '--', + '<@(_inputs)', + '--', + '--defines', 'LANGUAGE_JAVASCRIPT', + '--prefix', 'Remote', + '--generator', 'Inspector', + '<@(generator_include_dirs)' + ], + 'message': 'Generating InspectorFrontend2 class from InspectorFrontend2.idl', + }, + { 'action_name': 'XMLNames', 'inputs': [ '../dom/make_names.pl', @@ -651,10 +706,15 @@ '<(SHARED_INTERMEDIATE_DIR)/webkit/XLinkNames.cpp', '<(SHARED_INTERMEDIATE_DIR)/webkit/XMLNSNames.cpp', '<(SHARED_INTERMEDIATE_DIR)/webkit/XMLNames.cpp', + '<(SHARED_INTERMEDIATE_DIR)/webkit/SVGNames.cpp', + '<(SHARED_INTERMEDIATE_DIR)/webkit/MathMLNames.cpp', # Additional .cpp files from the webcore_bindings_sources rules. '<(SHARED_INTERMEDIATE_DIR)/webkit/CSSGrammar.cpp', '<(SHARED_INTERMEDIATE_DIR)/webkit/XPathGrammar.cpp', + + # Additional .cpp files from the webcore_inspector_sources list. + '<(SHARED_INTERMEDIATE_DIR)/webcore/bindings/RemoteInspectorFrontend2.cpp', ], 'conditions': [ ['javascript_engine=="v8"', { @@ -672,7 +732,6 @@ ['enable_svg!=0', { 'sources': [ '<(SHARED_INTERMEDIATE_DIR)/webkit/SVGElementFactory.cpp', - '<(SHARED_INTERMEDIATE_DIR)/webkit/SVGNames.cpp', '<(SHARED_INTERMEDIATE_DIR)/webkit/V8SVGElementWrapperFactory.cpp', ], }], @@ -781,7 +840,7 @@ '../storage/IndexedDatabase.cpp', # Use history/BackForwardListChromium.cpp instead. - '../history/BackForwardList.cpp', + '../history/BackForwardListImpl.cpp', # Use loader/icon/IconDatabaseNone.cpp instead. '../loader/icon/IconDatabase.cpp', diff --git a/WebCore/WebCore.gyp/scripts/rule_binding.py b/WebCore/WebCore.gyp/scripts/rule_binding.py index 24d178f..f7f3ed1 100644 --- a/WebCore/WebCore.gyp/scripts/rule_binding.py +++ b/WebCore/WebCore.gyp/scripts/rule_binding.py @@ -95,6 +95,14 @@ def main(args): if not includeDir in includeDirs: includeDirs.append(includeDir) + if '--prefix' in options: + prefixIndex = options.index('--prefix') + else: + prefixIndex = options.index('--generator') + + if prefixIndex + 1 < len(options): + prefix = options[prefixIndex + 1] + # The defines come in as one flat string. Split it up into distinct arguments. if '--defines' in options: definesIndex = options.index('--defines') @@ -122,7 +130,7 @@ def main(args): if cppdir != hdir: inputBasename = os.path.basename(input) (root, ext) = os.path.splitext(inputBasename) - hname = 'V8%s.h' % root + hname = '%s%s.h' % (prefix, root) hsrc = os.path.join(cppdir, hname) hdst = os.path.join(hdir, hname) shutil.copyfile(hsrc, hdst) diff --git a/WebCore/WebCore.gypi b/WebCore/WebCore.gypi index 2c221d9..1ccbc3f 100644 --- a/WebCore/WebCore.gypi +++ b/WebCore/WebCore.gypi @@ -224,10 +224,10 @@ 'page/Timing.idl', 'page/WebKitPoint.idl', 'page/WorkerNavigator.idl', - 'plugins/MimeType.idl', - 'plugins/MimeTypeArray.idl', - 'plugins/Plugin.idl', - 'plugins/PluginArray.idl', + 'plugins/DOMMimeType.idl', + 'plugins/DOMMimeTypeArray.idl', + 'plugins/DOMPlugin.idl', + 'plugins/DOMPluginArray.idl', 'storage/Database.idl', 'storage/DatabaseCallback.idl', 'storage/DatabaseSync.idl', @@ -238,6 +238,7 @@ 'storage/IDBErrorEvent.idl', 'storage/IDBEvent.idl', 'storage/IDBIndexRequest.idl', + 'storage/IDBKey.idl', 'storage/IDBKeyRange.idl', 'storage/IDBObjectStoreRequest.idl', 'storage/IDBRequest.idl', @@ -277,6 +278,9 @@ 'xml/XPathResult.idl', 'xml/XSLTProcessor.idl', ], + 'webcore_inspector_idl_files': [ + 'inspector/InspectorFrontend2.idl', + ], 'webcore_svg_bindings_idl_files': [ 'svg/ElementTimeControl.idl', 'svg/SVGAElement.idl', @@ -602,7 +606,7 @@ 'bindings/js/JSMessageEventCustom.cpp', 'bindings/js/JSMessagePortCustom.cpp', 'bindings/js/JSMessagePortCustom.h', - 'bindings/js/JSMimeTypeArrayCustom.cpp', + 'bindings/js/JSDOMMimeTypeArrayCustom.cpp', 'bindings/js/JSNamedNodeMapCustom.cpp', 'bindings/js/JSNamedNodesCollection.cpp', 'bindings/js/JSNamedNodesCollection.h', @@ -616,8 +620,8 @@ 'bindings/js/JSNodeListCustom.cpp', 'bindings/js/JSOptionConstructor.cpp', 'bindings/js/JSOptionConstructor.h', - 'bindings/js/JSPluginArrayCustom.cpp', - 'bindings/js/JSPluginCustom.cpp', + 'bindings/js/JSDOMPluginArrayCustom.cpp', + 'bindings/js/JSDOMPluginCustom.cpp', 'bindings/js/JSPluginElementFunctions.cpp', 'bindings/js/JSPluginElementFunctions.h', 'bindings/js/JSRGBColor.cpp', @@ -692,8 +696,11 @@ 'bindings/js/WorkerScriptController.cpp', 'bindings/js/WorkerScriptController.h', 'bindings/ScriptControllerBase.cpp', + 'bindings/ScriptControllerBase.h', 'bindings/v8/ChildThreadDOMData.cpp', 'bindings/v8/ChildThreadDOMData.h', + 'bindings/v8/IDBBindingUtilities.cpp', + 'bindings/v8/IDBBindingUtilities.h', 'bindings/v8/custom/V8CanvasPixelArrayCustom.cpp', 'bindings/v8/custom/V8ArrayBufferViewCustom.h', 'bindings/v8/custom/V8ArrayBufferViewCustom.cpp', @@ -760,6 +767,7 @@ 'bindings/v8/custom/V8HTMLSelectElementCustom.cpp', 'bindings/v8/custom/V8HTMLSelectElementCustom.h', 'bindings/v8/custom/V8IDBAnyCustom.cpp', + 'bindings/v8/custom/V8IDBKeyCustom.cpp', 'bindings/v8/custom/V8InjectedScriptHostCustom.cpp', 'bindings/v8/custom/V8InspectorFrontendHostCustom.cpp', 'bindings/v8/custom/V8JavaScriptCallFrameCustom.cpp', @@ -1073,8 +1081,6 @@ 'dom/CDATASection.h', 'dom/CSSMappedAttributeDeclaration.cpp', 'dom/CSSMappedAttributeDeclaration.h', - 'dom/CanvasSurface.cpp', - 'dom/CanvasSurface.h', 'dom/CharacterData.cpp', 'dom/CharacterData.h', 'dom/CheckedRadioButtons.cpp', @@ -1113,9 +1119,9 @@ 'dom/DatasetDOMStringMap.h', 'dom/DecodedDataDocumentParser.cpp', 'dom/DecodedDataDocumentParser.h', - 'dom/DeviceOrientation.cpp', - 'dom/DeviceOrientation.h', 'dom/DeviceOrientationClient.h', + 'dom/DeviceOrientationController.cpp', + 'dom/DeviceOrientationController.h', 'dom/DeviceOrientationEvent.cpp', 'dom/DeviceOrientationEvent.h', 'dom/Document.cpp', @@ -1384,8 +1390,12 @@ 'editing/visible_units.cpp', 'editing/visible_units.h', 'history/mac/HistoryItemMac.mm', - 'history/BackForwardList.cpp', + 'history/BackForwardController.cpp', + 'history/BackForwardController.h', + 'history/BackForwardControllerClient.h', 'history/BackForwardList.h', + 'history/BackForwardListImpl.cpp', + 'history/BackForwardListImpl.h', 'history/BackForwardListChromium.cpp', 'history/CachedFrame.cpp', 'history/CachedFrame.h', @@ -1529,6 +1539,8 @@ 'html/HTMLCanvasElement.h', 'html/HTMLCollection.cpp', 'html/HTMLCollection.h', + 'html/HTMLConstructionSite.cpp', + 'html/HTMLConstructionSite.h', 'html/HTMLDListElement.cpp', 'html/HTMLDListElement.h', 'html/HTMLDataGridCellElement.cpp', @@ -1708,6 +1720,8 @@ 'inspector/InjectedScript.h', 'inspector/InjectedScriptHost.cpp', 'inspector/InjectedScriptHost.h', + 'inspector/InspectorApplicationCacheAgent.cpp', + 'inspector/InspectorApplicationCacheAgent.h', 'inspector/InspectorBackend.cpp', 'inspector/InspectorBackend.h', 'inspector/InspectorController.cpp', @@ -2025,6 +2039,7 @@ 'page/Timing.h', 'page/UserContentURLPattern.cpp', 'page/UserContentURLPattern.h', + 'page/UserContentTypes.h', 'page/UserScript.h', 'page/UserScriptTypes.h', 'page/UserStyleSheet.h', @@ -3052,14 +3067,14 @@ 'plugins/wx/PluginDataWx.cpp', 'plugins/wx/PluginPackageWx.cpp', 'plugins/wx/PluginViewWx.cpp', - 'plugins/MimeType.cpp', - 'plugins/MimeType.h', - 'plugins/MimeTypeArray.cpp', - 'plugins/MimeTypeArray.h', - 'plugins/Plugin.cpp', - 'plugins/Plugin.h', - 'plugins/PluginArray.cpp', - 'plugins/PluginArray.h', + 'plugins/DOMMimeType.cpp', + 'plugins/DOMMimeType.h', + 'plugins/DOMMimeTypeArray.cpp', + 'plugins/DOMMimeTypeArray.h', + 'plugins/DOMPlugin.cpp', + 'plugins/DOMPlugin.h', + 'plugins/DOMPluginArray.cpp', + 'plugins/DOMPluginArray.h', 'plugins/PluginData.cpp', 'plugins/PluginData.h', 'plugins/PluginDatabase.cpp', @@ -3447,8 +3462,11 @@ 'storage/IDBIndexImpl.h', 'storage/IDBIndexRequest.cpp', 'storage/IDBIndexRequest.h', + 'storage/IDBKey.cpp', + 'storage/IDBKey.h', 'storage/IDBKeyRange.cpp', 'storage/IDBKeyRange.h', + 'storage/IDBKeyTree.h', 'storage/IDBObjectStore.h', 'storage/IDBObjectStoreImpl.cpp', 'storage/IDBObjectStoreImpl.h', @@ -3945,6 +3963,7 @@ 'inspector/front-end/inspector.html', 'inspector/front-end/AbstractTimelinePanel.js', + 'inspector/front-end/ApplicationCacheItemsView.js', 'inspector/front-end/AuditCategories.js', 'inspector/front-end/AuditLauncherView.js', 'inspector/front-end/AuditResultView.js', @@ -4048,6 +4067,7 @@ 'inspector/front-end/textViewer.css', ], 'webinspector_image_files': [ + 'inspector/front-end/Images/applicationCache.png', 'inspector/front-end/Images/auditsIcon.png', 'inspector/front-end/Images/back.png', 'inspector/front-end/Images/breakpointBorder.png', diff --git a/WebCore/WebCore.pri b/WebCore/WebCore.pri index 623dbb6..1451984 100644 --- a/WebCore/WebCore.pri +++ b/WebCore/WebCore.pri @@ -62,7 +62,6 @@ contains(DEFINES, ENABLE_SINGLE_THREADED=1) { !contains(DEFINES, ENABLE_WORKERS=.): DEFINES += ENABLE_WORKERS=1 !contains(DEFINES, ENABLE_XHTMLMP=.): DEFINES += ENABLE_XHTMLMP=0 !contains(DEFINES, ENABLE_DATAGRID=.): DEFINES += ENABLE_DATAGRID=0 -!contains(DEFINES, ENABLE_VIDEO=.): DEFINES += ENABLE_VIDEO=1 !contains(DEFINES, ENABLE_RUBY=.): DEFINES += ENABLE_RUBY=1 !contains(DEFINES, ENABLE_SANDBOX=.): DEFINES += ENABLE_SANDBOX=1 !contains(DEFINES, ENABLE_METER_TAG=.): DEFINES += ENABLE_METER_TAG=1 @@ -88,9 +87,6 @@ greaterThan(QT_MINOR_VERSION, 5) { DEFINES += ENABLE_SVG_FONTS=0 ENABLE_SVG_FOREIGN_OBJECT=0 ENABLE_SVG_ANIMATION=0 ENABLE_SVG_AS_IMAGE=0 ENABLE_SVG_USE=0 } -# HTML5 media support -!contains(DEFINES, ENABLE_VIDEO=.): DEFINES += ENABLE_VIDEO=1 - # HTML5 datalist support !contains(DEFINES, ENABLE_DATALIST=.): DEFINES += ENABLE_DATALIST=1 @@ -142,6 +138,21 @@ greaterThan(QT_MINOR_VERSION, 5) { # Enable touch event support with Qt 4.6 !lessThan(QT_MINOR_VERSION, 6): DEFINES += ENABLE_TOUCH_EVENTS=1 +# HTML5 Media Support +# We require QtMultimedia or Phonon +!contains(DEFINES, ENABLE_VIDEO=.) { + DEFINES -= ENABLE_VIDEO=1 + DEFINES += ENABLE_VIDEO=0 + + !lessThan(QT_MINOR_VERSION, 6):contains(MOBILITY_CONFIG, multimedia) { + DEFINES -= ENABLE_VIDEO=0 + DEFINES += ENABLE_VIDEO=1 + } else:contains(QT_CONFIG, phonon) { + DEFINES -= ENABLE_VIDEO=0 + DEFINES += ENABLE_VIDEO=1 + } +} + # Used to compute defaults for the build-webkit script CONFIG(compute_defaults) { message($$DEFINES) @@ -464,10 +475,10 @@ IDL_BINDINGS += \ page/Timing.idl \ page/WebKitPoint.idl \ page/WorkerNavigator.idl \ - plugins/Plugin.idl \ - plugins/MimeType.idl \ - plugins/PluginArray.idl \ - plugins/MimeTypeArray.idl \ + plugins/DOMPlugin.idl \ + plugins/DOMMimeType.idl \ + plugins/DOMPluginArray.idl \ + plugins/DOMMimeTypeArray.idl \ storage/Database.idl \ storage/DatabaseCallback.idl \ storage/DatabaseSync.idl \ @@ -478,6 +489,7 @@ IDL_BINDINGS += \ storage/IDBErrorEvent.idl \ storage/IDBEvent.idl \ storage/IDBIndexRequest.idl \ + storage/IDBKey.idl \ storage/IDBKeyRange.idl \ storage/IDBObjectStoreRequest.idl \ storage/IDBRequest.idl \ @@ -652,14 +664,14 @@ IDL_BINDINGS += \ xml/XPathEvaluator.idl \ xml/XSLTProcessor.idl -contains(DEFINES, ENABLE_MATHML=1) { - mathmlnames.output = $${WC_GENERATED_SOURCES_DIR}/MathMLNames.cpp - mathmlnames.input = MATHML_NAMES - mathmlnames.wkScript = $$PWD/dom/make_names.pl - mathmlnames.commands = perl -I$$PWD/bindings/scripts $$mathmlnames.wkScript --tags $$PWD/mathml/mathtags.in --attrs $$PWD/mathml/mathattrs.in --extraDefines \"$${DEFINES}\" --preprocessor \"$${QMAKE_MOC} -E\" --factory --wrapperFactory --outputDir $$WC_GENERATED_SOURCES_DIR - mathmlnames.wkExtraSources = $${WC_GENERATED_SOURCES_DIR}/MathMLElementFactory.cpp - addExtraCompiler(mathmlnames) -} +INSPECTOR_INTERFACES = inspector/InspectorFrontend2.idl + +mathmlnames.output = $${WC_GENERATED_SOURCES_DIR}/MathMLNames.cpp +mathmlnames.input = MATHML_NAMES +mathmlnames.wkScript = $$PWD/dom/make_names.pl +mathmlnames.commands = perl -I$$PWD/bindings/scripts $$mathmlnames.wkScript --tags $$PWD/mathml/mathtags.in --attrs $$PWD/mathml/mathattrs.in --extraDefines \"$${DEFINES}\" --preprocessor \"$${QMAKE_MOC} -E\" --factory --wrapperFactory --outputDir $$WC_GENERATED_SOURCES_DIR +mathmlnames.wkExtraSources = $${WC_GENERATED_SOURCES_DIR}/MathMLElementFactory.cpp +addExtraCompiler(mathmlnames) contains(DEFINES, ENABLE_WML=1) { wmlnames.output = $${WC_GENERATED_SOURCES_DIR}/WMLNames.cpp @@ -670,16 +682,14 @@ contains(DEFINES, ENABLE_WML=1) { addExtraCompiler(wmlnames) } -contains(DEFINES, ENABLE_SVG=1) { - # GENERATOR 5-C: - svgnames.output = $${WC_GENERATED_SOURCES_DIR}/SVGNames.cpp - svgnames.input = SVG_NAMES - svgnames.depends = $$PWD/svg/svgattrs.in - svgnames.wkScript = $$PWD/dom/make_names.pl - svgnames.commands = perl -I$$PWD/bindings/scripts $$svgnames.wkScript --tags $$PWD/svg/svgtags.in --attrs $$PWD/svg/svgattrs.in --extraDefines \"$${DEFINES}\" --preprocessor \"$${QMAKE_MOC} -E\" --factory --wrapperFactory --outputDir $$WC_GENERATED_SOURCES_DIR - svgnames.wkExtraSources = $${WC_GENERATED_SOURCES_DIR}/SVGElementFactory.cpp $${WC_GENERATED_SOURCES_DIR}/JSSVGElementWrapperFactory.cpp - addExtraCompiler(svgnames) -} +# GENERATOR 5-C: +svgnames.output = $${WC_GENERATED_SOURCES_DIR}/SVGNames.cpp +svgnames.input = SVG_NAMES +svgnames.depends = $$PWD/svg/svgattrs.in +svgnames.wkScript = $$PWD/dom/make_names.pl +svgnames.commands = perl -I$$PWD/bindings/scripts $$svgnames.wkScript --tags $$PWD/svg/svgtags.in --attrs $$PWD/svg/svgattrs.in --extraDefines \"$${DEFINES}\" --preprocessor \"$${QMAKE_MOC} -E\" --factory --wrapperFactory --outputDir $$WC_GENERATED_SOURCES_DIR +svgnames.wkExtraSources = $${WC_GENERATED_SOURCES_DIR}/SVGElementFactory.cpp $${WC_GENERATED_SOURCES_DIR}/JSSVGElementWrapperFactory.cpp +addExtraCompiler(svgnames) # GENERATOR 5-D: xlinknames.output = $${WC_GENERATED_SOURCES_DIR}/XLinkNames.cpp @@ -717,6 +727,18 @@ idl.depends = $$PWD/bindings/scripts/CodeGenerator.pm \ $$PWD/bindings/scripts/InFilesParser.pm addExtraCompiler(idl) +# GENERATOR 2: inspector idl compiler +inspectorIDL.output = $${WC_GENERATED_SOURCES_DIR}/Remote${QMAKE_FILE_BASE}.cpp +inspectorIDL.input = INSPECTOR_INTERFACES +inspectorIDL.wkScript = $$PWD/bindings/scripts/generate-bindings.pl +inspectorIDL.commands = perl -I$$PWD/bindings/scripts -I$$PWD/inspector $$inspectorIDL.wkScript --defines \"$${FEATURE_DEFINES_JAVASCRIPT}\" --generator Inspector --outputDir $$WC_GENERATED_SOURCES_DIR --preprocessor \"$${QMAKE_MOC} -E\" ${QMAKE_FILE_NAME} +inspectorIDL.depends = $$PWD/bindings/scripts/CodeGenerator.pm \ + $$PWD/inspector/CodeGeneratorInspector.pm \ + $$PWD/bindings/scripts/IDLParser.pm \ + $$PWD/bindings/scripts/IDLStructure.pm \ + $$PWD/bindings/scripts/InFilesParser.pm +addExtraCompiler(inspectorIDL) + # GENERATOR 3: tokenizer (flex) tokenizer.output = $${WC_GENERATED_SOURCES_DIR}/${QMAKE_FILE_BASE}.cpp tokenizer.input = TOKENIZER diff --git a/WebCore/WebCore.pro b/WebCore/WebCore.pro index b33a100..49149dc 100644 --- a/WebCore/WebCore.pro +++ b/WebCore/WebCore.pro @@ -143,19 +143,6 @@ contains(DEFINES, WTF_USE_QT_MOBILE_THEME=1) { include($$PWD/../JavaScriptCore/JavaScriptCore.pri) addJavaScriptCoreLib(../JavaScriptCore) - -# HTML5 Media Support -# We require phonon. QtMultimedia support is disabled currently. -!contains(DEFINES, ENABLE_VIDEO=.) { - DEFINES -= ENABLE_VIDEO=1 - DEFINES += ENABLE_VIDEO=0 - - contains(QT_CONFIG, phonon) { - DEFINES -= ENABLE_VIDEO=0 - DEFINES += ENABLE_VIDEO=1 - } -} - # Extract sources to build from the generator definitions defineTest(addExtraCompiler) { isEqual($${1}.wkAddOutputToSources, false): return(true) @@ -180,6 +167,7 @@ include(WebCore.pri) INCLUDEPATH = \ $$PWD \ $$PWD/accessibility \ + $$PWD/bindings \ $$PWD/bindings/js \ $$PWD/bridge \ $$PWD/bridge/c \ @@ -350,13 +338,13 @@ SOURCES += \ bindings/js/JSWebKitPointCustom.cpp \ bindings/js/JSXMLHttpRequestCustom.cpp \ bindings/js/JSXMLHttpRequestUploadCustom.cpp \ - bindings/js/JSPluginCustom.cpp \ - bindings/js/JSPluginArrayCustom.cpp \ + bindings/js/JSDOMPluginCustom.cpp \ + bindings/js/JSDOMPluginArrayCustom.cpp \ bindings/js/JSMessageChannelCustom.cpp \ bindings/js/JSMessageEventCustom.cpp \ bindings/js/JSMessagePortCustom.cpp \ bindings/js/JSMessagePortCustom.h \ - bindings/js/JSMimeTypeArrayCustom.cpp \ + bindings/js/JSDOMMimeTypeArrayCustom.cpp \ bindings/js/JSDOMBinding.cpp \ bindings/js/JSEventListener.cpp \ bindings/js/JSLazyEventListener.cpp \ @@ -460,7 +448,6 @@ SOURCES += \ dom/BeforeTextInsertedEvent.cpp \ dom/BeforeUnloadEvent.cpp \ dom/CDATASection.cpp \ - dom/CanvasSurface.cpp \ dom/CharacterData.cpp \ dom/CheckedRadioButtons.cpp \ dom/ChildNodeList.cpp \ @@ -475,7 +462,7 @@ SOURCES += \ dom/CSSMappedAttributeDeclaration.cpp \ dom/CustomEvent.cpp \ dom/DecodedDataDocumentParser.cpp \ - dom/DeviceOrientation.cpp \ + dom/DeviceOrientationController.cpp \ dom/DeviceOrientationEvent.cpp \ dom/Document.cpp \ dom/DocumentFragment.cpp \ @@ -599,7 +586,8 @@ SOURCES += \ editing/VisibleSelection.cpp \ editing/visible_units.cpp \ editing/WrapContentsInDummySpanCommand.cpp \ - history/BackForwardList.cpp \ + history/BackForwardController.cpp \ + history/BackForwardListImpl.cpp \ history/CachedFrame.cpp \ history/CachedPage.cpp \ history/HistoryItem.cpp \ @@ -646,6 +634,7 @@ SOURCES += \ html/HTMLButtonElement.cpp \ html/HTMLCanvasElement.cpp \ html/HTMLCollection.cpp \ + html/HTMLConstructionSite.cpp \ html/HTMLDataGridElement.cpp \ html/HTMLDataGridCellElement.cpp \ html/HTMLDataGridColElement.cpp \ @@ -729,6 +718,7 @@ SOURCES += \ inspector/ConsoleMessage.cpp \ inspector/InjectedScript.cpp \ inspector/InjectedScriptHost.cpp \ + inspector/InspectorApplicationCacheAgent.cpp \ inspector/InspectorBackend.cpp \ inspector/InspectorCSSStore.cpp \ inspector/InspectorController.cpp \ @@ -839,11 +829,11 @@ SOURCES += \ page/WindowFeatures.cpp \ page/XSSAuditor.cpp \ plugins/PluginData.cpp \ - plugins/PluginArray.cpp \ - plugins/Plugin.cpp \ + plugins/DOMPluginArray.cpp \ + plugins/DOMPlugin.cpp \ plugins/PluginMainThreadScheduler.cpp \ - plugins/MimeType.cpp \ - plugins/MimeTypeArray.cpp \ + plugins/DOMMimeType.cpp \ + plugins/DOMMimeTypeArray.cpp \ platform/animation/Animation.cpp \ platform/animation/AnimationList.cpp \ platform/Arena.cpp \ @@ -1069,6 +1059,7 @@ HEADERS += \ accessibility/AccessibilityTableHeaderContainer.h \ accessibility/AccessibilityTableRow.h \ accessibility/AXObjectCache.h \ + bindings/ScriptControllerBase.h \ bindings/js/CachedScriptSourceProvider.h \ bindings/js/GCController.h \ bindings/js/DOMObjectHashTableMap.h \ @@ -1228,8 +1219,8 @@ HEADERS += \ dom/CSSMappedAttributeDeclaration.h \ dom/CustomEvent.h \ dom/default/PlatformMessagePortChannel.h \ - dom/DeviceOrientation.h \ dom/DeviceOrientationClient.h \ + dom/DeviceOrientationController.h \ dom/DeviceOrientationEvent.h \ dom/DocumentFragment.h \ dom/Document.h \ @@ -1349,6 +1340,9 @@ HEADERS += \ editing/VisibleSelection.h \ editing/visible_units.h \ editing/WrapContentsInDummySpanCommand.h \ + history/BackForwardController.h \ + history/BackForwardControllerClient.h \ + history/BackForwardListImpl.h \ history/BackForwardList.h \ history/CachedFrame.h \ history/CachedPage.h \ @@ -1476,6 +1470,7 @@ HEADERS += \ inspector/ConsoleMessage.h \ inspector/InjectedScript.h \ inspector/InjectedScriptHost.h \ + inspector/InspectorApplicationCacheAgent.h \ inspector/InspectorBackend.h \ inspector/InspectorController.h \ inspector/InspectorDatabaseResource.h \ @@ -1723,13 +1718,13 @@ HEADERS += \ platform/ThreadTimers.h \ platform/Timer.h \ platform/Widget.h \ - plugins/MimeTypeArray.h \ - plugins/MimeType.h \ - plugins/PluginArray.h \ + plugins/DOMMimeTypeArray.h \ + plugins/DOMMimeType.h \ + plugins/DOMPluginArray.h \ plugins/PluginDatabase.h \ plugins/PluginData.h \ plugins/PluginDebug.h \ - plugins/Plugin.h \ + plugins/DOMPlugin.h \ plugins/PluginMainThreadScheduler.h \ plugins/PluginPackage.h \ plugins/PluginStream.h \ @@ -2387,6 +2382,7 @@ contains(DEFINES, ENABLE_DATABASE=1) { contains(DEFINES, ENABLE_INDEXED_DATABASE=1) { HEADERS += \ + bindings/js/IDBBindingUtilities.h \ storage/IDBAny.h \ storage/IDBCallbacks.h \ storage/IDBDatabase.h \ @@ -2399,6 +2395,7 @@ contains(DEFINES, ENABLE_INDEXED_DATABASE=1) { storage/IDBIndex.h \ storage/IDBIndexImpl.h \ storage/IDBIndexRequest.h \ + storage/IDBKey.h \ storage/IDBKeyRange.h \ storage/IDBObjectStore.h \ storage/IDBObjectStoreImpl.h \ @@ -2410,7 +2407,9 @@ contains(DEFINES, ENABLE_INDEXED_DATABASE=1) { storage/IndexedDatabaseRequest.h SOURCES += \ + bindings/js/IDBBindingUtilities.cpp \ bindings/js/JSIDBAnyCustom.cpp \ + bindings/js/JSIDBKeyCustom.cpp \ storage/IDBAny.cpp \ storage/IDBDatabaseImpl.cpp \ storage/IDBDatabaseRequest.cpp \ @@ -2418,6 +2417,7 @@ contains(DEFINES, ENABLE_INDEXED_DATABASE=1) { storage/IDBEvent.cpp \ storage/IDBIndexImpl.cpp \ storage/IDBIndexRequest.cpp \ + storage/IDBKey.cpp \ storage/IDBKeyRange.cpp \ storage/IDBObjectStoreImpl.cpp \ storage/IDBObjectStoreRequest.cpp \ @@ -2535,13 +2535,14 @@ contains(DEFINES, ENABLE_VIDEO=1) { rendering/RenderMedia.cpp \ bindings/js/JSAudioConstructor.cpp - # QtMultimedia disabled currently - false:greaterThan(QT_MINOR_VERSION, 6) { + !lessThan(QT_MINOR_VERSION, 6):contains(MOBILITY_CONFIG, multimedia) { HEADERS += platform/graphics/qt/MediaPlayerPrivateQt.h SOURCES += platform/graphics/qt/MediaPlayerPrivateQt.cpp - tobe|!tobe: QT += mediaservices - } else { + CONFIG *= mobility + MOBILITY += multimedia + DEFINES += WTF_USE_QT_MULTIMEDIA + } else:contains(QT_CONFIG, phonon) { HEADERS += \ platform/graphics/qt/MediaPlayerPrivatePhonon.h @@ -2559,7 +2560,6 @@ contains(DEFINES, ENABLE_VIDEO=1) { INCLUDEPATH += $$QMAKE_LIBDIR_QT/phonon.framework/Headers } } - } contains(DEFINES, ENABLE_XPATH=1) { diff --git a/WebCore/WebCore.vcproj/WebCore.vcproj b/WebCore/WebCore.vcproj/WebCore.vcproj index 2888801..4e77d82 100644 --- a/WebCore/WebCore.vcproj/WebCore.vcproj +++ b/WebCore/WebCore.vcproj/WebCore.vcproj @@ -67,7 +67,7 @@ />
<Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\inspector\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\notifications\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\cg\*.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\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"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\jsc\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\websockets\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\workers\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\parser\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\runtime\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\masm\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wrec\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\inspector\front-end\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"
+ CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\inspector\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\notifications\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\cg\*.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\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"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\jsc\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\websockets\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\workers\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\parser\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\runtime\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\masm\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wrec\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\inspector\front-end\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"
/>
</Configuration>
<Configuration
@@ -123,7 +123,7 @@ />
<Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\inspector\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\notifications\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\cg\*.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\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"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\jsc\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\websockets\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\workers\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\parser\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\runtime\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\masm\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wrec\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\inspector\front-end\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"
+ CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\inspector\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\notifications\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\cg\*.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\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"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\jsc\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\websockets\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\workers\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\parser\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\runtime\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\masm\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wrec\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\inspector\front-end\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"
/>
</Configuration>
<Configuration
@@ -178,7 +178,7 @@ />
<Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\inspector\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\notifications\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\cg\*.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\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"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\jsc\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\websockets\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\workers\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\parser\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\runtime\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\masm\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wrec\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\inspector\front-end\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"
+ CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\inspector\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\notifications\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\cg\*.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\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"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\jsc\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\websockets\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\workers\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\parser\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\runtime\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\masm\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wrec\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\inspector\front-end\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"
/>
</Configuration>
<Configuration
@@ -233,7 +233,7 @@ />
<Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\inspector\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\notifications\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\cairo\*.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\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"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\curl\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\jsc\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\websockets\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\workers\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\parser\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\runtime\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\masm\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wrec\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\inspector\front-end\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"
+ CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\inspector\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\notifications\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\cairo\*.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\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"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\curl\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\jsc\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\websockets\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\workers\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\parser\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\runtime\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\masm\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wrec\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\inspector\front-end\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"
/>
</Configuration>
<Configuration
@@ -289,7 +289,7 @@ />
<Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\inspector\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\notifications\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\cairo\*.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\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"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\curl\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\jsc\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\websockets\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\workers\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\parser\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\runtime\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\masm\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wrec\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\inspector\front-end\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"
+ CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\inspector\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\notifications\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\cairo\*.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\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"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\curl\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\jsc\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\websockets\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\workers\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\parser\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\runtime\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\masm\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wrec\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\inspector\front-end\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"
/>
</Configuration>
<Configuration
@@ -344,7 +344,7 @@ />
<Tool
Name="VCPostBuildEventTool"
- CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\inspector\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\notifications\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\cg\*.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\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"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\jsc\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\websockets\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\workers\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\parser\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\runtime\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\masm\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wrec\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\inspector\front-end\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"
+ CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\accessibility\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\inspector\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\notifications\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\cg\*.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\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"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\jsc\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\animation\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\websockets\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\workers\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\parser\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\parser"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\runtime\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\runtime"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\masm\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wrec\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\text\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\text"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\inspector\front-end\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"
/>
</Configuration>
</Configurations>
@@ -9173,7 +9173,7 @@ >
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSMimeType.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMMimeType.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -9225,11 +9225,11 @@ </FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSMimeType.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMMimeType.h"
>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSMimeTypeArray.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMMimeTypeArray.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -9281,7 +9281,7 @@ </FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSMimeTypeArray.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMMimeTypeArray.h"
>
</File>
<File
@@ -10125,7 +10125,7 @@ >
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPlugin.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMPlugin.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -10177,11 +10177,11 @@ </FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPlugin.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMPlugin.h"
>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPluginArray.cpp"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMPluginArray.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -10233,7 +10233,7 @@ </FileConfiguration>
</File>
<File
- RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSPluginArray.h"
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSDOMPluginArray.h"
>
</File>
<File
@@ -20725,6 +20725,22 @@ >
</File>
<File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\MathMLElementFactory.cpp"
+ >
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\MathMLElementFactory.h"
+ >
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\MathMLNames.cpp"
+ >
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\MathMLNames.h"
+ >
+ </File>
+ <File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\SVGElementFactory.cpp"
>
</File>
@@ -20745,6 +20761,14 @@ >
</File>
<File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\RemoteInspectorFrontend2.cpp"
+ >
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\RemoteInspectorFrontend2.h"
+ >
+ </File>
+ <File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\WMLElementFactory.cpp"
>
<FileConfiguration
@@ -22409,10 +22433,6 @@ >
</File>
<File
- RelativePath="..\page\Plugin.h"
- >
- </File>
- <File
RelativePath="..\page\PluginHalter.cpp"
>
</File>
@@ -32253,14 +32273,6 @@ >
</File>
<File
- RelativePath="..\dom\CanvasSurface.cpp"
- >
- </File>
- <File
- RelativePath="..\dom\CanvasSurface.h"
- >
- </File>
- <File
RelativePath="..\dom\CDATASection.cpp"
>
</File>
@@ -32389,15 +32401,15 @@ >
</File>
<File
- RelativePath="..\dom\DeviceOrientation.cpp"
+ RelativePath="..\dom\DeviceOrientationClient.h"
>
</File>
<File
- RelativePath="..\dom\DeviceOrientation.h"
+ RelativePath="..\dom\DeviceOrientationController.cpp"
>
</File>
<File
- RelativePath="..\dom\DeviceOrientationClient.h"
+ RelativePath="..\dom\DeviceOrientationController.h"
>
</File>
<File
@@ -40373,6 +40385,14 @@ >
</File>
<File
+ RelativePath="..\html\HTMLConstructionSite.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\html\HTMLConstructionSite.h"
+ >
+ </File>
+ <File
RelativePath="..\html\HTMLUListElement.cpp"
>
<FileConfiguration
@@ -40580,6 +40600,10 @@ RelativePath="..\bindings\ScriptControllerBase.cpp"
>
</File>
+ <File
+ RelativePath="..\bindings\ScriptControllerBase.h"
+ >
+ </File>
<Filter
Name="js"
>
@@ -43956,6 +43980,170 @@ </FileConfiguration>
</File>
<File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBKey.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Internal|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_All|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBKey.h"
+ >
+ </File>
+ <File
+ RelativePath="..\bindings\js\JSIDBKeyCustom.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Internal|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_All|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\bindings\js\IDBBindingUtilities.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Internal|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_All|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\bindings\js\IDBBindingUtilities.h"
+ >
+ </File>
+ <File
RelativePath="$(WebKitOutputDir)\obj\$(ProjectName)\DerivedSources\JSIDBDatabase.cpp"
>
<FileConfiguration
@@ -45216,7 +45404,7 @@ >
</File>
<File
- RelativePath="..\bindings\js\JSMimeTypeArrayCustom.cpp"
+ RelativePath="..\bindings\js\JSDOMMimeTypeArrayCustom.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -45696,7 +45884,7 @@ >
</File>
<File
- RelativePath="..\bindings\js\JSPluginArrayCustom.cpp"
+ RelativePath="..\bindings\js\JSDOMPluginArrayCustom.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -45748,7 +45936,7 @@ </FileConfiguration>
</File>
<File
- RelativePath="..\bindings\js\JSPluginCustom.cpp"
+ RelativePath="..\bindings\js\JSDOMPluginCustom.cpp"
>
<FileConfiguration
Name="Debug|Win32"
@@ -47949,19 +48137,19 @@ Name="plugins"
>
<File
- RelativePath="..\plugins\MimeType.cpp"
+ RelativePath="..\plugins\DOMMimeType.cpp"
>
</File>
<File
- RelativePath="..\plugins\MimeType.h"
+ RelativePath="..\plugins\DOMMimeType.h"
>
</File>
<File
- RelativePath="..\plugins\MimeTypeArray.cpp"
+ RelativePath="..\plugins\DOMMimeTypeArray.cpp"
>
</File>
<File
- RelativePath="..\plugins\MimeTypeArray.h"
+ RelativePath="..\plugins\DOMMimeTypeArray.h"
>
</File>
<File
@@ -47973,19 +48161,19 @@ >
</File>
<File
- RelativePath="..\plugins\Plugin.cpp"
+ RelativePath="..\plugins\DOMPlugin.cpp"
>
</File>
<File
- RelativePath="..\plugins\Plugin.h"
+ RelativePath="..\plugins\DOMPlugin.h"
>
</File>
<File
- RelativePath="..\plugins\PluginArray.cpp"
+ RelativePath="..\plugins\DOMPluginArray.cpp"
>
</File>
<File
- RelativePath="..\plugins\PluginArray.h"
+ RelativePath="..\plugins\DOMPluginArray.h"
>
</File>
<File
@@ -49461,7 +49649,15 @@ Name="history"
>
<File
- RelativePath="..\history\BackForwardList.cpp"
+ RelativePath="..\history\BackForwardController.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\history\BackForwardController.h"
+ >
+ </File>
+ <File
+ RelativePath="..\history\BackForwardControllerClient.h"
>
</File>
<File
@@ -49469,6 +49665,14 @@ >
</File>
<File
+ RelativePath="..\history\BackForwardListImpl.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\history\BackForwardListImpl.h"
+ >
+ </File>
+ <File
RelativePath="..\history\CachedFrame.cpp"
>
</File>
@@ -49665,6 +49869,14 @@ >
</File>
<File
+ RelativePath="..\storage\IDBKey.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\storage\IDBKey.h"
+ >
+ </File>
+ <File
RelativePath="..\storage\IDBKeyRange.cpp"
>
</File>
@@ -50105,6 +50317,14 @@ >
</File>
<File
+ RelativePath="..\inspector\InspectorApplicationCacheAgent.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\inspector\InspectorApplicationCacheAgent.h"
+ >
+ </File>
+ <File
RelativePath="..\inspector\InspectorBackend.cpp"
>
</File>
@@ -50240,6 +50460,10 @@ >
</File>
<File
+ RelativePath="..\inspector\front-end\ApplicationCacheItemsView.js"
+ >
+ </File>
+ <File
RelativePath="..\inspector\front-end\AuditCategories.js"
>
</File>
diff --git a/WebCore/WebCore.vcproj/WebCoreCommon.vsprops b/WebCore/WebCore.vcproj/WebCoreCommon.vsprops index 4283526..71105bc 100644 --- a/WebCore/WebCore.vcproj/WebCoreCommon.vsprops +++ b/WebCore/WebCore.vcproj/WebCoreCommon.vsprops @@ -7,7 +7,7 @@ > <Tool Name="VCCLCompilerTool" - AdditionalIncludeDirectories=""$(ProjectDir)..";"$(ProjectDir)..\accessibility";"$(ProjectDir)..\accessibility\win";"$(ProjectDir)..\bridge";"$(ProjectDir)..\bridge\c";"$(ProjectDir)..\bridge\jsc";"$(ProjectDir)..\css";"$(ProjectDir)..\editing";"$(ProjectDir)..\rendering";"$(ProjectDir)..\rendering\style";"$(ProjectDir)..\bindings\js";"$(ProjectDir)..\dom";"$(ProjectDir)..\dom\default";"$(ProjectDir)..\history";"$(ProjectDir)..\html";"$(ProjectDir)..\html\canvas";"$(ProjectDir)..\inspector";"$(ProjectDir)..\loader";"$(ProjectDir)..\loader\appcache";"$(ProjectDir)..\loader\archive";"$(ProjectDir)..\loader\archive\cf";"$(ProjectDir)..\loader\icon";"$(ProjectDir)..\notifications";"$(ProjectDir)..\page";"$(ProjectDir)..\page\animation";"$(ProjectDir)..\page\win";"$(ProjectDir)..\platform";"$(ProjectDir)..\platform\animation";"$(ProjectDir)..\platform\mock";"$(ProjectDir)..\platform\sql";"$(ProjectDir)..\platform\win";"$(ProjectDir)..\platform\network";"$(ProjectDir)..\platform\network\win";"$(ProjectDir)..\platform\cf";"$(ProjectDir)..\platform\graphics";"$(ProjectDir)..\platform\graphics\filters";"$(ProjectDir)..\platform\graphics\opentype";"$(ProjectDir)..\platform\graphics\transforms";"$(ProjectDir)..\platform\text";"$(ProjectDir)..\platform\text\transcoder";"$(ProjectDir)..\platform\graphics\win";"$(ProjectDir)..\xml";"$(WebKitOutputDir)\obj\WebCore\DerivedSources";"$(ProjectDir)..\plugins";"$(ProjectDir)..\plugins\win";"$(ProjectDir)..\svg\animation";"$(ProjectDir)..\svg\graphics";"$(ProjectDir)..\svg\graphics\filters";"$(ProjectDir)..\svg";"$(ProjectDir)..\wml";"$(ProjectDir)..\storage";"$(ProjectDir)..\websockets";"$(ProjectDir)..\workers";"$(WebKitOutputDir)\include";"$(WebKitOutputDir)\include\private";"$(WebKitOutputDir)\include\JavaScriptCore";"$(WebKitOutputDir)\include\private\JavaScriptCore";"$(ProjectDir)..\ForwardingHeaders";"$(WebKitLibrariesDir)\include";"$(WebKitLibrariesDir)\include\private";"$(WebKitLibrariesDir)\include\private\JavaScriptCore";"$(WebKitLibrariesDir)\include\pthreads";"$(WebKitLibrariesDir)\include\sqlite";"$(WebKitLibrariesDir)\include\JavaScriptCore"" + AdditionalIncludeDirectories=""$(ProjectDir)..";"$(ProjectDir)..\accessibility";"$(ProjectDir)..\accessibility\win";"$(ProjectDir)..\bridge";"$(ProjectDir)..\bridge\c";"$(ProjectDir)..\bridge\jsc";"$(ProjectDir)..\css";"$(ProjectDir)..\editing";"$(ProjectDir)..\rendering";"$(ProjectDir)..\rendering\style";"$(ProjectDir)..\bindings";"$(ProjectDir)..\bindings\js";"$(ProjectDir)..\dom";"$(ProjectDir)..\dom\default";"$(ProjectDir)..\history";"$(ProjectDir)..\html";"$(ProjectDir)..\html\canvas";"$(ProjectDir)..\inspector";"$(ProjectDir)..\loader";"$(ProjectDir)..\loader\appcache";"$(ProjectDir)..\loader\archive";"$(ProjectDir)..\loader\archive\cf";"$(ProjectDir)..\loader\icon";"$(ProjectDir)..\notifications";"$(ProjectDir)..\page";"$(ProjectDir)..\page\animation";"$(ProjectDir)..\page\win";"$(ProjectDir)..\platform";"$(ProjectDir)..\platform\animation";"$(ProjectDir)..\platform\mock";"$(ProjectDir)..\platform\sql";"$(ProjectDir)..\platform\win";"$(ProjectDir)..\platform\network";"$(ProjectDir)..\platform\network\win";"$(ProjectDir)..\platform\cf";"$(ProjectDir)..\platform\graphics";"$(ProjectDir)..\platform\graphics\filters";"$(ProjectDir)..\platform\graphics\opentype";"$(ProjectDir)..\platform\graphics\transforms";"$(ProjectDir)..\platform\text";"$(ProjectDir)..\platform\text\transcoder";"$(ProjectDir)..\platform\graphics\win";"$(ProjectDir)..\xml";"$(WebKitOutputDir)\obj\WebCore\DerivedSources";"$(ProjectDir)..\plugins";"$(ProjectDir)..\plugins\win";"$(ProjectDir)..\svg\animation";"$(ProjectDir)..\svg\graphics";"$(ProjectDir)..\svg\graphics\filters";"$(ProjectDir)..\svg";"$(ProjectDir)..\wml";"$(ProjectDir)..\storage";"$(ProjectDir)..\websockets";"$(ProjectDir)..\workers";"$(WebKitOutputDir)\include";"$(WebKitOutputDir)\include\private";"$(WebKitOutputDir)\include\JavaScriptCore";"$(WebKitOutputDir)\include\private\JavaScriptCore";"$(ProjectDir)..\ForwardingHeaders";"$(WebKitLibrariesDir)\include";"$(WebKitLibrariesDir)\include\private";"$(WebKitLibrariesDir)\include\private\JavaScriptCore";"$(WebKitLibrariesDir)\include\pthreads";"$(WebKitLibrariesDir)\include\sqlite";"$(WebKitLibrariesDir)\include\JavaScriptCore"" PreprocessorDefinitions="__WIN32__;DISABLE_3D_RENDERING;WEBCORE_CONTEXT_MENUS" UsePrecompiledHeader="2" PrecompiledHeaderThrough="WebCorePrefix.h" diff --git a/WebCore/WebCore.xcodeproj/project.pbxproj b/WebCore/WebCore.xcodeproj/project.pbxproj index 0215ac0..1cd25ec 100644 --- a/WebCore/WebCore.xcodeproj/project.pbxproj +++ b/WebCore/WebCore.xcodeproj/project.pbxproj @@ -7,6 +7,17 @@ objects = { /* Begin PBXAggregateTarget section */ + 5D87BB6411E3EBC100702B6F /* WebCoreExportFileGenerator Generator */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 5D87BB6C11E3EC0000702B6F /* Build configuration list for PBXAggregateTarget "WebCoreExportFileGenerator Generator" */; + buildPhases = ( + 5D87BB6311E3EBC100702B6F /* Generate Export File Generator */, + ); + dependencies = ( + ); + name = "WebCoreExportFileGenerator Generator"; + productName = "WebCoreExportFileGenerator Generator"; + }; DD041FBE09D9DDBE0010AF2A /* Derived Sources */ = { isa = PBXAggregateTarget; buildConfigurationList = DD041FC109D9DDDC0010AF2A /* Build configuration list for PBXAggregateTarget "Derived Sources" */; @@ -14,6 +25,7 @@ DD041FBD09D9DDBE0010AF2A /* Generate Derived Sources */, ); dependencies = ( + 5D87BB8F11E3EE2B00702B6F /* PBXTargetDependency */, ); name = "Derived Sources"; productName = "Derived Sources"; @@ -23,6 +35,7 @@ /* Begin PBXBuildFile section */ 0014628A103CD1DE000B20DB /* OriginAccessEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00146288103CD1DE000B20DB /* OriginAccessEntry.cpp */; }; 0014628B103CD1DE000B20DB /* OriginAccessEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 00146289103CD1DE000B20DB /* OriginAccessEntry.h */; }; + 003F1FEA11E6AB43008258D9 /* UserContentTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 003F1FE911E6AB43008258D9 /* UserContentTypes.h */; settings = {ATTRIBUTES = (Private, ); }; }; 06027CAD0B1CBFC000884B2D /* ContextMenuItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 06027CAC0B1CBFC000884B2D /* ContextMenuItem.h */; settings = {ATTRIBUTES = (Private, ); }; }; 06027CB30B1CC03D00884B2D /* ContextMenuItemMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 06027CB20B1CC03D00884B2D /* ContextMenuItemMac.mm */; }; 062287840B4DB322000C34DF /* FocusDirection.h in Headers */ = {isa = PBXBuildFile; fileRef = 062287830B4DB322000C34DF /* FocusDirection.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -192,8 +205,6 @@ 0B90561E0F257E930095FF6A /* ThreadableLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0B90561D0F257E930095FF6A /* ThreadableLoader.cpp */; }; 0B9056F80F2685F30095FF6A /* WorkerThreadableLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0B9056F60F2685F30095FF6A /* WorkerThreadableLoader.cpp */; }; 0B9056F90F2685F30095FF6A /* WorkerThreadableLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B9056F70F2685F30095FF6A /* WorkerThreadableLoader.h */; settings = {ATTRIBUTES = (); }; }; - 0BC2C7771134A8FC000B2F61 /* CanvasSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BC2C7751134A8FC000B2F61 /* CanvasSurface.cpp */; }; - 0BC2C7781134A8FC000B2F61 /* CanvasSurface.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BC2C7761134A8FC000B2F61 /* CanvasSurface.h */; }; 0BE030A20F3112FB003C1A46 /* RenderLineBoxList.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BE030A10F3112FB003C1A46 /* RenderLineBoxList.h */; settings = {ATTRIBUTES = (Private, ); }; }; 0C3F1F5A10C8871200D72CE1 /* WebGLUniformLocation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C3F1F5710C8871200D72CE1 /* WebGLUniformLocation.cpp */; }; 0C3F1F5B10C8871200D72CE1 /* WebGLUniformLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C3F1F5810C8871200D72CE1 /* WebGLUniformLocation.h */; }; @@ -1019,6 +1030,7 @@ 4F1534E011B533020021FD86 /* EditingBehaviorTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F1534DF11B533020021FD86 /* EditingBehaviorTypes.h */; settings = {ATTRIBUTES = (Private, ); }; }; 4F3289B511A42AAB005ABE7E /* InspectorValues.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4F3289B311A42AAB005ABE7E /* InspectorValues.cpp */; }; 4F3289B611A42AAB005ABE7E /* InspectorValues.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F3289B411A42AAB005ABE7E /* InspectorValues.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 4F4F5FFB11CBD2E100A186BF /* RemoteInspectorFrontend2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4F4F5FFA11CBD2D200A186BF /* RemoteInspectorFrontend2.cpp */; }; 4FD8D0F2119C718B002FA825 /* ScriptGCEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4FD8D0F0119C718B002FA825 /* ScriptGCEvent.cpp */; }; 4FD8D0F3119C718B002FA825 /* ScriptGCEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FD8D0F1119C718B002FA825 /* ScriptGCEvent.h */; }; 510184690B08602A004A825F /* CachedPage.h in Headers */ = {isa = PBXBuildFile; fileRef = 510184670B08602A004A825F /* CachedPage.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -1101,7 +1113,6 @@ 51721FD311D27EF200638B42 /* JSBeforeProcessEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 51721FD111D27EF200638B42 /* JSBeforeProcessEvent.h */; }; 5172204B11D2960500638B42 /* BeforeProcessEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5172204A11D2960500638B42 /* BeforeProcessEvent.cpp */; }; 51741D0F0B07259A00ED442C /* BackForwardList.h in Headers */ = {isa = PBXBuildFile; fileRef = 51741D0B0B07259A00ED442C /* BackForwardList.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 51741D100B07259A00ED442C /* BackForwardList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51741D0C0B07259A00ED442C /* BackForwardList.cpp */; }; 51741D110B07259A00ED442C /* HistoryItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 51741D0D0B07259A00ED442C /* HistoryItem.h */; settings = {ATTRIBUTES = (Private, ); }; }; 51741D120B07259A00ED442C /* HistoryItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51741D0E0B07259A00ED442C /* HistoryItem.cpp */; }; 5174E20A10A1F44F00F95E6F /* PopStateEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 5174E20810A1F44F00F95E6F /* PopStateEvent.h */; }; @@ -1180,8 +1191,8 @@ 59A85EA4119D68EC00DEF1EF /* DeviceOrientationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 59A85EA3119D68EC00DEF1EF /* DeviceOrientationEvent.h */; }; 59A86006119DAF7F00DEF1EF /* JSDeviceOrientationEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59A86005119DAF7F00DEF1EF /* JSDeviceOrientationEvent.cpp */; }; 59A86008119DAFA100DEF1EF /* JSDeviceOrientationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 59A86007119DAFA100DEF1EF /* JSDeviceOrientationEvent.h */; }; - 59A8F1D411A69508001AC34A /* DeviceOrientation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59A8F1D311A69508001AC34A /* DeviceOrientation.cpp */; }; - 59A8F1D611A69513001AC34A /* DeviceOrientation.h in Headers */ = {isa = PBXBuildFile; fileRef = 59A8F1D511A69513001AC34A /* DeviceOrientation.h */; }; + 59A8F1D411A69508001AC34A /* DeviceOrientationController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59A8F1D311A69508001AC34A /* DeviceOrientationController.cpp */; }; + 59A8F1D611A69513001AC34A /* DeviceOrientationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 59A8F1D511A69513001AC34A /* DeviceOrientationController.h */; }; 59A8F1D811A69520001AC34A /* DeviceOrientationClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 59A8F1D711A69520001AC34A /* DeviceOrientationClient.h */; }; 59A9E7B01104758800DFB4C1 /* JavaInstanceJSC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59A9E7AF1104758800DFB4C1 /* JavaInstanceJSC.cpp */; }; 59A9E7B21104759400DFB4C1 /* JavaInstanceJSC.h in Headers */ = {isa = PBXBuildFile; fileRef = 59A9E7B11104759400DFB4C1 /* JavaInstanceJSC.h */; }; @@ -1199,6 +1210,7 @@ 5D15E3AB0F9E6AC1009E0E3F /* XMLDocumentParserScope.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D15E3A90F9E6AC1009E0E3F /* XMLDocumentParserScope.cpp */; }; 5D15E3AC0F9E6AC1009E0E3F /* XMLDocumentParserScope.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D15E3AA0F9E6AC1009E0E3F /* XMLDocumentParserScope.h */; }; 5D874F130D161D3200796C3B /* NetscapePlugInStreamLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93E227DD0AF589AD00D48324 /* NetscapePlugInStreamLoader.cpp */; }; + 5D87BB8311E3ED8600702B6F /* ExportFileGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D87BB8211E3ED8600702B6F /* ExportFileGenerator.cpp */; }; 5D88EE9111407FD300BC3ABC /* DOMSVGFEMorphologyElement.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 84224189107E786F00766A87 /* DOMSVGFEMorphologyElement.h */; }; 5D88EE9211407FF400BC3ABC /* DOMSVGFEMorphologyElementInternal.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 8422418B107E786F00766A87 /* DOMSVGFEMorphologyElementInternal.h */; }; 5D925B670F64D4DD00B847F0 /* ScrollBehavior.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D925B650F64D4DD00B847F0 /* ScrollBehavior.cpp */; }; @@ -1379,10 +1391,6 @@ 7AED3E060FBB1EAA00D2B03C /* InspectorFrontend.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AED3E040FBB1EAA00D2B03C /* InspectorFrontend.h */; }; 7AFD4A8B1131C2760035B883 /* ScriptBreakpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AFD4A8A1131C2760035B883 /* ScriptBreakpoint.h */; settings = {ATTRIBUTES = (Private, ); }; }; 7AFD4FF4113277B60035B883 /* ScriptDebugListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AFD4FF3113277B60035B883 /* ScriptDebugListener.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 816C806811BE887E009A45E9 /* IDBKeyRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 816C806611BE887E009A45E9 /* IDBKeyRange.cpp */; }; - 816C806911BE887E009A45E9 /* IDBKeyRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 816C806711BE887E009A45E9 /* IDBKeyRange.h */; }; - 816C80AF11BE990D009A45E9 /* JSIDBKeyRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 816C80AE11BE990D009A45E9 /* JSIDBKeyRange.h */; }; - 816C80B111BE9934009A45E9 /* JSIDBKeyRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 816C80B011BE9934009A45E9 /* JSIDBKeyRange.cpp */; }; 82B658981189E39200E052A1 /* InspectorCSSStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 82B658971189E39200E052A1 /* InspectorCSSStore.h */; settings = {ATTRIBUTES = (Private, ); }; }; 82B6589A1189E47600E052A1 /* InspectorCSSStore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 82B658991189E47600E052A1 /* InspectorCSSStore.cpp */; }; 841FDC261178C9BE00F8AC9B /* RenderSVGResourceFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841FDC241178C9BE00F8AC9B /* RenderSVGResourceFilter.cpp */; }; @@ -2302,6 +2310,12 @@ 8A81BF8511DCFD9000DA2B98 /* ResourceLoadTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A81BF8411DCFD9000DA2B98 /* ResourceLoadTiming.h */; settings = {ATTRIBUTES = (Private, ); }; }; 8A844D0411D3C18E0014065C /* Performance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8A844D0111D3C18E0014065C /* Performance.cpp */; }; 8A844D0511D3C18E0014065C /* Performance.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A844D0211D3C18E0014065C /* Performance.h */; }; + 8A9A587011E84C36008ACFD1 /* JSNavigation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8A9A586E11E84C35008ACFD1 /* JSNavigation.cpp */; }; + 8A9A587111E84C36008ACFD1 /* JSNavigation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A9A586F11E84C36008ACFD1 /* JSNavigation.h */; }; + 8A9A587411E84C81008ACFD1 /* JSPerformance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8A9A587211E84C81008ACFD1 /* JSPerformance.cpp */; }; + 8A9A587511E84C81008ACFD1 /* JSPerformance.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A9A587311E84C81008ACFD1 /* JSPerformance.h */; }; + 8A9A588711E84F37008ACFD1 /* JSTiming.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8A9A587611E84C98008ACFD1 /* JSTiming.cpp */; }; + 8A9A588811E84F37008ACFD1 /* JSTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A9A587711E84C98008ACFD1 /* JSTiming.h */; }; 8AF4E55511DC5A36000ED3DE /* Navigation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8AF4E55211DC5A36000ED3DE /* Navigation.cpp */; }; 8AF4E55611DC5A36000ED3DE /* Navigation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AF4E55311DC5A36000ED3DE /* Navigation.h */; }; 8AF4E55B11DC5A63000ED3DE /* Timing.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8AF4E55811DC5A63000ED3DE /* Timing.cpp */; }; @@ -2595,6 +2609,8 @@ 97E8B35611A23CE200169409 /* HTMLTokenizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97E8B35411A23CE200169409 /* HTMLTokenizer.cpp */; }; 97E8B35711A23CE200169409 /* HTMLTokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 97E8B35511A23CE200169409 /* HTMLTokenizer.h */; }; 97E8B3C311A2890800169409 /* HTMLToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 97E8B3C211A2890800169409 /* HTMLToken.h */; }; + 97EF561011E40783007E026F /* HTMLConstructionSite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97EF560E11E40783007E026F /* HTMLConstructionSite.cpp */; }; + 97EF561111E40783007E026F /* HTMLConstructionSite.h in Headers */ = {isa = PBXBuildFile; fileRef = 97EF560F11E40783007E026F /* HTMLConstructionSite.h */; }; 97EF7DFE107E55B700D7C49C /* ScriptControllerBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97EF7DFD107E55B700D7C49C /* ScriptControllerBase.cpp */; }; 9F6FC1961122E82A00E80196 /* ScriptDebugServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9F6FC1941122E82A00E80196 /* ScriptDebugServer.cpp */; }; 9F6FC1971122E82A00E80196 /* ScriptDebugServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F6FC1951122E82A00E80196 /* ScriptDebugServer.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -3499,32 +3515,32 @@ A8F5C0B90F9285AC0098E06B /* RenderSVGModelObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8F5C0B70F9285AC0098E06B /* RenderSVGModelObject.cpp */; }; A8FA6E5D0E4CFDED00D5CF49 /* Pattern.h in Headers */ = {isa = PBXBuildFile; fileRef = A8FA6E5B0E4CFDED00D5CF49 /* Pattern.h */; }; A8FA6E5E0E4CFDED00D5CF49 /* Pattern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8FA6E5C0E4CFDED00D5CF49 /* Pattern.cpp */; }; - A9C6E4E30D745E05006442E9 /* MimeType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E4E10D745E05006442E9 /* MimeType.cpp */; }; - A9C6E4E40D745E05006442E9 /* MimeType.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4E20D745E05006442E9 /* MimeType.h */; }; - A9C6E4E70D745E18006442E9 /* MimeTypeArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E4E50D745E18006442E9 /* MimeTypeArray.cpp */; }; - A9C6E4E80D745E18006442E9 /* MimeTypeArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4E60D745E18006442E9 /* MimeTypeArray.h */; }; - A9C6E4EB0D745E2B006442E9 /* Plugin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E4E90D745E2B006442E9 /* Plugin.cpp */; }; - A9C6E4EC0D745E2B006442E9 /* Plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4EA0D745E2B006442E9 /* Plugin.h */; }; - A9C6E4EF0D745E38006442E9 /* PluginArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E4ED0D745E38006442E9 /* PluginArray.cpp */; }; - A9C6E4F00D745E38006442E9 /* PluginArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4EE0D745E38006442E9 /* PluginArray.h */; }; + A9C6E4E30D745E05006442E9 /* DOMMimeType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E4E10D745E05006442E9 /* DOMMimeType.cpp */; }; + A9C6E4E40D745E05006442E9 /* DOMMimeType.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4E20D745E05006442E9 /* DOMMimeType.h */; }; + A9C6E4E70D745E18006442E9 /* DOMMimeTypeArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E4E50D745E18006442E9 /* DOMMimeTypeArray.cpp */; }; + A9C6E4E80D745E18006442E9 /* DOMMimeTypeArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4E60D745E18006442E9 /* DOMMimeTypeArray.h */; }; + A9C6E4EB0D745E2B006442E9 /* DOMPlugin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E4E90D745E2B006442E9 /* DOMPlugin.cpp */; }; + A9C6E4EC0D745E2B006442E9 /* DOMPlugin.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4EA0D745E2B006442E9 /* DOMPlugin.h */; }; + A9C6E4EF0D745E38006442E9 /* DOMPluginArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E4ED0D745E38006442E9 /* DOMPluginArray.cpp */; }; + A9C6E4F00D745E38006442E9 /* DOMPluginArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4EE0D745E38006442E9 /* DOMPluginArray.h */; }; A9C6E4F30D745E48006442E9 /* PluginData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E4F10D745E48006442E9 /* PluginData.cpp */; }; A9C6E4F40D745E48006442E9 /* PluginData.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E4F20D745E48006442E9 /* PluginData.h */; settings = {ATTRIBUTES = (Private, ); }; }; A9C6E5A50D746458006442E9 /* Navigator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E5A30D746458006442E9 /* Navigator.cpp */; }; A9C6E5A60D746458006442E9 /* Navigator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C6E5A40D746458006442E9 /* Navigator.h */; }; - A9C6E6470D7465CA006442E9 /* JSMimeTypeArrayCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E6460D7465CA006442E9 /* JSMimeTypeArrayCustom.cpp */; }; + A9C6E6470D7465CA006442E9 /* JSDOMMimeTypeArrayCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E6460D7465CA006442E9 /* JSDOMMimeTypeArrayCustom.cpp */; }; A9C6E6490D7465D8006442E9 /* JSNavigatorCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E6480D7465D8006442E9 /* JSNavigatorCustom.cpp */; }; - A9C6E64C0D7465E7006442E9 /* JSPluginArrayCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E64A0D7465E7006442E9 /* JSPluginArrayCustom.cpp */; }; - A9C6E64D0D7465E7006442E9 /* JSPluginCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E64B0D7465E7006442E9 /* JSPluginCustom.cpp */; }; + A9C6E64C0D7465E7006442E9 /* JSDOMPluginArrayCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E64A0D7465E7006442E9 /* JSDOMPluginArrayCustom.cpp */; }; + A9C6E64D0D7465E7006442E9 /* JSDOMPluginCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E64B0D7465E7006442E9 /* JSDOMPluginCustom.cpp */; }; A9D247F70D757E3400FDF959 /* JSNavigator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D247F50D757E3300FDF959 /* JSNavigator.cpp */; }; A9D247F80D757E3400FDF959 /* JSNavigator.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D247F60D757E3300FDF959 /* JSNavigator.h */; }; - A9D247FE0D757E6900FDF959 /* JSPlugin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D247FA0D757E6900FDF959 /* JSPlugin.cpp */; }; - A9D247FF0D757E6900FDF959 /* JSPlugin.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D247FB0D757E6900FDF959 /* JSPlugin.h */; }; - A9D248000D757E6900FDF959 /* JSPluginArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D247FC0D757E6900FDF959 /* JSPluginArray.cpp */; }; - A9D248010D757E6900FDF959 /* JSPluginArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D247FD0D757E6900FDF959 /* JSPluginArray.h */; }; - A9D248060D757E7D00FDF959 /* JSMimeType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D248020D757E7D00FDF959 /* JSMimeType.cpp */; }; - A9D248070D757E7D00FDF959 /* JSMimeType.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D248030D757E7D00FDF959 /* JSMimeType.h */; }; - A9D248080D757E7D00FDF959 /* JSMimeTypeArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D248040D757E7D00FDF959 /* JSMimeTypeArray.cpp */; }; - A9D248090D757E7D00FDF959 /* JSMimeTypeArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D248050D757E7D00FDF959 /* JSMimeTypeArray.h */; }; + A9D247FE0D757E6900FDF959 /* JSDOMPlugin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D247FA0D757E6900FDF959 /* JSDOMPlugin.cpp */; }; + A9D247FF0D757E6900FDF959 /* JSDOMPlugin.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D247FB0D757E6900FDF959 /* JSDOMPlugin.h */; }; + A9D248000D757E6900FDF959 /* JSDOMPluginArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D247FC0D757E6900FDF959 /* JSDOMPluginArray.cpp */; }; + A9D248010D757E6900FDF959 /* JSDOMPluginArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D247FD0D757E6900FDF959 /* JSDOMPluginArray.h */; }; + A9D248060D757E7D00FDF959 /* JSDOMMimeType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D248020D757E7D00FDF959 /* JSDOMMimeType.cpp */; }; + A9D248070D757E7D00FDF959 /* JSDOMMimeType.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D248030D757E7D00FDF959 /* JSDOMMimeType.h */; }; + A9D248080D757E7D00FDF959 /* JSDOMMimeTypeArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9D248040D757E7D00FDF959 /* JSDOMMimeTypeArray.cpp */; }; + A9D248090D757E7D00FDF959 /* JSDOMMimeTypeArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D248050D757E7D00FDF959 /* JSDOMMimeTypeArray.h */; }; AA0972CC0B6947A800A705E9 /* SVGInlineTextBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0972CA0B6947A800A705E9 /* SVGInlineTextBox.cpp */; }; AA0972CD0B6947A800A705E9 /* SVGInlineTextBox.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0972CB0B6947A800A705E9 /* SVGInlineTextBox.h */; }; AA21ECCA0ABF0FBA002B834C /* CSSCursorImageValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0978ED0ABAA6E100874480 /* CSSCursorImageValue.cpp */; }; @@ -4301,18 +4317,12 @@ B5C1123B102B6C4600096578 /* SQLTransactionCoordinator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B5C11239102B6C4600096578 /* SQLTransactionCoordinator.cpp */; }; B5C1123C102B6C4600096578 /* SQLTransactionCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = B5C1123A102B6C4600096578 /* SQLTransactionCoordinator.h */; }; B5D3601A112F8B560048DEA8 /* DatabaseCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = B5D36019112F8B560048DEA8 /* DatabaseCallback.h */; }; - B627FB2D11AD743500E97B72 /* IDBDatabaseImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C50AD2A911AC1631008CF2FB /* IDBDatabaseImpl.cpp */; }; - B6693EEC11AD63E6003F2770 /* IDBObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = B6693EE811AD63E6003F2770 /* IDBObjectStore.h */; }; - B6693EED11AD63E6003F2770 /* IDBObjectStoreRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B6693EE911AD63E6003F2770 /* IDBObjectStoreRequest.cpp */; }; - B6693EEE11AD63E6003F2770 /* IDBObjectStoreRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = B6693EEA11AD63E6003F2770 /* IDBObjectStoreRequest.h */; }; - B6693EF211AD6486003F2770 /* JSIDBObjectStoreRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B6693EF011AD6486003F2770 /* JSIDBObjectStoreRequest.cpp */; }; - B6693EF311AD6486003F2770 /* JSIDBObjectStoreRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = B6693EF111AD6486003F2770 /* JSIDBObjectStoreRequest.h */; }; - B6B0540911B68F10002564C5 /* IDBObjectStoreImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B6B0540711B68F10002564C5 /* IDBObjectStoreImpl.cpp */; }; - B6B0540A11B68F10002564C5 /* IDBObjectStoreImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = B6B0540811B68F10002564C5 /* IDBObjectStoreImpl.h */; }; B71FE6DF11091CB300DAEF77 /* PrintContext.h in Headers */ = {isa = PBXBuildFile; fileRef = B776D43A1104525D00BEB0EC /* PrintContext.h */; settings = {ATTRIBUTES = (Private, ); }; }; B734B181119B9911006587BD /* FontTranscoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B734B180119B9911006587BD /* FontTranscoder.cpp */; }; B734B183119B991D006587BD /* FontTranscoder.h in Headers */ = {isa = PBXBuildFile; fileRef = B734B182119B991D006587BD /* FontTranscoder.h */; }; B776D43D1104527500BEB0EC /* PrintContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B776D43C1104527500BEB0EC /* PrintContext.cpp */; }; + B885E8D411E06DD2009FFBF4 /* InspectorApplicationCacheAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B885E8D211E06DD2009FFBF4 /* InspectorApplicationCacheAgent.cpp */; }; + B885E8D511E06DD2009FFBF4 /* InspectorApplicationCacheAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = B885E8D311E06DD2009FFBF4 /* InspectorApplicationCacheAgent.h */; settings = {ATTRIBUTES = (); }; }; BC00F0040E0A185500FD04E3 /* DOMFile.h in Headers */ = {isa = PBXBuildFile; fileRef = BC00EFFE0E0A185500FD04E3 /* DOMFile.h */; }; BC00F0050E0A185500FD04E3 /* DOMFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC00EFFF0E0A185500FD04E3 /* DOMFile.mm */; }; BC00F0060E0A185500FD04E3 /* DOMFileInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = BC00F0000E0A185500FD04E3 /* DOMFileInternal.h */; }; @@ -4661,6 +4671,11 @@ BCA846D60DC67A350026C309 /* RenderReplica.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCA846D40DC67A350026C309 /* RenderReplica.cpp */; }; BCA846D70DC67A350026C309 /* RenderReplica.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA846D50DC67A350026C309 /* RenderReplica.h */; }; BCA85A100C3AEAF4006F8308 /* DOMSVGNumberInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA85A0F0C3AEAF4006F8308 /* DOMSVGNumberInternal.h */; }; + BCA8C81E11E3D36900812FB7 /* BackForwardController.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA8C81C11E3D36900812FB7 /* BackForwardController.h */; settings = {ATTRIBUTES = (Private, ); }; }; + BCA8C81F11E3D36900812FB7 /* BackForwardController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCA8C81D11E3D36900812FB7 /* BackForwardController.cpp */; }; + BCA8C83111E3D53200812FB7 /* BackForwardControllerClient.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA8C83011E3D53200812FB7 /* BackForwardControllerClient.h */; settings = {ATTRIBUTES = (Private, ); }; }; + BCA8CA5F11E4E6D100812FB7 /* BackForwardListImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCA8CA5D11E4E6D100812FB7 /* BackForwardListImpl.cpp */; }; + BCA8CA6011E4E6D100812FB7 /* BackForwardListImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = BCA8CA5E11E4E6D100812FB7 /* BackForwardListImpl.h */; settings = {ATTRIBUTES = (Private, ); }; }; BCAA90C30A7EBA60008B1229 /* Scrollbar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCAA90C20A7EBA60008B1229 /* Scrollbar.cpp */; }; BCACF3BC1072921A00C0C8A3 /* UserContentURLPattern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCACF3BA1072921A00C0C8A3 /* UserContentURLPattern.cpp */; }; BCACF3BD1072921A00C0C8A3 /* UserContentURLPattern.h in Headers */ = {isa = PBXBuildFile; fileRef = BCACF3BB1072921A00C0C8A3 /* UserContentURLPattern.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -4862,63 +4877,85 @@ C5137CF311A58378004ADB99 /* JSDOMStringList.h in Headers */ = {isa = PBXBuildFile; fileRef = C5137CF111A58378004ADB99 /* JSDOMStringList.h */; }; C5160EEA1004543A00A7CEE2 /* StorageAreaImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5160EE81004543A00A7CEE2 /* StorageAreaImpl.cpp */; }; C5160EEB1004543A00A7CEE2 /* StorageAreaImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = C5160EE91004543A00A7CEE2 /* StorageAreaImpl.h */; }; - C5198F4C1192ECFD002B74A6 /* IDBCallbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = C5198F381192ECFD002B74A6 /* IDBCallbacks.h */; }; - C5198F4E1192ECFD002B74A6 /* IDBDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = C5198F3A1192ECFD002B74A6 /* IDBDatabase.h */; }; - C5198F4F1192ECFD002B74A6 /* IDBDatabaseError.h in Headers */ = {isa = PBXBuildFile; fileRef = C5198F3B1192ECFD002B74A6 /* IDBDatabaseError.h */; }; - C5198F511192ECFD002B74A6 /* IDBDatabaseException.h in Headers */ = {isa = PBXBuildFile; fileRef = C5198F3D1192ECFD002B74A6 /* IDBDatabaseException.h */; }; - C5198F531192ECFD002B74A6 /* IDBDatabaseRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5198F3F1192ECFD002B74A6 /* IDBDatabaseRequest.cpp */; }; - C5198F541192ECFD002B74A6 /* IDBDatabaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C5198F401192ECFD002B74A6 /* IDBDatabaseRequest.h */; }; - C5198F561192ECFD002B74A6 /* IDBRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5198F421192ECFD002B74A6 /* IDBRequest.cpp */; }; - C5198F571192ECFD002B74A6 /* IDBRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C5198F431192ECFD002B74A6 /* IDBRequest.h */; }; - C5198F591192ECFD002B74A6 /* IndexedDatabase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5198F451192ECFD002B74A6 /* IndexedDatabase.cpp */; }; - C5198F5A1192ECFD002B74A6 /* IndexedDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = C5198F461192ECFD002B74A6 /* IndexedDatabase.h */; }; - C5198F5B1192ECFD002B74A6 /* IndexedDatabaseImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5198F471192ECFD002B74A6 /* IndexedDatabaseImpl.cpp */; }; - C5198F5C1192ECFD002B74A6 /* IndexedDatabaseImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = C5198F481192ECFD002B74A6 /* IndexedDatabaseImpl.h */; }; - C5198F5D1192ECFD002B74A6 /* IndexedDatabaseRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5198F491192ECFD002B74A6 /* IndexedDatabaseRequest.cpp */; }; - C5198F5E1192ECFD002B74A6 /* IndexedDatabaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C5198F4A1192ECFD002B74A6 /* IndexedDatabaseRequest.h */; }; - C51DA9A511AEF2C1009799C5 /* IDBIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = C51DA99F11AEF2C1009799C5 /* IDBIndex.h */; }; - C51DA9A611AEF2C1009799C5 /* IDBIndexImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C51DA9A011AEF2C1009799C5 /* IDBIndexImpl.cpp */; }; - C51DA9A711AEF2C1009799C5 /* IDBIndexImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = C51DA9A111AEF2C1009799C5 /* IDBIndexImpl.h */; }; - C51DA9A811AEF2C1009799C5 /* IDBIndexRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C51DA9A211AEF2C1009799C5 /* IDBIndexRequest.cpp */; }; - C51DA9A911AEF2C1009799C5 /* IDBIndexRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C51DA9A311AEF2C1009799C5 /* IDBIndexRequest.h */; }; C544274B11A57E7A0063A749 /* DOMStringList.h in Headers */ = {isa = PBXBuildFile; fileRef = C544274911A57E7A0063A749 /* DOMStringList.h */; }; C55610F111A704EB00B82D27 /* DOMStringList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C55610F011A704EB00B82D27 /* DOMStringList.cpp */; }; C55E38BF10040D5D00A56BDB /* StorageNamespaceImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = C55E38BB10040D5D00A56BDB /* StorageNamespaceImpl.h */; }; C55E38C010040D5D00A56BDB /* StorageNamespaceImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C55E38BC10040D5D00A56BDB /* StorageNamespaceImpl.cpp */; }; - C56C914E119D849800DE4CD9 /* JSIDBAnyCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C56C914D119D849800DE4CD9 /* JSIDBAnyCustom.cpp */; }; - C56C9152119D84CB00DE4CD9 /* IDBAny.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C56C914F119D84CB00DE4CD9 /* IDBAny.cpp */; }; - C56C9153119D84CB00DE4CD9 /* IDBAny.h in Headers */ = {isa = PBXBuildFile; fileRef = C56C9150119D84CB00DE4CD9 /* IDBAny.h */; }; - C56C915F119D84E600DE4CD9 /* IDBErrorEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C56C9159119D84E600DE4CD9 /* IDBErrorEvent.cpp */; }; - C56C9160119D84E600DE4CD9 /* IDBErrorEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C56C915A119D84E600DE4CD9 /* IDBErrorEvent.h */; }; - C56C9162119D84E600DE4CD9 /* IDBEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C56C915C119D84E600DE4CD9 /* IDBEvent.cpp */; }; - C56C9163119D84E600DE4CD9 /* IDBEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C56C915D119D84E600DE4CD9 /* IDBEvent.h */; }; - C56C9168119D84FF00DE4CD9 /* IDBSuccessEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C56C9165119D84FF00DE4CD9 /* IDBSuccessEvent.cpp */; }; - C56C9169119D84FF00DE4CD9 /* IDBSuccessEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C56C9166119D84FF00DE4CD9 /* IDBSuccessEvent.h */; }; - C56C919A119D915300DE4CD9 /* JSIDBAny.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C56C9198119D915300DE4CD9 /* JSIDBAny.cpp */; }; - C56C919B119D915300DE4CD9 /* JSIDBAny.h in Headers */ = {isa = PBXBuildFile; fileRef = C56C9199119D915300DE4CD9 /* JSIDBAny.h */; }; - C56C91A0119D918100DE4CD9 /* JSIDBErrorEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C56C919C119D918100DE4CD9 /* JSIDBErrorEvent.cpp */; }; - C56C91A1119D918100DE4CD9 /* JSIDBErrorEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C56C919D119D918100DE4CD9 /* JSIDBErrorEvent.h */; }; - C56C91A2119D918100DE4CD9 /* JSIDBEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C56C919E119D918100DE4CD9 /* JSIDBEvent.cpp */; }; - C56C91A3119D918100DE4CD9 /* JSIDBEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C56C919F119D918100DE4CD9 /* JSIDBEvent.h */; }; - C56C91A6119D918700DE4CD9 /* JSIDBSuccessEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C56C91A4119D918700DE4CD9 /* JSIDBSuccessEvent.cpp */; }; - C56C91A7119D918700DE4CD9 /* JSIDBSuccessEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C56C91A5119D918700DE4CD9 /* JSIDBSuccessEvent.h */; }; - C5BBC9D011AEF838007C2BFE /* JSIDBIndexRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5BBC9CE11AEF838007C2BFE /* JSIDBIndexRequest.cpp */; }; - C5BBC9D111AEF838007C2BFE /* JSIDBIndexRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C5BBC9CF11AEF838007C2BFE /* JSIDBIndexRequest.h */; }; + C585A65E11D4FAB2004C3E4B /* JSIDBAnyCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A65C11D4FAB2004C3E4B /* JSIDBAnyCustom.cpp */; }; + C585A65F11D4FAB2004C3E4B /* JSIDBKeyCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A65D11D4FAB2004C3E4B /* JSIDBKeyCustom.cpp */; }; + C585A66211D4FAC5004C3E4B /* IDBBindingUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A66011D4FAC5004C3E4B /* IDBBindingUtilities.cpp */; }; + C585A66311D4FAC5004C3E4B /* IDBBindingUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A66111D4FAC5004C3E4B /* IDBBindingUtilities.h */; }; + C585A67C11D4FB08004C3E4B /* JSIDBAny.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A66411D4FB07004C3E4B /* JSIDBAny.cpp */; }; + C585A67D11D4FB08004C3E4B /* JSIDBAny.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A66511D4FB07004C3E4B /* JSIDBAny.h */; }; + C585A67E11D4FB08004C3E4B /* JSIDBDatabaseError.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A66611D4FB07004C3E4B /* JSIDBDatabaseError.cpp */; }; + C585A67F11D4FB08004C3E4B /* JSIDBDatabaseError.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A66711D4FB07004C3E4B /* JSIDBDatabaseError.h */; }; + C585A68011D4FB08004C3E4B /* JSIDBDatabaseException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A66811D4FB07004C3E4B /* JSIDBDatabaseException.cpp */; }; + C585A68111D4FB08004C3E4B /* JSIDBDatabaseException.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A66911D4FB07004C3E4B /* JSIDBDatabaseException.h */; }; + C585A68211D4FB08004C3E4B /* JSIDBDatabaseRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A66A11D4FB07004C3E4B /* JSIDBDatabaseRequest.cpp */; }; + C585A68311D4FB08004C3E4B /* JSIDBDatabaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A66B11D4FB07004C3E4B /* JSIDBDatabaseRequest.h */; }; + C585A68411D4FB08004C3E4B /* JSIDBErrorEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A66C11D4FB07004C3E4B /* JSIDBErrorEvent.cpp */; }; + C585A68511D4FB08004C3E4B /* JSIDBErrorEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A66D11D4FB07004C3E4B /* JSIDBErrorEvent.h */; }; + C585A68611D4FB08004C3E4B /* JSIDBEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A66E11D4FB07004C3E4B /* JSIDBEvent.cpp */; }; + C585A68711D4FB08004C3E4B /* JSIDBEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A66F11D4FB07004C3E4B /* JSIDBEvent.h */; }; + C585A68811D4FB08004C3E4B /* JSIDBIndexRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A67011D4FB07004C3E4B /* JSIDBIndexRequest.cpp */; }; + C585A68911D4FB08004C3E4B /* JSIDBIndexRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A67111D4FB07004C3E4B /* JSIDBIndexRequest.h */; }; + C585A68A11D4FB08004C3E4B /* JSIDBKey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A67211D4FB07004C3E4B /* JSIDBKey.cpp */; }; + C585A68B11D4FB08004C3E4B /* JSIDBKey.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A67311D4FB07004C3E4B /* JSIDBKey.h */; }; + C585A68C11D4FB08004C3E4B /* JSIDBKeyRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A67411D4FB07004C3E4B /* JSIDBKeyRange.cpp */; }; + C585A68D11D4FB08004C3E4B /* JSIDBKeyRange.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A67511D4FB07004C3E4B /* JSIDBKeyRange.h */; }; + C585A68E11D4FB08004C3E4B /* JSIDBObjectStoreRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A67611D4FB07004C3E4B /* JSIDBObjectStoreRequest.cpp */; }; + C585A68F11D4FB08004C3E4B /* JSIDBObjectStoreRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A67711D4FB07004C3E4B /* JSIDBObjectStoreRequest.h */; }; + C585A69011D4FB08004C3E4B /* JSIDBRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A67811D4FB07004C3E4B /* JSIDBRequest.cpp */; }; + C585A69111D4FB08004C3E4B /* JSIDBRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A67911D4FB07004C3E4B /* JSIDBRequest.h */; }; + C585A69211D4FB08004C3E4B /* JSIDBSuccessEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A67A11D4FB07004C3E4B /* JSIDBSuccessEvent.cpp */; }; + C585A69311D4FB08004C3E4B /* JSIDBSuccessEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A67B11D4FB07004C3E4B /* JSIDBSuccessEvent.h */; }; + C585A69611D4FB13004C3E4B /* JSIndexedDatabaseRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A69411D4FB13004C3E4B /* JSIndexedDatabaseRequest.cpp */; }; + C585A69711D4FB13004C3E4B /* JSIndexedDatabaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A69511D4FB13004C3E4B /* JSIndexedDatabaseRequest.h */; }; + C585A6CC11D4FB3D004C3E4B /* IDBAny.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A69811D4FB3D004C3E4B /* IDBAny.cpp */; }; + C585A6CD11D4FB3D004C3E4B /* IDBAny.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A69911D4FB3D004C3E4B /* IDBAny.h */; }; + C585A6CF11D4FB3D004C3E4B /* IDBCallbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A69B11D4FB3D004C3E4B /* IDBCallbacks.h */; }; + C585A6D011D4FB3D004C3E4B /* IDBDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A69C11D4FB3D004C3E4B /* IDBDatabase.h */; }; + C585A6D111D4FB3D004C3E4B /* IDBDatabaseError.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A69D11D4FB3D004C3E4B /* IDBDatabaseError.h */; }; + C585A6D311D4FB3D004C3E4B /* IDBDatabaseException.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A69F11D4FB3D004C3E4B /* IDBDatabaseException.h */; }; + C585A6D511D4FB3D004C3E4B /* IDBDatabaseImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6A111D4FB3D004C3E4B /* IDBDatabaseImpl.cpp */; }; + C585A6D611D4FB3D004C3E4B /* IDBDatabaseImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6A211D4FB3D004C3E4B /* IDBDatabaseImpl.h */; }; + C585A6D711D4FB3D004C3E4B /* IDBDatabaseRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6A311D4FB3D004C3E4B /* IDBDatabaseRequest.cpp */; }; + C585A6D811D4FB3D004C3E4B /* IDBDatabaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6A411D4FB3D004C3E4B /* IDBDatabaseRequest.h */; }; + C585A6DA11D4FB3D004C3E4B /* IDBErrorEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6A611D4FB3D004C3E4B /* IDBErrorEvent.cpp */; }; + C585A6DB11D4FB3D004C3E4B /* IDBErrorEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6A711D4FB3D004C3E4B /* IDBErrorEvent.h */; }; + C585A6DD11D4FB3D004C3E4B /* IDBEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6A911D4FB3D004C3E4B /* IDBEvent.cpp */; }; + C585A6DE11D4FB3D004C3E4B /* IDBEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6AA11D4FB3D004C3E4B /* IDBEvent.h */; }; + C585A6E011D4FB3D004C3E4B /* IDBIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6AC11D4FB3D004C3E4B /* IDBIndex.h */; }; + C585A6E111D4FB3D004C3E4B /* IDBIndexImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6AD11D4FB3D004C3E4B /* IDBIndexImpl.cpp */; }; + C585A6E211D4FB3D004C3E4B /* IDBIndexImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6AE11D4FB3D004C3E4B /* IDBIndexImpl.h */; }; + C585A6E311D4FB3D004C3E4B /* IDBIndexRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6AF11D4FB3D004C3E4B /* IDBIndexRequest.cpp */; }; + C585A6E411D4FB3D004C3E4B /* IDBIndexRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6B011D4FB3D004C3E4B /* IDBIndexRequest.h */; }; + C585A6E611D4FB3D004C3E4B /* IDBKey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6B211D4FB3D004C3E4B /* IDBKey.cpp */; }; + C585A6E711D4FB3D004C3E4B /* IDBKey.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6B311D4FB3D004C3E4B /* IDBKey.h */; }; + C585A6E911D4FB3D004C3E4B /* IDBKeyRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6B511D4FB3D004C3E4B /* IDBKeyRange.cpp */; }; + C585A6EA11D4FB3D004C3E4B /* IDBKeyRange.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6B611D4FB3D004C3E4B /* IDBKeyRange.h */; }; + C585A6EC11D4FB3D004C3E4B /* IDBKeyTree.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6B811D4FB3D004C3E4B /* IDBKeyTree.h */; }; + C585A6ED11D4FB3D004C3E4B /* IDBObjectStore.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6B911D4FB3D004C3E4B /* IDBObjectStore.h */; }; + C585A6EE11D4FB3D004C3E4B /* IDBObjectStoreImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6BA11D4FB3D004C3E4B /* IDBObjectStoreImpl.cpp */; }; + C585A6EF11D4FB3D004C3E4B /* IDBObjectStoreImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6BB11D4FB3D004C3E4B /* IDBObjectStoreImpl.h */; }; + C585A6F011D4FB3D004C3E4B /* IDBObjectStoreRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6BC11D4FB3D004C3E4B /* IDBObjectStoreRequest.cpp */; }; + C585A6F111D4FB3D004C3E4B /* IDBObjectStoreRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6BD11D4FB3D004C3E4B /* IDBObjectStoreRequest.h */; }; + C585A6F311D4FB3D004C3E4B /* IDBRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6BF11D4FB3D004C3E4B /* IDBRequest.cpp */; }; + C585A6F411D4FB3D004C3E4B /* IDBRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6C011D4FB3D004C3E4B /* IDBRequest.h */; }; + C585A6F611D4FB3D004C3E4B /* IDBSuccessEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6C211D4FB3D004C3E4B /* IDBSuccessEvent.cpp */; }; + C585A6F711D4FB3D004C3E4B /* IDBSuccessEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6C311D4FB3D004C3E4B /* IDBSuccessEvent.h */; }; + C585A6F911D4FB3D004C3E4B /* IndexedDatabase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6C511D4FB3D004C3E4B /* IndexedDatabase.cpp */; }; + C585A6FA11D4FB3D004C3E4B /* IndexedDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6C611D4FB3D004C3E4B /* IndexedDatabase.h */; }; + C585A6FB11D4FB3D004C3E4B /* IndexedDatabaseImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6C711D4FB3D004C3E4B /* IndexedDatabaseImpl.cpp */; }; + C585A6FC11D4FB3D004C3E4B /* IndexedDatabaseImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6C811D4FB3D004C3E4B /* IndexedDatabaseImpl.h */; }; + C585A6FD11D4FB3D004C3E4B /* IndexedDatabaseRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C585A6C911D4FB3D004C3E4B /* IndexedDatabaseRequest.cpp */; }; + C585A6FE11D4FB3D004C3E4B /* IndexedDatabaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C585A6CA11D4FB3D004C3E4B /* IndexedDatabaseRequest.h */; }; C5D4AA7A116BAFB60069CA93 /* GlyphMetricsMap.h in Headers */ = {isa = PBXBuildFile; fileRef = C5D4AA78116BAFB60069CA93 /* GlyphMetricsMap.h */; settings = {ATTRIBUTES = (Private, ); }; }; C5E9B67710697E1300C7BB1A /* StorageEventDispatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5E9B67610697E1300C7BB1A /* StorageEventDispatcher.cpp */; }; C5EBDD84105EDDEC0056816F /* StorageEventDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = C5EBDD81105EDDEC0056816F /* StorageEventDispatcher.h */; }; - C5F4F406119306AC00FDFADD /* JSIDBDatabaseError.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5F4F3FE119306AC00FDFADD /* JSIDBDatabaseError.cpp */; }; - C5F4F407119306AC00FDFADD /* JSIDBDatabaseError.h in Headers */ = {isa = PBXBuildFile; fileRef = C5F4F3FF119306AC00FDFADD /* JSIDBDatabaseError.h */; }; - C5F4F408119306AC00FDFADD /* JSIDBDatabaseException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5F4F400119306AC00FDFADD /* JSIDBDatabaseException.cpp */; }; - C5F4F409119306AC00FDFADD /* JSIDBDatabaseException.h in Headers */ = {isa = PBXBuildFile; fileRef = C5F4F401119306AC00FDFADD /* JSIDBDatabaseException.h */; }; - C5F4F40A119306AC00FDFADD /* JSIDBDatabaseRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5F4F402119306AC00FDFADD /* JSIDBDatabaseRequest.cpp */; }; - C5F4F40B119306AC00FDFADD /* JSIDBDatabaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C5F4F403119306AC00FDFADD /* JSIDBDatabaseRequest.h */; }; - C5F4F40C119306AC00FDFADD /* JSIDBRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5F4F404119306AC00FDFADD /* JSIDBRequest.cpp */; }; - C5F4F40D119306AC00FDFADD /* JSIDBRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C5F4F405119306AC00FDFADD /* JSIDBRequest.h */; }; - C5F4F410119306C000FDFADD /* JSIndexedDatabaseRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5F4F40E119306C000FDFADD /* JSIndexedDatabaseRequest.cpp */; }; - C5F4F411119306C000FDFADD /* JSIndexedDatabaseRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = C5F4F40F119306C000FDFADD /* JSIndexedDatabaseRequest.h */; }; C6D74AD509AA282E000B0A52 /* ModifySelectionListLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D74AD309AA282E000B0A52 /* ModifySelectionListLevel.h */; }; C6D74AE409AA290A000B0A52 /* ModifySelectionListLevel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6D74AE309AA290A000B0A52 /* ModifySelectionListLevel.cpp */; }; + CE02F0C411E83ADD00C6684A /* ScriptControllerBase.h in Headers */ = {isa = PBXBuildFile; fileRef = CE02F0C311E83ADD00C6684A /* ScriptControllerBase.h */; settings = {ATTRIBUTES = (Private, ); }; }; CE172E011136E8CE0062A533 /* ZoomMode.h in Headers */ = {isa = PBXBuildFile; fileRef = CE172E001136E8CE0062A533 /* ZoomMode.h */; settings = {ATTRIBUTES = (Private, ); }; }; CE4C00E410F6F7BA00CA38F5 /* HTMLNoScriptElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CE4C00E310F6F7BA00CA38F5 /* HTMLNoScriptElement.cpp */; }; CE4C00E610F6F7C100CA38F5 /* HTMLNoScriptElement.h in Headers */ = {isa = PBXBuildFile; fileRef = CE4C00E510F6F7C100CA38F5 /* HTMLNoScriptElement.h */; }; @@ -5179,6 +5216,20 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 5D87BB6A11E3EBD200702B6F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5D87BB6411E3EBC100702B6F; + remoteInfo = "WebCoreExportFileGenerator Generator"; + }; + 5D87BB8E11E3EE2B00702B6F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5D87BB4E11E3EAEB00702B6F; + remoteInfo = WebCoreExportFileGenerator; + }; DD041FF009D9E3250010AF2A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; @@ -5613,6 +5664,7 @@ /* Begin PBXFileReference section */ 00146288103CD1DE000B20DB /* OriginAccessEntry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OriginAccessEntry.cpp; sourceTree = "<group>"; }; 00146289103CD1DE000B20DB /* OriginAccessEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OriginAccessEntry.h; sourceTree = "<group>"; }; + 003F1FE911E6AB43008258D9 /* UserContentTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserContentTypes.h; sourceTree = "<group>"; }; 06027CAC0B1CBFC000884B2D /* ContextMenuItem.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ContextMenuItem.h; sourceTree = "<group>"; }; 06027CB20B1CC03D00884B2D /* ContextMenuItemMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = ContextMenuItemMac.mm; sourceTree = "<group>"; }; 062287830B4DB322000C34DF /* FocusDirection.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FocusDirection.h; sourceTree = "<group>"; }; @@ -5772,8 +5824,6 @@ 0B90561D0F257E930095FF6A /* ThreadableLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ThreadableLoader.cpp; sourceTree = "<group>"; }; 0B9056F60F2685F30095FF6A /* WorkerThreadableLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WorkerThreadableLoader.cpp; sourceTree = "<group>"; }; 0B9056F70F2685F30095FF6A /* WorkerThreadableLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WorkerThreadableLoader.h; sourceTree = "<group>"; }; - 0BC2C7751134A8FC000B2F61 /* CanvasSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CanvasSurface.cpp; sourceTree = "<group>"; }; - 0BC2C7761134A8FC000B2F61 /* CanvasSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CanvasSurface.h; sourceTree = "<group>"; }; 0BE030A10F3112FB003C1A46 /* RenderLineBoxList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderLineBoxList.h; sourceTree = "<group>"; }; 0C3F1F5710C8871200D72CE1 /* WebGLUniformLocation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebGLUniformLocation.cpp; path = canvas/WebGLUniformLocation.cpp; sourceTree = "<group>"; }; 0C3F1F5810C8871200D72CE1 /* WebGLUniformLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebGLUniformLocation.h; path = canvas/WebGLUniformLocation.h; sourceTree = "<group>"; }; @@ -5784,7 +5834,6 @@ 0F15DA890F3AAEE70000CE47 /* AnimationControllerPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationControllerPrivate.h; path = animation/AnimationControllerPrivate.h; sourceTree = "<group>"; }; 0F500AAE0F54DB1B00EEF928 /* TransformState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransformState.h; sourceTree = "<group>"; }; 0F500AB00F54DB3100EEF928 /* TransformState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransformState.cpp; sourceTree = "<group>"; }; - 0F5263E511DC136E0006D33C /* WebCore.AcceleratedCompositing.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.AcceleratedCompositing.exp; sourceTree = "<group>"; }; 0F56028D0E4B76580065B038 /* RenderMarquee.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMarquee.h; sourceTree = "<group>"; }; 0F56028E0E4B76580065B038 /* RenderMarquee.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMarquee.cpp; sourceTree = "<group>"; }; 0F580B030F12A2540051D689 /* GraphicsLayerCA.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GraphicsLayerCA.mm; sourceTree = "<group>"; }; @@ -5800,7 +5849,6 @@ 0F5B7A5310F65D7A00376302 /* RenderEmbeddedObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderEmbeddedObject.h; sourceTree = "<group>"; }; 0F6ECD430F252F3700BDE271 /* CSSPropertyLonghand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSPropertyLonghand.h; sourceTree = "<group>"; }; 0F6ECD440F252F3700BDE271 /* CSSPropertyLonghand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSPropertyLonghand.cpp; sourceTree = "<group>"; }; - 0F9C6F4B1073EF0400DED9BF /* WebCore.3DRendering.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.3DRendering.exp; sourceTree = "<group>"; }; 0FC705200EB1815600B90AD8 /* AtomicStringHash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AtomicStringHash.h; sourceTree = "<group>"; }; 0FCF33230F2B9715004B6795 /* ColorCG.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ColorCG.cpp; sourceTree = "<group>"; }; 0FCF33280F2B9A25004B6795 /* WebTiledLayer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebTiledLayer.mm; sourceTree = "<group>"; }; @@ -6229,7 +6277,6 @@ 24F54EAB101FE914000AE741 /* ApplicationCacheHost.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApplicationCacheHost.h; sourceTree = "<group>"; }; 2542F4D81166C25A00E89A86 /* UserGestureIndicator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserGestureIndicator.cpp; sourceTree = "<group>"; }; 2542F4D91166C25A00E89A86 /* UserGestureIndicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserGestureIndicator.h; sourceTree = "<group>"; }; - 271245D311890AB70083E852 /* WebCore.ProtectionSpaceAuthCallback.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.ProtectionSpaceAuthCallback.exp; sourceTree = "<group>"; }; 29A812080FBB9C1D00510293 /* AccessibilityRenderObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityRenderObject.cpp; sourceTree = "<group>"; }; 29A812090FBB9C1D00510293 /* AccessibilityTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityTable.cpp; sourceTree = "<group>"; }; 29A8120A0FBB9C1D00510293 /* AccessibilityARIAGrid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityARIAGrid.cpp; sourceTree = "<group>"; }; @@ -6495,16 +6542,6 @@ 448A29BE0A46D9CB0030759F /* JSHTMLOptionsCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLOptionsCollection.cpp; sourceTree = "<group>"; }; 448AD27A0A4813790023D179 /* JSHTMLOptionsCollectionCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLOptionsCollectionCustom.cpp; sourceTree = "<group>"; }; 449098B10F8F82520076A327 /* FeatureDefines.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = FeatureDefines.xcconfig; sourceTree = "<group>"; }; - 449195940FBE17D700D9F824 /* WebCore.VideoProxy.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.VideoProxy.exp; sourceTree = "<group>"; }; - 449195950FBE17D700D9F824 /* WebCore.Tiger.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.Tiger.exp; sourceTree = "<group>"; }; - 449195960FBE17D700D9F824 /* WebCore.SVG.ForeignObject.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.SVG.ForeignObject.exp; sourceTree = "<group>"; }; - 449195970FBE17D700D9F824 /* WebCore.SVG.Filters.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.SVG.Filters.exp; sourceTree = "<group>"; }; - 449195980FBE17D700D9F824 /* WebCore.SVG.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.SVG.exp; sourceTree = "<group>"; }; - 449195990FBE17D700D9F824 /* WebCore.SVG.Animation.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.SVG.Animation.exp; sourceTree = "<group>"; }; - 4491959A0FBE17D700D9F824 /* WebCore.NPAPI.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.NPAPI.exp; sourceTree = "<group>"; }; - 4491959B0FBE17D700D9F824 /* WebCore.PluginHostProcess.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.PluginHostProcess.exp; sourceTree = "<group>"; }; - 4491959C0FBE17D700D9F824 /* WebCore.JNI.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.JNI.exp; sourceTree = "<group>"; }; - 4491959D0FBE17D700D9F824 /* WebCore.DashboardSupport.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.DashboardSupport.exp; sourceTree = "<group>"; }; 449B19F30FA72ECE0015CA4A /* HTMLParserQuirks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLParserQuirks.h; sourceTree = "<group>"; }; 4614A1FD0B23A8D600446E1C /* copyCursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = copyCursor.png; sourceTree = "<group>"; }; 464EA2710B8A350B00A8E6E3 /* crossHairCursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = crossHairCursor.png; sourceTree = "<group>"; }; @@ -6714,6 +6751,8 @@ 4F1534DF11B533020021FD86 /* EditingBehaviorTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditingBehaviorTypes.h; sourceTree = "<group>"; }; 4F3289B311A42AAB005ABE7E /* InspectorValues.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorValues.cpp; sourceTree = "<group>"; }; 4F3289B411A42AAB005ABE7E /* InspectorValues.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorValues.h; sourceTree = "<group>"; }; + 4F4F5FFA11CBD2D200A186BF /* RemoteInspectorFrontend2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteInspectorFrontend2.cpp; sourceTree = "<group>"; }; + 4F4F5FFC11CBD30100A186BF /* RemoteInspectorFrontend2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoteInspectorFrontend2.h; sourceTree = "<group>"; }; 4FD8D0F0119C718B002FA825 /* ScriptGCEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptGCEvent.cpp; sourceTree = "<group>"; }; 4FD8D0F1119C718B002FA825 /* ScriptGCEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptGCEvent.h; sourceTree = "<group>"; }; 510184670B08602A004A825F /* CachedPage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedPage.h; sourceTree = "<group>"; }; @@ -6799,7 +6838,6 @@ 51721FD111D27EF200638B42 /* JSBeforeProcessEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSBeforeProcessEvent.h; sourceTree = "<group>"; }; 5172204A11D2960500638B42 /* BeforeProcessEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BeforeProcessEvent.cpp; sourceTree = "<group>"; }; 51741D0B0B07259A00ED442C /* BackForwardList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BackForwardList.h; sourceTree = "<group>"; }; - 51741D0C0B07259A00ED442C /* BackForwardList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BackForwardList.cpp; sourceTree = "<group>"; }; 51741D0D0B07259A00ED442C /* HistoryItem.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = HistoryItem.h; sourceTree = "<group>"; }; 51741D0E0B07259A00ED442C /* HistoryItem.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = HistoryItem.cpp; sourceTree = "<group>"; }; 5174E20810A1F44F00F95E6F /* PopStateEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PopStateEvent.h; sourceTree = "<group>"; }; @@ -6892,8 +6930,8 @@ 59A85EAA119D7B6E00DEF1EF /* DeviceOrientationEvent.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = DeviceOrientationEvent.idl; sourceTree = "<group>"; }; 59A86005119DAF7F00DEF1EF /* JSDeviceOrientationEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDeviceOrientationEvent.cpp; sourceTree = "<group>"; }; 59A86007119DAFA100DEF1EF /* JSDeviceOrientationEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDeviceOrientationEvent.h; sourceTree = "<group>"; }; - 59A8F1D311A69508001AC34A /* DeviceOrientation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeviceOrientation.cpp; sourceTree = "<group>"; }; - 59A8F1D511A69513001AC34A /* DeviceOrientation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeviceOrientation.h; sourceTree = "<group>"; }; + 59A8F1D311A69508001AC34A /* DeviceOrientationController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeviceOrientationController.cpp; sourceTree = "<group>"; }; + 59A8F1D511A69513001AC34A /* DeviceOrientationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeviceOrientationController.h; sourceTree = "<group>"; }; 59A8F1D711A69520001AC34A /* DeviceOrientationClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeviceOrientationClient.h; sourceTree = "<group>"; }; 59A9E7AF1104758800DFB4C1 /* JavaInstanceJSC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JavaInstanceJSC.cpp; path = jsc/JavaInstanceJSC.cpp; sourceTree = "<group>"; }; 59A9E7B11104759400DFB4C1 /* JavaInstanceJSC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JavaInstanceJSC.h; path = jsc/JavaInstanceJSC.h; sourceTree = "<group>"; }; @@ -6910,6 +6948,9 @@ 59EE12311106082900885116 /* JNIUtility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JNIUtility.h; sourceTree = "<group>"; }; 5D15E3A90F9E6AC1009E0E3F /* XMLDocumentParserScope.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XMLDocumentParserScope.cpp; sourceTree = "<group>"; }; 5D15E3AA0F9E6AC1009E0E3F /* XMLDocumentParserScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XMLDocumentParserScope.h; sourceTree = "<group>"; }; + 5D4B8C5211E52C8B00BBB62F /* WebCore.exp.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebCore.exp.in; sourceTree = "<group>"; }; + 5D87BB4F11E3EAEB00702B6F /* WebCoreExportFileGenerator */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = WebCoreExportFileGenerator; sourceTree = BUILT_PRODUCTS_DIR; }; + 5D87BB8211E3ED8600702B6F /* ExportFileGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ExportFileGenerator.cpp; path = DerivedSources/WebCore/ExportFileGenerator.cpp; sourceTree = BUILT_PRODUCTS_DIR; }; 5D925B650F64D4DD00B847F0 /* ScrollBehavior.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollBehavior.cpp; sourceTree = "<group>"; }; 5D925B660F64D4DD00B847F0 /* ScrollBehavior.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollBehavior.h; sourceTree = "<group>"; }; 5DA5E0FA102B953800088CF9 /* JSWebSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWebSocket.cpp; sourceTree = "<group>"; }; @@ -6927,7 +6968,6 @@ 63189AE20E83A33300012E41 /* NodeRareData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NodeRareData.h; sourceTree = "<group>"; }; 637B7ADE0E8767B800E32194 /* ElementRareData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ElementRareData.h; sourceTree = "<group>"; }; 63D7B32C0E78CD3F00F7617C /* NodeRenderStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NodeRenderStyle.h; sourceTree = "<group>"; }; - 63F371CD100E790000BBA87A /* WebCore.Video.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.Video.exp; sourceTree = "<group>"; }; 650F53DB09D15DDA00C9B0C8 /* CSSGrammar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CSSGrammar.h; sourceTree = "<group>"; }; 650FBF270D9AF046008FC292 /* SVGHKernElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGHKernElement.cpp; sourceTree = "<group>"; }; 650FBF280D9AF047008FC292 /* SVGHKernElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGHKernElement.h; sourceTree = "<group>"; }; @@ -7103,11 +7143,6 @@ 7AED3E040FBB1EAA00D2B03C /* InspectorFrontend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorFrontend.h; sourceTree = "<group>"; }; 7AFD4A8A1131C2760035B883 /* ScriptBreakpoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptBreakpoint.h; sourceTree = "<group>"; }; 7AFD4FF3113277B60035B883 /* ScriptDebugListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptDebugListener.h; sourceTree = "<group>"; }; - 816C806611BE887E009A45E9 /* IDBKeyRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBKeyRange.cpp; sourceTree = "<group>"; }; - 816C806711BE887E009A45E9 /* IDBKeyRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBKeyRange.h; sourceTree = "<group>"; }; - 816C80AE11BE990D009A45E9 /* JSIDBKeyRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBKeyRange.h; sourceTree = "<group>"; }; - 816C80B011BE9934009A45E9 /* JSIDBKeyRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBKeyRange.cpp; sourceTree = "<group>"; }; - 81CC114011BEAA9D00D0D856 /* IDBKeyRange.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBKeyRange.idl; sourceTree = "<group>"; }; 82B658971189E39200E052A1 /* InspectorCSSStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorCSSStore.h; sourceTree = "<group>"; }; 82B658991189E47600E052A1 /* InspectorCSSStore.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorCSSStore.cpp; sourceTree = "<group>"; }; 841FDC241178C9BE00F8AC9B /* RenderSVGResourceFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceFilter.cpp; sourceTree = "<group>"; }; @@ -7979,6 +8014,12 @@ 8A844D0111D3C18E0014065C /* Performance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Performance.cpp; sourceTree = "<group>"; }; 8A844D0211D3C18E0014065C /* Performance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Performance.h; sourceTree = "<group>"; }; 8A844D0311D3C18E0014065C /* Performance.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Performance.idl; sourceTree = "<group>"; }; + 8A9A586E11E84C35008ACFD1 /* JSNavigation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSNavigation.cpp; sourceTree = "<group>"; }; + 8A9A586F11E84C36008ACFD1 /* JSNavigation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSNavigation.h; sourceTree = "<group>"; }; + 8A9A587211E84C81008ACFD1 /* JSPerformance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPerformance.cpp; sourceTree = "<group>"; }; + 8A9A587311E84C81008ACFD1 /* JSPerformance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSPerformance.h; sourceTree = "<group>"; }; + 8A9A587611E84C98008ACFD1 /* JSTiming.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSTiming.cpp; sourceTree = "<group>"; }; + 8A9A587711E84C98008ACFD1 /* JSTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSTiming.h; sourceTree = "<group>"; }; 8AF4E55211DC5A36000ED3DE /* Navigation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Navigation.cpp; sourceTree = "<group>"; }; 8AF4E55311DC5A36000ED3DE /* Navigation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Navigation.h; sourceTree = "<group>"; }; 8AF4E55411DC5A36000ED3DE /* Navigation.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Navigation.idl; sourceTree = "<group>"; }; @@ -8253,6 +8294,8 @@ 97E8B35411A23CE200169409 /* HTMLTokenizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLTokenizer.cpp; sourceTree = "<group>"; }; 97E8B35511A23CE200169409 /* HTMLTokenizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLTokenizer.h; sourceTree = "<group>"; }; 97E8B3C211A2890800169409 /* HTMLToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLToken.h; sourceTree = "<group>"; }; + 97EF560E11E40783007E026F /* HTMLConstructionSite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLConstructionSite.cpp; sourceTree = "<group>"; }; + 97EF560F11E40783007E026F /* HTMLConstructionSite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLConstructionSite.h; sourceTree = "<group>"; }; 97EF7DFD107E55B700D7C49C /* ScriptControllerBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptControllerBase.cpp; sourceTree = "<group>"; }; 9F6FC1941122E82A00E80196 /* ScriptDebugServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptDebugServer.cpp; sourceTree = "<group>"; }; 9F6FC1951122E82A00E80196 /* ScriptDebugServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptDebugServer.h; sourceTree = "<group>"; }; @@ -8903,37 +8946,37 @@ A8F5C0B70F9285AC0098E06B /* RenderSVGModelObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGModelObject.cpp; sourceTree = "<group>"; }; A8FA6E5B0E4CFDED00D5CF49 /* Pattern.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Pattern.h; sourceTree = "<group>"; }; A8FA6E5C0E4CFDED00D5CF49 /* Pattern.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Pattern.cpp; sourceTree = "<group>"; }; - A9C6E4E10D745E05006442E9 /* MimeType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = MimeType.cpp; sourceTree = "<group>"; }; - A9C6E4E20D745E05006442E9 /* MimeType.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MimeType.h; sourceTree = "<group>"; }; - A9C6E4E50D745E18006442E9 /* MimeTypeArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = MimeTypeArray.cpp; sourceTree = "<group>"; }; - A9C6E4E60D745E18006442E9 /* MimeTypeArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MimeTypeArray.h; sourceTree = "<group>"; }; - A9C6E4E90D745E2B006442E9 /* Plugin.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Plugin.cpp; sourceTree = "<group>"; }; - A9C6E4EA0D745E2B006442E9 /* Plugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Plugin.h; sourceTree = "<group>"; }; - A9C6E4ED0D745E38006442E9 /* PluginArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PluginArray.cpp; sourceTree = "<group>"; }; - A9C6E4EE0D745E38006442E9 /* PluginArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PluginArray.h; sourceTree = "<group>"; }; + A9C6E4E10D745E05006442E9 /* DOMMimeType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DOMMimeType.cpp; sourceTree = "<group>"; }; + A9C6E4E20D745E05006442E9 /* DOMMimeType.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMMimeType.h; sourceTree = "<group>"; }; + A9C6E4E50D745E18006442E9 /* DOMMimeTypeArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DOMMimeTypeArray.cpp; sourceTree = "<group>"; }; + A9C6E4E60D745E18006442E9 /* DOMMimeTypeArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMMimeTypeArray.h; sourceTree = "<group>"; }; + A9C6E4E90D745E2B006442E9 /* DOMPlugin.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DOMPlugin.cpp; sourceTree = "<group>"; }; + A9C6E4EA0D745E2B006442E9 /* DOMPlugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMPlugin.h; sourceTree = "<group>"; }; + A9C6E4ED0D745E38006442E9 /* DOMPluginArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DOMPluginArray.cpp; sourceTree = "<group>"; }; + A9C6E4EE0D745E38006442E9 /* DOMPluginArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMPluginArray.h; sourceTree = "<group>"; }; A9C6E4F10D745E48006442E9 /* PluginData.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PluginData.cpp; sourceTree = "<group>"; }; A9C6E4F20D745E48006442E9 /* PluginData.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PluginData.h; sourceTree = "<group>"; }; A9C6E5A30D746458006442E9 /* Navigator.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Navigator.cpp; sourceTree = "<group>"; }; A9C6E5A40D746458006442E9 /* Navigator.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Navigator.h; sourceTree = "<group>"; }; - A9C6E6460D7465CA006442E9 /* JSMimeTypeArrayCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSMimeTypeArrayCustom.cpp; sourceTree = "<group>"; }; + A9C6E6460D7465CA006442E9 /* JSDOMMimeTypeArrayCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMMimeTypeArrayCustom.cpp; sourceTree = "<group>"; }; A9C6E6480D7465D8006442E9 /* JSNavigatorCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSNavigatorCustom.cpp; sourceTree = "<group>"; }; - A9C6E64A0D7465E7006442E9 /* JSPluginArrayCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSPluginArrayCustom.cpp; sourceTree = "<group>"; }; - A9C6E64B0D7465E7006442E9 /* JSPluginCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSPluginCustom.cpp; sourceTree = "<group>"; }; + A9C6E64A0D7465E7006442E9 /* JSDOMPluginArrayCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMPluginArrayCustom.cpp; sourceTree = "<group>"; }; + A9C6E64B0D7465E7006442E9 /* JSDOMPluginCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMPluginCustom.cpp; sourceTree = "<group>"; }; A9C6E65D0D746694006442E9 /* Navigator.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = Navigator.idl; sourceTree = "<group>"; }; - A9C6E65E0D7466F2006442E9 /* MimeType.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = MimeType.idl; sourceTree = "<group>"; }; - A9C6E65F0D746700006442E9 /* MimeTypeArray.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = MimeTypeArray.idl; sourceTree = "<group>"; }; - A9C6E6600D74670C006442E9 /* Plugin.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = Plugin.idl; sourceTree = "<group>"; }; - A9C6E6610D74671E006442E9 /* PluginArray.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = PluginArray.idl; sourceTree = "<group>"; }; + A9C6E65E0D7466F2006442E9 /* DOMMimeType.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = DOMMimeType.idl; sourceTree = "<group>"; }; + A9C6E65F0D746700006442E9 /* DOMMimeTypeArray.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = DOMMimeTypeArray.idl; sourceTree = "<group>"; }; + A9C6E6600D74670C006442E9 /* DOMPlugin.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = DOMPlugin.idl; sourceTree = "<group>"; }; + A9C6E6610D74671E006442E9 /* DOMPluginArray.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = DOMPluginArray.idl; sourceTree = "<group>"; }; A9D247F50D757E3300FDF959 /* JSNavigator.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSNavigator.cpp; sourceTree = "<group>"; }; A9D247F60D757E3300FDF959 /* JSNavigator.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSNavigator.h; sourceTree = "<group>"; }; - A9D247FA0D757E6900FDF959 /* JSPlugin.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSPlugin.cpp; sourceTree = "<group>"; }; - A9D247FB0D757E6900FDF959 /* JSPlugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSPlugin.h; sourceTree = "<group>"; }; - A9D247FC0D757E6900FDF959 /* JSPluginArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSPluginArray.cpp; sourceTree = "<group>"; }; - A9D247FD0D757E6900FDF959 /* JSPluginArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSPluginArray.h; sourceTree = "<group>"; }; - A9D248020D757E7D00FDF959 /* JSMimeType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSMimeType.cpp; sourceTree = "<group>"; }; - A9D248030D757E7D00FDF959 /* JSMimeType.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSMimeType.h; sourceTree = "<group>"; }; - A9D248040D757E7D00FDF959 /* JSMimeTypeArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSMimeTypeArray.cpp; sourceTree = "<group>"; }; - A9D248050D757E7D00FDF959 /* JSMimeTypeArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSMimeTypeArray.h; sourceTree = "<group>"; }; + A9D247FA0D757E6900FDF959 /* JSDOMPlugin.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMPlugin.cpp; sourceTree = "<group>"; }; + A9D247FB0D757E6900FDF959 /* JSDOMPlugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSDOMPlugin.h; sourceTree = "<group>"; }; + A9D247FC0D757E6900FDF959 /* JSDOMPluginArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMPluginArray.cpp; sourceTree = "<group>"; }; + A9D247FD0D757E6900FDF959 /* JSDOMPluginArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSDOMPluginArray.h; sourceTree = "<group>"; }; + A9D248020D757E7D00FDF959 /* JSDOMMimeType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMMimeType.cpp; sourceTree = "<group>"; }; + A9D248030D757E7D00FDF959 /* JSDOMMimeType.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSDOMMimeType.h; sourceTree = "<group>"; }; + A9D248040D757E7D00FDF959 /* JSDOMMimeTypeArray.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMMimeTypeArray.cpp; sourceTree = "<group>"; }; + A9D248050D757E7D00FDF959 /* JSDOMMimeTypeArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSDOMMimeTypeArray.h; sourceTree = "<group>"; }; AA0972CA0B6947A800A705E9 /* SVGInlineTextBox.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGInlineTextBox.cpp; sourceTree = "<group>"; }; AA0972CB0B6947A800A705E9 /* SVGInlineTextBox.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGInlineTextBox.h; sourceTree = "<group>"; }; AA0978ED0ABAA6E100874480 /* CSSCursorImageValue.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CSSCursorImageValue.cpp; sourceTree = "<group>"; }; @@ -9867,18 +9910,12 @@ B5C11239102B6C4600096578 /* SQLTransactionCoordinator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SQLTransactionCoordinator.cpp; sourceTree = "<group>"; }; B5C1123A102B6C4600096578 /* SQLTransactionCoordinator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQLTransactionCoordinator.h; sourceTree = "<group>"; }; B5D36019112F8B560048DEA8 /* DatabaseCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DatabaseCallback.h; sourceTree = "<group>"; }; - B6693EE811AD63E6003F2770 /* IDBObjectStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBObjectStore.h; sourceTree = "<group>"; }; - B6693EE911AD63E6003F2770 /* IDBObjectStoreRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBObjectStoreRequest.cpp; sourceTree = "<group>"; }; - B6693EEA11AD63E6003F2770 /* IDBObjectStoreRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBObjectStoreRequest.h; sourceTree = "<group>"; }; - B6693EEF11AD63F6003F2770 /* IDBObjectStoreRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBObjectStoreRequest.idl; sourceTree = "<group>"; }; - B6693EF011AD6486003F2770 /* JSIDBObjectStoreRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBObjectStoreRequest.cpp; sourceTree = "<group>"; }; - B6693EF111AD6486003F2770 /* JSIDBObjectStoreRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBObjectStoreRequest.h; sourceTree = "<group>"; }; - B6B0540711B68F10002564C5 /* IDBObjectStoreImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBObjectStoreImpl.cpp; sourceTree = "<group>"; }; - B6B0540811B68F10002564C5 /* IDBObjectStoreImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBObjectStoreImpl.h; sourceTree = "<group>"; }; B734B180119B9911006587BD /* FontTranscoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FontTranscoder.cpp; path = transcoder/FontTranscoder.cpp; sourceTree = "<group>"; }; B734B182119B991D006587BD /* FontTranscoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FontTranscoder.h; path = transcoder/FontTranscoder.h; sourceTree = "<group>"; }; B776D43A1104525D00BEB0EC /* PrintContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrintContext.h; sourceTree = "<group>"; }; B776D43C1104527500BEB0EC /* PrintContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PrintContext.cpp; sourceTree = "<group>"; }; + B885E8D211E06DD2009FFBF4 /* InspectorApplicationCacheAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorApplicationCacheAgent.cpp; sourceTree = "<group>"; }; + B885E8D311E06DD2009FFBF4 /* InspectorApplicationCacheAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorApplicationCacheAgent.h; sourceTree = "<group>"; }; BC00EFFE0E0A185500FD04E3 /* DOMFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMFile.h; sourceTree = "<group>"; }; BC00EFFF0E0A185500FD04E3 /* DOMFile.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMFile.mm; sourceTree = "<group>"; }; BC00F0000E0A185500FD04E3 /* DOMFileInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMFileInternal.h; sourceTree = "<group>"; }; @@ -10033,7 +10070,6 @@ BC56CB1E10D5AC8000A77C64 /* GeolocationControllerClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeolocationControllerClient.h; sourceTree = "<group>"; }; BC56CB1F10D5AC8000A77C64 /* GeolocationError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeolocationError.h; sourceTree = "<group>"; }; BC56CB2010D5AC8000A77C64 /* GeolocationPosition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeolocationPosition.h; sourceTree = "<group>"; }; - BC56CCDF10D72BD800A77C64 /* WebCore.ClientBasedGeolocation.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.ClientBasedGeolocation.exp; sourceTree = "<group>"; }; BC5823F40C0A98DF0053F1B5 /* JSHTMLElementCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLElementCustom.cpp; sourceTree = "<group>"; }; BC5825F20C0B89380053F1B5 /* JSCSSStyleDeclarationCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCSSStyleDeclarationCustom.cpp; sourceTree = "<group>"; }; BC588AEF0BFA6CF900EE679E /* HTMLParserErrorCodes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = HTMLParserErrorCodes.h; sourceTree = "<group>"; }; @@ -10253,6 +10289,11 @@ BCA846D40DC67A350026C309 /* RenderReplica.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderReplica.cpp; sourceTree = "<group>"; }; BCA846D50DC67A350026C309 /* RenderReplica.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderReplica.h; sourceTree = "<group>"; }; BCA85A0F0C3AEAF4006F8308 /* DOMSVGNumberInternal.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMSVGNumberInternal.h; sourceTree = "<group>"; }; + BCA8C81C11E3D36900812FB7 /* BackForwardController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BackForwardController.h; sourceTree = "<group>"; }; + BCA8C81D11E3D36900812FB7 /* BackForwardController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BackForwardController.cpp; sourceTree = "<group>"; }; + BCA8C83011E3D53200812FB7 /* BackForwardControllerClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BackForwardControllerClient.h; sourceTree = "<group>"; }; + BCA8CA5D11E4E6D100812FB7 /* BackForwardListImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BackForwardListImpl.cpp; sourceTree = "<group>"; }; + BCA8CA5E11E4E6D100812FB7 /* BackForwardListImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BackForwardListImpl.h; sourceTree = "<group>"; }; BCAA90C20A7EBA60008B1229 /* Scrollbar.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Scrollbar.cpp; path = platform/Scrollbar.cpp; sourceTree = SOURCE_ROOT; }; BCACF3BA1072921A00C0C8A3 /* UserContentURLPattern.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserContentURLPattern.cpp; sourceTree = "<group>"; }; BCACF3BB1072921A00C0C8A3 /* UserContentURLPattern.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserContentURLPattern.h; sourceTree = "<group>"; }; @@ -10455,8 +10496,6 @@ C0DFC86F0DB6841A003EAE7C /* JSConsoleCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSConsoleCustom.cpp; sourceTree = "<group>"; }; C105DA610F3AA68F001DD44F /* TextEncodingDetectorICU.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextEncodingDetectorICU.cpp; sourceTree = "<group>"; }; C105DA630F3AA6B8001DD44F /* TextEncodingDetector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextEncodingDetector.h; sourceTree = "<group>"; }; - C50AD2A911AC1631008CF2FB /* IDBDatabaseImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBDatabaseImpl.cpp; sourceTree = "<group>"; }; - C50AD2AA11AC1631008CF2FB /* IDBDatabaseImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabaseImpl.h; sourceTree = "<group>"; }; C50D0E800FF4272900AC2644 /* StorageNamespace.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StorageNamespace.cpp; sourceTree = "<group>"; }; C50D0E810FF4272900AC2644 /* StorageNamespace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageNamespace.h; sourceTree = "<group>"; }; C5102D920FD9AA2D00FAFF04 /* StorageSyncManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageSyncManager.h; sourceTree = "<group>"; }; @@ -10467,74 +10506,99 @@ C5137CF111A58378004ADB99 /* JSDOMStringList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDOMStringList.h; sourceTree = "<group>"; }; C5160EE81004543A00A7CEE2 /* StorageAreaImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StorageAreaImpl.cpp; sourceTree = "<group>"; }; C5160EE91004543A00A7CEE2 /* StorageAreaImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageAreaImpl.h; sourceTree = "<group>"; }; - C5198F381192ECFD002B74A6 /* IDBCallbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBCallbacks.h; sourceTree = "<group>"; }; - C5198F3A1192ECFD002B74A6 /* IDBDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabase.h; sourceTree = "<group>"; }; - C5198F3B1192ECFD002B74A6 /* IDBDatabaseError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabaseError.h; sourceTree = "<group>"; }; - C5198F3C1192ECFD002B74A6 /* IDBDatabaseError.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBDatabaseError.idl; sourceTree = "<group>"; }; - C5198F3D1192ECFD002B74A6 /* IDBDatabaseException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabaseException.h; sourceTree = "<group>"; }; - C5198F3E1192ECFD002B74A6 /* IDBDatabaseException.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBDatabaseException.idl; sourceTree = "<group>"; }; - C5198F3F1192ECFD002B74A6 /* IDBDatabaseRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBDatabaseRequest.cpp; sourceTree = "<group>"; }; - C5198F401192ECFD002B74A6 /* IDBDatabaseRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabaseRequest.h; sourceTree = "<group>"; }; - C5198F411192ECFD002B74A6 /* IDBDatabaseRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBDatabaseRequest.idl; sourceTree = "<group>"; }; - C5198F421192ECFD002B74A6 /* IDBRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBRequest.cpp; sourceTree = "<group>"; }; - C5198F431192ECFD002B74A6 /* IDBRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBRequest.h; sourceTree = "<group>"; }; - C5198F441192ECFD002B74A6 /* IDBRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBRequest.idl; sourceTree = "<group>"; }; - C5198F451192ECFD002B74A6 /* IndexedDatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexedDatabase.cpp; sourceTree = "<group>"; }; - C5198F461192ECFD002B74A6 /* IndexedDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexedDatabase.h; sourceTree = "<group>"; }; - C5198F471192ECFD002B74A6 /* IndexedDatabaseImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexedDatabaseImpl.cpp; sourceTree = "<group>"; }; - C5198F481192ECFD002B74A6 /* IndexedDatabaseImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexedDatabaseImpl.h; sourceTree = "<group>"; }; - C5198F491192ECFD002B74A6 /* IndexedDatabaseRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexedDatabaseRequest.cpp; sourceTree = "<group>"; }; - C5198F4A1192ECFD002B74A6 /* IndexedDatabaseRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexedDatabaseRequest.h; sourceTree = "<group>"; }; - C5198F4B1192ECFD002B74A6 /* IndexedDatabaseRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IndexedDatabaseRequest.idl; sourceTree = "<group>"; }; - C51DA99F11AEF2C1009799C5 /* IDBIndex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBIndex.h; sourceTree = "<group>"; }; - C51DA9A011AEF2C1009799C5 /* IDBIndexImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBIndexImpl.cpp; sourceTree = "<group>"; }; - C51DA9A111AEF2C1009799C5 /* IDBIndexImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBIndexImpl.h; sourceTree = "<group>"; }; - C51DA9A211AEF2C1009799C5 /* IDBIndexRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBIndexRequest.cpp; sourceTree = "<group>"; }; - C51DA9A311AEF2C1009799C5 /* IDBIndexRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBIndexRequest.h; sourceTree = "<group>"; }; - C51DA9A411AEF2C1009799C5 /* IDBIndexRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBIndexRequest.idl; sourceTree = "<group>"; }; C544274911A57E7A0063A749 /* DOMStringList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMStringList.h; sourceTree = "<group>"; }; C544274A11A57E7A0063A749 /* DOMStringList.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = DOMStringList.idl; sourceTree = "<group>"; }; C55610F011A704EB00B82D27 /* DOMStringList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DOMStringList.cpp; sourceTree = "<group>"; }; C55E38BB10040D5D00A56BDB /* StorageNamespaceImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageNamespaceImpl.h; sourceTree = "<group>"; }; C55E38BC10040D5D00A56BDB /* StorageNamespaceImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StorageNamespaceImpl.cpp; sourceTree = "<group>"; }; - C56C914D119D849800DE4CD9 /* JSIDBAnyCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBAnyCustom.cpp; sourceTree = "<group>"; }; - C56C914F119D84CB00DE4CD9 /* IDBAny.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBAny.cpp; sourceTree = "<group>"; }; - C56C9150119D84CB00DE4CD9 /* IDBAny.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBAny.h; sourceTree = "<group>"; }; - C56C9151119D84CB00DE4CD9 /* IDBAny.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBAny.idl; sourceTree = "<group>"; }; - C56C9159119D84E600DE4CD9 /* IDBErrorEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBErrorEvent.cpp; sourceTree = "<group>"; }; - C56C915A119D84E600DE4CD9 /* IDBErrorEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBErrorEvent.h; sourceTree = "<group>"; }; - C56C915B119D84E600DE4CD9 /* IDBErrorEvent.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBErrorEvent.idl; sourceTree = "<group>"; }; - C56C915C119D84E600DE4CD9 /* IDBEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBEvent.cpp; sourceTree = "<group>"; }; - C56C915D119D84E600DE4CD9 /* IDBEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBEvent.h; sourceTree = "<group>"; }; - C56C915E119D84E600DE4CD9 /* IDBEvent.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBEvent.idl; sourceTree = "<group>"; }; - C56C9165119D84FF00DE4CD9 /* IDBSuccessEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBSuccessEvent.cpp; sourceTree = "<group>"; }; - C56C9166119D84FF00DE4CD9 /* IDBSuccessEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBSuccessEvent.h; sourceTree = "<group>"; }; - C56C9167119D84FF00DE4CD9 /* IDBSuccessEvent.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBSuccessEvent.idl; sourceTree = "<group>"; }; - C56C9198119D915300DE4CD9 /* JSIDBAny.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBAny.cpp; sourceTree = "<group>"; }; - C56C9199119D915300DE4CD9 /* JSIDBAny.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBAny.h; sourceTree = "<group>"; }; - C56C919C119D918100DE4CD9 /* JSIDBErrorEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBErrorEvent.cpp; sourceTree = "<group>"; }; - C56C919D119D918100DE4CD9 /* JSIDBErrorEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBErrorEvent.h; sourceTree = "<group>"; }; - C56C919E119D918100DE4CD9 /* JSIDBEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBEvent.cpp; sourceTree = "<group>"; }; - C56C919F119D918100DE4CD9 /* JSIDBEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBEvent.h; sourceTree = "<group>"; }; - C56C91A4119D918700DE4CD9 /* JSIDBSuccessEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBSuccessEvent.cpp; sourceTree = "<group>"; }; - C56C91A5119D918700DE4CD9 /* JSIDBSuccessEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBSuccessEvent.h; sourceTree = "<group>"; }; - C5BBC9CE11AEF838007C2BFE /* JSIDBIndexRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBIndexRequest.cpp; sourceTree = "<group>"; }; - C5BBC9CF11AEF838007C2BFE /* JSIDBIndexRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBIndexRequest.h; sourceTree = "<group>"; }; + C585A65C11D4FAB2004C3E4B /* JSIDBAnyCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBAnyCustom.cpp; sourceTree = "<group>"; }; + C585A65D11D4FAB2004C3E4B /* JSIDBKeyCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBKeyCustom.cpp; sourceTree = "<group>"; }; + C585A66011D4FAC5004C3E4B /* IDBBindingUtilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBBindingUtilities.cpp; sourceTree = "<group>"; }; + C585A66111D4FAC5004C3E4B /* IDBBindingUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBBindingUtilities.h; sourceTree = "<group>"; }; + C585A66411D4FB07004C3E4B /* JSIDBAny.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBAny.cpp; sourceTree = "<group>"; }; + C585A66511D4FB07004C3E4B /* JSIDBAny.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBAny.h; sourceTree = "<group>"; }; + C585A66611D4FB07004C3E4B /* JSIDBDatabaseError.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBDatabaseError.cpp; sourceTree = "<group>"; }; + C585A66711D4FB07004C3E4B /* JSIDBDatabaseError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBDatabaseError.h; sourceTree = "<group>"; }; + C585A66811D4FB07004C3E4B /* JSIDBDatabaseException.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBDatabaseException.cpp; sourceTree = "<group>"; }; + C585A66911D4FB07004C3E4B /* JSIDBDatabaseException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBDatabaseException.h; sourceTree = "<group>"; }; + C585A66A11D4FB07004C3E4B /* JSIDBDatabaseRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBDatabaseRequest.cpp; sourceTree = "<group>"; }; + C585A66B11D4FB07004C3E4B /* JSIDBDatabaseRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBDatabaseRequest.h; sourceTree = "<group>"; }; + C585A66C11D4FB07004C3E4B /* JSIDBErrorEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBErrorEvent.cpp; sourceTree = "<group>"; }; + C585A66D11D4FB07004C3E4B /* JSIDBErrorEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBErrorEvent.h; sourceTree = "<group>"; }; + C585A66E11D4FB07004C3E4B /* JSIDBEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBEvent.cpp; sourceTree = "<group>"; }; + C585A66F11D4FB07004C3E4B /* JSIDBEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBEvent.h; sourceTree = "<group>"; }; + C585A67011D4FB07004C3E4B /* JSIDBIndexRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBIndexRequest.cpp; sourceTree = "<group>"; }; + C585A67111D4FB07004C3E4B /* JSIDBIndexRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBIndexRequest.h; sourceTree = "<group>"; }; + C585A67211D4FB07004C3E4B /* JSIDBKey.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBKey.cpp; sourceTree = "<group>"; }; + C585A67311D4FB07004C3E4B /* JSIDBKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBKey.h; sourceTree = "<group>"; }; + C585A67411D4FB07004C3E4B /* JSIDBKeyRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBKeyRange.cpp; sourceTree = "<group>"; }; + C585A67511D4FB07004C3E4B /* JSIDBKeyRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBKeyRange.h; sourceTree = "<group>"; }; + C585A67611D4FB07004C3E4B /* JSIDBObjectStoreRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBObjectStoreRequest.cpp; sourceTree = "<group>"; }; + C585A67711D4FB07004C3E4B /* JSIDBObjectStoreRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBObjectStoreRequest.h; sourceTree = "<group>"; }; + C585A67811D4FB07004C3E4B /* JSIDBRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBRequest.cpp; sourceTree = "<group>"; }; + C585A67911D4FB07004C3E4B /* JSIDBRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBRequest.h; sourceTree = "<group>"; }; + C585A67A11D4FB07004C3E4B /* JSIDBSuccessEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBSuccessEvent.cpp; sourceTree = "<group>"; }; + C585A67B11D4FB07004C3E4B /* JSIDBSuccessEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBSuccessEvent.h; sourceTree = "<group>"; }; + C585A69411D4FB13004C3E4B /* JSIndexedDatabaseRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIndexedDatabaseRequest.cpp; sourceTree = "<group>"; }; + C585A69511D4FB13004C3E4B /* JSIndexedDatabaseRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIndexedDatabaseRequest.h; sourceTree = "<group>"; }; + C585A69811D4FB3D004C3E4B /* IDBAny.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBAny.cpp; sourceTree = "<group>"; }; + C585A69911D4FB3D004C3E4B /* IDBAny.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBAny.h; sourceTree = "<group>"; }; + C585A69A11D4FB3D004C3E4B /* IDBAny.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBAny.idl; sourceTree = "<group>"; }; + C585A69B11D4FB3D004C3E4B /* IDBCallbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBCallbacks.h; sourceTree = "<group>"; }; + C585A69C11D4FB3D004C3E4B /* IDBDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabase.h; sourceTree = "<group>"; }; + C585A69D11D4FB3D004C3E4B /* IDBDatabaseError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabaseError.h; sourceTree = "<group>"; }; + C585A69E11D4FB3D004C3E4B /* IDBDatabaseError.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBDatabaseError.idl; sourceTree = "<group>"; }; + C585A69F11D4FB3D004C3E4B /* IDBDatabaseException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabaseException.h; sourceTree = "<group>"; }; + C585A6A011D4FB3D004C3E4B /* IDBDatabaseException.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBDatabaseException.idl; sourceTree = "<group>"; }; + C585A6A111D4FB3D004C3E4B /* IDBDatabaseImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBDatabaseImpl.cpp; sourceTree = "<group>"; }; + C585A6A211D4FB3D004C3E4B /* IDBDatabaseImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabaseImpl.h; sourceTree = "<group>"; }; + C585A6A311D4FB3D004C3E4B /* IDBDatabaseRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBDatabaseRequest.cpp; sourceTree = "<group>"; }; + C585A6A411D4FB3D004C3E4B /* IDBDatabaseRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBDatabaseRequest.h; sourceTree = "<group>"; }; + C585A6A511D4FB3D004C3E4B /* IDBDatabaseRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBDatabaseRequest.idl; sourceTree = "<group>"; }; + C585A6A611D4FB3D004C3E4B /* IDBErrorEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBErrorEvent.cpp; sourceTree = "<group>"; }; + C585A6A711D4FB3D004C3E4B /* IDBErrorEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBErrorEvent.h; sourceTree = "<group>"; }; + C585A6A811D4FB3D004C3E4B /* IDBErrorEvent.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBErrorEvent.idl; sourceTree = "<group>"; }; + C585A6A911D4FB3D004C3E4B /* IDBEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBEvent.cpp; sourceTree = "<group>"; }; + C585A6AA11D4FB3D004C3E4B /* IDBEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBEvent.h; sourceTree = "<group>"; }; + C585A6AB11D4FB3D004C3E4B /* IDBEvent.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBEvent.idl; sourceTree = "<group>"; }; + C585A6AC11D4FB3D004C3E4B /* IDBIndex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBIndex.h; sourceTree = "<group>"; }; + C585A6AD11D4FB3D004C3E4B /* IDBIndexImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBIndexImpl.cpp; sourceTree = "<group>"; }; + C585A6AE11D4FB3D004C3E4B /* IDBIndexImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBIndexImpl.h; sourceTree = "<group>"; }; + C585A6AF11D4FB3D004C3E4B /* IDBIndexRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBIndexRequest.cpp; sourceTree = "<group>"; }; + C585A6B011D4FB3D004C3E4B /* IDBIndexRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBIndexRequest.h; sourceTree = "<group>"; }; + C585A6B111D4FB3D004C3E4B /* IDBIndexRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBIndexRequest.idl; sourceTree = "<group>"; }; + C585A6B211D4FB3D004C3E4B /* IDBKey.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBKey.cpp; sourceTree = "<group>"; }; + C585A6B311D4FB3D004C3E4B /* IDBKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBKey.h; sourceTree = "<group>"; }; + C585A6B411D4FB3D004C3E4B /* IDBKey.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBKey.idl; sourceTree = "<group>"; }; + C585A6B511D4FB3D004C3E4B /* IDBKeyRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBKeyRange.cpp; sourceTree = "<group>"; }; + C585A6B611D4FB3D004C3E4B /* IDBKeyRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBKeyRange.h; sourceTree = "<group>"; }; + C585A6B711D4FB3D004C3E4B /* IDBKeyRange.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBKeyRange.idl; sourceTree = "<group>"; }; + C585A6B811D4FB3D004C3E4B /* IDBKeyTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBKeyTree.h; sourceTree = "<group>"; }; + C585A6B911D4FB3D004C3E4B /* IDBObjectStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBObjectStore.h; sourceTree = "<group>"; }; + C585A6BA11D4FB3D004C3E4B /* IDBObjectStoreImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBObjectStoreImpl.cpp; sourceTree = "<group>"; }; + C585A6BB11D4FB3D004C3E4B /* IDBObjectStoreImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBObjectStoreImpl.h; sourceTree = "<group>"; }; + C585A6BC11D4FB3D004C3E4B /* IDBObjectStoreRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBObjectStoreRequest.cpp; sourceTree = "<group>"; }; + C585A6BD11D4FB3D004C3E4B /* IDBObjectStoreRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBObjectStoreRequest.h; sourceTree = "<group>"; }; + C585A6BE11D4FB3D004C3E4B /* IDBObjectStoreRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBObjectStoreRequest.idl; sourceTree = "<group>"; }; + C585A6BF11D4FB3D004C3E4B /* IDBRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBRequest.cpp; sourceTree = "<group>"; }; + C585A6C011D4FB3D004C3E4B /* IDBRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBRequest.h; sourceTree = "<group>"; }; + C585A6C111D4FB3D004C3E4B /* IDBRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBRequest.idl; sourceTree = "<group>"; }; + C585A6C211D4FB3D004C3E4B /* IDBSuccessEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBSuccessEvent.cpp; sourceTree = "<group>"; }; + C585A6C311D4FB3D004C3E4B /* IDBSuccessEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBSuccessEvent.h; sourceTree = "<group>"; }; + C585A6C411D4FB3D004C3E4B /* IDBSuccessEvent.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IDBSuccessEvent.idl; sourceTree = "<group>"; }; + C585A6C511D4FB3D004C3E4B /* IndexedDatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexedDatabase.cpp; sourceTree = "<group>"; }; + C585A6C611D4FB3D004C3E4B /* IndexedDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexedDatabase.h; sourceTree = "<group>"; }; + C585A6C711D4FB3D004C3E4B /* IndexedDatabaseImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexedDatabaseImpl.cpp; sourceTree = "<group>"; }; + C585A6C811D4FB3D004C3E4B /* IndexedDatabaseImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexedDatabaseImpl.h; sourceTree = "<group>"; }; + C585A6C911D4FB3D004C3E4B /* IndexedDatabaseRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexedDatabaseRequest.cpp; sourceTree = "<group>"; }; + C585A6CA11D4FB3D004C3E4B /* IndexedDatabaseRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexedDatabaseRequest.h; sourceTree = "<group>"; }; + C585A6CB11D4FB3D004C3E4B /* IndexedDatabaseRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IndexedDatabaseRequest.idl; sourceTree = "<group>"; }; C5D4AA78116BAFB60069CA93 /* GlyphMetricsMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GlyphMetricsMap.h; sourceTree = "<group>"; }; C5E9B67610697E1300C7BB1A /* StorageEventDispatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StorageEventDispatcher.cpp; sourceTree = "<group>"; }; C5EBDD81105EDDEC0056816F /* StorageEventDispatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageEventDispatcher.h; sourceTree = "<group>"; }; - C5F4F3FE119306AC00FDFADD /* JSIDBDatabaseError.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBDatabaseError.cpp; sourceTree = "<group>"; }; - C5F4F3FF119306AC00FDFADD /* JSIDBDatabaseError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBDatabaseError.h; sourceTree = "<group>"; }; - C5F4F400119306AC00FDFADD /* JSIDBDatabaseException.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBDatabaseException.cpp; sourceTree = "<group>"; }; - C5F4F401119306AC00FDFADD /* JSIDBDatabaseException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBDatabaseException.h; sourceTree = "<group>"; }; - C5F4F402119306AC00FDFADD /* JSIDBDatabaseRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBDatabaseRequest.cpp; sourceTree = "<group>"; }; - C5F4F403119306AC00FDFADD /* JSIDBDatabaseRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBDatabaseRequest.h; sourceTree = "<group>"; }; - C5F4F404119306AC00FDFADD /* JSIDBRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIDBRequest.cpp; sourceTree = "<group>"; }; - C5F4F405119306AC00FDFADD /* JSIDBRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIDBRequest.h; sourceTree = "<group>"; }; - C5F4F40E119306C000FDFADD /* JSIndexedDatabaseRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSIndexedDatabaseRequest.cpp; sourceTree = "<group>"; }; - C5F4F40F119306C000FDFADD /* JSIndexedDatabaseRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSIndexedDatabaseRequest.h; sourceTree = "<group>"; }; C6D74AD309AA282E000B0A52 /* ModifySelectionListLevel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModifySelectionListLevel.h; sourceTree = "<group>"; }; C6D74AE309AA290A000B0A52 /* ModifySelectionListLevel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ModifySelectionListLevel.cpp; sourceTree = "<group>"; }; + CE02F0C311E83ADD00C6684A /* ScriptControllerBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptControllerBase.h; sourceTree = "<group>"; }; CE172E001136E8CE0062A533 /* ZoomMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZoomMode.h; sourceTree = "<group>"; }; CE4C00E310F6F7BA00CA38F5 /* HTMLNoScriptElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLNoScriptElement.cpp; sourceTree = "<group>"; }; CE4C00E510F6F7C100CA38F5 /* HTMLNoScriptElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLNoScriptElement.h; sourceTree = "<group>"; }; @@ -10774,7 +10838,6 @@ F587866202DE3B1101EA4122 /* SSLKeyGenerator.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = SSLKeyGenerator.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; }; F587868402DE3B8601EA4122 /* Cursor.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = Cursor.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; }; F587869902DE3B8601EA4122 /* DeprecatedPtrList.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = DeprecatedPtrList.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; }; - F58EF58E02DFDFB7018635CA /* WebCore.base.exp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.exports; path = WebCore.base.exp; sourceTree = "<group>"; tabWidth = 4; usesTabs = 0; }; F5C041D70FFCA7CE00839D4A /* HTMLDataListElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLDataListElement.cpp; sourceTree = "<group>"; }; F5C041D80FFCA7CE00839D4A /* HTMLDataListElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLDataListElement.h; sourceTree = "<group>"; }; F5C041D90FFCA7CE00839D4A /* HTMLDataListElement.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = HTMLDataListElement.idl; sourceTree = "<group>"; }; @@ -10822,8 +10885,6 @@ FABE72FC1059C21100D999DD /* MathMLNames.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MathMLNames.cpp; sourceTree = "<group>"; }; FAC12CC21120DA6900DACC36 /* RenderMathMLSubSup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMathMLSubSup.cpp; sourceTree = "<group>"; }; FAC12CC31120DA6900DACC36 /* RenderMathMLSubSup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMathMLSubSup.h; sourceTree = "<group>"; }; - FE136AE710643BE50078CF6D /* WebCore.OrientationEvents.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.OrientationEvents.exp; sourceTree = "<group>"; }; - FE49BD301061719100D0E1AE /* WebCore.Inspector.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.Inspector.exp; sourceTree = "<group>"; }; FE49EF970DC51462004266E1 /* DashboardSupportCSSPropertyNames.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = DashboardSupportCSSPropertyNames.in; sourceTree = "<group>"; }; FE6FD4850F676E5700092873 /* Coordinates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Coordinates.h; sourceTree = "<group>"; }; FE6FD4860F676E5700092873 /* Coordinates.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Coordinates.idl; sourceTree = "<group>"; }; @@ -10851,11 +10912,16 @@ FE80DA620E9C4703000D6F75 /* JSGeoposition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSGeoposition.h; sourceTree = "<group>"; }; FE80DA6D0E9C472F000D6F75 /* JSPositionError.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPositionError.cpp; sourceTree = "<group>"; }; FE80DA6E0E9C472F000D6F75 /* JSPositionError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSPositionError.h; sourceTree = "<group>"; }; - FEA4133F105D67AE0007236F /* WebCore.DragSupport.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.DragSupport.exp; sourceTree = "<group>"; }; - FEFD102C105C41470002855E /* WebCore.ContextMenus.exp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.exports; path = WebCore.ContextMenus.exp; sourceTree = "<group>"; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 5D87BB4D11E3EAEB00702B6F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 93F19B1208245E59001E9ABC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -10880,6 +10946,7 @@ isa = PBXGroup; children = ( 93F19B1A08245E5A001E9ABC /* WebCore.framework */, + 5D87BB4F11E3EAEB00702B6F /* WebCoreExportFileGenerator */, ); name = Products; sourceTree = SOURCE_ROOT; @@ -11192,60 +11259,58 @@ 1AD51A130CB59CD300953D11 /* DatabaseTracker.cpp */, 1AD51A120CB59CD300953D11 /* DatabaseTracker.h */, 51FAFE330CECBF2D00BB3F24 /* DatabaseTrackerClient.h */, - C56C914F119D84CB00DE4CD9 /* IDBAny.cpp */, - C56C9150119D84CB00DE4CD9 /* IDBAny.h */, - C56C9151119D84CB00DE4CD9 /* IDBAny.idl */, - C5198F381192ECFD002B74A6 /* IDBCallbacks.h */, - C5198F3A1192ECFD002B74A6 /* IDBDatabase.h */, - C5198F3B1192ECFD002B74A6 /* IDBDatabaseError.h */, - C5198F3C1192ECFD002B74A6 /* IDBDatabaseError.idl */, - C5198F3D1192ECFD002B74A6 /* IDBDatabaseException.h */, - C5198F3E1192ECFD002B74A6 /* IDBDatabaseException.idl */, - C50AD2A911AC1631008CF2FB /* IDBDatabaseImpl.cpp */, - C50AD2AA11AC1631008CF2FB /* IDBDatabaseImpl.h */, - C5198F3F1192ECFD002B74A6 /* IDBDatabaseRequest.cpp */, - C5198F401192ECFD002B74A6 /* IDBDatabaseRequest.h */, - C5198F411192ECFD002B74A6 /* IDBDatabaseRequest.idl */, - C56C9159119D84E600DE4CD9 /* IDBErrorEvent.cpp */, - C56C915A119D84E600DE4CD9 /* IDBErrorEvent.h */, - C56C915B119D84E600DE4CD9 /* IDBErrorEvent.idl */, - C56C915C119D84E600DE4CD9 /* IDBEvent.cpp */, - C56C915D119D84E600DE4CD9 /* IDBEvent.h */, - C56C915E119D84E600DE4CD9 /* IDBEvent.idl */, - C51DA99F11AEF2C1009799C5 /* IDBIndex.h */, - C51DA9A011AEF2C1009799C5 /* IDBIndexImpl.cpp */, - C51DA9A111AEF2C1009799C5 /* IDBIndexImpl.h */, - C51DA9A211AEF2C1009799C5 /* IDBIndexRequest.cpp */, - C51DA9A311AEF2C1009799C5 /* IDBIndexRequest.h */, - C51DA9A411AEF2C1009799C5 /* IDBIndexRequest.idl */, - 816C806611BE887E009A45E9 /* IDBKeyRange.cpp */, - 816C806711BE887E009A45E9 /* IDBKeyRange.h */, - 81CC114011BEAA9D00D0D856 /* IDBKeyRange.idl */, - B6693EE811AD63E6003F2770 /* IDBObjectStore.h */, - B6693EE811AD63E6003F2770 /* IDBObjectStore.h */, - B6B0540711B68F10002564C5 /* IDBObjectStoreImpl.cpp */, - B6B0540711B68F10002564C5 /* IDBObjectStoreImpl.cpp */, - B6B0540811B68F10002564C5 /* IDBObjectStoreImpl.h */, - B6B0540811B68F10002564C5 /* IDBObjectStoreImpl.h */, - B6693EE911AD63E6003F2770 /* IDBObjectStoreRequest.cpp */, - B6693EE911AD63E6003F2770 /* IDBObjectStoreRequest.cpp */, - B6693EEA11AD63E6003F2770 /* IDBObjectStoreRequest.h */, - B6693EEA11AD63E6003F2770 /* IDBObjectStoreRequest.h */, - B6693EEF11AD63F6003F2770 /* IDBObjectStoreRequest.idl */, - B6693EEF11AD63F6003F2770 /* IDBObjectStoreRequest.idl */, - C5198F421192ECFD002B74A6 /* IDBRequest.cpp */, - C5198F431192ECFD002B74A6 /* IDBRequest.h */, - C5198F441192ECFD002B74A6 /* IDBRequest.idl */, - C56C9165119D84FF00DE4CD9 /* IDBSuccessEvent.cpp */, - C56C9166119D84FF00DE4CD9 /* IDBSuccessEvent.h */, - C56C9167119D84FF00DE4CD9 /* IDBSuccessEvent.idl */, - C5198F451192ECFD002B74A6 /* IndexedDatabase.cpp */, - C5198F461192ECFD002B74A6 /* IndexedDatabase.h */, - C5198F471192ECFD002B74A6 /* IndexedDatabaseImpl.cpp */, - C5198F481192ECFD002B74A6 /* IndexedDatabaseImpl.h */, - C5198F491192ECFD002B74A6 /* IndexedDatabaseRequest.cpp */, - C5198F4A1192ECFD002B74A6 /* IndexedDatabaseRequest.h */, - C5198F4B1192ECFD002B74A6 /* IndexedDatabaseRequest.idl */, + C585A69811D4FB3D004C3E4B /* IDBAny.cpp */, + C585A69911D4FB3D004C3E4B /* IDBAny.h */, + C585A69A11D4FB3D004C3E4B /* IDBAny.idl */, + C585A69B11D4FB3D004C3E4B /* IDBCallbacks.h */, + C585A69C11D4FB3D004C3E4B /* IDBDatabase.h */, + C585A69D11D4FB3D004C3E4B /* IDBDatabaseError.h */, + C585A69E11D4FB3D004C3E4B /* IDBDatabaseError.idl */, + C585A69F11D4FB3D004C3E4B /* IDBDatabaseException.h */, + C585A6A011D4FB3D004C3E4B /* IDBDatabaseException.idl */, + C585A6A111D4FB3D004C3E4B /* IDBDatabaseImpl.cpp */, + C585A6A211D4FB3D004C3E4B /* IDBDatabaseImpl.h */, + C585A6A311D4FB3D004C3E4B /* IDBDatabaseRequest.cpp */, + C585A6A411D4FB3D004C3E4B /* IDBDatabaseRequest.h */, + C585A6A511D4FB3D004C3E4B /* IDBDatabaseRequest.idl */, + C585A6A611D4FB3D004C3E4B /* IDBErrorEvent.cpp */, + C585A6A711D4FB3D004C3E4B /* IDBErrorEvent.h */, + C585A6A811D4FB3D004C3E4B /* IDBErrorEvent.idl */, + C585A6A911D4FB3D004C3E4B /* IDBEvent.cpp */, + C585A6AA11D4FB3D004C3E4B /* IDBEvent.h */, + C585A6AB11D4FB3D004C3E4B /* IDBEvent.idl */, + C585A6AC11D4FB3D004C3E4B /* IDBIndex.h */, + C585A6AD11D4FB3D004C3E4B /* IDBIndexImpl.cpp */, + C585A6AE11D4FB3D004C3E4B /* IDBIndexImpl.h */, + C585A6AF11D4FB3D004C3E4B /* IDBIndexRequest.cpp */, + C585A6B011D4FB3D004C3E4B /* IDBIndexRequest.h */, + C585A6B111D4FB3D004C3E4B /* IDBIndexRequest.idl */, + C585A6B211D4FB3D004C3E4B /* IDBKey.cpp */, + C585A6B311D4FB3D004C3E4B /* IDBKey.h */, + C585A6B411D4FB3D004C3E4B /* IDBKey.idl */, + C585A6B511D4FB3D004C3E4B /* IDBKeyRange.cpp */, + C585A6B611D4FB3D004C3E4B /* IDBKeyRange.h */, + C585A6B711D4FB3D004C3E4B /* IDBKeyRange.idl */, + C585A6B811D4FB3D004C3E4B /* IDBKeyTree.h */, + C585A6B911D4FB3D004C3E4B /* IDBObjectStore.h */, + C585A6BA11D4FB3D004C3E4B /* IDBObjectStoreImpl.cpp */, + C585A6BB11D4FB3D004C3E4B /* IDBObjectStoreImpl.h */, + C585A6BC11D4FB3D004C3E4B /* IDBObjectStoreRequest.cpp */, + C585A6BD11D4FB3D004C3E4B /* IDBObjectStoreRequest.h */, + C585A6BE11D4FB3D004C3E4B /* IDBObjectStoreRequest.idl */, + C585A6BF11D4FB3D004C3E4B /* IDBRequest.cpp */, + C585A6C011D4FB3D004C3E4B /* IDBRequest.h */, + C585A6C111D4FB3D004C3E4B /* IDBRequest.idl */, + C585A6C211D4FB3D004C3E4B /* IDBSuccessEvent.cpp */, + C585A6C311D4FB3D004C3E4B /* IDBSuccessEvent.h */, + C585A6C411D4FB3D004C3E4B /* IDBSuccessEvent.idl */, + C585A6C511D4FB3D004C3E4B /* IndexedDatabase.cpp */, + C585A6C611D4FB3D004C3E4B /* IndexedDatabase.h */, + C585A6C711D4FB3D004C3E4B /* IndexedDatabaseImpl.cpp */, + C585A6C811D4FB3D004C3E4B /* IndexedDatabaseImpl.h */, + C585A6C911D4FB3D004C3E4B /* IndexedDatabaseRequest.cpp */, + C585A6CA11D4FB3D004C3E4B /* IndexedDatabaseRequest.h */, + C585A6CB11D4FB3D004C3E4B /* IndexedDatabaseRequest.idl */, 511F23130DC160DA004F0032 /* LocalStorageTask.cpp */, 511F23140DC160DA004F0032 /* LocalStorageTask.h */, 511F23150DC160DA004F0032 /* LocalStorageThread.cpp */, @@ -11329,6 +11394,8 @@ 9FA37EF71172FD9300C4CD55 /* JSScriptProfile.h */, 9FA37EF81172FD9300C4CD55 /* JSScriptProfileNode.cpp */, 9FA37EF91172FD9300C4CD55 /* JSScriptProfileNode.h */, + 4F4F5FFA11CBD2D200A186BF /* RemoteInspectorFrontend2.cpp */, + 4F4F5FFC11CBD30100A186BF /* RemoteInspectorFrontend2.h */, ); name = Inspector; sourceTree = "<group>"; @@ -11344,6 +11411,8 @@ 7A0E76F610BF08ED00A0276E /* InjectedScriptHost.cpp */, 7A0E76F710BF08ED00A0276E /* InjectedScriptHost.h */, 7A0E76F810BF08ED00A0276E /* InjectedScriptHost.idl */, + B885E8D211E06DD2009FFBF4 /* InspectorApplicationCacheAgent.cpp */, + B885E8D311E06DD2009FFBF4 /* InspectorApplicationCacheAgent.h */, 7A74ECB8101839A500BF939E /* InspectorBackend.cpp */, 7A74ECB9101839A600BF939E /* InspectorBackend.h */, 7A74ECB61018399A00BF939E /* InspectorBackend.idl */, @@ -11560,26 +11629,8 @@ 449195900FBE175B00D9F824 /* Exports */ = { isa = PBXGroup; children = ( - 0F9C6F4B1073EF0400DED9BF /* WebCore.3DRendering.exp */, - 0F5263E511DC136E0006D33C /* WebCore.AcceleratedCompositing.exp */, - F58EF58E02DFDFB7018635CA /* WebCore.base.exp */, - BC56CCDF10D72BD800A77C64 /* WebCore.ClientBasedGeolocation.exp */, - FEFD102C105C41470002855E /* WebCore.ContextMenus.exp */, - 4491959D0FBE17D700D9F824 /* WebCore.DashboardSupport.exp */, - FEA4133F105D67AE0007236F /* WebCore.DragSupport.exp */, - FE49BD301061719100D0E1AE /* WebCore.Inspector.exp */, - 4491959C0FBE17D700D9F824 /* WebCore.JNI.exp */, - 4491959A0FBE17D700D9F824 /* WebCore.NPAPI.exp */, - FE136AE710643BE50078CF6D /* WebCore.OrientationEvents.exp */, - 4491959B0FBE17D700D9F824 /* WebCore.PluginHostProcess.exp */, - 271245D311890AB70083E852 /* WebCore.ProtectionSpaceAuthCallback.exp */, - 449195990FBE17D700D9F824 /* WebCore.SVG.Animation.exp */, - 449195980FBE17D700D9F824 /* WebCore.SVG.exp */, - 449195970FBE17D700D9F824 /* WebCore.SVG.Filters.exp */, - 449195960FBE17D700D9F824 /* WebCore.SVG.ForeignObject.exp */, - 449195950FBE17D700D9F824 /* WebCore.Tiger.exp */, - 63F371CD100E790000BBA87A /* WebCore.Video.exp */, - 449195940FBE17D700D9F824 /* WebCore.VideoProxy.exp */, + 5D87BB8211E3ED8600702B6F /* ExportFileGenerator.cpp */, + 5D4B8C5211E52C8B00BBB62F /* WebCore.exp.in */, ); name = Exports; sourceTree = "<group>"; @@ -11861,8 +11912,12 @@ children = ( 9363B6290F8E8FE000803810 /* cf */, 5160F4920B0AA71500C1D2AF /* mac */, - 51741D0C0B07259A00ED442C /* BackForwardList.cpp */, 51741D0B0B07259A00ED442C /* BackForwardList.h */, + BCA8CA5D11E4E6D100812FB7 /* BackForwardListImpl.cpp */, + BCA8CA5E11E4E6D100812FB7 /* BackForwardListImpl.h */, + BCA8C81D11E3D36900812FB7 /* BackForwardController.cpp */, + BCA8C81C11E3D36900812FB7 /* BackForwardController.h */, + BCA8C83011E3D53200812FB7 /* BackForwardControllerClient.h */, 51C0AA400F2AA15E001648C2 /* CachedFrame.cpp */, 51C0AA380F2AA10A001648C2 /* CachedFrame.h */, 51CBFC980D10E483002DBF51 /* CachedFramePlatformData.h */, @@ -11949,19 +12004,19 @@ isa = PBXGroup; children = ( 0AFDAC3610F5447400E1F3D2 /* mac */, - A9C6E4E10D745E05006442E9 /* MimeType.cpp */, - A9C6E4E20D745E05006442E9 /* MimeType.h */, - A9C6E65E0D7466F2006442E9 /* MimeType.idl */, - A9C6E4E50D745E18006442E9 /* MimeTypeArray.cpp */, - A9C6E4E60D745E18006442E9 /* MimeTypeArray.h */, - A9C6E65F0D746700006442E9 /* MimeTypeArray.idl */, + A9C6E4E10D745E05006442E9 /* DOMMimeType.cpp */, + A9C6E4E20D745E05006442E9 /* DOMMimeType.h */, + A9C6E65E0D7466F2006442E9 /* DOMMimeType.idl */, + A9C6E4E50D745E18006442E9 /* DOMMimeTypeArray.cpp */, + A9C6E4E60D745E18006442E9 /* DOMMimeTypeArray.h */, + A9C6E65F0D746700006442E9 /* DOMMimeTypeArray.idl */, + A9C6E4E90D745E2B006442E9 /* DOMPlugin.cpp */, + A9C6E4EA0D745E2B006442E9 /* DOMPlugin.h */, + A9C6E6600D74670C006442E9 /* DOMPlugin.idl */, 1A219B3A0DCA87AB0040E3A0 /* npfunctions.h */, - A9C6E4E90D745E2B006442E9 /* Plugin.cpp */, - A9C6E4EA0D745E2B006442E9 /* Plugin.h */, - A9C6E6600D74670C006442E9 /* Plugin.idl */, - A9C6E4ED0D745E38006442E9 /* PluginArray.cpp */, - A9C6E4EE0D745E38006442E9 /* PluginArray.h */, - A9C6E6610D74671E006442E9 /* PluginArray.idl */, + A9C6E4ED0D745E38006442E9 /* DOMPluginArray.cpp */, + A9C6E4EE0D745E38006442E9 /* DOMPluginArray.h */, + A9C6E6610D74671E006442E9 /* DOMPluginArray.idl */, A9C6E4F10D745E48006442E9 /* PluginData.cpp */, A9C6E4F20D745E48006442E9 /* PluginData.h */, 1ADA140E0E1AE5D900023EE5 /* PluginMainThreadScheduler.cpp */, @@ -12281,6 +12336,7 @@ 8AF4E55811DC5A63000ED3DE /* Timing.cpp */, 8AF4E55911DC5A63000ED3DE /* Timing.h */, 8AF4E55A11DC5A63000ED3DE /* Timing.idl */, + 003F1FE911E6AB43008258D9 /* UserContentTypes.h */, BCACF3BA1072921A00C0C8A3 /* UserContentURLPattern.cpp */, BCACF3BB1072921A00C0C8A3 /* UserContentURLPattern.h */, BCA2B0601050475F0043BD1C /* UserScript.h */, @@ -13664,6 +13720,8 @@ 1A494E290A12354300FDAFC1 /* HTMLDocument.idl */, A871038811A2947000DBD50E /* HTMLDocumentParser.cpp */, A871038911A2947000DBD50E /* HTMLDocumentParser.h */, + 97EF560E11E40783007E026F /* HTMLConstructionSite.cpp */, + 97EF560F11E40783007E026F /* HTMLConstructionSite.h */, F523D23E02DE4396018635CA /* HTMLElement.cpp */, F523D23F02DE4396018635CA /* HTMLElement.h */, 1A494BBB0A122DCD00FDAFC1 /* HTMLElement.idl */, @@ -14639,30 +14697,32 @@ B59DD697119029E5007E9684 /* JSDatabaseCallback.h */, B58CEB6811913607002A6790 /* JSDatabaseSync.cpp */, B58CEB6711913607002A6790 /* JSDatabaseSync.h */, - C56C9198119D915300DE4CD9 /* JSIDBAny.cpp */, - C56C9199119D915300DE4CD9 /* JSIDBAny.h */, - C5F4F3FE119306AC00FDFADD /* JSIDBDatabaseError.cpp */, - C5F4F3FF119306AC00FDFADD /* JSIDBDatabaseError.h */, - C5F4F400119306AC00FDFADD /* JSIDBDatabaseException.cpp */, - C5F4F401119306AC00FDFADD /* JSIDBDatabaseException.h */, - C5F4F402119306AC00FDFADD /* JSIDBDatabaseRequest.cpp */, - C5F4F403119306AC00FDFADD /* JSIDBDatabaseRequest.h */, - C56C919C119D918100DE4CD9 /* JSIDBErrorEvent.cpp */, - C56C919D119D918100DE4CD9 /* JSIDBErrorEvent.h */, - C56C919E119D918100DE4CD9 /* JSIDBEvent.cpp */, - C56C919F119D918100DE4CD9 /* JSIDBEvent.h */, - C5BBC9CE11AEF838007C2BFE /* JSIDBIndexRequest.cpp */, - C5BBC9CF11AEF838007C2BFE /* JSIDBIndexRequest.h */, - 816C80B011BE9934009A45E9 /* JSIDBKeyRange.cpp */, - 816C80AE11BE990D009A45E9 /* JSIDBKeyRange.h */, - B6693EF011AD6486003F2770 /* JSIDBObjectStoreRequest.cpp */, - B6693EF111AD6486003F2770 /* JSIDBObjectStoreRequest.h */, - C5F4F404119306AC00FDFADD /* JSIDBRequest.cpp */, - C5F4F405119306AC00FDFADD /* JSIDBRequest.h */, - C56C91A4119D918700DE4CD9 /* JSIDBSuccessEvent.cpp */, - C56C91A5119D918700DE4CD9 /* JSIDBSuccessEvent.h */, - C5F4F40E119306C000FDFADD /* JSIndexedDatabaseRequest.cpp */, - C5F4F40F119306C000FDFADD /* JSIndexedDatabaseRequest.h */, + C585A66411D4FB07004C3E4B /* JSIDBAny.cpp */, + C585A66511D4FB07004C3E4B /* JSIDBAny.h */, + C585A66611D4FB07004C3E4B /* JSIDBDatabaseError.cpp */, + C585A66711D4FB07004C3E4B /* JSIDBDatabaseError.h */, + C585A66811D4FB07004C3E4B /* JSIDBDatabaseException.cpp */, + C585A66911D4FB07004C3E4B /* JSIDBDatabaseException.h */, + C585A66A11D4FB07004C3E4B /* JSIDBDatabaseRequest.cpp */, + C585A66B11D4FB07004C3E4B /* JSIDBDatabaseRequest.h */, + C585A66C11D4FB07004C3E4B /* JSIDBErrorEvent.cpp */, + C585A66D11D4FB07004C3E4B /* JSIDBErrorEvent.h */, + C585A66E11D4FB07004C3E4B /* JSIDBEvent.cpp */, + C585A66F11D4FB07004C3E4B /* JSIDBEvent.h */, + C585A67011D4FB07004C3E4B /* JSIDBIndexRequest.cpp */, + C585A67111D4FB07004C3E4B /* JSIDBIndexRequest.h */, + C585A67211D4FB07004C3E4B /* JSIDBKey.cpp */, + C585A67311D4FB07004C3E4B /* JSIDBKey.h */, + C585A67411D4FB07004C3E4B /* JSIDBKeyRange.cpp */, + C585A67511D4FB07004C3E4B /* JSIDBKeyRange.h */, + C585A67611D4FB07004C3E4B /* JSIDBObjectStoreRequest.cpp */, + C585A67711D4FB07004C3E4B /* JSIDBObjectStoreRequest.h */, + C585A67811D4FB07004C3E4B /* JSIDBRequest.cpp */, + C585A67911D4FB07004C3E4B /* JSIDBRequest.h */, + C585A67A11D4FB07004C3E4B /* JSIDBSuccessEvent.cpp */, + C585A67B11D4FB07004C3E4B /* JSIDBSuccessEvent.h */, + C585A69411D4FB13004C3E4B /* JSIndexedDatabaseRequest.cpp */, + C585A69511D4FB13004C3E4B /* JSIndexedDatabaseRequest.h */, 514C76350CE9225E007EF3CD /* JSSQLError.cpp */, BC8243250D0CE8A200460C8F /* JSSQLError.h */, B525A96411CA2340003A23A8 /* JSSQLException.cpp */, @@ -14717,14 +14777,14 @@ A9D247F90D757E4100FDF959 /* Plugins */ = { isa = PBXGroup; children = ( - A9D248020D757E7D00FDF959 /* JSMimeType.cpp */, - A9D248030D757E7D00FDF959 /* JSMimeType.h */, - A9D248040D757E7D00FDF959 /* JSMimeTypeArray.cpp */, - A9D248050D757E7D00FDF959 /* JSMimeTypeArray.h */, - A9D247FA0D757E6900FDF959 /* JSPlugin.cpp */, - A9D247FB0D757E6900FDF959 /* JSPlugin.h */, - A9D247FC0D757E6900FDF959 /* JSPluginArray.cpp */, - A9D247FD0D757E6900FDF959 /* JSPluginArray.h */, + A9D248020D757E7D00FDF959 /* JSDOMMimeType.cpp */, + A9D248030D757E7D00FDF959 /* JSDOMMimeType.h */, + A9D248040D757E7D00FDF959 /* JSDOMMimeTypeArray.cpp */, + A9D248050D757E7D00FDF959 /* JSDOMMimeTypeArray.h */, + A9D247FA0D757E6900FDF959 /* JSDOMPlugin.cpp */, + A9D247FB0D757E6900FDF959 /* JSDOMPlugin.h */, + A9D247FC0D757E6900FDF959 /* JSDOMPluginArray.cpp */, + A9D247FD0D757E6900FDF959 /* JSDOMPluginArray.h */, ); name = Plugins; sourceTree = "<group>"; @@ -15512,6 +15572,7 @@ 14813BF309EDF88E00F757E1 /* IDLParser.pm */, 93F8B3080A300FEA00F61AB8 /* IDLStructure.pm */, 97EF7DFD107E55B700D7C49C /* ScriptControllerBase.cpp */, + CE02F0C311E83ADD00C6684A /* ScriptControllerBase.h */, ); path = bindings; sourceTree = "<group>"; @@ -15533,6 +15594,8 @@ BC53DA2D1143121E000D817E /* DOMWrapperWorld.h */, 1432E8480C51493F00B1500F /* GCController.cpp */, 1432E8460C51493800B1500F /* GCController.h */, + C585A66011D4FAC5004C3E4B /* IDBBindingUtilities.cpp */, + C585A66111D4FAC5004C3E4B /* IDBBindingUtilities.h */, 1C81BA030E97348300266E07 /* JavaScriptCallFrame.cpp */, 1C81BA040E97348300266E07 /* JavaScriptCallFrame.h */, BC53DAC411432FD9000D817E /* JSDebugWrapperSet.cpp */, @@ -15678,6 +15741,9 @@ 49C7BA8C1042F5B10009D447 /* JSDocumentCustom.cpp */, 1AC226160DB69F740089B669 /* JSDOMApplicationCacheCustom.cpp */, 2E0888E5114884E200AF4265 /* JSDOMFormDataCustom.cpp */, + A9C6E6460D7465CA006442E9 /* JSDOMMimeTypeArrayCustom.cpp */, + A9C6E64B0D7465E7006442E9 /* JSDOMPluginCustom.cpp */, + A9C6E64A0D7465E7006442E9 /* JSDOMPluginArrayCustom.cpp */, BC64649B11D8238C006455B0 /* JSDOMStringMapCustom.cpp */, BCD9C25E0C17AA67005C90A2 /* JSDOMWindowCustom.cpp */, 652FBBBB0DE27CB60001D386 /* JSDOMWindowCustom.h */, @@ -15703,7 +15769,8 @@ 448AD27A0A4813790023D179 /* JSHTMLOptionsCollectionCustom.cpp */, BC17F9650B64EBB8004A65CB /* JSHTMLSelectElementCustom.cpp */, AB4CB4EA0B8BDA3D009F40B0 /* JSHTMLSelectElementCustom.h */, - C56C914D119D849800DE4CD9 /* JSIDBAnyCustom.cpp */, + C585A65C11D4FAB2004C3E4B /* JSIDBAnyCustom.cpp */, + C585A65D11D4FAB2004C3E4B /* JSIDBKeyCustom.cpp */, A7D0318D0E93540300E24ACD /* JSImageDataCustom.cpp */, 7A0E76D410BF050700A0276E /* JSInjectedScriptHostCustom.cpp */, 7A74ECBC101839DA00BF939E /* JSInspectorFrontendHostCustom.cpp */, @@ -15716,7 +15783,6 @@ 410B7E711045FAB000D8224F /* JSMessageEventCustom.cpp */, E1ADED460E76B8DD004A1A5E /* JSMessagePortCustom.cpp */, 41F584C6104652CB009CAA64 /* JSMessagePortCustom.h */, - A9C6E6460D7465CA006442E9 /* JSMimeTypeArrayCustom.cpp */, BCD9C25F0C17AA67005C90A2 /* JSNamedNodeMapCustom.cpp */, A9C6E6480D7465D8006442E9 /* JSNavigatorCustom.cpp */, BCD9C2600C17AA67005C90A2 /* JSNodeCustom.cpp */, @@ -15724,8 +15790,6 @@ BCB773600C17853D00132BA4 /* JSNodeFilterCustom.cpp */, 1A750DD30A90E729000FF215 /* JSNodeIteratorCustom.cpp */, BCD9C2610C17AA67005C90A2 /* JSNodeListCustom.cpp */, - A9C6E64A0D7465E7006442E9 /* JSPluginArrayCustom.cpp */, - A9C6E64B0D7465E7006442E9 /* JSPluginCustom.cpp */, 5189F01710B3781300F3C739 /* JSPopStateEventCustom.cpp */, 9FA37EE61172FCF000C4CD55 /* JSScriptProfileNodeCustom.cpp */, 51DCE8010CAC9F1C00488358 /* JSSQLResultSetRowListCustom.cpp */, @@ -15844,10 +15908,16 @@ BCE1C43A0D9830D3003B02F2 /* JSLocation.h */, 9FFE3EA311B5A4390037874E /* JSMemoryInfo.cpp */, 9FFE3EA411B5A4390037874E /* JSMemoryInfo.h */, + 8A9A586E11E84C35008ACFD1 /* JSNavigation.cpp */, + 8A9A586F11E84C36008ACFD1 /* JSNavigation.h */, A9D247F50D757E3300FDF959 /* JSNavigator.cpp */, A9D247F60D757E3300FDF959 /* JSNavigator.h */, + 8A9A587211E84C81008ACFD1 /* JSPerformance.cpp */, + 8A9A587311E84C81008ACFD1 /* JSPerformance.h */, BCEC01C00C274DDD009F4EC9 /* JSScreen.cpp */, BCEC01C10C274DDD009F4EC9 /* JSScreen.h */, + 8A9A587611E84C98008ACFD1 /* JSTiming.cpp */, + 8A9A587711E84C98008ACFD1 /* JSTiming.h */, 494BD79B0F55C94C00747828 /* JSWebKitPoint.cpp */, 494BD79C0F55C94C00747828 /* JSWebKitPoint.h */, ); @@ -16762,8 +16832,6 @@ AB23A32609BBA7D00067CC53 /* BeforeTextInsertedEvent.h */, 85031B260A44EFC700F992E0 /* BeforeUnloadEvent.cpp */, 85031B270A44EFC700F992E0 /* BeforeUnloadEvent.h */, - 0BC2C7751134A8FC000B2F61 /* CanvasSurface.cpp */, - 0BC2C7761134A8FC000B2F61 /* CanvasSurface.h */, 6550B693099DF0270090D781 /* CDATASection.cpp */, 6550B694099DF0270090D781 /* CDATASection.h */, 85089CC90A98C2AB00A275AA /* CDATASection.idl */, @@ -16807,8 +16875,8 @@ BC64641A11D7F416006455B0 /* DatasetDOMStringMap.h */, A8C228A011D5722E00D5A7D3 /* DecodedDataDocumentParser.cpp */, A8C2289F11D5722E00D5A7D3 /* DecodedDataDocumentParser.h */, - 59A8F1D311A69508001AC34A /* DeviceOrientation.cpp */, - 59A8F1D511A69513001AC34A /* DeviceOrientation.h */, + 59A8F1D311A69508001AC34A /* DeviceOrientationController.cpp */, + 59A8F1D511A69513001AC34A /* DeviceOrientationController.h */, 59A8F1D711A69520001AC34A /* DeviceOrientationClient.h */, 59A85EA1119D68D900DEF1EF /* DeviceOrientationEvent.cpp */, 59A85EA3119D68EC00DEF1EF /* DeviceOrientationEvent.h */, @@ -17171,7 +17239,6 @@ 49C7B9DD1042D32F0009D447 /* CanvasRenderingContext.h in Headers */, 49484FCB102CF23C00187DD3 /* CanvasRenderingContext2D.h in Headers */, 49484FCE102CF23C00187DD3 /* CanvasStyle.h in Headers */, - 0BC2C7781134A8FC000B2F61 /* CanvasSurface.h in Headers */, 6550B69E099DF0270090D781 /* CDATASection.h in Headers */, 514185EE0CD65F0400763C99 /* ChangeVersionWrapper.h in Headers */, 6550B6A0099DF0270090D781 /* CharacterData.h in Headers */, @@ -17314,7 +17381,7 @@ 93309DE1099E64920056E581 /* DeleteSelectionCommand.h in Headers */, 93F1998208245E59001E9ABC /* DeprecatedPtrList.h in Headers */, 93F1996D08245E59001E9ABC /* DeprecatedPtrListImpl.h in Headers */, - 59A8F1D611A69513001AC34A /* DeviceOrientation.h in Headers */, + 59A8F1D611A69513001AC34A /* DeviceOrientationController.h in Headers */, 59A8F1D811A69520001AC34A /* DeviceOrientationClient.h in Headers */, 59A85EA4119D68EC00DEF1EF /* DeviceOrientationEvent.h in Headers */, B2F34FE60E82F81400F627CD /* DNS.h in Headers */, @@ -18316,29 +18383,6 @@ 1A2D753D0DE47FAB00F0A648 /* IconFetcher.h in Headers */, 513F14540AB634C400094DDF /* IconLoader.h in Headers */, 51E1ECC10C91C90400DC255B /* IconRecord.h in Headers */, - C56C9153119D84CB00DE4CD9 /* IDBAny.h in Headers */, - C5198F4C1192ECFD002B74A6 /* IDBCallbacks.h in Headers */, - C5198F4E1192ECFD002B74A6 /* IDBDatabase.h in Headers */, - C5198F4F1192ECFD002B74A6 /* IDBDatabaseError.h in Headers */, - C5198F511192ECFD002B74A6 /* IDBDatabaseException.h in Headers */, - C5198F541192ECFD002B74A6 /* IDBDatabaseRequest.h in Headers */, - C56C9160119D84E600DE4CD9 /* IDBErrorEvent.h in Headers */, - C56C9163119D84E600DE4CD9 /* IDBEvent.h in Headers */, - C51DA9A511AEF2C1009799C5 /* IDBIndex.h in Headers */, - C51DA9A511AEF2C1009799C5 /* IDBIndex.h in Headers */, - C51DA9A711AEF2C1009799C5 /* IDBIndexImpl.h in Headers */, - C51DA9A711AEF2C1009799C5 /* IDBIndexImpl.h in Headers */, - C51DA9A911AEF2C1009799C5 /* IDBIndexRequest.h in Headers */, - C51DA9A911AEF2C1009799C5 /* IDBIndexRequest.h in Headers */, - 816C806911BE887E009A45E9 /* IDBKeyRange.h in Headers */, - B6693EEC11AD63E6003F2770 /* IDBObjectStore.h in Headers */, - B6693EEC11AD63E6003F2770 /* IDBObjectStore.h in Headers */, - B6B0540A11B68F10002564C5 /* IDBObjectStoreImpl.h in Headers */, - B6B0540A11B68F10002564C5 /* IDBObjectStoreImpl.h in Headers */, - B6693EEE11AD63E6003F2770 /* IDBObjectStoreRequest.h in Headers */, - B6693EEE11AD63E6003F2770 /* IDBObjectStoreRequest.h in Headers */, - C5198F571192ECFD002B74A6 /* IDBRequest.h in Headers */, - C56C9169119D84FF00DE4CD9 /* IDBSuccessEvent.h in Headers */, 1A71D57C0F33819000F9CE4E /* IdentifierRep.h in Headers */, 49E911C50EF86D47009D0CAF /* IdentityTransformOperation.h in Headers */, C0C054CD1118C8E400CE2636 /* IDLParser.pm in Headers */, @@ -18354,9 +18398,6 @@ 4B3480940EEF50D400AC1B41 /* ImageSourceCG.h in Headers */, 316FE1180E6E1DA700BF6088 /* ImplicitAnimation.h in Headers */, DB23C2CC0A508D29002489EB /* IndentOutdentCommand.h in Headers */, - C5198F5A1192ECFD002B74A6 /* IndexedDatabase.h in Headers */, - C5198F5C1192ECFD002B74A6 /* IndexedDatabaseImpl.h in Headers */, - C5198F5E1192ECFD002B74A6 /* IndexedDatabaseRequest.h in Headers */, F3644B001119805900E0D537 /* InjectedScript.h in Headers */, 7A0E76FA10BF08ED00A0276E /* InjectedScriptHost.h in Headers */, A8CFF5E50A155A05000A4234 /* InlineBox.h in Headers */, @@ -18569,22 +18610,8 @@ A80E7B0C0A19D606007FB8C5 /* JSHTMLTitleElement.h in Headers */, 1A85B2110A1B258700D8C87C /* JSHTMLUListElement.h in Headers */, E44614170CD6826900FADA75 /* JSHTMLVideoElement.h in Headers */, - C56C919B119D915300DE4CD9 /* JSIDBAny.h in Headers */, - C5F4F407119306AC00FDFADD /* JSIDBDatabaseError.h in Headers */, - C5F4F409119306AC00FDFADD /* JSIDBDatabaseException.h in Headers */, - C5F4F40B119306AC00FDFADD /* JSIDBDatabaseRequest.h in Headers */, - C56C91A1119D918100DE4CD9 /* JSIDBErrorEvent.h in Headers */, - C56C91A3119D918100DE4CD9 /* JSIDBEvent.h in Headers */, - C5BBC9D111AEF838007C2BFE /* JSIDBIndexRequest.h in Headers */, - C5BBC9D111AEF838007C2BFE /* JSIDBIndexRequest.h in Headers */, - 816C80AF11BE990D009A45E9 /* JSIDBKeyRange.h in Headers */, - B6693EF311AD6486003F2770 /* JSIDBObjectStoreRequest.h in Headers */, - B6693EF311AD6486003F2770 /* JSIDBObjectStoreRequest.h in Headers */, - C5F4F40D119306AC00FDFADD /* JSIDBRequest.h in Headers */, - C56C91A7119D918700DE4CD9 /* JSIDBSuccessEvent.h in Headers */, BC6C49F40D7DBA0500FFA558 /* JSImageConstructor.h in Headers */, A77979290D6B9E64003851B9 /* JSImageData.h in Headers */, - C5F4F411119306C000FDFADD /* JSIndexedDatabaseRequest.h in Headers */, 7A0E76DB10BF059800A0276E /* JSInjectedScriptHost.h in Headers */, 41F060CE0F5EEB2B00A07EAC /* JSInspectorBackend.h in Headers */, 7A0E771F10C00DB100A0276E /* JSInspectorFrontendHost.h in Headers */, @@ -18602,8 +18629,8 @@ 75793EC90D0CE72D007FC0AC /* JSMessageEvent.h in Headers */, E1ADEDDA0E76BD93004A1A5E /* JSMessagePort.h in Headers */, 41F584C7104652CB009CAA64 /* JSMessagePortCustom.h in Headers */, - A9D248070D757E7D00FDF959 /* JSMimeType.h in Headers */, - A9D248090D757E7D00FDF959 /* JSMimeTypeArray.h in Headers */, + A9D248070D757E7D00FDF959 /* JSDOMMimeType.h in Headers */, + A9D248090D757E7D00FDF959 /* JSDOMMimeTypeArray.h in Headers */, A86629D109DA2B48009633A5 /* JSMouseEvent.h in Headers */, 65DF31FC09D1CC60000BE325 /* JSMutationEvent.h in Headers */, BCD9C2C10C17B69E005C90A2 /* JSNamedNodeMap.h in Headers */, @@ -18619,8 +18646,8 @@ A826E8AE0A1A8F2300CD1BB6 /* JSOptionConstructor.h in Headers */, 1A0D57410A5C7867007EDD4C /* JSOverflowEvent.h in Headers */, E1284BB110449FFA00EAEB52 /* JSPageTransitionEvent.h in Headers */, - A9D247FF0D757E6900FDF959 /* JSPlugin.h in Headers */, - A9D248010D757E6900FDF959 /* JSPluginArray.h in Headers */, + A9D247FF0D757E6900FDF959 /* JSDOMPlugin.h in Headers */, + A9D248010D757E6900FDF959 /* JSDOMPluginArray.h in Headers */, 93B70D6C09EB0C7C009D8468 /* JSPluginElementFunctions.h in Headers */, 5189F01E10B37BD900F3C739 /* JSPopStateEvent.h in Headers */, FE80DA720E9C472F000D6F75 /* JSPositionError.h in Headers */, @@ -18892,8 +18919,8 @@ 75793E840D0CE0B3007FC0AC /* MessageEvent.h in Headers */, E1ADECBF0E76ACF1004A1A5E /* MessagePort.h in Headers */, 41BF700C0FE86F49005E8DEC /* MessagePortChannel.h in Headers */, - A9C6E4E40D745E05006442E9 /* MimeType.h in Headers */, - A9C6E4E80D745E18006442E9 /* MimeTypeArray.h in Headers */, + A9C6E4E40D745E05006442E9 /* DOMMimeType.h in Headers */, + A9C6E4E80D745E18006442E9 /* DOMMimeTypeArray.h in Headers */, BC772C4F0C4EB3040083285F /* MIMETypeRegistry.h in Headers */, C6D74AD509AA282E000B0A52 /* ModifySelectionListLevel.h in Headers */, 85031B460A44EFC700F992E0 /* MouseEvent.h in Headers */, @@ -18977,8 +19004,8 @@ 1AD8F81B11CAB9E900E93E54 /* PlatformStrategies.h in Headers */, B2C3DA2B0D006C1D00EF6F26 /* PlatformString.h in Headers */, 935C476B09AC4D4F00A6AAB4 /* PlatformWheelEvent.h in Headers */, - A9C6E4EC0D745E2B006442E9 /* Plugin.h in Headers */, - A9C6E4F00D745E38006442E9 /* PluginArray.h in Headers */, + A9C6E4EC0D745E2B006442E9 /* DOMPlugin.h in Headers */, + A9C6E4F00D745E38006442E9 /* DOMPluginArray.h in Headers */, A9C6E4F40D745E48006442E9 /* PluginData.h in Headers */, 1AC694C80A3B1676003F5049 /* PluginDocument.h in Headers */, 7693BAD4106C2DCA007B0823 /* PluginHalter.h in Headers */, @@ -19694,12 +19721,76 @@ E1BE512E0CF6C512002EA959 /* XSLTUnicodeSort.h in Headers */, 97DD4D870FDF4D6E00ECF9A4 /* XSSAuditor.h in Headers */, CE172E011136E8CE0062A533 /* ZoomMode.h in Headers */, + B885E8D511E06DD2009FFBF4 /* InspectorApplicationCacheAgent.h in Headers */, + 97EF561111E40783007E026F /* HTMLConstructionSite.h in Headers */, + BCA8C81E11E3D36900812FB7 /* BackForwardController.h in Headers */, + BCA8C83111E3D53200812FB7 /* BackForwardControllerClient.h in Headers */, + BCA8CA6011E4E6D100812FB7 /* BackForwardListImpl.h in Headers */, + 003F1FEA11E6AB43008258D9 /* UserContentTypes.h in Headers */, + CE02F0C411E83ADD00C6684A /* ScriptControllerBase.h in Headers */, + 8A9A587111E84C36008ACFD1 /* JSNavigation.h in Headers */, + 8A9A587511E84C81008ACFD1 /* JSPerformance.h in Headers */, + 8A9A588811E84F37008ACFD1 /* JSTiming.h in Headers */, + C585A66311D4FAC5004C3E4B /* IDBBindingUtilities.h in Headers */, + C585A67D11D4FB08004C3E4B /* JSIDBAny.h in Headers */, + C585A67F11D4FB08004C3E4B /* JSIDBDatabaseError.h in Headers */, + C585A68111D4FB08004C3E4B /* JSIDBDatabaseException.h in Headers */, + C585A68311D4FB08004C3E4B /* JSIDBDatabaseRequest.h in Headers */, + C585A68511D4FB08004C3E4B /* JSIDBErrorEvent.h in Headers */, + C585A68711D4FB08004C3E4B /* JSIDBEvent.h in Headers */, + C585A68911D4FB08004C3E4B /* JSIDBIndexRequest.h in Headers */, + C585A68B11D4FB08004C3E4B /* JSIDBKey.h in Headers */, + C585A68D11D4FB08004C3E4B /* JSIDBKeyRange.h in Headers */, + C585A68F11D4FB08004C3E4B /* JSIDBObjectStoreRequest.h in Headers */, + C585A69111D4FB08004C3E4B /* JSIDBRequest.h in Headers */, + C585A69311D4FB08004C3E4B /* JSIDBSuccessEvent.h in Headers */, + C585A69711D4FB13004C3E4B /* JSIndexedDatabaseRequest.h in Headers */, + C585A6CD11D4FB3D004C3E4B /* IDBAny.h in Headers */, + C585A6CF11D4FB3D004C3E4B /* IDBCallbacks.h in Headers */, + C585A6D011D4FB3D004C3E4B /* IDBDatabase.h in Headers */, + C585A6D111D4FB3D004C3E4B /* IDBDatabaseError.h in Headers */, + C585A6D311D4FB3D004C3E4B /* IDBDatabaseException.h in Headers */, + C585A6D611D4FB3D004C3E4B /* IDBDatabaseImpl.h in Headers */, + C585A6D811D4FB3D004C3E4B /* IDBDatabaseRequest.h in Headers */, + C585A6DB11D4FB3D004C3E4B /* IDBErrorEvent.h in Headers */, + C585A6DE11D4FB3D004C3E4B /* IDBEvent.h in Headers */, + C585A6E011D4FB3D004C3E4B /* IDBIndex.h in Headers */, + C585A6E211D4FB3D004C3E4B /* IDBIndexImpl.h in Headers */, + C585A6E411D4FB3D004C3E4B /* IDBIndexRequest.h in Headers */, + C585A6E711D4FB3D004C3E4B /* IDBKey.h in Headers */, + C585A6EA11D4FB3D004C3E4B /* IDBKeyRange.h in Headers */, + C585A6EC11D4FB3D004C3E4B /* IDBKeyTree.h in Headers */, + C585A6ED11D4FB3D004C3E4B /* IDBObjectStore.h in Headers */, + C585A6EF11D4FB3D004C3E4B /* IDBObjectStoreImpl.h in Headers */, + C585A6F111D4FB3D004C3E4B /* IDBObjectStoreRequest.h in Headers */, + C585A6F411D4FB3D004C3E4B /* IDBRequest.h in Headers */, + C585A6F711D4FB3D004C3E4B /* IDBSuccessEvent.h in Headers */, + C585A6FA11D4FB3D004C3E4B /* IndexedDatabase.h in Headers */, + C585A6FC11D4FB3D004C3E4B /* IndexedDatabaseImpl.h in Headers */, + C585A6FE11D4FB3D004C3E4B /* IndexedDatabaseRequest.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 5D87BB4E11E3EAEB00702B6F /* WebCoreExportFileGenerator */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5D87BB5911E3EB0700702B6F /* Build configuration list for PBXNativeTarget "WebCoreExportFileGenerator" */; + buildPhases = ( + 5D87BB4C11E3EAEB00702B6F /* Sources */, + 5D87BB4D11E3EAEB00702B6F /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 5D87BB6B11E3EBD200702B6F /* PBXTargetDependency */, + ); + name = WebCoreExportFileGenerator; + productName = WebCoreExportFileGenerator; + productReference = 5D87BB4F11E3EAEB00702B6F /* WebCoreExportFileGenerator */; + productType = "com.apple.product-type.tool"; + }; 93F198A508245E59001E9ABC /* WebCore */ = { isa = PBXNativeTarget; buildConfigurationList = 149C283908902B11008A9EFC /* Build configuration list for PBXNativeTarget "WebCore" */; @@ -19707,7 +19798,7 @@ 5D2F7DA00C6879C600B5B72B /* Update Info.plist with version information */, 93F198A608245E59001E9ABC /* Headers */, 1C11CCB40AA6093700DADB20 /* Copy Generated Headers */, - 1CC93C640DAE929600E4BC3A /* Copy Forwarding and ICU Headers */, + 5D87BC0711E43BDE00702B6F /* Copy Forwarding and ICU Headers */, 93F199FD08245E59001E9ABC /* Resources */, 1C81BA330E97357C00266E07 /* Copy Inspector Resources */, 1C5F9D760E09A1B400E91D0A /* Streamline Inspector Source */, @@ -19753,6 +19844,8 @@ targets = ( 93F198A508245E59001E9ABC /* WebCore */, DD041FBE09D9DDBE0010AF2A /* Derived Sources */, + 5D87BB4E11E3EAEB00702B6F /* WebCoreExportFileGenerator */, + 5D87BB6411E3EBC100702B6F /* WebCoreExportFileGenerator Generator */, ); }; /* End PBXProject section */ @@ -19836,50 +19929,67 @@ shellPath = /bin/sh; shellScript = "# Copy all the Inspector front-end resources.\nditto \"${SRCROOT}/inspector/front-end\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/inspector\"\n\n# Remove the WebKit.qrc file since it is not used on the Mac (this file is for Qt)\nrm -f \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/inspector/WebKit.qrc\"\n"; }; - 1CC93C640DAE929600E4BC3A /* Copy Forwarding and ICU Headers */ = { + 5D0D540D0E9862F60029E223 /* Check For Weak VTables and Externals */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "$(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)", ); - name = "Copy Forwarding and ICU Headers"; + name = "Check For Weak VTables and Externals"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "rsync -aq --exclude \".svn\" --exclude \".DS_Store\" \"$SRCROOT/ForwardingHeaders\" \"$BUILT_PRODUCTS_DIR/$PRIVATE_HEADERS_FOLDER_PATH\"\nrsync -aq --exclude \".svn\" --exclude \".DS_Store\" \"$SRCROOT/icu\" \"$BUILT_PRODUCTS_DIR/$PRIVATE_HEADERS_FOLDER_PATH\"\n"; + shellScript = "if [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../WebKitTools/Scripts/check-for-weak-vtables-and-externals ]; then\n ../WebKitTools/Scripts/check-for-weak-vtables-and-externals || exit $?\nfi"; }; - 5D0D540D0E9862F60029E223 /* Check For Weak VTables and Externals */ = { + 5D2F7DA00C6879C600B5B72B /* Update Info.plist with version information */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "$(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)", + "$(SRCROOT)/Configurations/Version.xcconfig", ); - name = "Check For Weak VTables and Externals"; + name = "Update Info.plist with version information"; outputPaths = ( + "$(SRCROOT)/Info.plist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "if [ \"${ACTION}\" = \"installhdrs\" ]; then\n exit 0;\nfi\n\nif [ -f ../WebKitTools/Scripts/check-for-weak-vtables-and-externals ]; then\n ../WebKitTools/Scripts/check-for-weak-vtables-and-externals || exit $?\nfi"; + shellScript = "# Touch Info.plist to let Xcode know it needs to copy it into the built product\nif [[ \"${CONFIGURATION}\" != \"Production\" ]]; then\n touch \"$SRCROOT/Info.plist\";\nfi;\n"; }; - 5D2F7DA00C6879C600B5B72B /* Update Info.plist with version information */ = { + 5D87BB6311E3EBC100702B6F /* Generate Export File Generator */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "$(SRCROOT)/Configurations/Version.xcconfig", + "$(SRCROOT)/WebCore.exp.in", + "$(SRCROOT)/make-export-file-generator", ); - name = "Update Info.plist with version information"; + name = "Generate Export File Generator"; outputPaths = ( - "$(SRCROOT)/Info.plist", + "$(BUILT_PRODUCTS_DIR)/DerivedSources/$(PROJECT_NAME)/ExportFileGenerator.cpp", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# Touch Info.plist to let Xcode know it needs to copy it into the built product\nif [[ \"${CONFIGURATION}\" != \"Production\" ]]; then\n touch \"$SRCROOT/Info.plist\";\nfi;\n"; + shellScript = "OUTPUT_DIR=\"${BUILT_PRODUCTS_DIR}/DerivedSources/${PROJECT_NAME}\"\nmkdir -p \"${OUTPUT_DIR}\"\n\"${SRCROOT}\"/make-export-file-generator \"${SRCROOT}/WebCore.exp.in\" \"${OUTPUT_DIR}/ExportFileGenerator.cpp\"\n"; + }; + 5D87BC0711E43BDE00702B6F /* Copy Forwarding and ICU Headers */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Forwarding and ICU Headers"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "rsync -av --exclude \".svn\" --exclude \".DS_Store\" \"$SRCROOT/ForwardingHeaders\" \"$BUILT_PRODUCTS_DIR/$PRIVATE_HEADERS_FOLDER_PATH\"\nrsync -av --exclude \".svn\" --exclude \".DS_Store\" \"$SRCROOT/icu\" \"$BUILT_PRODUCTS_DIR/$PRIVATE_HEADERS_FOLDER_PATH\"\n"; }; 5DF50887116F3077005202AB /* Check For Inappropriate Files In Framework */ = { isa = PBXShellScriptBuildPhase; @@ -19942,6 +20052,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 5D87BB4C11E3EAEB00702B6F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5D87BB8311E3ED8600702B6F /* ExportFileGenerator.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 93F19A0C08245E59001E9ABC /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -19999,7 +20117,6 @@ A8CFF0500A154F09000A4234 /* AutoTableLayout.cpp in Sources */, 29A812370FBB9C1D00510293 /* AXObjectCache.cpp in Sources */, 29A8124B0FBB9CA900510293 /* AXObjectCacheMac.mm in Sources */, - 51741D100B07259A00ED442C /* BackForwardList.cpp in Sources */, BC124EE70C2641CD009E2349 /* BarInfo.cpp in Sources */, B2C3DA210D006C1D00EF6F26 /* Base64.cpp in Sources */, 5172204B11D2960500638B42 /* BeforeProcessEvent.cpp in Sources */, @@ -20041,7 +20158,6 @@ 49C7B9DC1042D32F0009D447 /* CanvasRenderingContext.cpp in Sources */, 49484FCA102CF23C00187DD3 /* CanvasRenderingContext2D.cpp in Sources */, 49484FCD102CF23C00187DD3 /* CanvasStyle.cpp in Sources */, - 0BC2C7771134A8FC000B2F61 /* CanvasSurface.cpp in Sources */, 6550B69D099DF0270090D781 /* CDATASection.cpp in Sources */, 514185EF0CD65F0400763C99 /* ChangeVersionWrapper.cpp in Sources */, 6550B69F099DF0270090D781 /* CharacterData.cpp in Sources */, @@ -20156,7 +20272,7 @@ 93309DDE099E64920056E581 /* DeleteFromTextNodeCommand.cpp in Sources */, 93309DE0099E64920056E581 /* DeleteSelectionCommand.cpp in Sources */, 93F19A3C08245E59001E9ABC /* DeprecatedPtrListImpl.cpp in Sources */, - 59A8F1D411A69508001AC34A /* DeviceOrientation.cpp in Sources */, + 59A8F1D411A69508001AC34A /* DeviceOrientationController.cpp in Sources */, 59A85EA2119D68D900DEF1EF /* DeviceOrientationEvent.cpp in Sources */, B2F34FE90E82F82700F627CD /* DNSCFNet.cpp in Sources */, BCB16C290979C3BD00467741 /* DocLoader.cpp in Sources */, @@ -20678,23 +20794,6 @@ 513F14530AB634C400094DDF /* IconLoader.cpp in Sources */, B275358E0B053A66002CE64F /* IconMac.mm in Sources */, 51E1ECC00C91C90400DC255B /* IconRecord.cpp in Sources */, - C56C9152119D84CB00DE4CD9 /* IDBAny.cpp in Sources */, - B627FB2D11AD743500E97B72 /* IDBDatabaseImpl.cpp in Sources */, - B627FB2D11AD743500E97B72 /* IDBDatabaseImpl.cpp in Sources */, - C5198F531192ECFD002B74A6 /* IDBDatabaseRequest.cpp in Sources */, - C56C915F119D84E600DE4CD9 /* IDBErrorEvent.cpp in Sources */, - C56C9162119D84E600DE4CD9 /* IDBEvent.cpp in Sources */, - C51DA9A611AEF2C1009799C5 /* IDBIndexImpl.cpp in Sources */, - C51DA9A611AEF2C1009799C5 /* IDBIndexImpl.cpp in Sources */, - C51DA9A811AEF2C1009799C5 /* IDBIndexRequest.cpp in Sources */, - C51DA9A811AEF2C1009799C5 /* IDBIndexRequest.cpp in Sources */, - 816C806811BE887E009A45E9 /* IDBKeyRange.cpp in Sources */, - B6B0540911B68F10002564C5 /* IDBObjectStoreImpl.cpp in Sources */, - B6B0540911B68F10002564C5 /* IDBObjectStoreImpl.cpp in Sources */, - B6693EED11AD63E6003F2770 /* IDBObjectStoreRequest.cpp in Sources */, - B6693EED11AD63E6003F2770 /* IDBObjectStoreRequest.cpp in Sources */, - C5198F561192ECFD002B74A6 /* IDBRequest.cpp in Sources */, - C56C9168119D84FF00DE4CD9 /* IDBSuccessEvent.cpp in Sources */, 1A71D57B0F33819000F9CE4E /* IdentifierRep.cpp in Sources */, B275356F0B053814002CE64F /* Image.cpp in Sources */, B2A10B940B3818D700099AA4 /* ImageBufferCG.cpp in Sources */, @@ -20708,9 +20807,6 @@ 4B3480930EEF50D400AC1B41 /* ImageSourceCGMac.mm in Sources */, 316FE1170E6E1DA700BF6088 /* ImplicitAnimation.cpp in Sources */, DB23C2CB0A508D29002489EB /* IndentOutdentCommand.cpp in Sources */, - C5198F591192ECFD002B74A6 /* IndexedDatabase.cpp in Sources */, - C5198F5B1192ECFD002B74A6 /* IndexedDatabaseImpl.cpp in Sources */, - C5198F5D1192ECFD002B74A6 /* IndexedDatabaseRequest.cpp in Sources */, F3644AFF1119805900E0D537 /* InjectedScript.cpp in Sources */, 7A0E76F910BF08ED00A0276E /* InjectedScriptHost.cpp in Sources */, A8CFF5E60A155A05000A4234 /* InlineBox.cpp in Sources */, @@ -20963,24 +21059,9 @@ A80E7B130A19D606007FB8C5 /* JSHTMLTitleElement.cpp in Sources */, 1A85B2100A1B258700D8C87C /* JSHTMLUListElement.cpp in Sources */, E44614160CD6826900FADA75 /* JSHTMLVideoElement.cpp in Sources */, - C56C919A119D915300DE4CD9 /* JSIDBAny.cpp in Sources */, - C56C914E119D849800DE4CD9 /* JSIDBAnyCustom.cpp in Sources */, - C5F4F406119306AC00FDFADD /* JSIDBDatabaseError.cpp in Sources */, - C5F4F408119306AC00FDFADD /* JSIDBDatabaseException.cpp in Sources */, - C5F4F40A119306AC00FDFADD /* JSIDBDatabaseRequest.cpp in Sources */, - C56C91A0119D918100DE4CD9 /* JSIDBErrorEvent.cpp in Sources */, - C56C91A2119D918100DE4CD9 /* JSIDBEvent.cpp in Sources */, - C5BBC9D011AEF838007C2BFE /* JSIDBIndexRequest.cpp in Sources */, - C5BBC9D011AEF838007C2BFE /* JSIDBIndexRequest.cpp in Sources */, - 816C80B111BE9934009A45E9 /* JSIDBKeyRange.cpp in Sources */, - B6693EF211AD6486003F2770 /* JSIDBObjectStoreRequest.cpp in Sources */, - B6693EF211AD6486003F2770 /* JSIDBObjectStoreRequest.cpp in Sources */, - C5F4F40C119306AC00FDFADD /* JSIDBRequest.cpp in Sources */, - C56C91A6119D918700DE4CD9 /* JSIDBSuccessEvent.cpp in Sources */, BC6C49F30D7DBA0500FFA558 /* JSImageConstructor.cpp in Sources */, A77979280D6B9E64003851B9 /* JSImageData.cpp in Sources */, A7D0318E0E93540300E24ACD /* JSImageDataCustom.cpp in Sources */, - C5F4F410119306C000FDFADD /* JSIndexedDatabaseRequest.cpp in Sources */, 7A0E76DA10BF059800A0276E /* JSInjectedScriptHost.cpp in Sources */, 7A0E76D510BF050700A0276E /* JSInjectedScriptHostCustom.cpp in Sources */, 41F060CD0F5EEB2B00A07EAC /* JSInspectorBackend.cpp in Sources */, @@ -21008,9 +21089,9 @@ 410B7E721045FAB000D8224F /* JSMessageEventCustom.cpp in Sources */, E1ADEDDB0E76BD93004A1A5E /* JSMessagePort.cpp in Sources */, E1ADED470E76B8DD004A1A5E /* JSMessagePortCustom.cpp in Sources */, - A9D248060D757E7D00FDF959 /* JSMimeType.cpp in Sources */, - A9D248080D757E7D00FDF959 /* JSMimeTypeArray.cpp in Sources */, - A9C6E6470D7465CA006442E9 /* JSMimeTypeArrayCustom.cpp in Sources */, + A9D248060D757E7D00FDF959 /* JSDOMMimeType.cpp in Sources */, + A9D248080D757E7D00FDF959 /* JSDOMMimeTypeArray.cpp in Sources */, + A9C6E6470D7465CA006442E9 /* JSDOMMimeTypeArrayCustom.cpp in Sources */, A86629D209DA2B48009633A5 /* JSMouseEvent.cpp in Sources */, 65DF31FB09D1CC60000BE325 /* JSMutationEvent.cpp in Sources */, BCD9C2C00C17B69E005C90A2 /* JSNamedNodeMap.cpp in Sources */, @@ -21032,10 +21113,10 @@ A826EC480A1B0CBE00CD1BB6 /* JSOptionConstructor.cpp in Sources */, 1A0D57400A5C7867007EDD4C /* JSOverflowEvent.cpp in Sources */, E1284BB210449FFA00EAEB52 /* JSPageTransitionEvent.cpp in Sources */, - A9D247FE0D757E6900FDF959 /* JSPlugin.cpp in Sources */, - A9D248000D757E6900FDF959 /* JSPluginArray.cpp in Sources */, - A9C6E64C0D7465E7006442E9 /* JSPluginArrayCustom.cpp in Sources */, - A9C6E64D0D7465E7006442E9 /* JSPluginCustom.cpp in Sources */, + A9D247FE0D757E6900FDF959 /* JSDOMPlugin.cpp in Sources */, + A9D248000D757E6900FDF959 /* JSDOMPluginArray.cpp in Sources */, + A9C6E64C0D7465E7006442E9 /* JSDOMPluginArrayCustom.cpp in Sources */, + A9C6E64D0D7465E7006442E9 /* JSDOMPluginCustom.cpp in Sources */, 93B70D6B09EB0C7C009D8468 /* JSPluginElementFunctions.cpp in Sources */, 5189F01D10B37BD900F3C739 /* JSPopStateEvent.cpp in Sources */, 5189F01810B3781300F3C739 /* JSPopStateEventCustom.cpp in Sources */, @@ -21331,8 +21412,8 @@ 75793E830D0CE0B3007FC0AC /* MessageEvent.cpp in Sources */, E1ADECC00E76ACF1004A1A5E /* MessagePort.cpp in Sources */, 41BF700B0FE86F49005E8DEC /* MessagePortChannel.cpp in Sources */, - A9C6E4E30D745E05006442E9 /* MimeType.cpp in Sources */, - A9C6E4E70D745E18006442E9 /* MimeTypeArray.cpp in Sources */, + A9C6E4E30D745E05006442E9 /* DOMMimeType.cpp in Sources */, + A9C6E4E70D745E18006442E9 /* DOMMimeTypeArray.cpp in Sources */, BC772C4E0C4EB3040083285F /* MIMETypeRegistry.cpp in Sources */, BC772C5E0C4EB3440083285F /* MIMETypeRegistryMac.mm in Sources */, C6D74AE409AA290A000B0A52 /* ModifySelectionListLevel.cpp in Sources */, @@ -21397,8 +21478,8 @@ 935C477109AC4D7300A6AAB4 /* PlatformMouseEventMac.mm in Sources */, BC94D1080C274F88006BC617 /* PlatformScreenMac.mm in Sources */, 1AD8F81C11CAB9E900E93E54 /* PlatformStrategies.cpp in Sources */, - A9C6E4EB0D745E2B006442E9 /* Plugin.cpp in Sources */, - A9C6E4EF0D745E38006442E9 /* PluginArray.cpp in Sources */, + A9C6E4EB0D745E2B006442E9 /* DOMPlugin.cpp in Sources */, + A9C6E4EF0D745E38006442E9 /* DOMPluginArray.cpp in Sources */, A9C6E4F30D745E48006442E9 /* PluginData.cpp in Sources */, 1AC694C70A3B1676003F5049 /* PluginDocument.cpp in Sources */, 7693BAD3106C2DCA007B0823 /* PluginHalter.cpp in Sources */, @@ -22032,12 +22113,62 @@ 93F19B0508245E59001E9ABC /* XSLTProcessorLibxslt.cpp in Sources */, E1BE512D0CF6C512002EA959 /* XSLTUnicodeSort.cpp in Sources */, 97DD4D860FDF4D6E00ECF9A4 /* XSSAuditor.cpp in Sources */, + B885E8D411E06DD2009FFBF4 /* InspectorApplicationCacheAgent.cpp in Sources */, + BCA8C81F11E3D36900812FB7 /* BackForwardController.cpp in Sources */, + 4F4F5FFB11CBD2E100A186BF /* RemoteInspectorFrontend2.cpp in Sources */, + 97EF561011E40783007E026F /* HTMLConstructionSite.cpp in Sources */, + BCA8CA5F11E4E6D100812FB7 /* BackForwardListImpl.cpp in Sources */, + 8A9A587011E84C36008ACFD1 /* JSNavigation.cpp in Sources */, + 8A9A587411E84C81008ACFD1 /* JSPerformance.cpp in Sources */, + 8A9A588711E84F37008ACFD1 /* JSTiming.cpp in Sources */, + C585A65E11D4FAB2004C3E4B /* JSIDBAnyCustom.cpp in Sources */, + C585A65F11D4FAB2004C3E4B /* JSIDBKeyCustom.cpp in Sources */, + C585A66211D4FAC5004C3E4B /* IDBBindingUtilities.cpp in Sources */, + C585A67C11D4FB08004C3E4B /* JSIDBAny.cpp in Sources */, + C585A67E11D4FB08004C3E4B /* JSIDBDatabaseError.cpp in Sources */, + C585A68011D4FB08004C3E4B /* JSIDBDatabaseException.cpp in Sources */, + C585A68211D4FB08004C3E4B /* JSIDBDatabaseRequest.cpp in Sources */, + C585A68411D4FB08004C3E4B /* JSIDBErrorEvent.cpp in Sources */, + C585A68611D4FB08004C3E4B /* JSIDBEvent.cpp in Sources */, + C585A68811D4FB08004C3E4B /* JSIDBIndexRequest.cpp in Sources */, + C585A68A11D4FB08004C3E4B /* JSIDBKey.cpp in Sources */, + C585A68C11D4FB08004C3E4B /* JSIDBKeyRange.cpp in Sources */, + C585A68E11D4FB08004C3E4B /* JSIDBObjectStoreRequest.cpp in Sources */, + C585A69011D4FB08004C3E4B /* JSIDBRequest.cpp in Sources */, + C585A69211D4FB08004C3E4B /* JSIDBSuccessEvent.cpp in Sources */, + C585A69611D4FB13004C3E4B /* JSIndexedDatabaseRequest.cpp in Sources */, + C585A6CC11D4FB3D004C3E4B /* IDBAny.cpp in Sources */, + C585A6D511D4FB3D004C3E4B /* IDBDatabaseImpl.cpp in Sources */, + C585A6D711D4FB3D004C3E4B /* IDBDatabaseRequest.cpp in Sources */, + C585A6DA11D4FB3D004C3E4B /* IDBErrorEvent.cpp in Sources */, + C585A6DD11D4FB3D004C3E4B /* IDBEvent.cpp in Sources */, + C585A6E111D4FB3D004C3E4B /* IDBIndexImpl.cpp in Sources */, + C585A6E311D4FB3D004C3E4B /* IDBIndexRequest.cpp in Sources */, + C585A6E611D4FB3D004C3E4B /* IDBKey.cpp in Sources */, + C585A6E911D4FB3D004C3E4B /* IDBKeyRange.cpp in Sources */, + C585A6EE11D4FB3D004C3E4B /* IDBObjectStoreImpl.cpp in Sources */, + C585A6F011D4FB3D004C3E4B /* IDBObjectStoreRequest.cpp in Sources */, + C585A6F311D4FB3D004C3E4B /* IDBRequest.cpp in Sources */, + C585A6F611D4FB3D004C3E4B /* IDBSuccessEvent.cpp in Sources */, + C585A6F911D4FB3D004C3E4B /* IndexedDatabase.cpp in Sources */, + C585A6FB11D4FB3D004C3E4B /* IndexedDatabaseImpl.cpp in Sources */, + C585A6FD11D4FB3D004C3E4B /* IndexedDatabaseRequest.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 5D87BB6B11E3EBD200702B6F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5D87BB6411E3EBC100702B6F /* WebCoreExportFileGenerator Generator */; + targetProxy = 5D87BB6A11E3EBD200702B6F /* PBXContainerItemProxy */; + }; + 5D87BB8F11E3EE2B00702B6F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5D87BB4E11E3EAEB00702B6F /* WebCoreExportFileGenerator */; + targetProxy = 5D87BB8E11E3EE2B00702B6F /* PBXContainerItemProxy */; + }; DD041FF109D9E3250010AF2A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = DD041FBE09D9DDBE0010AF2A /* Derived Sources */; @@ -22108,6 +22239,64 @@ }; name = Production; }; + 5D87BB5111E3EAEB00702B6F /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1CDD45E50BA9C84600F90147 /* WebCore.xcconfig */; + buildSettings = { + EXPORTED_SYMBOLS_FILE = ""; + GCC_OPTIMIZATION_LEVEL = 0; + INSTALL_PATH = /usr/local/bin; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = WebCoreExportFileGenerator; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 5D87BB5211E3EAEB00702B6F /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1CDD45E50BA9C84600F90147 /* WebCore.xcconfig */; + buildSettings = { + EXPORTED_SYMBOLS_FILE = ""; + INSTALL_PATH = /usr/local/bin; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = WebCoreExportFileGenerator; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 5D87BB5311E3EAEB00702B6F /* Production */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1CDD45E50BA9C84600F90147 /* WebCore.xcconfig */; + buildSettings = { + EXPORTED_SYMBOLS_FILE = ""; + INSTALL_PATH = /usr/local/bin; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = WebCoreExportFileGenerator; + SKIP_INSTALL = YES; + }; + name = Production; + }; + 5D87BB6511E3EBC200702B6F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "WebCoreExportFileGenerator Generator"; + }; + name = Debug; + }; + 5D87BB6611E3EBC200702B6F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "WebCoreExportFileGenerator Generator"; + }; + name = Release; + }; + 5D87BB6711E3EBC200702B6F /* Production */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "WebCoreExportFileGenerator Generator"; + }; + name = Production; + }; DD041FC209D9DDDC0010AF2A /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 1CDD45E50BA9C84600F90147 /* WebCore.xcconfig */; @@ -22155,6 +22344,26 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Production; }; + 5D87BB5911E3EB0700702B6F /* Build configuration list for PBXNativeTarget "WebCoreExportFileGenerator" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5D87BB5111E3EAEB00702B6F /* Debug */, + 5D87BB5211E3EAEB00702B6F /* Release */, + 5D87BB5311E3EAEB00702B6F /* Production */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Production; + }; + 5D87BB6C11E3EC0000702B6F /* Build configuration list for PBXAggregateTarget "WebCoreExportFileGenerator Generator" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5D87BB6511E3EBC200702B6F /* Debug */, + 5D87BB6611E3EBC200702B6F /* Release */, + 5D87BB6711E3EBC200702B6F /* Production */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Production; + }; DD041FC109D9DDDC0010AF2A /* Build configuration list for PBXAggregateTarget "Derived Sources" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/WebCore/accessibility/AXObjectCache.h b/WebCore/accessibility/AXObjectCache.h index 8d98fa3..f18d08a 100644 --- a/WebCore/accessibility/AXObjectCache.h +++ b/WebCore/accessibility/AXObjectCache.h @@ -27,7 +27,6 @@ #define AXObjectCache_h #include "AccessibilityObject.h" -#include "EventHandler.h" #include "Timer.h" #include <limits.h> #include <wtf/HashMap.h> diff --git a/WebCore/accessibility/AccessibilityListBox.h b/WebCore/accessibility/AccessibilityListBox.h index 72ce82f..dcfdd6f 100644 --- a/WebCore/accessibility/AccessibilityListBox.h +++ b/WebCore/accessibility/AccessibilityListBox.h @@ -29,11 +29,10 @@ #ifndef AccessibilityListBox_h #define AccessibilityListBox_h -#include "AccessibilityObject.h" #include "AccessibilityRenderObject.h" namespace WebCore { - + class AccessibilityListBox : public AccessibilityRenderObject { private: diff --git a/WebCore/accessibility/AccessibilityMenuList.h b/WebCore/accessibility/AccessibilityMenuList.h index d00c8b4..376958f 100644 --- a/WebCore/accessibility/AccessibilityMenuList.h +++ b/WebCore/accessibility/AccessibilityMenuList.h @@ -26,7 +26,6 @@ #ifndef AccessibilityMenuList_h #define AccessibilityMenuList_h -#include "AccessibilityObject.h" #include "AccessibilityRenderObject.h" namespace WebCore { diff --git a/WebCore/accessibility/AccessibilityRenderObject.cpp b/WebCore/accessibility/AccessibilityRenderObject.cpp index 1ef6e09..2e53703 100644 --- a/WebCore/accessibility/AccessibilityRenderObject.cpp +++ b/WebCore/accessibility/AccessibilityRenderObject.cpp @@ -91,7 +91,8 @@ AccessibilityRenderObject::AccessibilityRenderObject(RenderObject* renderer) , m_childrenDirty(false) , m_roleForMSAA(UnknownRole) { - updateAccessibilityRole(); + m_role = determineAccessibilityRole(); + #ifndef NDEBUG m_renderer->setHasAXObject(true); #endif @@ -553,7 +554,7 @@ bool AccessibilityRenderObject::isPressed() const // If this is an ARIA button, check the aria-pressed attribute rather than node()->active() if (ariaRoleAttribute() == ButtonRole) { - if (equalIgnoringCase(getAttribute(aria_pressedAttr).string(), "true")) + if (equalIgnoringCase(getAttribute(aria_pressedAttr), "true")) return true; return false; } @@ -877,7 +878,7 @@ static Element* siblingWithAriaRole(String role, Node* node) Node* sibling = node->parent()->firstChild(); while (sibling) { if (sibling->isElementNode()) { - String siblingAriaRole = static_cast<Element*>(sibling)->getAttribute(roleAttr).string(); + const AtomicString& siblingAriaRole = static_cast<Element*>(sibling)->getAttribute(roleAttr); if (equalIgnoringCase(siblingAriaRole, role)) return static_cast<Element*>(sibling); } @@ -1055,7 +1056,7 @@ int AccessibilityRenderObject::intValue() const // If this is an ARIA checkbox or radio, check the aria-checked attribute rather than node()->checked() AccessibilityRole ariaRole = ariaRoleAttribute(); if (ariaRole == RadioButtonRole || ariaRole == CheckBoxRole) { - if (equalIgnoringCase(getAttribute(aria_checkedAttr).string(), "true")) + if (equalIgnoringCase(getAttribute(aria_checkedAttr), "true")) return true; return false; } @@ -1101,8 +1102,12 @@ String AccessibilityRenderObject::stringValue() const if (!m_renderer || isPasswordField()) return String(); - if (ariaRoleAttribute() == StaticTextRole) - return text(); + if (ariaRoleAttribute() == StaticTextRole) { + String staticText = text(); + if (!staticText.length()) + staticText = textUnderElement(); + return staticText; + } if (m_renderer->isText()) return textUnderElement(); @@ -1336,7 +1341,7 @@ String AccessibilityRenderObject::accessibilityDescription() const if (!m_renderer) return String(); - String ariaLabel = getAttribute(aria_labelAttr).string(); + const AtomicString& ariaLabel = getAttribute(aria_labelAttr); if (!ariaLabel.isEmpty()) return ariaLabel; @@ -1542,7 +1547,7 @@ bool AccessibilityRenderObject::hasTextAlternative() const { // ARIA: section 2A, bullet #3 says if aria-labeledby or aria-label appears, it should // override the "label" element association. - if (!ariaLabeledByAttribute().isEmpty() || !getAttribute(aria_labelAttr).string().isEmpty()) + if (!ariaLabeledByAttribute().isEmpty() || !getAttribute(aria_labelAttr).isEmpty()) return true; return false; @@ -1555,7 +1560,7 @@ bool AccessibilityRenderObject::ariaHasPopup() const bool AccessibilityRenderObject::supportsARIAFlowTo() const { - return !getAttribute(aria_flowtoAttr).string().isEmpty(); + return !getAttribute(aria_flowtoAttr).isEmpty(); } void AccessibilityRenderObject::ariaFlowToElements(AccessibilityChildrenVector& flowTo) const @@ -1576,13 +1581,13 @@ void AccessibilityRenderObject::ariaFlowToElements(AccessibilityChildrenVector& bool AccessibilityRenderObject::supportsARIADropping() const { - const AtomicString& dropEffect = getAttribute(aria_dropeffectAttr).string(); + const AtomicString& dropEffect = getAttribute(aria_dropeffectAttr); return !dropEffect.isEmpty(); } bool AccessibilityRenderObject::supportsARIADragging() const { - const AtomicString& grabbed = getAttribute(aria_grabbedAttr).string(); + const AtomicString& grabbed = getAttribute(aria_grabbedAttr); return equalIgnoringCase(grabbed, "true") || equalIgnoringCase(grabbed, "false"); } @@ -1598,14 +1603,15 @@ void AccessibilityRenderObject::setARIAGrabbed(bool grabbed) void AccessibilityRenderObject::determineARIADropEffects(Vector<String>& effects) { - String dropEffects = getAttribute(aria_dropeffectAttr).string(); + const AtomicString& dropEffects = getAttribute(aria_dropeffectAttr); if (dropEffects.isEmpty()) { effects.clear(); return; } - dropEffects.replace('\n', ' '); - dropEffects.split(' ', effects); + String dropEffectsString = dropEffects.string(); + dropEffectsString.replace('\n', ' '); + dropEffectsString.split(' ', effects); } bool AccessibilityRenderObject::exposesTitleUIElement() const @@ -1754,12 +1760,6 @@ bool AccessibilityRenderObject::accessibilityIsIgnored() const if (controlObject && !controlObject->exposesTitleUIElement() && controlObject->isCheckboxOrRadio()) return true; - AccessibilityRole ariaRole = ariaRoleAttribute(); - if (ariaRole == TextAreaRole || ariaRole == StaticTextRole) { - String ariaText = text(); - return ariaText.isNull() || ariaText.isEmpty(); - } - // NOTE: BRs always have text boxes now, so the text box check here can be removed if (m_renderer->isText()) { // static text beneath MenuItems and MenuButtons are just reported along with the menu item, so it's ignored on an individual level @@ -1784,7 +1784,7 @@ bool AccessibilityRenderObject::accessibilityIsIgnored() const if (isControl()) return false; - if (ariaRole != UnknownRole) + if (ariaRoleAttribute() != UnknownRole) return false; if (!helpText().isEmpty()) @@ -2047,7 +2047,7 @@ bool AccessibilityRenderObject::isVisited() const bool AccessibilityRenderObject::isExpanded() const { - if (equalIgnoringCase(getAttribute(aria_expandedAttr).string(), "true")) + if (equalIgnoringCase(getAttribute(aria_expandedAttr), "true")) return true; return false; @@ -2092,7 +2092,7 @@ void AccessibilityRenderObject::setIsExpanded(bool isExpanded) bool AccessibilityRenderObject::isRequired() const { - if (equalIgnoringCase(getAttribute(aria_requiredAttr).string(), "true")) + if (equalIgnoringCase(getAttribute(aria_requiredAttr), "true")) return true; return false; @@ -2107,7 +2107,7 @@ bool AccessibilityRenderObject::isSelected() const if (!node) return false; - String ariaSelected = getAttribute(aria_selectedAttr).string(); + const AtomicString& ariaSelected = getAttribute(aria_selectedAttr); if (equalIgnoringCase(ariaSelected, "true")) return true; @@ -2263,7 +2263,7 @@ bool AccessibilityRenderObject::supportsARIAOwns() const { if (!m_renderer) return false; - const AtomicString& ariaOwns = getAttribute(aria_ownsAttr).string(); + const AtomicString& ariaOwns = getAttribute(aria_ownsAttr); return !ariaOwns.isEmpty(); } @@ -2272,7 +2272,7 @@ bool AccessibilityRenderObject::isEnabled() const { ASSERT(m_renderer); - if (equalIgnoringCase(getAttribute(aria_disabledAttr).string(), "true")) + if (equalIgnoringCase(getAttribute(aria_disabledAttr), "true")) return false; Node* node = m_renderer->node(); @@ -2817,7 +2817,7 @@ AccessibilityObject* AccessibilityRenderObject::activeDescendant() const return 0; Element* element = static_cast<Element*>(m_renderer->node()); - String activeDescendantAttrStr = element->getAttribute(aria_activedescendantAttr).string(); + const AtomicString& activeDescendantAttrStr = element->getAttribute(aria_activedescendantAttr); if (activeDescendantAttrStr.isNull() || activeDescendantAttrStr.isEmpty()) return 0; @@ -2915,7 +2915,13 @@ bool AccessibilityRenderObject::renderObjectIsObservable(RenderObject* renderer) return true; // AX clients will listen for AXSelectedChildrenChanged on listboxes. - if (renderer->isListBox() || axObjectCache()->nodeHasRole(renderer->node(), "listbox")) + AXObjectCache* cache = axObjectCache(); + Node* node = renderer->node(); + if (renderer->isListBox() || cache->nodeHasRole(node, "listbox")) + return true; + + // Textboxes should send out notifications. + if (cache->nodeHasRole(node, "textbox")) return true; return false; @@ -2934,7 +2940,7 @@ AccessibilityObject* AccessibilityRenderObject::observableObject() const AccessibilityRole AccessibilityRenderObject::determineAriaRoleAttribute() const { - String ariaRole = getAttribute(roleAttr).string(); + const AtomicString& ariaRole = getAttribute(roleAttr); if (ariaRole.isNull() || ariaRole.isEmpty()) return UnknownRole; @@ -2970,7 +2976,12 @@ AccessibilityRole AccessibilityRenderObject::ariaRoleAttribute() const void AccessibilityRenderObject::updateAccessibilityRole() { + bool ignoredStatus = accessibilityIsIgnored(); m_role = determineAccessibilityRole(); + + // The AX hierarchy only needs to be updated if the ignored status of an element has changed. + if (ignoredStatus != accessibilityIsIgnored()) + childrenChanged(); } AccessibilityRole AccessibilityRenderObject::determineAccessibilityRole() @@ -3075,7 +3086,7 @@ AccessibilityRole AccessibilityRenderObject::determineAccessibilityRole() AccessibilityOrientation AccessibilityRenderObject::orientation() const { - const AtomicString& ariaOrientation = getAttribute(aria_orientationAttr).string(); + const AtomicString& ariaOrientation = getAttribute(aria_orientationAttr); if (equalIgnoringCase(ariaOrientation, "horizontal")) return AccessibilityOrientationHorizontal; if (equalIgnoringCase(ariaOrientation, "vertical")) @@ -3184,13 +3195,13 @@ bool AccessibilityRenderObject::canSetFocusAttribute() const bool AccessibilityRenderObject::canSetExpandedAttribute() const { // An object can be expanded if it aria-expanded is true or false. - String ariaExpanded = getAttribute(aria_expandedAttr).string(); + const AtomicString& ariaExpanded = getAttribute(aria_expandedAttr); return equalIgnoringCase(ariaExpanded, "true") || equalIgnoringCase(ariaExpanded, "false"); } bool AccessibilityRenderObject::canSetValueAttribute() const { - if (equalIgnoringCase(getAttribute(aria_readonlyAttr).string(), "true")) + if (equalIgnoringCase(getAttribute(aria_readonlyAttr), "true")) return false; // Any node could be contenteditable, so isReadOnly should be relied upon diff --git a/WebCore/accessibility/AccessibilityTable.cpp b/WebCore/accessibility/AccessibilityTable.cpp index 8e0562c..437ac38 100644 --- a/WebCore/accessibility/AccessibilityTable.cpp +++ b/WebCore/accessibility/AccessibilityTable.cpp @@ -137,7 +137,10 @@ bool AccessibilityTable::isTableExposableThroughAccessibility() unsigned borderedCellCount = 0; unsigned backgroundDifferenceCellCount = 0; + int headersInFirstColumnCount = 0; for (int row = 0; row < numRows; ++row) { + + int headersInFirstRowCount = 0; for (int col = 0; col < numCols; ++col) { RenderTableCell* cell = firstBody->cellAt(row, col).cell; if (!cell) @@ -153,6 +156,15 @@ bool AccessibilityTable::isTableExposableThroughAccessibility() HTMLTableCellElement* cellElement = static_cast<HTMLTableCellElement*>(cellNode); + bool isTHCell = cellElement->hasTagName(thTag); + // If the first row is comprised of all <th> tags, assume it is a data table. + if (!row && isTHCell) + headersInFirstRowCount++; + + // If the first column is comprised of all <tg> tags, assume it is a data table. + if (!col && isTHCell) + headersInFirstColumnCount++; + // in this case, the developer explicitly assigned a "data" table attribute if (!cellElement->headers().isEmpty() || !cellElement->abbr().isEmpty() || !cellElement->axis().isEmpty() || !cellElement->scope().isEmpty()) @@ -178,8 +190,14 @@ bool AccessibilityTable::isTableExposableThroughAccessibility() if (borderedCellCount >= 10 || backgroundDifferenceCellCount >= 10) return true; } + + if (!row && headersInFirstRowCount == numCols && numCols > 1) + return true; } + if (headersInFirstColumnCount == numRows && numRows > 1) + return true; + // if there is less than two valid cells, it's not a data table if (validCellCount <= 1) return false; diff --git a/WebCore/accessibility/mac/AccessibilityObjectWrapper.h b/WebCore/accessibility/mac/AccessibilityObjectWrapper.h index e6cc706..b54d3fc 100644 --- a/WebCore/accessibility/mac/AccessibilityObjectWrapper.h +++ b/WebCore/accessibility/mac/AccessibilityObjectWrapper.h @@ -29,8 +29,6 @@ #ifndef AccessibilityObjectWrapper_h #define AccessibilityObjectWrapper_h -#include <wtf/RefPtr.h> - #ifdef __OBJC__ @class WebCoreTextMarker; @class WebCoreTextMarkerRange; diff --git a/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm b/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm index 9de7e4d..a711116 100644 --- a/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm +++ b/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm @@ -44,6 +44,7 @@ #import "Frame.h" #import "HTMLAnchorElement.h" #import "HTMLAreaElement.h" +#import "HTMLFrameOwnerElement.h" #import "HTMLImageElement.h" #import "HTMLInputElement.h" #import "HTMLTextAreaElement.h" @@ -1464,7 +1465,7 @@ static NSString* roleValueToNSString(AccessibilityRole value) if ([attributeName isEqualToString: NSAccessibilitySelectedTextRangeAttribute]) { PlainTextRange textRange = m_object->selectedTextRange(); if (textRange.isNull()) - return nil; + return [NSValue valueWithRange:NSMakeRange(0, 0)]; return [NSValue valueWithRange:NSMakeRange(textRange.start, textRange.length)]; } // TODO: Get actual visible range. <rdar://problem/4712101> diff --git a/WebCore/bindings/ScriptControllerBase.h b/WebCore/bindings/ScriptControllerBase.h new file mode 100644 index 0000000..ed6ca62 --- /dev/null +++ b/WebCore/bindings/ScriptControllerBase.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2010 Research in Motion Limited. All rights reserved. + * Copyright (C) 2008 Apple Inc. All rights reserved. + * Copyright (C) 2008 Eric Seidel <eric@webkit.org> + * Copyright (C) 2001 Peter Kelly (pmk@post.com) + * Copyright (C) 1999 Harri Porten (porten@kde.org) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef ScriptControllerBase_h +#define ScriptControllerBase_h + +namespace WebCore { + +enum ReasonForCallingCanExecuteScripts { + AboutToExecuteScript, + NotAboutToExecuteScript +}; + +// Whether to call the XSSAuditor to audit a script before passing it to the JavaScript engine. +enum ShouldAllowXSS { + AllowXSS, + DoNotAllowXSS +}; + +} // namespace WebCore + +#endif // ScriptControllerBase_h diff --git a/WebCore/bindings/generic/RuntimeEnabledFeatures.cpp b/WebCore/bindings/generic/RuntimeEnabledFeatures.cpp index 93ce1ee..7d4e5c1 100644 --- a/WebCore/bindings/generic/RuntimeEnabledFeatures.cpp +++ b/WebCore/bindings/generic/RuntimeEnabledFeatures.cpp @@ -75,6 +75,11 @@ bool RuntimeEnabledFeatures::mediaErrorEnabled() return MediaPlayer::isAvailable(); } +bool RuntimeEnabledFeatures::timeRangesEnabled() +{ + return MediaPlayer::isAvailable(); +} + #endif #if ENABLE(SHARED_WORKERS) diff --git a/WebCore/bindings/generic/RuntimeEnabledFeatures.h b/WebCore/bindings/generic/RuntimeEnabledFeatures.h index 2d62a27..73bbf0f 100644 --- a/WebCore/bindings/generic/RuntimeEnabledFeatures.h +++ b/WebCore/bindings/generic/RuntimeEnabledFeatures.h @@ -63,6 +63,7 @@ public: static bool htmlAudioElementEnabled(); static bool htmlVideoElementEnabled(); static bool mediaErrorEnabled(); + static bool timeRangesEnabled(); #endif #if ENABLE(SHARED_WORKERS) diff --git a/WebCore/bindings/gobject/GObjectEventListener.h b/WebCore/bindings/gobject/GObjectEventListener.h index c65b91e..7ca2cc7 100644 --- a/WebCore/bindings/gobject/GObjectEventListener.h +++ b/WebCore/bindings/gobject/GObjectEventListener.h @@ -21,6 +21,7 @@ #include "EventListener.h" +#include "PlatformString.h" #include <glib-object.h> #include <glib.h> #include <wtf/PassRefPtr.h> diff --git a/WebCore/bindings/js/IDBBindingUtilities.cpp b/WebCore/bindings/js/IDBBindingUtilities.cpp index faa2370..638a23e 100644 --- a/WebCore/bindings/js/IDBBindingUtilities.cpp +++ b/WebCore/bindings/js/IDBBindingUtilities.cpp @@ -26,10 +26,10 @@ #include "config.h" #include "IDBBindingUtilities.h" -#include "IDBKey.h" - #if ENABLE(INDEXED_DATABASE) +#include "IDBKey.h" + namespace WebCore { PassRefPtr<IDBKey> createIDBKeyFromValue(JSC::ExecState* exec, JSC::JSValue value) diff --git a/WebCore/bindings/js/IDBBindingUtilities.h b/WebCore/bindings/js/IDBBindingUtilities.h index 0a2fb790..f410344 100644 --- a/WebCore/bindings/js/IDBBindingUtilities.h +++ b/WebCore/bindings/js/IDBBindingUtilities.h @@ -26,11 +26,11 @@ #ifndef IDBBindingUtilities_h #define IDBBindingUtilities_h -#include "ScriptValue.h" -#include <wtf/PassRefPtr.h> - #if ENABLE(INDEXED_DATABASE) +#include "ScriptValue.h" +#include <wtf/Forward.h> + namespace WebCore { class IDBKey; diff --git a/WebCore/bindings/js/JSBindingsAllInOne.cpp b/WebCore/bindings/js/JSBindingsAllInOne.cpp index c9a77fb..373c0e0 100644 --- a/WebCore/bindings/js/JSBindingsAllInOne.cpp +++ b/WebCore/bindings/js/JSBindingsAllInOne.cpp @@ -97,7 +97,7 @@ #include "JSMessageChannelCustom.cpp" #include "JSMessageEventCustom.cpp" #include "JSMessagePortCustom.cpp" -#include "JSMimeTypeArrayCustom.cpp" +#include "JSDOMMimeTypeArrayCustom.cpp" #include "JSNamedNodeMapCustom.cpp" #include "JSNavigatorCustom.cpp" #include "JSNodeCustom.cpp" @@ -106,8 +106,8 @@ #include "JSNodeIteratorCustom.cpp" #include "JSNodeListCustom.cpp" #include "JSOptionConstructor.cpp" -#include "JSPluginArrayCustom.cpp" -#include "JSPluginCustom.cpp" +#include "JSDOMPluginArrayCustom.cpp" +#include "JSDOMPluginCustom.cpp" #include "JSPluginElementFunctions.cpp" #include "JSPopStateEventCustom.cpp" #include "JSSQLResultSetRowListCustom.cpp" diff --git a/WebCore/bindings/js/JSMimeTypeArrayCustom.cpp b/WebCore/bindings/js/JSDOMMimeTypeArrayCustom.cpp index bdd6ddb..2d41843 100644 --- a/WebCore/bindings/js/JSMimeTypeArrayCustom.cpp +++ b/WebCore/bindings/js/JSDOMMimeTypeArrayCustom.cpp @@ -18,24 +18,24 @@ */ #include "config.h" -#include "JSMimeTypeArray.h" +#include "JSDOMMimeTypeArray.h" #include "AtomicString.h" -#include "JSMimeType.h" -#include "MimeTypeArray.h" +#include "DOMMimeTypeArray.h" +#include "JSDOMMimeType.h" namespace WebCore { using namespace JSC; -bool JSMimeTypeArray::canGetItemsForName(ExecState*, MimeTypeArray* mimeTypeArray, const Identifier& propertyName) +bool JSDOMMimeTypeArray::canGetItemsForName(ExecState*, DOMMimeTypeArray* mimeTypeArray, const Identifier& propertyName) { return mimeTypeArray->canGetItemsForName(identifierToAtomicString(propertyName)); } -JSValue JSMimeTypeArray::nameGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName) +JSValue JSDOMMimeTypeArray::nameGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName) { - JSMimeTypeArray* thisObj = static_cast<JSMimeTypeArray*>(asObject(slotBase)); + JSDOMMimeTypeArray* thisObj = static_cast<JSDOMMimeTypeArray*>(asObject(slotBase)); return toJS(exec, thisObj->impl()->namedItem(identifierToAtomicString(propertyName))); } diff --git a/WebCore/bindings/js/JSPluginArrayCustom.cpp b/WebCore/bindings/js/JSDOMPluginArrayCustom.cpp index b232f4d..abf3148 100644 --- a/WebCore/bindings/js/JSPluginArrayCustom.cpp +++ b/WebCore/bindings/js/JSDOMPluginArrayCustom.cpp @@ -18,24 +18,24 @@ */ #include "config.h" -#include "JSPluginArray.h" +#include "JSDOMPluginArray.h" #include "AtomicString.h" -#include "JSPlugin.h" -#include "PluginArray.h" +#include "DOMPluginArray.h" +#include "JSDOMPlugin.h" namespace WebCore { using namespace JSC; -bool JSPluginArray::canGetItemsForName(ExecState*, PluginArray* pluginArray, const Identifier& propertyName) +bool JSDOMPluginArray::canGetItemsForName(ExecState*, DOMPluginArray* pluginArray, const Identifier& propertyName) { return pluginArray->canGetItemsForName(identifierToAtomicString(propertyName)); } -JSValue JSPluginArray::nameGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName) +JSValue JSDOMPluginArray::nameGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName) { - JSPluginArray* thisObj = static_cast<JSPluginArray*>(asObject(slotBase)); + JSDOMPluginArray* thisObj = static_cast<JSDOMPluginArray*>(asObject(slotBase)); return toJS(exec, thisObj->impl()->namedItem(identifierToAtomicString(propertyName))); } diff --git a/WebCore/bindings/js/JSPluginCustom.cpp b/WebCore/bindings/js/JSDOMPluginCustom.cpp index 9fa0b76..c8d187e 100644 --- a/WebCore/bindings/js/JSPluginCustom.cpp +++ b/WebCore/bindings/js/JSDOMPluginCustom.cpp @@ -17,24 +17,24 @@ */ #include "config.h" -#include "JSPlugin.h" +#include "JSDOMPlugin.h" #include "AtomicString.h" -#include "JSMimeType.h" -#include "Plugin.h" +#include "DOMPlugin.h" +#include "JSDOMMimeType.h" namespace WebCore { using namespace JSC; -bool JSPlugin::canGetItemsForName(ExecState*, Plugin* plugin, const Identifier& propertyName) +bool JSDOMPlugin::canGetItemsForName(ExecState*, DOMPlugin* plugin, const Identifier& propertyName) { return plugin->canGetItemsForName(identifierToAtomicString(propertyName)); } -JSValue JSPlugin::nameGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName) +JSValue JSDOMPlugin::nameGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName) { - JSPlugin* thisObj = static_cast<JSPlugin*>(asObject(slotBase)); + JSDOMPlugin* thisObj = static_cast<JSDOMPlugin*>(asObject(slotBase)); return toJS(exec, thisObj->impl()->namedItem(identifierToAtomicString(propertyName))); } diff --git a/WebCore/bindings/js/JSIDBAnyCustom.cpp b/WebCore/bindings/js/JSIDBAnyCustom.cpp index 43a79a2..b7c845e 100644 --- a/WebCore/bindings/js/JSIDBAnyCustom.cpp +++ b/WebCore/bindings/js/JSIDBAnyCustom.cpp @@ -11,9 +11,6 @@ * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT @@ -37,10 +34,12 @@ #include "IDBAny.h" #include "IDBDatabaseRequest.h" #include "IDBIndexRequest.h" +#include "IDBKey.h" #include "IDBObjectStoreRequest.h" #include "IndexedDatabaseRequest.h" #include "JSIDBDatabaseRequest.h" #include "JSIDBIndexRequest.h" +#include "JSIDBKey.h" #include "JSIDBObjectStoreRequest.h" #include "JSIndexedDatabaseRequest.h" #include "SerializedScriptValue.h" @@ -63,6 +62,8 @@ JSValue toJS(ExecState* exec, JSDOMGlobalObject* globalObject, IDBAny* idbAny) return toJS(exec, globalObject, idbAny->idbDatabaseRequest()); case IDBAny::IDBIndexRequestType: return toJS(exec, globalObject, idbAny->idbIndexRequest()); + case IDBAny::IDBKeyType: + return toJS(exec, globalObject, idbAny->idbKey()); case IDBAny::IDBObjectStoreRequestType: return toJS(exec, globalObject, idbAny->idbObjectStoreRequest()); case IDBAny::IndexedDatabaseRequestType: diff --git a/WebCore/bindings/js/JSSharedWorkerCustom.cpp b/WebCore/bindings/js/JSSharedWorkerCustom.cpp index 261ae2b..0d576e0 100644 --- a/WebCore/bindings/js/JSSharedWorkerCustom.cpp +++ b/WebCore/bindings/js/JSSharedWorkerCustom.cpp @@ -70,7 +70,10 @@ EncodedJSValue JSC_HOST_CALL JSSharedWorkerConstructor::constructJSSharedWorker( DOMWindow* window = asJSDOMWindow(exec->lexicalGlobalObject())->impl(); ExceptionCode ec = 0; RefPtr<SharedWorker> worker = SharedWorker::create(ustringToString(scriptURL), ustringToString(name), window->document(), ec); - setDOMException(exec, ec); + if (ec) { + setDOMException(exec, ec); + return JSValue::encode(JSValue()); + } return JSValue::encode(asObject(toJS(exec, jsConstructor->globalObject(), worker.release()))); } diff --git a/WebCore/bindings/js/ScriptCallStack.cpp b/WebCore/bindings/js/ScriptCallStack.cpp index 86ddcd1..c9bb8b0 100644 --- a/WebCore/bindings/js/ScriptCallStack.cpp +++ b/WebCore/bindings/js/ScriptCallStack.cpp @@ -100,7 +100,7 @@ void ScriptCallStack::initialize() m_initialized = true; } -bool ScriptCallStack::stackTrace(int, ScriptState*, ScriptArray&) +bool ScriptCallStack::stackTrace(int, const RefPtr<InspectorArray>&) { return false; } diff --git a/WebCore/bindings/js/ScriptCallStack.h b/WebCore/bindings/js/ScriptCallStack.h index 6cf7679..e461ac3 100644 --- a/WebCore/bindings/js/ScriptCallStack.h +++ b/WebCore/bindings/js/ScriptCallStack.h @@ -36,6 +36,7 @@ #include "ScriptState.h" #include "ScriptString.h" #include <wtf/Noncopyable.h> +#include <wtf/RefPtr.h> namespace JSC { class ExecState; @@ -44,6 +45,8 @@ namespace JSC { namespace WebCore { + class InspectorArray; + class ScriptCallStack : public Noncopyable { public: ScriptCallStack(JSC::ExecState*, unsigned skipArgumentCount = 0); @@ -54,7 +57,7 @@ namespace WebCore { // frame retrieval methods const ScriptCallFrame &at(unsigned); unsigned size(); - static bool stackTrace(int, ScriptState*, ScriptArray&); + static bool stackTrace(int, const RefPtr<InspectorArray>&); private: void initialize(); diff --git a/WebCore/bindings/js/ScriptController.h b/WebCore/bindings/js/ScriptController.h index 0debf39..c382a93 100644 --- a/WebCore/bindings/js/ScriptController.h +++ b/WebCore/bindings/js/ScriptController.h @@ -23,6 +23,7 @@ #define ScriptController_h #include "JSDOMWindowShell.h" +#include "ScriptControllerBase.h" #include "ScriptInstance.h" #include <runtime/Protect.h> #include <wtf/RefPtr.h> @@ -62,17 +63,6 @@ class XSSAuditor; typedef HashMap<void*, RefPtr<JSC::Bindings::RootObject> > RootObjectMap; -enum ReasonForCallingCanExecuteScripts { - AboutToExecuteScript, - NotAboutToExecuteScript -}; - -// Whether to call the XSSAuditor to audit a script before passing it to the JavaScript engine. -enum ShouldAllowXSS { - AllowXSS, - DoNotAllowXSS -}; - class ScriptController { friend class ScriptCachedFrameData; typedef WTF::HashMap< RefPtr<DOMWrapperWorld>, JSC::ProtectedPtr<JSDOMWindowShell> > ShellMap; diff --git a/WebCore/bindings/js/ScriptDebugServer.cpp b/WebCore/bindings/js/ScriptDebugServer.cpp index d1b5112..0a40f13 100644 --- a/WebCore/bindings/js/ScriptDebugServer.cpp +++ b/WebCore/bindings/js/ScriptDebugServer.cpp @@ -568,7 +568,11 @@ void ScriptDebugServer::recompileAllJSFunctionsSoon() void ScriptDebugServer::recompileAllJSFunctions(Timer<ScriptDebugServer>*) { JSLock lock(SilenceAssertionsOnly); - Debugger::recompileAllJSFunctions(JSDOMWindow::commonJSGlobalData()); + // If JavaScript stack is not empty postpone recompilation. + if (JSDOMWindow::commonJSGlobalData()->dynamicGlobalObject) + recompileAllJSFunctionsSoon(); + else + Debugger::recompileAllJSFunctions(JSDOMWindow::commonJSGlobalData()); } void ScriptDebugServer::didAddListener(Page* page) diff --git a/WebCore/bindings/js/ScriptEventListener.cpp b/WebCore/bindings/js/ScriptEventListener.cpp index 467f16b..d2baf82 100644 --- a/WebCore/bindings/js/ScriptEventListener.cpp +++ b/WebCore/bindings/js/ScriptEventListener.cpp @@ -105,18 +105,18 @@ PassRefPtr<JSLazyEventListener> createAttributeEventListener(Frame* frame, Attri return JSLazyEventListener::create(attr->localName().string(), eventParameterName(frame->document()->isSVGDocument()), attr->value(), 0, sourceURL, lineNumber, wrapper, mainThreadNormalWorld()); } -String eventListenerHandlerBody(ScriptExecutionContext* context, ScriptState* scriptState, EventListener* eventListener) +String eventListenerHandlerBody(Document* document, EventListener* eventListener) { const JSEventListener* jsListener = JSEventListener::cast(eventListener); if (!jsListener) return ""; - JSC::JSObject* jsFunction = jsListener->jsFunction(context); + JSC::JSObject* jsFunction = jsListener->jsFunction(document); if (!jsFunction) return ""; - return ustringToString(jsFunction->toString(scriptState)); + return ustringToString(jsFunction->toString(scriptStateFromNode(jsListener->isolatedWorld(), document))); } -bool eventListenerHandlerLocation(ScriptExecutionContext*, ScriptState*, EventListener*, String&, int&) +bool eventListenerHandlerLocation(Document*, EventListener*, String&, int&) { // FIXME: Add support for getting function location. return false; diff --git a/WebCore/bindings/js/ScriptEventListener.h b/WebCore/bindings/js/ScriptEventListener.h index f1f203c..f96f31e 100644 --- a/WebCore/bindings/js/ScriptEventListener.h +++ b/WebCore/bindings/js/ScriptEventListener.h @@ -45,8 +45,8 @@ namespace WebCore { PassRefPtr<JSLazyEventListener> createAttributeEventListener(Node*, Attribute*); PassRefPtr<JSLazyEventListener> createAttributeEventListener(Frame*, Attribute*); - String eventListenerHandlerBody(ScriptExecutionContext*, ScriptState*, EventListener*); - bool eventListenerHandlerLocation(ScriptExecutionContext*, ScriptState*, EventListener*, String& sourceName, int& lineNumber); + String eventListenerHandlerBody(Document*, EventListener*); + bool eventListenerHandlerLocation(Document*, EventListener*, String& sourceName, int& lineNumber); } // namespace WebCore #endif // ScriptEventListener_h diff --git a/WebCore/bindings/scripts/CodeGenerator.pm b/WebCore/bindings/scripts/CodeGenerator.pm index fbcee02..d106920 100644 --- a/WebCore/bindings/scripts/CodeGenerator.pm +++ b/WebCore/bindings/scripts/CodeGenerator.pm @@ -3,7 +3,7 @@ # # Copyright (C) 2005 Nikolas Zimmermann <wildfox@kde.org> # Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com> -# Copyright (C) 2007 Apple Inc. All rights reserved. +# Copyright (C) 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. # Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au> # # This library is free software; you can redistribute it and/or @@ -83,6 +83,7 @@ sub new $useLayerOnTop = shift; $preprocessor = shift; $writeDependencies = shift; + $verbose = shift; bless($reference, $object); return $reference; @@ -103,10 +104,10 @@ sub ProcessDocument $defines = shift; my $ifaceName = "CodeGenerator" . $useGenerator; + require $ifaceName . ".pm"; # Dynamically load external code generation perl module - require $ifaceName . ".pm"; - $codeGenerator = $ifaceName->new($object, $useOutputDir, $useLayerOnTop, $preprocessor, $writeDependencies); + $codeGenerator = $ifaceName->new($object, $useOutputDir, $useLayerOnTop, $preprocessor, $writeDependencies, $verbose); unless (defined($codeGenerator)) { my $classes = $useDocument->classes; foreach my $class (@$classes) { @@ -401,8 +402,7 @@ sub ContentAttributeName { my ($generator, $implIncludes, $interfaceName, $attribute) = @_; - my $contentAttributeName = $attribute->signature->extendedAttributes->{"Reflect"} - || $attribute->signature->extendedAttributes->{"ReflectURL"}; + my $contentAttributeName = $attribute->signature->extendedAttributes->{"Reflect"}; return undef if !$contentAttributeName; $contentAttributeName = lc $generator->AttributeNameForGetterAndSetter($attribute) if $contentAttributeName eq "1"; @@ -424,8 +424,12 @@ sub GetterExpressionPrefix } my $functionName; - if ($attribute->signature->extendedAttributes->{"ReflectURL"}) { - $functionName = "getURLAttribute"; + if ($attribute->signature->extendedAttributes->{"URL"}) { + if ($attribute->signature->extendedAttributes->{"NonEmpty"}) { + $functionName = "getNonEmptyURLAttribute"; + } else { + $functionName = "getURLAttribute"; + } } elsif ($attribute->signature->type eq "boolean") { $functionName = "hasAttribute"; } elsif ($attribute->signature->type eq "long") { diff --git a/WebCore/bindings/scripts/CodeGeneratorJS.pm b/WebCore/bindings/scripts/CodeGeneratorJS.pm index 4c0cbe1..a0a2098 100644 --- a/WebCore/bindings/scripts/CodeGeneratorJS.pm +++ b/WebCore/bindings/scripts/CodeGeneratorJS.pm @@ -210,6 +210,11 @@ sub GetVisibleClassName return "DOMException" if $className eq "DOMCoreException"; return "FormData" if $className eq "DOMFormData"; + return "MimeType" if $className eq "DOMMimeType"; + return "MimeTypeArray" if $className eq "DOMMimeTypeArray"; + return "Plugin" if $className eq "DOMPlugin"; + return "PluginArray" if $className eq "DOMPluginArray"; + return $className; } @@ -2317,7 +2322,7 @@ sub JSValueToNative return "static_cast<SVGPaint::SVGPaintType>($value.toInt32(exec))" if $type eq "SVGPaintType"; if ($type eq "DOMString") { - return "valueToStringWithNullCheck(exec, $value)" if $signature->extendedAttributes->{"ConvertNullToNullString"} || $signature->extendedAttributes->{"Reflect"} || $signature->extendedAttributes->{"ReflectURL"}; + return "valueToStringWithNullCheck(exec, $value)" if $signature->extendedAttributes->{"ConvertNullToNullString"} || $signature->extendedAttributes->{"Reflect"}; return "valueToStringWithUndefinedOrNullCheck(exec, $value)" if $signature->extendedAttributes->{"ConvertUndefinedOrNullToNullString"}; return "ustringToString($value.toString(exec))"; } diff --git a/WebCore/bindings/scripts/CodeGeneratorV8.pm b/WebCore/bindings/scripts/CodeGeneratorV8.pm index 1ae0f8f..383bb74 100644 --- a/WebCore/bindings/scripts/CodeGeneratorV8.pm +++ b/WebCore/bindings/scripts/CodeGeneratorV8.pm @@ -675,7 +675,8 @@ END END } else { my $reflect = $attribute->signature->extendedAttributes->{"Reflect"}; - if ($getterStringUsesImp && $reflect && IsNodeSubType($dataNode) && $codeGenerator->IsStringType($attrType)) { + my $url = $attribute->signature->extendedAttributes->{"URL"}; + if ($getterStringUsesImp && $reflect && !$url && IsNodeSubType($dataNode) && $codeGenerator->IsStringType($attrType)) { # Generate super-compact call for regular attribute getter: my $contentAttributeName = $reflect eq "1" ? lc $attrName : $reflect; my $namespace = $codeGenerator->NamespaceForAttributeName($interfaceName, $contentAttributeName); @@ -863,10 +864,9 @@ END } else { my $attrType = GetTypeFromSignature($attribute->signature); my $reflect = $attribute->signature->extendedAttributes->{"Reflect"}; - my $reflectURL = $attribute->signature->extendedAttributes->{"ReflectURL"}; - if (($reflect || $reflectURL) && IsNodeSubType($dataNode) && $codeGenerator->IsStringType($attrType)) { + if ($reflect && IsNodeSubType($dataNode) && $codeGenerator->IsStringType($attrType)) { # Generate super-compact call for regular attribute setter: - my $contentAttributeName = ($reflect || $reflectURL) eq "1" ? lc $attrName : ($reflect || $reflectURL); + my $contentAttributeName = $reflect eq "1" ? lc $attrName : $reflect; my $namespace = $codeGenerator->NamespaceForAttributeName($interfaceName, $contentAttributeName); $implIncludes{"${namespace}.h"} = 1; push(@implContentDecls, " setElementStringAttr(info, ${namespace}::${contentAttributeName}Attr, value);\n"); @@ -2678,7 +2678,7 @@ sub GetNativeTypeFromSignature my $mode = ""; if ($signature->extendedAttributes->{"ConvertUndefinedOrNullToNullString"}) { $mode = "WithUndefinedOrNullCheck"; - } elsif ($signature->extendedAttributes->{"ConvertNullToNullString"} || $signature->extendedAttributes->{"Reflect"} || $signature->extendedAttributes->{"ReflectURL"}) { + } elsif ($signature->extendedAttributes->{"ConvertNullToNullString"} || $signature->extendedAttributes->{"Reflect"}) { $mode = "WithNullCheck"; } $type .= "<$mode>"; diff --git a/WebCore/bindings/scripts/IDLParser.pm b/WebCore/bindings/scripts/IDLParser.pm index 3df96ab..e250a4d 100644 --- a/WebCore/bindings/scripts/IDLParser.pm +++ b/WebCore/bindings/scripts/IDLParser.pm @@ -259,7 +259,7 @@ sub ParseInterface my @interfaceMethods = split(/;/, $interfaceData); foreach my $line (@interfaceMethods) { - if ($line =~ /attribute/) { + if ($line =~ /\Wattribute\W/) { $line =~ /$IDLStructure::interfaceAttributeSelector/; my $attributeType = (defined($1) ? $1 : die("Parsing error!\nSource:\n$line\n)")); diff --git a/WebCore/bindings/scripts/InFilesParser.pm b/WebCore/bindings/scripts/InFilesParser.pm index c6b3644..6539380 100644 --- a/WebCore/bindings/scripts/InFilesParser.pm +++ b/WebCore/bindings/scripts/InFilesParser.pm @@ -85,6 +85,10 @@ sub parse($) my $perTagHandler = shift; foreach (<$fileStream>) { + # Ignore whitespace, in case the .in files have the wrong EOL + # markers and those are getting treated as whitespace. + $_ = trimWS($_); + # Empty line, change from common parameter part # to per tag part if we have started parsing. if (/^$/) { diff --git a/WebCore/bindings/scripts/generate-bindings.pl b/WebCore/bindings/scripts/generate-bindings.pl index 44ed4d3..b293b3c 100755 --- a/WebCore/bindings/scripts/generate-bindings.pl +++ b/WebCore/bindings/scripts/generate-bindings.pl @@ -41,30 +41,36 @@ my @idlDirectories; my $outputDirectory; my $generator; my $defines; +my $prefix; my $preprocessor; my $writeDependencies; +my $verbose; GetOptions('include=s@' => \@idlDirectories, 'outputDir=s' => \$outputDirectory, 'generator=s' => \$generator, 'defines=s' => \$defines, + 'prefix=s' => \$prefix, 'preprocessor=s' => \$preprocessor, + 'verbose' => \$verbose, 'write-dependencies' => \$writeDependencies); my $idlFile = $ARGV[0]; die('Must specify input file.') unless defined($idlFile); -die('Must specify IDL search path.') unless @idlDirectories; die('Must specify generator') unless defined($generator); die('Must specify output directory.') unless defined($outputDirectory); die('Must specify defines') unless defined($defines); +if ($verbose) { + print "$generator: $idlFile\n"; +} $defines =~ s/^\s+|\s+$//g; # trim whitespace # Parse the given IDL file. -my $parser = IDLParser->new(1); +my $parser = IDLParser->new(!$verbose); my $document = $parser->Parse($idlFile, $defines, $preprocessor); # Generate desired output for given IDL file. -my $codeGen = CodeGenerator->new(\@idlDirectories, $generator, $outputDirectory, 0, $preprocessor, $writeDependencies); +my $codeGen = CodeGenerator->new(\@idlDirectories, $generator, $outputDirectory, 0, $preprocessor, $writeDependencies, $verbose); $codeGen->ProcessDocument($document, $defines); diff --git a/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp b/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp index ee8afcf..179b301 100644 --- a/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp +++ b/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp @@ -240,6 +240,22 @@ void WebDOMTestObj::setReflectedURLAttr(const WebDOMString& newReflectedURLAttr) impl()->setAttribute(WebCore::HTMLNames::reflectedurlattrAttr, newReflectedURLAttr); } +WebDOMString WebDOMTestObj::reflectedNonEmptyURLAttr() const +{ + if (!impl()) + return WebDOMString(); + + return static_cast<const WebCore::String&>(impl()->getNonEmptyURLAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr)); +} + +void WebDOMTestObj::setReflectedNonEmptyURLAttr(const WebDOMString& newReflectedNonEmptyURLAttr) +{ + if (!impl()) + return; + + impl()->setAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr, newReflectedNonEmptyURLAttr); +} + WebDOMString WebDOMTestObj::reflectedStringAttr() const { if (!impl()) @@ -288,7 +304,7 @@ void WebDOMTestObj::setReflectedCustomBooleanAttr(bool newReflectedCustomBoolean impl()->setBooleanAttribute(WebCore::HTMLNames::customContentBooleanAttrAttr, newReflectedCustomBooleanAttr); } -WebDOMString WebDOMTestObj::reflectedURLAttr() const +WebDOMString WebDOMTestObj::reflectedCustomURLAttr() const { if (!impl()) return WebDOMString(); @@ -296,12 +312,28 @@ WebDOMString WebDOMTestObj::reflectedURLAttr() const return static_cast<const WebCore::String&>(impl()->getURLAttribute(WebCore::HTMLNames::customContentURLAttrAttr)); } -void WebDOMTestObj::setReflectedURLAttr(const WebDOMString& newReflectedURLAttr) +void WebDOMTestObj::setReflectedCustomURLAttr(const WebDOMString& newReflectedCustomURLAttr) +{ + if (!impl()) + return; + + impl()->setAttribute(WebCore::HTMLNames::customContentURLAttrAttr, newReflectedCustomURLAttr); +} + +WebDOMString WebDOMTestObj::reflectedCustomNonEmptyURLAttr() const +{ + if (!impl()) + return WebDOMString(); + + return static_cast<const WebCore::String&>(impl()->getNonEmptyURLAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr)); +} + +void WebDOMTestObj::setReflectedCustomNonEmptyURLAttr(const WebDOMString& newReflectedCustomNonEmptyURLAttr) { if (!impl()) return; - impl()->setAttribute(WebCore::HTMLNames::customContentURLAttrAttr, newReflectedURLAttr); + impl()->setAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr, newReflectedCustomNonEmptyURLAttr); } int WebDOMTestObj::attrWithGetterException() const diff --git a/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h b/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h index cdd47ed..1eb5ed3 100644 --- a/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h +++ b/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h @@ -63,14 +63,18 @@ public: void setReflectedBooleanAttr(bool); WebDOMString reflectedURLAttr() const; void setReflectedURLAttr(const WebDOMString&); + WebDOMString reflectedNonEmptyURLAttr() const; + void setReflectedNonEmptyURLAttr(const WebDOMString&); WebDOMString reflectedStringAttr() const; void setReflectedStringAttr(const WebDOMString&); int reflectedCustomIntegralAttr() const; void setReflectedCustomIntegralAttr(int); bool reflectedCustomBooleanAttr() const; void setReflectedCustomBooleanAttr(bool); - WebDOMString reflectedURLAttr() const; - void setReflectedURLAttr(const WebDOMString&); + WebDOMString reflectedCustomURLAttr() const; + void setReflectedCustomURLAttr(const WebDOMString&); + WebDOMString reflectedCustomNonEmptyURLAttr() const; + void setReflectedCustomNonEmptyURLAttr(const WebDOMString&); int attrWithGetterException() const; void setAttrWithGetterException(int); int attrWithSetterException() const; diff --git a/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp b/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp index 3fcd3f7..b4b6787 100644 --- a/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp +++ b/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp @@ -180,6 +180,7 @@ webkit_dom_test_obj_serialized_value(WebKitDOMTestObj* self, WebKitDOMSerialized void webkit_dom_test_obj_idb_key(WebKitDOMTestObj* self, WebKitDOMIDBKey* key) { + WebCore::JSMainThreadNullState state; g_return_if_fail(self); WebCore::TestObj * item = WebKit::core(self); g_return_if_fail(key); @@ -555,6 +556,27 @@ webkit_dom_test_obj_set_reflected_url_attr(WebKitDOMTestObj* self, gchar* value } gchar* +webkit_dom_test_obj_get_reflected_non_empty_url_attr(WebKitDOMTestObj* self) +{ + WebCore::JSMainThreadNullState state; + g_return_val_if_fail(self, 0); + WebCore::TestObj * item = WebKit::core(self); + gchar* res = convertToUTF8String(item->getNonEmptyURLAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr)); + return res; +} + +void +webkit_dom_test_obj_set_reflected_non_empty_url_attr(WebKitDOMTestObj* self, gchar* value) +{ + WebCore::JSMainThreadNullState state; + g_return_if_fail(self); + WebCore::TestObj * item = WebKit::core(self); + g_return_if_fail(value); + WebCore::String converted_value = WebCore::String::fromUTF8(value); + item->setAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr, converted_value); +} + +gchar* webkit_dom_test_obj_get_reflected_string_attr(WebKitDOMTestObj* self) { WebCore::JSMainThreadNullState state; @@ -614,7 +636,7 @@ webkit_dom_test_obj_set_reflected_custom_boolean_attr(WebKitDOMTestObj* self, gb } gchar* -webkit_dom_test_obj_get_reflected_url_attr(WebKitDOMTestObj* self) +webkit_dom_test_obj_get_reflected_custom_url_attr(WebKitDOMTestObj* self) { WebCore::JSMainThreadNullState state; g_return_val_if_fail(self, 0); @@ -624,7 +646,7 @@ webkit_dom_test_obj_get_reflected_url_attr(WebKitDOMTestObj* self) } void -webkit_dom_test_obj_set_reflected_url_attr(WebKitDOMTestObj* self, gchar* value) +webkit_dom_test_obj_set_reflected_custom_url_attr(WebKitDOMTestObj* self, gchar* value) { WebCore::JSMainThreadNullState state; g_return_if_fail(self); @@ -634,6 +656,27 @@ webkit_dom_test_obj_set_reflected_url_attr(WebKitDOMTestObj* self, gchar* value item->setAttribute(WebCore::HTMLNames::customContentURLAttrAttr, converted_value); } +gchar* +webkit_dom_test_obj_get_reflected_custom_non_empty_url_attr(WebKitDOMTestObj* self) +{ + WebCore::JSMainThreadNullState state; + g_return_val_if_fail(self, 0); + WebCore::TestObj * item = WebKit::core(self); + gchar* res = convertToUTF8String(item->getNonEmptyURLAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr)); + return res; +} + +void +webkit_dom_test_obj_set_reflected_custom_non_empty_url_attr(WebKitDOMTestObj* self, gchar* value) +{ + WebCore::JSMainThreadNullState state; + g_return_if_fail(self); + WebCore::TestObj * item = WebKit::core(self); + g_return_if_fail(value); + WebCore::String converted_value = WebCore::String::fromUTF8(value); + item->setAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr, converted_value); +} + glong webkit_dom_test_obj_get_attr_with_getter_exception(WebKitDOMTestObj* self, GError **error) { @@ -893,10 +936,12 @@ enum { PROP_REFLECTED_INTEGRAL_ATTR, PROP_REFLECTED_BOOLEAN_ATTR, PROP_REFLECTED_URL_ATTR, + PROP_REFLECTED_NON_EMPTY_URL_ATTR, PROP_REFLECTED_STRING_ATTR, PROP_REFLECTED_CUSTOM_INTEGRAL_ATTR, PROP_REFLECTED_CUSTOM_BOOLEAN_ATTR, - PROP_REFLECTED_URL_ATTR, + PROP_REFLECTED_CUSTOM_URL_ATTR, + PROP_REFLECTED_CUSTOM_NON_EMPTY_URL_ATTR, PROP_ATTR_WITH_GETTER_EXCEPTION, PROP_ATTR_WITH_SETTER_EXCEPTION, PROP_STRING_ATTR_WITH_GETTER_EXCEPTION, @@ -975,6 +1020,11 @@ static void webkit_dom_test_obj_set_property(GObject* object, guint prop_id, con coreSelf->setAttribute(WebCore::HTMLNames::reflectedurlattrAttr, WebCore::String::fromUTF8(g_value_get_string(value))); break; } + case PROP_REFLECTED_NON_EMPTY_URL_ATTR: + { + coreSelf->setAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr, WebCore::String::fromUTF8(g_value_get_string(value))); + break; + } case PROP_REFLECTED_STRING_ATTR: { coreSelf->setAttribute(WebCore::HTMLNames::customContentStringAttrAttr, WebCore::String::fromUTF8(g_value_get_string(value))); @@ -990,11 +1040,16 @@ static void webkit_dom_test_obj_set_property(GObject* object, guint prop_id, con coreSelf->setBooleanAttribute(WebCore::HTMLNames::customContentBooleanAttrAttr, (g_value_get_boolean(value))); break; } - case PROP_REFLECTED_URL_ATTR: + case PROP_REFLECTED_CUSTOM_URL_ATTR: { coreSelf->setAttribute(WebCore::HTMLNames::customContentURLAttrAttr, WebCore::String::fromUTF8(g_value_get_string(value))); break; } + case PROP_REFLECTED_CUSTOM_NON_EMPTY_URL_ATTR: + { + coreSelf->setAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr, WebCore::String::fromUTF8(g_value_get_string(value))); + break; + } case PROP_ATTR_WITH_GETTER_EXCEPTION: { WebCore::ExceptionCode ec = 0; @@ -1120,6 +1175,11 @@ static void webkit_dom_test_obj_get_property(GObject* object, guint prop_id, GVa g_value_take_string(value, convertToUTF8String(coreSelf->getURLAttribute(WebCore::HTMLNames::reflectedurlattrAttr))); break; } + case PROP_REFLECTED_NON_EMPTY_URL_ATTR: + { + g_value_take_string(value, convertToUTF8String(coreSelf->getNonEmptyURLAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr))); + break; + } case PROP_REFLECTED_STRING_ATTR: { g_value_take_string(value, convertToUTF8String(coreSelf->getAttribute(WebCore::HTMLNames::customContentStringAttrAttr))); @@ -1135,11 +1195,16 @@ static void webkit_dom_test_obj_get_property(GObject* object, guint prop_id, GVa g_value_set_boolean(value, coreSelf->hasAttribute(WebCore::HTMLNames::customContentBooleanAttrAttr)); break; } - case PROP_REFLECTED_URL_ATTR: + case PROP_REFLECTED_CUSTOM_URL_ATTR: { g_value_take_string(value, convertToUTF8String(coreSelf->getURLAttribute(WebCore::HTMLNames::customContentURLAttrAttr))); break; } + case PROP_REFLECTED_CUSTOM_NON_EMPTY_URL_ATTR: + { + g_value_take_string(value, convertToUTF8String(coreSelf->getNonEmptyURLAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr))); + break; + } case PROP_ATTR_WITH_GETTER_EXCEPTION: { WebCore::ExceptionCode ec = 0; @@ -1320,6 +1385,13 @@ G_MAXLONG, /* max */ "", /* default */ WEBKIT_PARAM_READWRITE)); g_object_class_install_property(gobjectClass, + PROP_REFLECTED_NON_EMPTY_URL_ATTR, + g_param_spec_string("reflected-non-empty-url-attr", /* name */ + "test_obj_reflected-non-empty-url-attr", /* short description */ + "read-write gchar* TestObj.reflected-non-empty-url-attr", /* longer - could do with some extra doc stuff here */ + "", /* default */ + WEBKIT_PARAM_READWRITE)); + g_object_class_install_property(gobjectClass, PROP_REFLECTED_STRING_ATTR, g_param_spec_string("reflected-string-attr", /* name */ "test_obj_reflected-string-attr", /* short description */ @@ -1343,10 +1415,17 @@ G_MAXLONG, /* max */ FALSE, /* default */ WEBKIT_PARAM_READWRITE)); g_object_class_install_property(gobjectClass, - PROP_REFLECTED_URL_ATTR, - g_param_spec_string("reflected-url-attr", /* name */ - "test_obj_reflected-url-attr", /* short description */ - "read-write gchar* TestObj.reflected-url-attr", /* longer - could do with some extra doc stuff here */ + PROP_REFLECTED_CUSTOM_URL_ATTR, + g_param_spec_string("reflected-custom-url-attr", /* name */ + "test_obj_reflected-custom-url-attr", /* short description */ + "read-write gchar* TestObj.reflected-custom-url-attr", /* longer - could do with some extra doc stuff here */ + "", /* default */ + WEBKIT_PARAM_READWRITE)); + g_object_class_install_property(gobjectClass, + PROP_REFLECTED_CUSTOM_NON_EMPTY_URL_ATTR, + g_param_spec_string("reflected-custom-non-empty-url-attr", /* name */ + "test_obj_reflected-custom-non-empty-url-attr", /* short description */ + "read-write gchar* TestObj.reflected-custom-non-empty-url-attr", /* longer - could do with some extra doc stuff here */ "", /* default */ WEBKIT_PARAM_READWRITE)); g_object_class_install_property(gobjectClass, diff --git a/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h b/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h index 61c3d95..baf278c 100644 --- a/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h +++ b/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h @@ -188,6 +188,12 @@ WEBKIT_API void webkit_dom_test_obj_set_reflected_url_attr(WebKitDOMTestObj* self, gchar* value); WEBKIT_API gchar* +webkit_dom_test_obj_get_reflected_non_empty_url_attr(WebKitDOMTestObj* self); + +WEBKIT_API void +webkit_dom_test_obj_set_reflected_non_empty_url_attr(WebKitDOMTestObj* self, gchar* value); + +WEBKIT_API gchar* webkit_dom_test_obj_get_reflected_string_attr(WebKitDOMTestObj* self); WEBKIT_API void @@ -206,10 +212,16 @@ WEBKIT_API void webkit_dom_test_obj_set_reflected_custom_boolean_attr(WebKitDOMTestObj* self, gboolean value); WEBKIT_API gchar* -webkit_dom_test_obj_get_reflected_url_attr(WebKitDOMTestObj* self); +webkit_dom_test_obj_get_reflected_custom_url_attr(WebKitDOMTestObj* self); WEBKIT_API void -webkit_dom_test_obj_set_reflected_url_attr(WebKitDOMTestObj* self, gchar* value); +webkit_dom_test_obj_set_reflected_custom_url_attr(WebKitDOMTestObj* self, gchar* value); + +WEBKIT_API gchar* +webkit_dom_test_obj_get_reflected_custom_non_empty_url_attr(WebKitDOMTestObj* self); + +WEBKIT_API void +webkit_dom_test_obj_set_reflected_custom_non_empty_url_attr(WebKitDOMTestObj* self, gchar* value); WEBKIT_API glong webkit_dom_test_obj_get_attr_with_getter_exception(WebKitDOMTestObj* self, GError **error); diff --git a/WebCore/bindings/scripts/test/JS/JSTestObj.cpp b/WebCore/bindings/scripts/test/JS/JSTestObj.cpp index 31a3f70..2f561f9 100644 --- a/WebCore/bindings/scripts/test/JS/JSTestObj.cpp +++ b/WebCore/bindings/scripts/test/JS/JSTestObj.cpp @@ -49,7 +49,7 @@ ASSERT_CLASS_FITS_IN_CELL(JSTestObj); #define THUNK_GENERATOR(generator) #endif -static const HashTableValue JSTestObjTableValues[30] = +static const HashTableValue JSTestObjTableValues[32] = { { "readOnlyIntAttr", DontDelete | ReadOnly, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReadOnlyIntAttr), (intptr_t)0 THUNK_GENERATOR(0) }, { "readOnlyStringAttr", DontDelete | ReadOnly, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReadOnlyStringAttr), (intptr_t)0 THUNK_GENERATOR(0) }, @@ -63,10 +63,12 @@ static const HashTableValue JSTestObjTableValues[30] = { "reflectedIntegralAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedIntegralAttr), (intptr_t)setJSTestObjReflectedIntegralAttr THUNK_GENERATOR(0) }, { "reflectedBooleanAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedBooleanAttr), (intptr_t)setJSTestObjReflectedBooleanAttr THUNK_GENERATOR(0) }, { "reflectedURLAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedURLAttr), (intptr_t)setJSTestObjReflectedURLAttr THUNK_GENERATOR(0) }, + { "reflectedNonEmptyURLAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedNonEmptyURLAttr), (intptr_t)setJSTestObjReflectedNonEmptyURLAttr THUNK_GENERATOR(0) }, { "reflectedStringAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedStringAttr), (intptr_t)setJSTestObjReflectedStringAttr THUNK_GENERATOR(0) }, { "reflectedCustomIntegralAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomIntegralAttr), (intptr_t)setJSTestObjReflectedCustomIntegralAttr THUNK_GENERATOR(0) }, { "reflectedCustomBooleanAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomBooleanAttr), (intptr_t)setJSTestObjReflectedCustomBooleanAttr THUNK_GENERATOR(0) }, - { "reflectedURLAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedURLAttr), (intptr_t)setJSTestObjReflectedURLAttr THUNK_GENERATOR(0) }, + { "reflectedCustomURLAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomURLAttr), (intptr_t)setJSTestObjReflectedCustomURLAttr THUNK_GENERATOR(0) }, + { "reflectedCustomNonEmptyURLAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomNonEmptyURLAttr), (intptr_t)setJSTestObjReflectedCustomNonEmptyURLAttr THUNK_GENERATOR(0) }, { "attrWithGetterException", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttrWithGetterException), (intptr_t)setJSTestObjAttrWithGetterException THUNK_GENERATOR(0) }, { "attrWithSetterException", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttrWithSetterException), (intptr_t)setJSTestObjAttrWithSetterException THUNK_GENERATOR(0) }, { "stringAttrWithGetterException", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttrWithGetterException), (intptr_t)setJSTestObjStringAttrWithGetterException THUNK_GENERATOR(0) }, @@ -90,7 +92,7 @@ static const HashTableValue JSTestObjTableValues[30] = }; #undef THUNK_GENERATOR -static JSC_CONST_HASHTABLE HashTable JSTestObjTable = { 69, 63, JSTestObjTableValues, 0 }; +static JSC_CONST_HASHTABLE HashTable JSTestObjTable = { 68, 63, JSTestObjTableValues, 0 }; /* Hash table for constructor */ #if ENABLE(JIT) #define THUNK_GENERATOR(generator) , generator @@ -336,6 +338,15 @@ JSValue jsTestObjReflectedURLAttr(ExecState* exec, JSValue slotBase, const Ident return result; } +JSValue jsTestObjReflectedNonEmptyURLAttr(ExecState* exec, JSValue slotBase, const Identifier&) +{ + JSTestObj* castedThis = static_cast<JSTestObj*>(asObject(slotBase)); + UNUSED_PARAM(exec); + TestObj* imp = static_cast<TestObj*>(castedThis->impl()); + JSValue result = jsString(exec, imp->getNonEmptyURLAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr)); + return result; +} + JSValue jsTestObjReflectedStringAttr(ExecState* exec, JSValue slotBase, const Identifier&) { JSTestObj* castedThis = static_cast<JSTestObj*>(asObject(slotBase)); @@ -363,7 +374,7 @@ JSValue jsTestObjReflectedCustomBooleanAttr(ExecState* exec, JSValue slotBase, c return result; } -JSValue jsTestObjReflectedURLAttr(ExecState* exec, JSValue slotBase, const Identifier&) +JSValue jsTestObjReflectedCustomURLAttr(ExecState* exec, JSValue slotBase, const Identifier&) { JSTestObj* castedThis = static_cast<JSTestObj*>(asObject(slotBase)); UNUSED_PARAM(exec); @@ -372,6 +383,15 @@ JSValue jsTestObjReflectedURLAttr(ExecState* exec, JSValue slotBase, const Ident return result; } +JSValue jsTestObjReflectedCustomNonEmptyURLAttr(ExecState* exec, JSValue slotBase, const Identifier&) +{ + JSTestObj* castedThis = static_cast<JSTestObj*>(asObject(slotBase)); + UNUSED_PARAM(exec); + TestObj* imp = static_cast<TestObj*>(castedThis->impl()); + JSValue result = jsString(exec, imp->getNonEmptyURLAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr)); + return result; +} + JSValue jsTestObjAttrWithGetterException(ExecState* exec, JSValue slotBase, const Identifier&) { JSTestObj* castedThis = static_cast<JSTestObj*>(asObject(slotBase)); @@ -558,6 +578,13 @@ void setJSTestObjReflectedURLAttr(ExecState* exec, JSObject* thisObject, JSValue imp->setAttribute(WebCore::HTMLNames::reflectedurlattrAttr, valueToStringWithNullCheck(exec, value)); } +void setJSTestObjReflectedNonEmptyURLAttr(ExecState* exec, JSObject* thisObject, JSValue value) +{ + JSTestObj* castedThis = static_cast<JSTestObj*>(thisObject); + TestObj* imp = static_cast<TestObj*>(castedThis->impl()); + imp->setAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr, valueToStringWithNullCheck(exec, value)); +} + void setJSTestObjReflectedStringAttr(ExecState* exec, JSObject* thisObject, JSValue value) { JSTestObj* castedThis = static_cast<JSTestObj*>(thisObject); @@ -579,13 +606,20 @@ void setJSTestObjReflectedCustomBooleanAttr(ExecState* exec, JSObject* thisObjec imp->setBooleanAttribute(WebCore::HTMLNames::customContentBooleanAttrAttr, value.toBoolean(exec)); } -void setJSTestObjReflectedURLAttr(ExecState* exec, JSObject* thisObject, JSValue value) +void setJSTestObjReflectedCustomURLAttr(ExecState* exec, JSObject* thisObject, JSValue value) { JSTestObj* castedThis = static_cast<JSTestObj*>(thisObject); TestObj* imp = static_cast<TestObj*>(castedThis->impl()); imp->setAttribute(WebCore::HTMLNames::customContentURLAttrAttr, valueToStringWithNullCheck(exec, value)); } +void setJSTestObjReflectedCustomNonEmptyURLAttr(ExecState* exec, JSObject* thisObject, JSValue value) +{ + JSTestObj* castedThis = static_cast<JSTestObj*>(thisObject); + TestObj* imp = static_cast<TestObj*>(castedThis->impl()); + imp->setAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr, valueToStringWithNullCheck(exec, value)); +} + void setJSTestObjAttrWithGetterException(ExecState* exec, JSObject* thisObject, JSValue value) { JSTestObj* castedThis = static_cast<JSTestObj*>(thisObject); diff --git a/WebCore/bindings/scripts/test/JS/JSTestObj.h b/WebCore/bindings/scripts/test/JS/JSTestObj.h index 4dea3d2..c83e568 100644 --- a/WebCore/bindings/scripts/test/JS/JSTestObj.h +++ b/WebCore/bindings/scripts/test/JS/JSTestObj.h @@ -139,14 +139,18 @@ JSC::JSValue jsTestObjReflectedBooleanAttr(JSC::ExecState*, JSC::JSValue, const void setJSTestObjReflectedBooleanAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue); JSC::JSValue jsTestObjReflectedURLAttr(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&); void setJSTestObjReflectedURLAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue); +JSC::JSValue jsTestObjReflectedNonEmptyURLAttr(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&); +void setJSTestObjReflectedNonEmptyURLAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue); JSC::JSValue jsTestObjReflectedStringAttr(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&); void setJSTestObjReflectedStringAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue); JSC::JSValue jsTestObjReflectedCustomIntegralAttr(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&); void setJSTestObjReflectedCustomIntegralAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue); JSC::JSValue jsTestObjReflectedCustomBooleanAttr(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&); void setJSTestObjReflectedCustomBooleanAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue); -JSC::JSValue jsTestObjReflectedURLAttr(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&); -void setJSTestObjReflectedURLAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue); +JSC::JSValue jsTestObjReflectedCustomURLAttr(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&); +void setJSTestObjReflectedCustomURLAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue); +JSC::JSValue jsTestObjReflectedCustomNonEmptyURLAttr(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&); +void setJSTestObjReflectedCustomNonEmptyURLAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue); JSC::JSValue jsTestObjAttrWithGetterException(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&); void setJSTestObjAttrWithGetterException(JSC::ExecState*, JSC::JSObject*, JSC::JSValue); JSC::JSValue jsTestObjAttrWithSetterException(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&); diff --git a/WebCore/bindings/scripts/test/ObjC/DOMTestObj.h b/WebCore/bindings/scripts/test/ObjC/DOMTestObj.h index d38dece..1eac990 100644 --- a/WebCore/bindings/scripts/test/ObjC/DOMTestObj.h +++ b/WebCore/bindings/scripts/test/ObjC/DOMTestObj.h @@ -56,14 +56,18 @@ - (void)setReflectedBooleanAttr:(BOOL)newReflectedBooleanAttr; - (NSString *)reflectedURLAttr; - (void)setReflectedURLAttr:(NSString *)newReflectedURLAttr; +- (NSString *)reflectedNonEmptyURLAttr; +- (void)setReflectedNonEmptyURLAttr:(NSString *)newReflectedNonEmptyURLAttr; - (NSString *)reflectedStringAttr; - (void)setReflectedStringAttr:(NSString *)newReflectedStringAttr; - (int)reflectedCustomIntegralAttr; - (void)setReflectedCustomIntegralAttr:(int)newReflectedCustomIntegralAttr; - (BOOL)reflectedCustomBooleanAttr; - (void)setReflectedCustomBooleanAttr:(BOOL)newReflectedCustomBooleanAttr; -- (NSString *)reflectedURLAttr; -- (void)setReflectedURLAttr:(NSString *)newReflectedURLAttr; +- (NSString *)reflectedCustomURLAttr; +- (void)setReflectedCustomURLAttr:(NSString *)newReflectedCustomURLAttr; +- (NSString *)reflectedCustomNonEmptyURLAttr; +- (void)setReflectedCustomNonEmptyURLAttr:(NSString *)newReflectedCustomNonEmptyURLAttr; - (int)attrWithGetterException; - (void)setAttrWithGetterException:(int)newAttrWithGetterException; - (int)attrWithSetterException; diff --git a/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm b/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm index d71cb05..99c3cc6 100644 --- a/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm +++ b/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm @@ -202,6 +202,18 @@ IMPL->setAttribute(WebCore::HTMLNames::reflectedurlattrAttr, newReflectedURLAttr); } +- (NSString *)reflectedNonEmptyURLAttr +{ + WebCore::JSMainThreadNullState state; + return IMPL->getNonEmptyURLAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr); +} + +- (void)setReflectedNonEmptyURLAttr:(NSString *)newReflectedNonEmptyURLAttr +{ + WebCore::JSMainThreadNullState state; + IMPL->setAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr, newReflectedNonEmptyURLAttr); +} + - (NSString *)reflectedStringAttr { WebCore::JSMainThreadNullState state; @@ -238,16 +250,28 @@ IMPL->setBooleanAttribute(WebCore::HTMLNames::customContentBooleanAttrAttr, newReflectedCustomBooleanAttr); } -- (NSString *)reflectedURLAttr +- (NSString *)reflectedCustomURLAttr { WebCore::JSMainThreadNullState state; return IMPL->getURLAttribute(WebCore::HTMLNames::customContentURLAttrAttr); } -- (void)setReflectedURLAttr:(NSString *)newReflectedURLAttr +- (void)setReflectedCustomURLAttr:(NSString *)newReflectedCustomURLAttr +{ + WebCore::JSMainThreadNullState state; + IMPL->setAttribute(WebCore::HTMLNames::customContentURLAttrAttr, newReflectedCustomURLAttr); +} + +- (NSString *)reflectedCustomNonEmptyURLAttr +{ + WebCore::JSMainThreadNullState state; + return IMPL->getNonEmptyURLAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr); +} + +- (void)setReflectedCustomNonEmptyURLAttr:(NSString *)newReflectedCustomNonEmptyURLAttr { WebCore::JSMainThreadNullState state; - IMPL->setAttribute(WebCore::HTMLNames::customContentURLAttrAttr, newReflectedURLAttr); + IMPL->setAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr, newReflectedCustomNonEmptyURLAttr); } - (int)attrWithGetterException diff --git a/WebCore/bindings/scripts/test/TestObj.idl b/WebCore/bindings/scripts/test/TestObj.idl index 3467116..43fc211 100644 --- a/WebCore/bindings/scripts/test/TestObj.idl +++ b/WebCore/bindings/scripts/test/TestObj.idl @@ -1,5 +1,6 @@ /* * Copyright (C) 2009 Google Inc. All rights reserved. + * Copyright (C) 2010 Apple Inc. All rights reserved. * * Redistribution and use in source and binary formstrArg, with or without * modification, are permitted provided that the following conditions @@ -44,11 +45,13 @@ module test { attribute [Reflect] DOMString reflectedStringAttr; attribute [Reflect] long reflectedIntegralAttr; attribute [Reflect] boolean reflectedBooleanAttr; - attribute [ReflectURL] DOMString reflectedURLAttr; + attribute [Reflect,URL] DOMString reflectedURLAttr; + attribute [Reflect,NonEmpty,URL] DOMString reflectedNonEmptyURLAttr; attribute [Reflect=customContentStringAttr] DOMString reflectedStringAttr; attribute [Reflect=customContentIntegralAttr] long reflectedCustomIntegralAttr; attribute [Reflect=customContentBooleanAttr] boolean reflectedCustomBooleanAttr; - attribute [ReflectURL=customContentURLAttr] DOMString reflectedURLAttr; + attribute [Reflect=customContentURLAttr,URL] DOMString reflectedCustomURLAttr; + attribute [Reflect=customContentNonEmptyURLAttr,NonEmpty,URL] DOMString reflectedCustomNonEmptyURLAttr; // Methods void voidMethod(); diff --git a/WebCore/bindings/scripts/test/V8/V8TestObj.cpp b/WebCore/bindings/scripts/test/V8/V8TestObj.cpp index 1ad8a41..0b9d034 100644 --- a/WebCore/bindings/scripts/test/V8/V8TestObj.cpp +++ b/WebCore/bindings/scripts/test/V8/V8TestObj.cpp @@ -218,6 +218,22 @@ static void reflectedURLAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8: return; } +static v8::Handle<v8::Value> reflectedNonEmptyURLAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) +{ + INC_STATS("DOM.TestObj.reflectedNonEmptyURLAttr._get"); + TestObj* imp = V8TestObj::toNative(info.Holder()); + return v8String(imp->getNonEmptyURLAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr)); +} + +static void reflectedNonEmptyURLAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info) +{ + INC_STATS("DOM.TestObj.reflectedNonEmptyURLAttr._set"); + TestObj* imp = V8TestObj::toNative(info.Holder()); + V8Parameter<WithNullCheck> v = value; + imp->setAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr, v); + return; +} + static v8::Handle<v8::Value> reflectedStringAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) { INC_STATS("DOM.TestObj.reflectedStringAttr._get"); @@ -266,22 +282,38 @@ static void reflectedCustomBooleanAttrAttrSetter(v8::Local<v8::String> name, v8: return; } -static v8::Handle<v8::Value> reflectedURLAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) +static v8::Handle<v8::Value> reflectedCustomURLAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) { - INC_STATS("DOM.TestObj.reflectedURLAttr._get"); + INC_STATS("DOM.TestObj.reflectedCustomURLAttr._get"); TestObj* imp = V8TestObj::toNative(info.Holder()); return v8String(imp->getURLAttribute(WebCore::HTMLNames::customContentURLAttrAttr)); } -static void reflectedURLAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info) +static void reflectedCustomURLAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info) { - INC_STATS("DOM.TestObj.reflectedURLAttr._set"); + INC_STATS("DOM.TestObj.reflectedCustomURLAttr._set"); TestObj* imp = V8TestObj::toNative(info.Holder()); V8Parameter<WithNullCheck> v = value; imp->setAttribute(WebCore::HTMLNames::customContentURLAttrAttr, v); return; } +static v8::Handle<v8::Value> reflectedCustomNonEmptyURLAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) +{ + INC_STATS("DOM.TestObj.reflectedCustomNonEmptyURLAttr._get"); + TestObj* imp = V8TestObj::toNative(info.Holder()); + return v8String(imp->getNonEmptyURLAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr)); +} + +static void reflectedCustomNonEmptyURLAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info) +{ + INC_STATS("DOM.TestObj.reflectedCustomNonEmptyURLAttr._set"); + TestObj* imp = V8TestObj::toNative(info.Holder()); + V8Parameter<WithNullCheck> v = value; + imp->setAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr, v); + return; +} + static v8::Handle<v8::Value> attrWithGetterExceptionAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) { INC_STATS("DOM.TestObj.attrWithGetterException._get"); @@ -912,16 +944,20 @@ static const BatchedAttribute TestObjAttrs[] = { {"reflectedIntegralAttr", TestObjInternal::reflectedIntegralAttrAttrGetter, TestObjInternal::reflectedIntegralAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */}, // Attribute 'reflectedBooleanAttr' (Type: 'attribute' ExtAttr: 'Reflect') {"reflectedBooleanAttr", TestObjInternal::reflectedBooleanAttrAttrGetter, TestObjInternal::reflectedBooleanAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */}, - // Attribute 'reflectedURLAttr' (Type: 'attribute' ExtAttr: 'ReflectURL') + // Attribute 'reflectedURLAttr' (Type: 'attribute' ExtAttr: 'URL Reflect') {"reflectedURLAttr", TestObjInternal::reflectedURLAttrAttrGetter, TestObjInternal::reflectedURLAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */}, + // Attribute 'reflectedNonEmptyURLAttr' (Type: 'attribute' ExtAttr: 'URL NonEmpty Reflect') + {"reflectedNonEmptyURLAttr", TestObjInternal::reflectedNonEmptyURLAttrAttrGetter, TestObjInternal::reflectedNonEmptyURLAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */}, // Attribute 'reflectedStringAttr' (Type: 'attribute' ExtAttr: 'Reflect') {"reflectedStringAttr", TestObjInternal::reflectedStringAttrAttrGetter, TestObjInternal::reflectedStringAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */}, // Attribute 'reflectedCustomIntegralAttr' (Type: 'attribute' ExtAttr: 'Reflect') {"reflectedCustomIntegralAttr", TestObjInternal::reflectedCustomIntegralAttrAttrGetter, TestObjInternal::reflectedCustomIntegralAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */}, // Attribute 'reflectedCustomBooleanAttr' (Type: 'attribute' ExtAttr: 'Reflect') {"reflectedCustomBooleanAttr", TestObjInternal::reflectedCustomBooleanAttrAttrGetter, TestObjInternal::reflectedCustomBooleanAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */}, - // Attribute 'reflectedURLAttr' (Type: 'attribute' ExtAttr: 'ReflectURL') - {"reflectedURLAttr", TestObjInternal::reflectedURLAttrAttrGetter, TestObjInternal::reflectedURLAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */}, + // Attribute 'reflectedCustomURLAttr' (Type: 'attribute' ExtAttr: 'URL Reflect') + {"reflectedCustomURLAttr", TestObjInternal::reflectedCustomURLAttrAttrGetter, TestObjInternal::reflectedCustomURLAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */}, + // Attribute 'reflectedCustomNonEmptyURLAttr' (Type: 'attribute' ExtAttr: 'URL NonEmpty Reflect') + {"reflectedCustomNonEmptyURLAttr", TestObjInternal::reflectedCustomNonEmptyURLAttrAttrGetter, TestObjInternal::reflectedCustomNonEmptyURLAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */}, // Attribute 'attrWithGetterException' (Type: 'attribute' ExtAttr: '') {"attrWithGetterException", TestObjInternal::attrWithGetterExceptionAttrGetter, TestObjInternal::attrWithGetterExceptionAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */}, // Attribute 'attrWithSetterException' (Type: 'attribute' ExtAttr: '') diff --git a/WebCore/bindings/v8/IDBBindingUtilities.cpp b/WebCore/bindings/v8/IDBBindingUtilities.cpp index 2f977e0..4b38a61 100644 --- a/WebCore/bindings/v8/IDBBindingUtilities.cpp +++ b/WebCore/bindings/v8/IDBBindingUtilities.cpp @@ -26,11 +26,11 @@ #include "config.h" #include "IDBBindingUtilities.h" +#if ENABLE(INDEXED_DATABASE) + #include "IDBKey.h" #include "V8Binding.h" -#if ENABLE(INDEXED_DATABASE) - namespace WebCore { PassRefPtr<IDBKey> createIDBKeyFromValue(v8::Handle<v8::Value> value) diff --git a/WebCore/bindings/v8/IDBBindingUtilities.h b/WebCore/bindings/v8/IDBBindingUtilities.h index 04e5c29..76f2bba 100644 --- a/WebCore/bindings/v8/IDBBindingUtilities.h +++ b/WebCore/bindings/v8/IDBBindingUtilities.h @@ -26,11 +26,11 @@ #ifndef IDBBindingUtilities_h #define IDBBindingUtilities_h -#include <v8.h> -#include <wtf/PassRefPtr.h> - #if ENABLE(INDEXED_DATABASE) +#include <v8.h> +#include <wtf/Forward.h> + namespace WebCore { class IDBKey; diff --git a/WebCore/bindings/v8/ScriptCallStack.cpp b/WebCore/bindings/v8/ScriptCallStack.cpp index 89809b2..cdc9662 100644 --- a/WebCore/bindings/v8/ScriptCallStack.cpp +++ b/WebCore/bindings/v8/ScriptCallStack.cpp @@ -31,6 +31,7 @@ #include "config.h" #include "ScriptCallStack.h" +#include "InspectorValues.h" #include "ScriptScope.h" #include "ScriptController.h" #include "ScriptDebugServer.h" @@ -93,13 +94,30 @@ const ScriptCallFrame& ScriptCallStack::at(unsigned index) const return m_lastCaller; } -bool ScriptCallStack::stackTrace(int frameLimit, ScriptState* state, ScriptArray& stackTrace) +bool ScriptCallStack::stackTrace(int frameLimit, const RefPtr<InspectorArray>& stackTrace) { - ScriptScope scope(state); + if (!v8::Context::InContext()) + return false; + v8::Handle<v8::Context> context = v8::Context::GetCurrent(); + if (context.IsEmpty()) + return false; + v8::HandleScope scope; + v8::Context::Scope contextScope(context); v8::Handle<v8::StackTrace> trace(v8::StackTrace::CurrentStackTrace(frameLimit)); - if (trace.IsEmpty() || !trace->GetFrameCount()) + int frameCount = trace->GetFrameCount(); + if (trace.IsEmpty() || !frameCount) return false; - stackTrace = ScriptArray(state, trace->AsArray()); + for (int i = 0; i < frameCount; ++i) { + v8::Handle<v8::StackFrame> frame = trace->GetFrame(i); + RefPtr<InspectorObject> frameObject = InspectorObject::create(); + v8::Local<v8::String> scriptName = frame->GetScriptName(); + frameObject->setString("scriptName", scriptName.IsEmpty() ? "" : toWebCoreString(scriptName)); + v8::Local<v8::String> functionName = frame->GetFunctionName(); + frameObject->setString("functionName", functionName.IsEmpty() ? "" : toWebCoreString(functionName)); + frameObject->setNumber("lineNumber", frame->GetLineNumber()); + frameObject->setNumber("column", frame->GetColumn()); + stackTrace->push(frameObject); + } return true; } diff --git a/WebCore/bindings/v8/ScriptCallStack.h b/WebCore/bindings/v8/ScriptCallStack.h index 8b02814..80d5f76 100644 --- a/WebCore/bindings/v8/ScriptCallStack.h +++ b/WebCore/bindings/v8/ScriptCallStack.h @@ -36,6 +36,7 @@ #include "ScriptState.h" #include "ScriptValue.h" #include <wtf/Noncopyable.h> +#include <wtf/RefPtr.h> namespace v8 { class Arguments; @@ -43,6 +44,8 @@ namespace v8 { namespace WebCore { +class InspectorArray; + class ScriptCallStack : public Noncopyable { public: static ScriptCallStack* create(const v8::Arguments&, unsigned skipArgumentCount = 0); @@ -57,7 +60,7 @@ public: // lineNumber: <1 based line number> // column: <1 based column offset on the line> // } - static bool stackTrace(int frameLimit, ScriptState* state, ScriptArray& stackTrace); + static bool stackTrace(int frameLimit, const RefPtr<InspectorArray>& stackTrace); const ScriptCallFrame& at(unsigned) const; // FIXME: implement retrieving and storing call stack trace diff --git a/WebCore/bindings/v8/ScriptController.cpp b/WebCore/bindings/v8/ScriptController.cpp index 889642f..2396de0 100644 --- a/WebCore/bindings/v8/ScriptController.cpp +++ b/WebCore/bindings/v8/ScriptController.cpp @@ -290,13 +290,19 @@ void ScriptController::bindToWindowObject(Frame* frame, const String& key, NPObj void ScriptController::collectGarbage() { v8::HandleScope handleScope; - v8::Handle<v8::Context> v8Context = V8Proxy::mainWorldContext(m_proxy->frame()); + + v8::Persistent<v8::Context> v8Context = v8::Context::New(); if (v8Context.IsEmpty()) return; - - v8::Context::Scope scope(v8Context); - - m_proxy->evaluate(ScriptSourceCode("if (window.gc) void(gc());"), 0); + { + v8::Context::Scope scope(v8Context); + v8::Local<v8::String> source = v8::String::New("if (gc) gc();"); + v8::Local<v8::String> name = v8::String::New("gc"); + v8::Handle<v8::Script> script = v8::Script::Compile(source, name); + if (!script.IsEmpty()) + script->Run(); + } + v8Context.Dispose(); } void ScriptController::lowMemoryNotification() diff --git a/WebCore/bindings/v8/ScriptController.h b/WebCore/bindings/v8/ScriptController.h index 3187180..75ae0bf 100644 --- a/WebCore/bindings/v8/ScriptController.h +++ b/WebCore/bindings/v8/ScriptController.h @@ -31,6 +31,7 @@ #ifndef ScriptController_h #define ScriptController_h +#include "ScriptControllerBase.h" #include "ScriptInstance.h" #include "ScriptValue.h" @@ -55,17 +56,6 @@ class String; class Widget; class XSSAuditor; -enum ReasonForCallingCanExecuteScripts { - AboutToExecuteScript, - NotAboutToExecuteScript -}; - -// Whether to call the XSSAuditor to audit a script before passing it to the JavaScript engine. -enum ShouldAllowXSS { - AllowXSS, - DoNotAllowXSS -}; - class ScriptController { public: ScriptController(Frame*); diff --git a/WebCore/bindings/v8/ScriptDebugServer.cpp b/WebCore/bindings/v8/ScriptDebugServer.cpp index 8553ee5..138237b 100644 --- a/WebCore/bindings/v8/ScriptDebugServer.cpp +++ b/WebCore/bindings/v8/ScriptDebugServer.cpp @@ -356,6 +356,10 @@ void ScriptDebugServer::handleV8DebugEvent(const v8::Debug::EventDetails& eventD if (!stackTrace->GetFrameCount()) return; } + + // Don't allow nested breaks. + if (m_pausedPage) + return; m_executionState.set(eventDetails.GetExecutionState()); m_pausedPage = frame->page(); ScriptState* currentCallFrameState = mainWorldScriptState(frame); diff --git a/WebCore/bindings/v8/ScriptEventListener.cpp b/WebCore/bindings/v8/ScriptEventListener.cpp index 63e7dff..72df79d 100644 --- a/WebCore/bindings/v8/ScriptEventListener.cpp +++ b/WebCore/bindings/v8/ScriptEventListener.cpp @@ -100,28 +100,32 @@ PassRefPtr<V8LazyEventListener> createAttributeEventListener(Frame* frame, Attri return V8LazyEventListener::create(attr->localName().string(), frame->document()->isSVGDocument(), attr->value(), sourceURL, lineNumber, columnNumber, WorldContextHandle(UseMainWorld)); } -String eventListenerHandlerBody(ScriptExecutionContext* context, ScriptState* scriptState, EventListener* listener) +String eventListenerHandlerBody(Document* document, EventListener* listener) { if (listener->type() != EventListener::JSEventListenerType) return ""; - ScriptScope scope(scriptState); + v8::HandleScope scope; V8AbstractEventListener* v8Listener = static_cast<V8AbstractEventListener*>(listener); - v8::Handle<v8::Object> function = v8Listener->getListenerObject(context); + v8::Handle<v8::Context> context = toV8Context(document, v8Listener->worldContext()); + v8::Context::Scope contextScope(context); + v8::Handle<v8::Object> function = v8Listener->getListenerObject(document); if (function.IsEmpty()) return ""; return toWebCoreStringWithNullCheck(function); } -bool eventListenerHandlerLocation(ScriptExecutionContext* context, ScriptState* scriptState, EventListener* listener, String& sourceName, int& lineNumber) +bool eventListenerHandlerLocation(Document* document, EventListener* listener, String& sourceName, int& lineNumber) { if (listener->type() != EventListener::JSEventListenerType) return false; - ScriptScope scope(scriptState); + v8::HandleScope scope; V8AbstractEventListener* v8Listener = static_cast<V8AbstractEventListener*>(listener); - v8::Handle<v8::Object> object = v8Listener->getListenerObject(context); + v8::Handle<v8::Context> context = toV8Context(document, v8Listener->worldContext()); + v8::Context::Scope contextScope(context); + v8::Handle<v8::Object> object = v8Listener->getListenerObject(document); if (object.IsEmpty() || !object->IsFunction()) return false; diff --git a/WebCore/bindings/v8/ScriptEventListener.h b/WebCore/bindings/v8/ScriptEventListener.h index 7815e29..0fce088 100644 --- a/WebCore/bindings/v8/ScriptEventListener.h +++ b/WebCore/bindings/v8/ScriptEventListener.h @@ -38,15 +38,15 @@ namespace WebCore { class Attribute; + class Document; class EventListener; class Frame; class Node; - class ScriptState; PassRefPtr<V8LazyEventListener> createAttributeEventListener(Node*, Attribute*); PassRefPtr<V8LazyEventListener> createAttributeEventListener(Frame*, Attribute*); - String eventListenerHandlerBody(ScriptExecutionContext*, ScriptState*, EventListener*); - bool eventListenerHandlerLocation(ScriptExecutionContext*, ScriptState*, EventListener*, String& sourceName, int& lineNumber); + String eventListenerHandlerBody(Document*, EventListener*); + bool eventListenerHandlerLocation(Document*, EventListener*, String& sourceName, int& lineNumber); } // namespace WebCore diff --git a/WebCore/bindings/v8/ScriptSourceCode.h b/WebCore/bindings/v8/ScriptSourceCode.h index dbc9d5e..485daea 100644 --- a/WebCore/bindings/v8/ScriptSourceCode.h +++ b/WebCore/bindings/v8/ScriptSourceCode.h @@ -46,6 +46,14 @@ public: , m_url(url) , m_startLine(startLine) { + // FIXME: Copying the source to strip BOMs isn't strictly necessary + // because V8 treats BOMs as whitespace. However, it is here because it + // must be in sync with CachedScript::script() which strips the BOMs. We + // should investigate the performance implications. + if (m_source.length()) { + bool scratch = false; + m_source = String(source.impl()->copyStringWithoutBOMs(false, scratch)); + } } // We lose the encoding information from CachedScript. diff --git a/WebCore/bindings/v8/V8AbstractEventListener.h b/WebCore/bindings/v8/V8AbstractEventListener.h index 0afbed5..4b36ffb 100644 --- a/WebCore/bindings/v8/V8AbstractEventListener.h +++ b/WebCore/bindings/v8/V8AbstractEventListener.h @@ -96,6 +96,8 @@ namespace WebCore { // Dispose listener object and clear the handle. void disposeListenerObject(); + const WorldContextHandle& worldContext() const { return m_worldContext; } + protected: V8AbstractEventListener(bool isAttribute, const WorldContextHandle& worldContext); @@ -108,8 +110,6 @@ namespace WebCore { // Get the receiver object to use for event listener call. v8::Local<v8::Object> getReceiverObject(Event*); - const WorldContextHandle& worldContext() const { return m_worldContext; } - private: // Implementation of EventListener function. virtual bool virtualisAttribute() const { return m_isAttribute; } diff --git a/WebCore/bindings/v8/V8DOMWrapper.cpp b/WebCore/bindings/v8/V8DOMWrapper.cpp index 596090d..b5703d2 100644 --- a/WebCore/bindings/v8/V8DOMWrapper.cpp +++ b/WebCore/bindings/v8/V8DOMWrapper.cpp @@ -224,8 +224,7 @@ PassRefPtr<NodeFilter> V8DOMWrapper::wrapNativeNodeFilter(v8::Handle<v8::Value> if (!filter->IsFunction()) return 0; - NodeFilterCondition* condition = new V8NodeFilterCondition(filter); - return NodeFilter::create(condition); + return NodeFilter::create(V8NodeFilterCondition::create(filter)); } static bool globalObjectPrototypeIsDOMWindow(v8::Handle<v8::Object> objectPrototype) diff --git a/WebCore/bindings/v8/V8NodeFilterCondition.h b/WebCore/bindings/v8/V8NodeFilterCondition.h index 5850b69..b864e5e 100644 --- a/WebCore/bindings/v8/V8NodeFilterCondition.h +++ b/WebCore/bindings/v8/V8NodeFilterCondition.h @@ -33,6 +33,7 @@ #include "NodeFilterCondition.h" #include <v8.h> +#include <wtf/PassRefPtr.h> // NodeFilter is a JavaScript function that takes a Node as parameter and returns a short (ACCEPT, SKIP, REJECT) as the result. namespace WebCore { @@ -43,12 +44,18 @@ namespace WebCore { // NodeFilterCondition is a wrapper around a NodeFilter JS function. class V8NodeFilterCondition : public NodeFilterCondition { public: - explicit V8NodeFilterCondition(v8::Handle<v8::Value> filter); + static PassRefPtr<V8NodeFilterCondition> create(v8::Handle<v8::Value> filter) + { + return adoptRef(new V8NodeFilterCondition(filter)); + } + virtual ~V8NodeFilterCondition(); virtual short acceptNode(ScriptState*, Node*) const; private: + explicit V8NodeFilterCondition(v8::Handle<v8::Value> filter); + mutable v8::Persistent<v8::Value> m_filter; }; diff --git a/WebCore/bindings/v8/V8Utilities.cpp b/WebCore/bindings/v8/V8Utilities.cpp index ffccb06..f780218 100644 --- a/WebCore/bindings/v8/V8Utilities.cpp +++ b/WebCore/bindings/v8/V8Utilities.cpp @@ -100,10 +100,24 @@ bool processingUserGesture() return frame && frame->script()->processingUserGesture(); } +Frame* callingOrEnteredFrame() +{ + Frame* frame = V8Proxy::retrieveFrameForCallingContext(); + if (!frame) { + // Unfortunately, when processing script from a plug-in, we might not + // have a calling context. In those cases, we fall back to the + // entered context for security checks. + // FIXME: We need a better API for retrieving frames that abstracts + // away this concern. + frame = V8Proxy::retrieveFrameForEnteredContext(); + } + return frame; +} + bool shouldAllowNavigation(Frame* frame) { - Frame* callingFrame = V8Proxy::retrieveFrameForCallingContext(); - return callingFrame && callingFrame->loader()->shouldAllowNavigation(frame); + Frame* callingOrEntered = callingOrEnteredFrame(); + return callingOrEntered && callingOrEntered->loader()->shouldAllowNavigation(frame); } KURL completeURL(const String& relativeURL) @@ -117,12 +131,11 @@ KURL completeURL(const String& relativeURL) void navigateIfAllowed(Frame* frame, const KURL& url, bool lockHistory, bool lockBackForwardList) { - Frame* callingFrame = V8Proxy::retrieveFrameForCallingContext(); - if (!callingFrame) + Frame* callingOrEntered = callingOrEnteredFrame(); + if (!callingOrEntered) return; - if (!protocolIsJavaScript(url) || ScriptController::isSafeScript(frame)) - frame->redirectScheduler()->scheduleLocationChange(url.string(), callingFrame->loader()->outgoingReferrer(), lockHistory, lockBackForwardList, processingUserGesture()); + frame->redirectScheduler()->scheduleLocationChange(url.string(), callingOrEntered->loader()->outgoingReferrer(), lockHistory, lockBackForwardList, processingUserGesture()); } ScriptExecutionContext* getScriptExecutionContext() diff --git a/WebCore/bindings/v8/custom/V8HTMLAllCollectionCustom.cpp b/WebCore/bindings/v8/custom/V8HTMLAllCollectionCustom.cpp index 58a85dc..ef428a9 100644 --- a/WebCore/bindings/v8/custom/V8HTMLAllCollectionCustom.cpp +++ b/WebCore/bindings/v8/custom/V8HTMLAllCollectionCustom.cpp @@ -52,8 +52,7 @@ static v8::Handle<v8::Value> getNamedItems(HTMLAllCollection* collection, Atomic if (namedItems.size() == 1) return toV8(namedItems.at(0).release()); - NodeList* list = new V8NamedNodesCollection(namedItems); - return toV8(list); + return toV8(V8NamedNodesCollection::create(namedItems)); } static v8::Handle<v8::Value> getItem(HTMLAllCollection* collection, v8::Handle<v8::Value> argument) diff --git a/WebCore/bindings/v8/custom/V8HTMLCollectionCustom.cpp b/WebCore/bindings/v8/custom/V8HTMLCollectionCustom.cpp index a4a0c57..9e89ce8 100644 --- a/WebCore/bindings/v8/custom/V8HTMLCollectionCustom.cpp +++ b/WebCore/bindings/v8/custom/V8HTMLCollectionCustom.cpp @@ -52,8 +52,7 @@ static v8::Handle<v8::Value> getNamedItems(HTMLCollection* collection, AtomicStr if (namedItems.size() == 1) return toV8(namedItems.at(0).release()); - NodeList* list = new V8NamedNodesCollection(namedItems); - return toV8(list); + return toV8(V8NamedNodesCollection::create(namedItems)); } static v8::Handle<v8::Value> getItem(HTMLCollection* collection, v8::Handle<v8::Value> argument) diff --git a/WebCore/bindings/v8/custom/V8HTMLDocumentCustom.cpp b/WebCore/bindings/v8/custom/V8HTMLDocumentCustom.cpp index e6f1b8f..09f0a6f 100644 --- a/WebCore/bindings/v8/custom/V8HTMLDocumentCustom.cpp +++ b/WebCore/bindings/v8/custom/V8HTMLDocumentCustom.cpp @@ -51,20 +51,20 @@ namespace WebCore { v8::Local<v8::Object> V8HTMLDocument::WrapInShadowObject(v8::Local<v8::Object> wrapper, Node* impl) { - DEFINE_STATIC_LOCAL(v8::Persistent<v8::Function>, shadowConstructor, ()); - if (shadowConstructor.IsEmpty()) { - v8::Local<v8::FunctionTemplate> shadowTemplate = v8::FunctionTemplate::New(); + DEFINE_STATIC_LOCAL(v8::Persistent<v8::FunctionTemplate>, shadowTemplate, ()); + if (shadowTemplate.IsEmpty()) { + shadowTemplate = v8::Persistent<v8::FunctionTemplate>::New(v8::FunctionTemplate::New()); if (shadowTemplate.IsEmpty()) return v8::Local<v8::Object>(); shadowTemplate->SetClassName(v8::String::New("HTMLDocument")); shadowTemplate->Inherit(V8HTMLDocument::GetTemplate()); shadowTemplate->InstanceTemplate()->SetInternalFieldCount(V8HTMLDocument::internalFieldCount); - shadowConstructor = v8::Persistent<v8::Function>::New(shadowTemplate->GetFunction()); - if (shadowConstructor.IsEmpty()) - return v8::Local<v8::Object>(); } - ASSERT(!shadowConstructor.IsEmpty()); + v8::Local<v8::Function> shadowConstructor = shadowTemplate->GetFunction(); + if (shadowConstructor.IsEmpty()) + return v8::Local<v8::Object>(); + v8::Local<v8::Object> shadow = shadowConstructor->NewInstance(); if (shadow.IsEmpty()) return v8::Local<v8::Object>(); diff --git a/WebCore/bindings/v8/custom/V8HTMLFormElementCustom.cpp b/WebCore/bindings/v8/custom/V8HTMLFormElementCustom.cpp index 786a96a..9baf78a 100644 --- a/WebCore/bindings/v8/custom/V8HTMLFormElementCustom.cpp +++ b/WebCore/bindings/v8/custom/V8HTMLFormElementCustom.cpp @@ -77,8 +77,7 @@ v8::Handle<v8::Value> V8HTMLFormElement::namedPropertyGetter(v8::Local<v8::Strin if (elements.size() == 1) return toV8(elements.at(0).release()); - NodeList* collection = new V8NamedNodesCollection(elements); - return toV8(collection); + return toV8(V8NamedNodesCollection::create(elements)); } } // namespace WebCore diff --git a/WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp b/WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp index d0d8dac..13a9d30 100644 --- a/WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp +++ b/WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp @@ -70,8 +70,7 @@ v8::Handle<v8::Value> V8HTMLSelectElement::namedPropertyGetter(v8::Local<v8::Str if (items.size() == 1) return toV8(items.at(0).release()); - NodeList* list = new V8NamedNodesCollection(items); - return toV8(list); + return toV8(V8NamedNodesCollection::create(items)); } v8::Handle<v8::Value> V8HTMLSelectElement::indexedPropertyGetter(uint32_t index, const v8::AccessorInfo& info) diff --git a/WebCore/bindings/v8/custom/V8IDBAnyCustom.cpp b/WebCore/bindings/v8/custom/V8IDBAnyCustom.cpp index 5ef50a6..def1120 100644 --- a/WebCore/bindings/v8/custom/V8IDBAnyCustom.cpp +++ b/WebCore/bindings/v8/custom/V8IDBAnyCustom.cpp @@ -11,9 +11,6 @@ * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT @@ -37,6 +34,7 @@ #include "SerializedScriptValue.h" #include "V8IDBDatabaseRequest.h" #include "V8IDBIndexRequest.h" +#include "V8IDBKey.h" #include "V8IDBObjectStoreRequest.h" #include "V8IndexedDatabaseRequest.h" @@ -56,6 +54,8 @@ v8::Handle<v8::Value> toV8(IDBAny* impl) return toV8(impl->idbDatabaseRequest()); case IDBAny::IDBIndexRequestType: return toV8(impl->idbIndexRequest()); + case IDBAny::IDBKeyType: + return toV8(impl->idbKey()); case IDBAny::IDBObjectStoreRequestType: return toV8(impl->idbObjectStoreRequest()); case IDBAny::IndexedDatabaseRequestType: diff --git a/WebCore/bindings/v8/custom/V8NamedNodesCollection.h b/WebCore/bindings/v8/custom/V8NamedNodesCollection.h index d13b7a8..0372de1 100644 --- a/WebCore/bindings/v8/custom/V8NamedNodesCollection.h +++ b/WebCore/bindings/v8/custom/V8NamedNodesCollection.h @@ -33,6 +33,7 @@ #include "Node.h" #include "NodeList.h" +#include <wtf/PassRefPtr.h> #include <wtf/RefPtr.h> #include <wtf/Vector.h> @@ -40,13 +41,19 @@ namespace WebCore { class V8NamedNodesCollection : public NodeList { public: - explicit V8NamedNodesCollection(const Vector<RefPtr<Node> >& nodes) - : m_nodes(nodes) { } + static PassRefPtr<NodeList> create(const Vector<RefPtr<Node> >& nodes) + { + return adoptRef(new V8NamedNodesCollection(nodes)); + } + virtual unsigned length() const { return m_nodes.size(); } virtual Node* item(unsigned) const; virtual Node* itemWithName(const AtomicString&) const; private: + explicit V8NamedNodesCollection(const Vector<RefPtr<Node> >& nodes) + : m_nodes(nodes) { } + Vector<RefPtr<Node> > m_nodes; }; diff --git a/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp b/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp index e1a9c0e..fd6e120 100644 --- a/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp +++ b/WebCore/bindings/v8/custom/V8WebGLRenderingContextCustom.cpp @@ -477,12 +477,12 @@ static v8::Handle<v8::Value> vertexAttribAndUniformHelperf(const v8::Arguments& return v8::Undefined(); } - v8::Handle<v8::Array> array = - v8::Local<v8::Array>::Cast(args[1]); - if (array.IsEmpty()) { - V8Proxy::setDOMException(SYNTAX_ERR); + if (args[1].IsEmpty() || !args[1]->IsArray()) { + V8Proxy::throwTypeError(); return notHandledByInterceptor(); } + v8::Handle<v8::Array> array = + v8::Local<v8::Array>::Cast(args[1]); uint32_t len = array->Length(); float* data = jsArrayToFloatArray(array, len); if (!data) { @@ -545,12 +545,12 @@ static v8::Handle<v8::Value> uniformHelperi(const v8::Arguments& args, return v8::Undefined(); } - v8::Handle<v8::Array> array = - v8::Local<v8::Array>::Cast(args[1]); - if (array.IsEmpty()) { - V8Proxy::setDOMException(SYNTAX_ERR); + if (args[1].IsEmpty() || !args[1]->IsArray()) { + V8Proxy::throwTypeError(); return notHandledByInterceptor(); } + v8::Handle<v8::Array> array = + v8::Local<v8::Array>::Cast(args[1]); uint32_t len = array->Length(); int* data = jsArrayToIntArray(array, len); if (!data) { @@ -658,12 +658,12 @@ static v8::Handle<v8::Value> uniformMatrixHelper(const v8::Arguments& args, return v8::Undefined(); } - v8::Handle<v8::Array> array = - v8::Local<v8::Array>::Cast(args[2]); - if (array.IsEmpty()) { - V8Proxy::setDOMException(SYNTAX_ERR); + if (args[2].IsEmpty() || !args[2]->IsArray()) { + V8Proxy::throwTypeError(); return notHandledByInterceptor(); } + v8::Handle<v8::Array> array = + v8::Local<v8::Array>::Cast(args[2]); uint32_t len = array->Length(); float* data = jsArrayToFloatArray(array, len); if (!data) { diff --git a/WebCore/bridge/jni/v8/JavaInstanceV8.cpp b/WebCore/bridge/jni/v8/JavaInstanceV8.cpp index dd4750f..980bf91 100644 --- a/WebCore/bridge/jni/v8/JavaInstanceV8.cpp +++ b/WebCore/bridge/jni/v8/JavaInstanceV8.cpp @@ -32,11 +32,14 @@ #include "JavaClassV8.h" #include <assert.h> +<<<<<<< HEAD // ANDROID #define LOG_TAG "v8binding" #include <utils/Log.h> // END ANDROID +======= +>>>>>>> webkit.org at r63173 using namespace JSC::Bindings; diff --git a/WebCore/bridge/qt/qt_instance.cpp b/WebCore/bridge/qt/qt_instance.cpp index 1229919..3723ec0 100644 --- a/WebCore/bridge/qt/qt_instance.cpp +++ b/WebCore/bridge/qt/qt_instance.cpp @@ -192,6 +192,34 @@ void QtInstance::markAggregate(MarkStack& markStack) if (val) markStack.append(val); } + foreach (QtField* field, m_fields.values()) { + bool mark = false; + if (field->fieldType() == QtField::MetaProperty) + mark = true; + else if (field->fieldType() == QtField::DynamicProperty) { + if (m_object && m_object->dynamicPropertyNames().indexOf(field->name()) >= 0) + mark = true; + } else if (m_object) { + QList<QObject*> children = m_object->children(); + for (int index = 0; index < children.count(); ++index) { + QObject* child = children.at(index); + if (child->objectName().toLatin1() == field->name()) { + mark = true; + break; + } + } + } + if (mark) { + if (RefPtr<RootObject> ro = rootObject()) { + JSGlobalObject* globalobj = ro->globalObject(); + if (globalobj) { + ExecState* exec = globalobj->globalExec(); + JSValue val = field->valueFromInstance(exec, this); + markStack.append(val); + } + } + } + } } void QtInstance::begin() diff --git a/WebCore/css/CSSComputedStyleDeclaration.cpp b/WebCore/css/CSSComputedStyleDeclaration.cpp index 06779a9..c4ccdb3 100644 --- a/WebCore/css/CSSComputedStyleDeclaration.cpp +++ b/WebCore/css/CSSComputedStyleDeclaration.cpp @@ -691,9 +691,13 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(int proper if (!style) return 0; +<<<<<<< HEAD #ifdef ANDROID_LAYOUT const Settings * settings = node->document()->frame() ? node->document()->frame()->settings() : 0; #endif +======= + propertyID = CSSProperty::resolveDirectionAwareProperty(propertyID, style->direction()); +>>>>>>> webkit.org at r63173 switch (static_cast<CSSPropertyID>(propertyID)) { case CSSPropertyInvalid: @@ -1480,6 +1484,14 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(int proper case CSSPropertyTextUnderlineWidth: break; + /* Directional properties are resolved by resolveDirectionAwareProperty() before the switch. */ + case CSSPropertyWebkitMarginEnd: + case CSSPropertyWebkitMarginStart: + case CSSPropertyWebkitPaddingEnd: + case CSSPropertyWebkitPaddingStart: + ASSERT_NOT_REACHED(); + break; + /* Unimplemented @font-face properties */ case CSSPropertyFontStretch: case CSSPropertySrc: @@ -1505,13 +1517,11 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(int proper case CSSPropertyWebkitColumns: case CSSPropertyWebkitColumnRule: case CSSPropertyWebkitMarginCollapse: - case CSSPropertyWebkitMarginStart: case CSSPropertyWebkitMarquee: case CSSPropertyWebkitMarqueeSpeed: case CSSPropertyWebkitMask: case CSSPropertyWebkitMaskRepeatX: case CSSPropertyWebkitMaskRepeatY: - case CSSPropertyWebkitPaddingStart: case CSSPropertyWebkitPerspectiveOriginX: case CSSPropertyWebkitPerspectiveOriginY: case CSSPropertyWebkitTextStroke: diff --git a/WebCore/css/CSSComputedStyleDeclaration.h b/WebCore/css/CSSComputedStyleDeclaration.h index a2e8ba7..816d15a 100644 --- a/WebCore/css/CSSComputedStyleDeclaration.h +++ b/WebCore/css/CSSComputedStyleDeclaration.h @@ -22,14 +22,17 @@ #define CSSComputedStyleDeclaration_h #include "CSSStyleDeclaration.h" -#include "Node.h" +#include "PlatformString.h" #include "RenderStyleConstants.h" +#include <wtf/RefPtr.h> namespace WebCore { class Color; class CSSMutableStyleDeclaration; class CSSPrimitiveValue; +class Node; +class RenderStyle; class ShadowData; enum EUpdateLayout { DoNotUpdateLayout = false, UpdateLayout = true }; diff --git a/WebCore/css/CSSFontFaceSource.cpp b/WebCore/css/CSSFontFaceSource.cpp index 921b149..00dfcba 100644 --- a/WebCore/css/CSSFontFaceSource.cpp +++ b/WebCore/css/CSSFontFaceSource.cpp @@ -42,6 +42,7 @@ #include "HTMLNames.h" #include "SVGFontData.h" #include "SVGFontElement.h" +#include "SVGFontFaceElement.h" #include "SVGURIReference.h" #endif @@ -187,9 +188,10 @@ SimpleFontData* CSSFontFaceSource::getFontData(const FontDescription& fontDescri fontData.set(new SimpleFontData(tempData->platformData(), true, true)); } - m_fontDataTable.set(hashKey, fontData.get()); - return fontData.release(); -} + SimpleFontData* fontDataRawPtr = fontData.leakPtr(); + m_fontDataTable.set(hashKey, fontDataRawPtr); + return fontDataRawPtr; } +} diff --git a/WebCore/css/CSSFontFaceSource.h b/WebCore/css/CSSFontFaceSource.h index c6baef2..278ba72 100644 --- a/WebCore/css/CSSFontFaceSource.h +++ b/WebCore/css/CSSFontFaceSource.h @@ -31,10 +31,6 @@ #include "CachedResourceHandle.h" #include <wtf/HashMap.h> -#if ENABLE(SVG_FONTS) -#include "SVGFontFaceElement.h" -#endif - namespace WebCore { class CachedFont; @@ -42,6 +38,11 @@ class CSSFontFace; class CSSFontSelector; class FontDescription; class SimpleFontData; +#if ENABLE(SVG_FONTS) +class SVGFontElement; +class SVGFontFaceElement; +#endif + class CSSFontFaceSource : public CachedResourceClient { public: diff --git a/WebCore/css/CSSHelper.cpp b/WebCore/css/CSSHelper.cpp index a0daebd..e0ce7c3 100644 --- a/WebCore/css/CSSHelper.cpp +++ b/WebCore/css/CSSHelper.cpp @@ -79,8 +79,10 @@ String deprecatedParseURL(const String& url) // Optimize for the likely case there there is nothing to strip. if (l == length) { int k; + // If the URL has any control characters in it, we have to strip them. + // '\r' (ascii value 13) is the largest control character. for (k = 0; k < length; k++) { - if (characters[k] > '\r') + if (characters[k] <= '\r') break; } if (k == length) diff --git a/WebCore/css/CSSImportRule.idl b/WebCore/css/CSSImportRule.idl index 8e60905..05654fe 100644 --- a/WebCore/css/CSSImportRule.idl +++ b/WebCore/css/CSSImportRule.idl @@ -23,7 +23,7 @@ module css { // Introduced in DOM Level 2: interface CSSImportRule : CSSRule { readonly attribute [ConvertNullStringTo=Null] DOMString href; - readonly attribute stylesheets::MediaList media; + readonly attribute MediaList media; readonly attribute CSSStyleSheet styleSheet; }; diff --git a/WebCore/css/CSSMediaRule.idl b/WebCore/css/CSSMediaRule.idl index 813bd70..4b75f49 100644 --- a/WebCore/css/CSSMediaRule.idl +++ b/WebCore/css/CSSMediaRule.idl @@ -22,7 +22,7 @@ module css { // Introduced in DOM Level 2: interface CSSMediaRule : CSSRule { - readonly attribute stylesheets::MediaList media; + readonly attribute MediaList media; readonly attribute CSSRuleList cssRules; [OldStyleObjC] unsigned long insertRule(in DOMString rule, diff --git a/WebCore/css/CSSParser.cpp b/WebCore/css/CSSParser.cpp index 087018b..be410b4 100644 --- a/WebCore/css/CSSParser.cpp +++ b/WebCore/css/CSSParser.cpp @@ -155,8 +155,8 @@ CSSParser::CSSParser(bool strictParsing) , m_ruleRanges(0) , m_data(0) , yy_start(1) - , m_line(0) - , m_lastSelectorLine(0) + , m_lineNumber(0) + , m_lastSelectorLineNumber(0) , m_allowImportRules(true) , m_allowVariablesRules(true) , m_allowNamespaceDeclarations(true) @@ -235,7 +235,7 @@ void CSSParser::setupParser(const char* prefix, const String& string, const char resetRuleBodyMarks(); } -void CSSParser::parseSheet(CSSStyleSheet* sheet, const String& string, StyleRuleRanges* ruleRangeMap) +void CSSParser::parseSheet(CSSStyleSheet* sheet, const String& string, int startLineNumber, StyleRuleRanges* ruleRangeMap) { #ifdef ANDROID_INSTRUMENT android::TimeCounter::start(android::TimeCounter::CSSParseTimeCounter); @@ -244,6 +244,7 @@ void CSSParser::parseSheet(CSSStyleSheet* sheet, const String& string, StyleRule m_defaultNamespace = starAtom; // Reset the default namespace. m_ruleRanges = ruleRangeMap; + m_lineNumber = startLineNumber; setupParser("", string, ""); cssyyparse(this); m_ruleRanges = 0; @@ -318,21 +319,21 @@ bool CSSParser::parseValue(CSSMutableStyleDeclaration* declaration, int id, cons // possible to set up a default color. bool CSSParser::parseColor(RGBA32& color, const String& string, bool strict) { + // First try creating a color specified by name, rgb() or "#" syntax. + if (parseColor(string, color, strict)) + return true; + CSSParser parser(true); + RefPtr<CSSMutableStyleDeclaration> dummyStyleDeclaration = CSSMutableStyleDeclaration::create(); - // First try creating a color specified by name or the "#" syntax. - if (!parser.parseColor(string, color, strict)) { - RefPtr<CSSMutableStyleDeclaration> dummyStyleDeclaration = CSSMutableStyleDeclaration::create(); + // Now try to create a color from rgba() syntax. + if (!parser.parseColor(dummyStyleDeclaration.get(), string)) + return false; - // Now try to create a color from the rgb() or rgba() syntax. - if (parser.parseColor(dummyStyleDeclaration.get(), string)) { - CSSValue* value = parser.m_parsedProperties[0]->value(); - if (value->cssValueType() == CSSValue::CSS_PRIMITIVE_VALUE) { - CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value); - color = primitiveValue->getRGBA32Value(); - } - } else - return false; + CSSValue* value = parser.m_parsedProperties[0]->value(); + if (value->cssValueType() == CSSValue::CSS_PRIMITIVE_VALUE) { + CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value); + color = primitiveValue->getRGBA32Value(); } return true; @@ -439,9 +440,9 @@ void CSSParser::addProperty(int propId, PassRefPtr<CSSValue> value, bool importa if (m_maxParsedProperties > UINT_MAX / sizeof(CSSProperty*)) return; m_parsedProperties = static_cast<CSSProperty**>(fastRealloc(m_parsedProperties, - m_maxParsedProperties * sizeof(CSSProperty*))); + m_maxParsedProperties * sizeof(CSSProperty*))); } - m_parsedProperties[m_numParsedProperties++] = prop.release(); + m_parsedProperties[m_numParsedProperties++] = prop.leakPtr(); } void CSSParser::rollbackLastProperties(int num) @@ -1038,6 +1039,7 @@ bool CSSParser::parseValue(int propId, bool important) case CSSPropertyPaddingBottom: // <length> | <percentage> case CSSPropertyPaddingLeft: //// case CSSPropertyWebkitPaddingStart: + case CSSPropertyWebkitPaddingEnd: validPrimitive = (!id && validUnit(value, FLength | FPercent | FNonNeg, m_strict)); break; @@ -1098,6 +1100,7 @@ bool CSSParser::parseValue(int propId, bool important) case CSSPropertyMarginBottom: // <length> | <percentage> | auto | inherit case CSSPropertyMarginLeft: //// case CSSPropertyWebkitMarginStart: + case CSSPropertyWebkitMarginEnd: if (id == CSSValueAuto) validPrimitive = true; else @@ -3644,7 +3647,14 @@ bool CSSParser::parseFontFaceUnicodeRange() { RefPtr<CSSValueList> values = CSSValueList::createCommaSeparated(); bool failed = false; - while (m_valueList->current()) { + bool operatorExpected = false; + for (; m_valueList->current(); m_valueList->next(), operatorExpected = !operatorExpected) { + if (operatorExpected) { + if (m_valueList->current()->unit == CSSParserValue::Operator && m_valueList->current()->iValue == ',') + continue; + failed = true; + break; + } if (m_valueList->current()->unit != CSSPrimitiveValue::CSS_UNICODE_RANGE) { failed = true; break; @@ -3719,7 +3729,6 @@ bool CSSParser::parseFontFaceUnicodeRange() } if (from <= to) values->append(CSSUnicodeRangeValue::create(from, to)); - m_valueList->next(); } if (failed || !values->length()) return false; @@ -3768,13 +3777,23 @@ static inline bool parseColorInt(const UChar*& string, const UChar* end, UChar t bool CSSParser::parseColor(const String &name, RGBA32& rgb, bool strict) { - if (!strict && Color::parseHexColor(name, rgb)) - return true; + const UChar* characters = name.characters(); + unsigned length = name.length(); + + if (!strict && length >= 3) { + if (name[0] == '#') { + if (Color::parseHexColor(characters + 1, length - 1, rgb)) + return true; + } else { + if (Color::parseHexColor(characters, length, rgb)) + return true; + } + } // Try rgb() syntax. if (name.startsWith("rgb(")) { - const UChar* current = name.characters() + 4; - const UChar* end = name.characters() + name.length(); + const UChar* current = characters + 4; + const UChar* end = characters + length; int red; int green; int blue; @@ -5167,7 +5186,7 @@ void CSSParser::countLines() { for (UChar* current = yytext; current < yytext + yyleng; ++current) { if (*current == '\n') - ++m_line; + ++m_lineNumber; } } @@ -5341,7 +5360,7 @@ CSSRule* CSSParser::createStyleRule(Vector<CSSSelector*>* selectors) CSSStyleRule* result = 0; markRuleBodyEnd(); if (selectors) { - RefPtr<CSSStyleRule> rule = CSSStyleRule::create(m_styleSheet, m_lastSelectorLine); + RefPtr<CSSStyleRule> rule = CSSStyleRule::create(m_styleSheet, m_lastSelectorLineNumber); rule->adoptSelectorVector(*selectors); if (m_hasFontFaceOnlyValues) deleteFontFaceOnlyValues(); @@ -5447,7 +5466,7 @@ CSSRule* CSSParser::createPageRule(CSSSelector* pageSelector) m_allowImportRules = m_allowNamespaceDeclarations = m_allowVariablesRules = false; CSSPageRule* pageRule = 0; if (pageSelector) { - RefPtr<CSSPageRule> rule = CSSPageRule::create(m_styleSheet, pageSelector, m_lastSelectorLine); + RefPtr<CSSPageRule> rule = CSSPageRule::create(m_styleSheet, pageSelector, m_lastSelectorLineNumber); rule->setDeclaration(CSSMutableStyleDeclaration::create(rule.get(), m_parsedProperties, m_numParsedProperties)); pageRule = rule.get(); m_parsedStyleObjects.append(rule.release()); @@ -5601,7 +5620,7 @@ void CSSParser::invalidBlockHit() void CSSParser::updateLastSelectorLineAndPosition() { - m_lastSelectorLine = m_line; + m_lastSelectorLineNumber = m_lineNumber; markRuleBodyStart(); } diff --git a/WebCore/css/CSSParser.h b/WebCore/css/CSSParser.h index 81b1ae2..5d76a41 100644 --- a/WebCore/css/CSSParser.h +++ b/WebCore/css/CSSParser.h @@ -60,7 +60,7 @@ namespace WebCore { CSSParser(bool strictParsing = true); ~CSSParser(); - void parseSheet(CSSStyleSheet*, const String&, StyleRuleRanges* ruleRangeMap = 0); + void parseSheet(CSSStyleSheet*, const String&, int startLineNumber = 0, StyleRuleRanges* ruleRangeMap = 0); PassRefPtr<CSSRule> parseRule(CSSStyleSheet*, const String&); PassRefPtr<CSSRule> parseKeyframeRule(CSSStyleSheet*, const String&); bool parseValue(CSSMutableStyleDeclaration*, int propId, const String&, bool important); @@ -288,8 +288,8 @@ namespace WebCore { int yyleng; int yyTok; int yy_start; - int m_line; - int m_lastSelectorLine; + int m_lineNumber; + int m_lastSelectorLineNumber; bool m_allowImportRules; bool m_allowVariablesRules; diff --git a/WebCore/css/CSSPrimitiveValueMappings.h b/WebCore/css/CSSPrimitiveValueMappings.h index baa1ab8..9533f68 100644 --- a/WebCore/css/CSSPrimitiveValueMappings.h +++ b/WebCore/css/CSSPrimitiveValueMappings.h @@ -36,7 +36,6 @@ #include "FontSmoothingMode.h" #include "GraphicsTypes.h" #include "Path.h" -#include "RenderStyleConstants.h" #include "SVGRenderStyleDefs.h" #include "TextDirection.h" #include "TextRenderingMode.h" @@ -253,6 +252,9 @@ template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ControlPart e) case MediaVolumeSliderPart: m_value.ident = CSSValueMediaVolumeSlider; break; + case MediaVolumeSliderMuteButtonPart: + m_value.ident = CSSValueMediaVolumeSliderMuteButton; + break; case MediaVolumeSliderThumbPart: m_value.ident = CSSValueMediaVolumeSliderthumb; break; diff --git a/WebCore/css/CSSProperty.cpp b/WebCore/css/CSSProperty.cpp index d7f2175..777c0c0 100644 --- a/WebCore/css/CSSProperty.cpp +++ b/WebCore/css/CSSProperty.cpp @@ -38,4 +38,20 @@ bool operator==(const CSSProperty& a, const CSSProperty& b) return a.m_id == b.m_id && a.m_important == b.m_important && a.m_value == b.m_value; } +int CSSProperty::resolveDirectionAwareProperty(int propertyID, TextDirection direction) +{ + switch (static_cast<CSSPropertyID>(propertyID)) { + case CSSPropertyWebkitMarginEnd: + return direction == LTR ? CSSPropertyMarginRight : CSSPropertyMarginLeft; + case CSSPropertyWebkitMarginStart: + return direction == LTR ? CSSPropertyMarginLeft : CSSPropertyMarginRight; + case CSSPropertyWebkitPaddingEnd: + return direction == LTR ? CSSPropertyPaddingRight : CSSPropertyPaddingLeft; + case CSSPropertyWebkitPaddingStart: + return direction == LTR ? CSSPropertyPaddingLeft : CSSPropertyPaddingRight; + default: + return propertyID; + } +} + } // namespace WebCore diff --git a/WebCore/css/CSSProperty.h b/WebCore/css/CSSProperty.h index 4505f33..7a3da68 100644 --- a/WebCore/css/CSSProperty.h +++ b/WebCore/css/CSSProperty.h @@ -22,6 +22,7 @@ #define CSSProperty_h #include "CSSValue.h" +#include "TextDirection.h" #include <wtf/PassRefPtr.h> #include <wtf/RefPtr.h> @@ -58,6 +59,8 @@ public: String cssText() const; + static int resolveDirectionAwareProperty(int propertyID, TextDirection); + friend bool operator==(const CSSProperty&, const CSSProperty&); // Make sure the following fits in 4 bytes. Really. diff --git a/WebCore/css/CSSPropertyNames.in b/WebCore/css/CSSPropertyNames.in index 9c65971..a330abe 100644 --- a/WebCore/css/CSSPropertyNames.in +++ b/WebCore/css/CSSPropertyNames.in @@ -19,6 +19,7 @@ font-size font-style font-variant font-weight +text-rendering -webkit-text-size-adjust zoom @@ -134,7 +135,6 @@ text-overline-color text-overline-mode text-overline-style text-overline-width -text-rendering text-shadow text-transform text-underline @@ -215,6 +215,7 @@ z-index -webkit-line-clamp -webkit-margin-bottom-collapse -webkit-margin-collapse +-webkit-margin-end -webkit-margin-start -webkit-margin-top-collapse -webkit-marquee @@ -239,6 +240,7 @@ z-index -webkit-mask-size -webkit-match-nearest-mail-blockquote-color -webkit-nbsp-mode +-webkit-padding-end -webkit-padding-start -webkit-perspective -webkit-perspective-origin diff --git a/WebCore/css/CSSSegmentedFontFace.cpp b/WebCore/css/CSSSegmentedFontFace.cpp index c3e3fd0..b13dd9c 100644 --- a/WebCore/css/CSSSegmentedFontFace.cpp +++ b/WebCore/css/CSSSegmentedFontFace.cpp @@ -110,15 +110,15 @@ FontData* CSSSegmentedFontFace::getFontData(const FontDescription& fontDescripti FontTraitsMask traitsMask = m_fontFaces[i]->traitsMask(); bool syntheticBold = !(traitsMask & (FontWeight600Mask | FontWeight700Mask | FontWeight800Mask | FontWeight900Mask)) && (desiredTraitsMask & (FontWeight600Mask | FontWeight700Mask | FontWeight800Mask | FontWeight900Mask)); bool syntheticItalic = !(traitsMask & FontStyleItalicMask) && (desiredTraitsMask & FontStyleItalicMask); - if (const FontData* faceFontData = m_fontFaces[i]->getFontData(fontDescription, syntheticBold, syntheticItalic)) { + if (const SimpleFontData* faceFontData = m_fontFaces[i]->getFontData(fontDescription, syntheticBold, syntheticItalic)) { ASSERT(!faceFontData->isSegmented()); const Vector<CSSFontFace::UnicodeRange>& ranges = m_fontFaces[i]->ranges(); unsigned numRanges = ranges.size(); if (!numRanges) - fontData->appendRange(FontDataRange(0, 0x7FFFFFFF, static_cast<const SimpleFontData*>(faceFontData))); + fontData->appendRange(FontDataRange(0, 0x7FFFFFFF, faceFontData)); else { for (unsigned j = 0; j < numRanges; ++j) - fontData->appendRange(FontDataRange(ranges[j].from(), ranges[j].to(), static_cast<const SimpleFontData*>(faceFontData))); + fontData->appendRange(FontDataRange(ranges[j].from(), ranges[j].to(), faceFontData)); } } } diff --git a/WebCore/css/CSSSelector.cpp b/WebCore/css/CSSSelector.cpp index ddf1737..47ead5f 100644 --- a/WebCore/css/CSSSelector.cpp +++ b/WebCore/css/CSSSelector.cpp @@ -3,7 +3,7 @@ * 1999 Waldo Bastian (bastian@kde.org) * 2001 Andreas Schlapbach (schlpbch@iam.unibe.ch) * 2001-2003 Dirk Mueller (mueller@kde.org) - * Copyright (C) 2002, 2006, 2007, 2008 Apple Inc. All rights reserved. + * Copyright (C) 2002, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. * Copyright (C) 2008 David Smith (catfish.man@gmail.com) * Copyright (C) 2010 Google Inc. All rights reserved. * @@ -140,6 +140,8 @@ PseudoId CSSSelector::pseudoId(PseudoType type) return MEDIA_CONTROLS_TIMELINE; case PseudoMediaControlsVolumeSlider: return MEDIA_CONTROLS_VOLUME_SLIDER; + case PseudoMediaControlsVolumeSliderMuteButton: + return MEDIA_CONTROLS_VOLUME_SLIDER_MUTE_BUTTON; case PseudoMediaControlsSeekBackButton: return MEDIA_CONTROLS_SEEK_BACK_BUTTON; case PseudoMediaControlsSeekForwardButton: @@ -324,6 +326,7 @@ static HashMap<AtomicStringImpl*, CSSSelector::PseudoType>* nameToPseudoTypeMap( DEFINE_STATIC_LOCAL(AtomicString, mediaControlsPlayButton, ("-webkit-media-controls-play-button")); DEFINE_STATIC_LOCAL(AtomicString, mediaControlsTimeline, ("-webkit-media-controls-timeline")); DEFINE_STATIC_LOCAL(AtomicString, mediaControlsVolumeSlider, ("-webkit-media-controls-volume-slider")); + DEFINE_STATIC_LOCAL(AtomicString, mediaControlsVolumeSliderMuteButton, ("-webkit-media-controls-volume-slider-mute-button")); DEFINE_STATIC_LOCAL(AtomicString, mediaControlsSeekBackButton, ("-webkit-media-controls-seek-back-button")); DEFINE_STATIC_LOCAL(AtomicString, mediaControlsSeekForwardButton, ("-webkit-media-controls-seek-forward-button")); DEFINE_STATIC_LOCAL(AtomicString, mediaControlsRewindButton, ("-webkit-media-controls-rewind-button")); @@ -437,6 +440,7 @@ static HashMap<AtomicStringImpl*, CSSSelector::PseudoType>* nameToPseudoTypeMap( nameToPseudoType->set(mediaControlsTimeRemainingDisplay.impl(), CSSSelector::PseudoMediaControlsTimeRemainingDisplay); nameToPseudoType->set(mediaControlsTimeline.impl(), CSSSelector::PseudoMediaControlsTimeline); nameToPseudoType->set(mediaControlsVolumeSlider.impl(), CSSSelector::PseudoMediaControlsVolumeSlider); + nameToPseudoType->set(mediaControlsVolumeSliderMuteButton.impl(), CSSSelector::PseudoMediaControlsVolumeSliderMuteButton); nameToPseudoType->set(mediaControlsSeekBackButton.impl(), CSSSelector::PseudoMediaControlsSeekBackButton); nameToPseudoType->set(mediaControlsSeekForwardButton.impl(), CSSSelector::PseudoMediaControlsSeekForwardButton); nameToPseudoType->set(mediaControlsRewindButton.impl(), CSSSelector::PseudoMediaControlsRewindButton); @@ -541,6 +545,7 @@ void CSSSelector::extractPseudoType() const case PseudoMediaControlsTimeRemainingDisplay: case PseudoMediaControlsTimeline: case PseudoMediaControlsVolumeSlider: + case PseudoMediaControlsVolumeSliderMuteButton: case PseudoMediaControlsSeekBackButton: case PseudoMediaControlsSeekForwardButton: case PseudoMediaControlsRewindButton: diff --git a/WebCore/css/CSSSelector.h b/WebCore/css/CSSSelector.h index d55fafc..fc0dd7b 100644 --- a/WebCore/css/CSSSelector.h +++ b/WebCore/css/CSSSelector.h @@ -1,7 +1,7 @@ /* * Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org) * 1999 Waldo Bastian (bastian@kde.org) - * Copyright (C) 2004, 2006, 2007, 2008 Apple Inc. All rights reserved. + * Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -26,6 +26,7 @@ #include "QualifiedName.h" #include <wtf/Noncopyable.h> #include <wtf/OwnPtr.h> +#include <wtf/PassOwnPtr.h> namespace WebCore { @@ -176,6 +177,7 @@ namespace WebCore { PseudoMediaControlsPlayButton, PseudoMediaControlsTimelineContainer, PseudoMediaControlsVolumeSliderContainer, + PseudoMediaControlsVolumeSliderMuteButton, PseudoMediaControlsCurrentTimeDisplay, PseudoMediaControlsTimeRemainingDisplay, PseudoMediaControlsToggleClosedCaptions, @@ -283,11 +285,10 @@ namespace WebCore { void extractPseudoType() const; struct RareData : Noncopyable { - RareData(CSSSelector* tagHistory) + RareData(PassOwnPtr<CSSSelector> tagHistory) : m_a(0) , m_b(0) , m_tagHistory(tagHistory) - , m_simpleSelector(0) , m_attribute(anyQName()) , m_argument(nullAtom) { @@ -308,7 +309,7 @@ namespace WebCore { { if (m_hasRareData) return; - m_data.m_rareData = new RareData(m_data.m_tagHistory); + m_data.m_rareData = new RareData(adoptPtr(m_data.m_tagHistory)); m_hasRareData = true; } diff --git a/WebCore/css/CSSStyleSelector.cpp b/WebCore/css/CSSStyleSelector.cpp index 750988e..44d9e66 100644 --- a/WebCore/css/CSSStyleSelector.cpp +++ b/WebCore/css/CSSStyleSelector.cpp @@ -1038,7 +1038,7 @@ bool CSSStyleSelector::canShareStyleWithElement(Node* n) if (classesMatch) { bool mappedAttrsMatch = true; if (s->hasMappedAttributes()) - mappedAttrsMatch = s->mappedAttributes()->mappedMapsEquivalent(m_styledElement->mappedAttributes()); + mappedAttrsMatch = s->attributeMap()->mappedMapsEquivalent(m_styledElement->attributeMap()); if (mappedAttrsMatch) { if (s->isLink()) { if (m_elementLinkState != style->insideLink()) @@ -1258,7 +1258,7 @@ PassRefPtr<RenderStyle> CSSStyleSelector::styleForElement(Element* e, RenderStyl // Ask if the HTML element has mapped attributes. if (m_styledElement->hasMappedAttributes()) { // Walk our attribute list and add in each decl. - const NamedNodeMap* map = m_styledElement->mappedAttributes(); + const NamedNodeMap* map = m_styledElement->attributeMap(); for (unsigned i = 0; i < map->length(); i++) { Attribute* attr = map->attributeItem(i); if (attr->isMappedAttribute() && attr->decl()) { @@ -2920,7 +2920,7 @@ void CSSStyleSelector::applyDeclarations(bool isImportant, int startIndex, int e if (applyFirst) { COMPILE_ASSERT(firstCSSProperty == CSSPropertyColor, CSS_color_is_first_property); - COMPILE_ASSERT(CSSPropertyZoom == CSSPropertyColor + 10, CSS_zoom_is_end_of_first_prop_range); + COMPILE_ASSERT(CSSPropertyZoom == CSSPropertyColor + 11, CSS_zoom_is_end_of_first_prop_range); COMPILE_ASSERT(CSSPropertyLineHeight == CSSPropertyZoom + 1, CSS_line_height_is_after_zoom); // give special priority to font-xxx, color properties, etc @@ -3108,11 +3108,7 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value) bool isInherit = m_parentNode && valueType == CSSValue::CSS_INHERIT; bool isInitial = valueType == CSSValue::CSS_INITIAL || (!m_parentNode && valueType == CSSValue::CSS_INHERIT); - // These properties are used to set the correct margins/padding on RTL lists. - if (id == CSSPropertyWebkitMarginStart) - id = m_style->direction() == LTR ? CSSPropertyMarginLeft : CSSPropertyMarginRight; - else if (id == CSSPropertyWebkitPaddingStart) - id = m_style->direction() == LTR ? CSSPropertyPaddingLeft : CSSPropertyPaddingRight; + id = CSSProperty::resolveDirectionAwareProperty(id, m_style->direction()); if (m_checker.m_matchVisitedPseudoClass && !isValidVisitedLinkProperty(id)) { // Limit the properties that can be applied to only the ones honored by :visited. @@ -5502,7 +5498,9 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value) case CSSPropertyTextUnderlineStyle: case CSSPropertyTextUnderlineWidth: case CSSPropertyWebkitFontSizeDelta: + case CSSPropertyWebkitMarginEnd: case CSSPropertyWebkitMarginStart: + case CSSPropertyWebkitPaddingEnd: case CSSPropertyWebkitPaddingStart: case CSSPropertyWebkitTextDecorationsInEffect: case CSSPropertyWebkitTextStroke: diff --git a/WebCore/css/CSSStyleSheet.cpp b/WebCore/css/CSSStyleSheet.cpp index 227d37c..1ef1c2b 100644 --- a/WebCore/css/CSSStyleSheet.cpp +++ b/WebCore/css/CSSStyleSheet.cpp @@ -183,9 +183,14 @@ const AtomicString& CSSStyleSheet::determineNamespace(const AtomicString& prefix bool CSSStyleSheet::parseString(const String &string, bool strict) { + return parseStringAtLine(string, strict, 0); +} + +bool CSSStyleSheet::parseStringAtLine(const String& string, bool strict, int startLineNumber) +{ setStrictParsing(strict); CSSParser p(strict); - p.parseSheet(this, string); + p.parseSheet(this, string, startLineNumber); return true; } diff --git a/WebCore/css/CSSStyleSheet.h b/WebCore/css/CSSStyleSheet.h index 4c59144..fe82794 100644 --- a/WebCore/css/CSSStyleSheet.h +++ b/WebCore/css/CSSStyleSheet.h @@ -81,6 +81,8 @@ public: virtual bool parseString(const String&, bool strict = true); + bool parseStringAtLine(const String&, bool strict, int startLineNumber); + virtual bool isLoading(); virtual void checkLoaded(); diff --git a/WebCore/css/CSSStyleSheet.idl b/WebCore/css/CSSStyleSheet.idl index e180217..e488657 100644 --- a/WebCore/css/CSSStyleSheet.idl +++ b/WebCore/css/CSSStyleSheet.idl @@ -21,7 +21,7 @@ module css { // Introduced in DOM Level 2: - interface CSSStyleSheet : stylesheets::StyleSheet { + interface CSSStyleSheet : StyleSheet { readonly attribute CSSRule ownerRule; readonly attribute CSSRuleList cssRules; diff --git a/WebCore/css/CSSValueKeywords.in b/WebCore/css/CSSValueKeywords.in index 3439878..d302990 100644 --- a/WebCore/css/CSSValueKeywords.in +++ b/WebCore/css/CSSValueKeywords.in @@ -583,6 +583,7 @@ media-sliderthumb media-volume-slider-container media-volume-slider media-volume-sliderthumb +media-volume-slider-mute-button media-controls-background media-current-time-display media-time-remaining-display diff --git a/WebCore/css/CSSVariablesRule.idl b/WebCore/css/CSSVariablesRule.idl index 780e84d..b7559f6 100644 --- a/WebCore/css/CSSVariablesRule.idl +++ b/WebCore/css/CSSVariablesRule.idl @@ -26,7 +26,7 @@ module css { interface CSSVariablesRule : CSSRule { - readonly attribute stylesheets::MediaList media; + readonly attribute MediaList media; readonly attribute CSSVariablesDeclaration variables; }; diff --git a/WebCore/css/MediaQuery.cpp b/WebCore/css/MediaQuery.cpp index 187a33d..b71706c 100644 --- a/WebCore/css/MediaQuery.cpp +++ b/WebCore/css/MediaQuery.cpp @@ -78,7 +78,7 @@ static bool expressionCompare(const MediaQueryExp* a, const MediaQueryExp* b) MediaQuery::MediaQuery(Restrictor r, const String& mediaType, PassOwnPtr<Vector<MediaQueryExp*> > exprs) : m_restrictor(r) , m_mediaType(mediaType.lower()) - , m_expressions(exprs.release()) + , m_expressions(exprs) , m_ignored(false) { if (!m_expressions) { @@ -108,7 +108,6 @@ MediaQuery::MediaQuery(Restrictor r, const String& mediaType, PassOwnPtr<Vector< MediaQuery::~MediaQuery() { deleteAllValues(*m_expressions); - delete m_expressions; } // http://dev.w3.org/csswg/cssom/#compare-media-queries diff --git a/WebCore/css/MediaQuery.h b/WebCore/css/MediaQuery.h index ccc59ac..3eea3b2 100644 --- a/WebCore/css/MediaQuery.h +++ b/WebCore/css/MediaQuery.h @@ -43,11 +43,11 @@ public: Only, Not, None }; - MediaQuery(Restrictor r, const String& mediaType, PassOwnPtr<Vector<MediaQueryExp*> > exprs); + MediaQuery(Restrictor, const String& mediaType, PassOwnPtr<Vector<MediaQueryExp*> > exprs); ~MediaQuery(); Restrictor restrictor() const { return m_restrictor; } - const Vector<MediaQueryExp*>* expressions() const { return m_expressions; } + const Vector<MediaQueryExp*>* expressions() const { return m_expressions.get(); } String mediaType() const { return m_mediaType; } bool operator==(const MediaQuery& other) const; String cssText() const; @@ -56,7 +56,7 @@ public: private: Restrictor m_restrictor; String m_mediaType; - Vector<MediaQueryExp*>* m_expressions; + OwnPtr<Vector<MediaQueryExp*> > m_expressions; bool m_ignored; String m_serializationCache; diff --git a/WebCore/css/StyleMedia.h b/WebCore/css/StyleMedia.h index 761e6a3..82c9eba 100644 --- a/WebCore/css/StyleMedia.h +++ b/WebCore/css/StyleMedia.h @@ -27,10 +27,12 @@ #ifndef StyleMedia_h #define StyleMedia_h -#include "DOMWindow.h" +#include "PlatformString.h" namespace WebCore { +class Frame; + class StyleMedia : public RefCounted<StyleMedia> { public: static PassRefPtr<StyleMedia> create(Frame* frame) diff --git a/WebCore/css/mathml.css b/WebCore/css/mathml.css index 7a9b348..ca9d7b0 100644 --- a/WebCore/css/mathml.css +++ b/WebCore/css/mathml.css @@ -5,6 +5,7 @@ math { display: inline-block; padding: 0px; margin: 0px; + text-align: left; vertical-align: baseline; line-height: 1.0; padding-left: 1px; @@ -17,10 +18,6 @@ math[display="block"] { margin-bottom: 1em; } -math * { - text-align: left; -} - math > * { vertical-align: baseline; } @@ -32,7 +29,7 @@ mrow, mfenced { padding-right: 1px; } -mi, mtext { +mi{ font-style: italic; padding-right: 0.1em; } @@ -97,15 +94,15 @@ math > mo, mrow > mo, mfenced > mo { padding-right: 0.05em; } -mo[mathsize="small"], mn[mathsize="small"], mi[mathsize="small"] { +math[mathsize="small"], mstyle[mathsize="small"], mo[mathsize="small"], mn[mathsize="small"], mi[mathsize="small"], mtext[mathsize="small"], mspace[mathsize="small"], ms[mathsize="small"]{ font-size: 0.75em; } -mo[mathsize="normal"],mn[mathsize="normal"],mi[mathsize="normal"] { +math[mathsize="normal"], mstyle[mathsize="normal"], mo[mathsize="normal"], mn[mathsize="normal"], mi[mathsize="normal"], mtext[mathsize="normal"], mspace[mathsize="normal"], ms[mathsize="normal"]{ font-size: 1em; } -mo[mathsize="big"], mn[mathsize="big"], mi[mathsize="big"] { +math[mathsize="big"], mstyle[mathsize="big"], mo[mathsize="big"], mn[mathsize="big"], mi[mathsize="big"], mtext[mathsize="big"], mspace[mathsize="big"], ms[mathsize="big"]{ font-size: 1.5em; } diff --git a/WebCore/css/mediaControls.css b/WebCore/css/mediaControls.css index de2c2fe..6a0f14b 100644 --- a/WebCore/css/mediaControls.css +++ b/WebCore/css/mediaControls.css @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 Apple Inc. All rights reserved. + * Copyright (C) 2009, 2010 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -131,3 +131,8 @@ audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-medi width: 16px; height: 16px; } + +audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button { + -webkit-appearance: media-volume-slider-mute-button; + display: none; +} diff --git a/WebCore/css/mediaControlsQuickTime.css b/WebCore/css/mediaControlsQuickTime.css index 965685d..d2c731f 100644 --- a/WebCore/css/mediaControlsQuickTime.css +++ b/WebCore/css/mediaControlsQuickTime.css @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 Apple Inc. All rights reserved. + * Copyright (C) 2009, 2010 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -32,6 +32,7 @@ audio { audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel { /* In mediaControls.css */ -webkit-appearance: media-controls-background; + overflow: visible; height: 25px; } @@ -41,10 +42,11 @@ video:-webkit-full-page-media::-webkit-media-controls-panel { audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button { -webkit-box-ordinal-group: 2; /* Before the fullscreen button */ - width: 15px; - height: 14px; + + width: 14px; + height: 12px; margin-left: 2px; - margin-right: 8px; + margin-right: 9px; } audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-button { @@ -185,3 +187,38 @@ audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-medi margin-right: 7px; -webkit-box-ordinal-group: 3; /* between mute and fullscreen */ } + +audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container { + -webkit-appearance: media-volume-slider-container; + position: absolute; + + top: 0; + left: 0; + + width: 22px; + height: 114px; +} + +audio::-webkit-media-controls-volume-slider, video::-webkit-media-controls-volume-slider { + -webkit-appearance: media-volume-slider; + display: inline; + position: absolute; + + top: 7px; + left: 6px; + + width: 10px; + height: 80px; +} + +audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button { + -webkit-appearance: media-volume-slider-mute-button; + display: inline; + position: absolute; + + bottom: 5px; + left: 4px; + + width: 14px; + height: 12px; +} diff --git a/WebCore/css/themeWin.css b/WebCore/css/themeWin.css index a0170ac..f2ad669 100644 --- a/WebCore/css/themeWin.css +++ b/WebCore/css/themeWin.css @@ -78,8 +78,7 @@ input[type="search"]::-webkit-search-results-button { } input[type="button"], input[type="submit"], input[type="reset"], input[type="file"]::-webkit-file-upload-button, button { - /* Matches Firefox */ - padding: 0 6px; + padding: 1px 6px; } /* Windows selects are not rounded. Custom borders for them shouldn't be either. */ diff --git a/WebCore/dom/Attribute.h b/WebCore/dom/Attribute.h index 9e1afc6..cf84a6f 100644 --- a/WebCore/dom/Attribute.h +++ b/WebCore/dom/Attribute.h @@ -78,6 +78,11 @@ public: void setValue(const AtomicString& value) { m_value = value; } void setPrefix(const AtomicString& prefix) { m_name.setPrefix(prefix); } + // Note: This API is only for HTMLTreeBuilder. It is not safe to change the + // name of an attribute once parseMappedAttribute has been called as DOM + // elements may have placed the Attribute in a hash by name. + void parserSetName(const QualifiedName& name) { m_name = name; } + bool isMappedAttribute() { return m_isMappedAttribute; } private: diff --git a/WebCore/dom/BeforeLoadEvent.h b/WebCore/dom/BeforeLoadEvent.h index fc5814a..f60e438 100644 --- a/WebCore/dom/BeforeLoadEvent.h +++ b/WebCore/dom/BeforeLoadEvent.h @@ -28,7 +28,6 @@ #define BeforeLoadEvent_h #include "Event.h" -#include "EventNames.h" namespace WebCore { diff --git a/WebCore/dom/CanvasSurface.h b/WebCore/dom/CanvasSurface.h deleted file mode 100644 index 3601381..0000000 --- a/WebCore/dom/CanvasSurface.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef CanvasSurface_h -#define CanvasSurface_h - -#include "AffineTransform.h" -#include "IntSize.h" -#include "PlatformString.h" - -#include <wtf/OwnPtr.h> -#include <wtf/Noncopyable.h> - -namespace WebCore { - -class AffineTransform; -class FloatPoint; -class FloatRect; -class FloatSize; -class GraphicsContext; -class ImageBuffer; -class IntPoint; - -class CSSStyleSelector; -class RenderBox; -class RenderStyle; -class SecurityOrigin; - -typedef int ExceptionCode; - -class CanvasSurface : public Noncopyable { -public: - CanvasSurface(float pageScaleFactor); - virtual ~CanvasSurface(); - - int width() const { return m_size.width(); } - int height() const { return m_size.height(); } - - String toDataURL(const String& mimeType, const double* quality, ExceptionCode&); - String toDataURL(const String& mimeType, ExceptionCode& ec) { return toDataURL(mimeType, 0, ec); } - - const IntSize& size() const { return m_size; } - - virtual void willDraw(const FloatRect&); - - GraphicsContext* drawingContext() const; - - ImageBuffer* buffer() const; - - IntRect convertLogicalToDevice(const FloatRect&) const; - IntSize convertLogicalToDevice(const FloatSize&) const; - IntPoint convertLogicalToDevice(const FloatPoint&) const; - - void setOriginTainted() { m_originClean = false; } - bool originClean() const { return m_originClean; } - - AffineTransform baseTransform() const; - - const SecurityOrigin& securityOrigin() const; - RenderBox* renderBox() const; - RenderStyle* computedStyle(); - CSSStyleSelector* styleSelector(); - -protected: - void setSurfaceSize(const IntSize&); - bool hasCreatedImageBuffer() const { return m_hasCreatedImageBuffer; } - - static const int DefaultWidth; - static const int DefaultHeight; - -private: - void createImageBuffer() const; - - static const float MaxCanvasArea; - - IntSize m_size; - - float m_pageScaleFactor; - bool m_originClean; - - // m_createdImageBuffer means we tried to malloc the buffer. We didn't necessarily get it. - mutable bool m_hasCreatedImageBuffer; - mutable OwnPtr<ImageBuffer> m_imageBuffer; -}; - -} // namespace WebCore - -#endif diff --git a/WebCore/dom/CharacterData.cpp b/WebCore/dom/CharacterData.cpp index 075df47..5fbb6f2 100644 --- a/WebCore/dom/CharacterData.cpp +++ b/WebCore/dom/CharacterData.cpp @@ -59,7 +59,7 @@ String CharacterData::substringData(unsigned offset, unsigned count, ExceptionCo return m_data->substring(offset, count); } -void CharacterData::appendData(const String& arg, ExceptionCode&) +PassRefPtr<StringImpl> CharacterData::parserAppendData(const String& arg) { String newStr = m_data; newStr.append(arg); @@ -72,7 +72,13 @@ void CharacterData::appendData(const String& arg, ExceptionCode&) attach(); } else if (renderer()) toRenderText(renderer())->setTextWithOffset(m_data, oldStr->length(), 0); - + + return oldStr.release(); +} + +void CharacterData::appendData(const String& arg, ExceptionCode&) +{ + RefPtr<StringImpl> oldStr = parserAppendData(arg); dispatchModifiedEvent(oldStr.get()); } diff --git a/WebCore/dom/CharacterData.h b/WebCore/dom/CharacterData.h index 5ca4b75..ecc0cf7 100644 --- a/WebCore/dom/CharacterData.h +++ b/WebCore/dom/CharacterData.h @@ -42,6 +42,9 @@ public: StringImpl* dataImpl() { return m_data.get(); } + // Like appendData, but optimized for the parser (e.g., no mutation events). + PassRefPtr<StringImpl> parserAppendData(const String&); + protected: CharacterData(Document* document, const String& text, ConstructionType type) : Node(document, type) diff --git a/WebCore/dom/ContainerNode.cpp b/WebCore/dom/ContainerNode.cpp index 6539e5b..80bd035 100644 --- a/WebCore/dom/ContainerNode.cpp +++ b/WebCore/dom/ContainerNode.cpp @@ -616,6 +616,11 @@ void ContainerNode::queuePostAttachCallback(NodeCallback callback, Node* node) s_postAttachCallbackQueue->append(std::pair<NodeCallback, RefPtr<Node> >(callback, node)); } +bool ContainerNode::postAttachCallbacksAreSuspended() +{ + return s_attachDepth; +} + void ContainerNode::dispatchPostAttachCallbacks() { // We recalculate size() each time through the loop because a callback diff --git a/WebCore/dom/ContainerNode.h b/WebCore/dom/ContainerNode.h index 36e6ac5..a27d95b 100644 --- a/WebCore/dom/ContainerNode.h +++ b/WebCore/dom/ContainerNode.h @@ -76,10 +76,12 @@ public: bool dispatchBeforeLoadEvent(const String& sourceURL); + static void queuePostAttachCallback(NodeCallback, Node*); + static bool postAttachCallbacksAreSuspended(); + protected: ContainerNode(Document*, ConstructionType = CreateContainer); - static void queuePostAttachCallback(NodeCallback, Node*); void suspendPostAttachCallbacks(); void resumePostAttachCallbacks(); diff --git a/WebCore/dom/CustomEvent.h b/WebCore/dom/CustomEvent.h index d910767..d287a65 100644 --- a/WebCore/dom/CustomEvent.h +++ b/WebCore/dom/CustomEvent.h @@ -29,7 +29,6 @@ #include "AtomicString.h" #include "Event.h" #include "ScriptValue.h" -#include <wtf/RefCounted.h> namespace WebCore { diff --git a/WebCore/dom/DOMStringMap.h b/WebCore/dom/DOMStringMap.h index c0bc07d..e91d884 100644 --- a/WebCore/dom/DOMStringMap.h +++ b/WebCore/dom/DOMStringMap.h @@ -28,7 +28,6 @@ #include "PlatformString.h" #include <wtf/Noncopyable.h> -#include <wtf/PassRefPtr.h> #include <wtf/Vector.h> namespace WebCore { diff --git a/WebCore/dom/DeviceOrientation.cpp b/WebCore/dom/DeviceOrientationController.cpp index 6f8d06a..97ddcd8 100644 --- a/WebCore/dom/DeviceOrientation.cpp +++ b/WebCore/dom/DeviceOrientationController.cpp @@ -24,7 +24,7 @@ */ #include "config.h" -#include "DeviceOrientation.h" +#include "DeviceOrientationController.h" #if ENABLE(DEVICE_ORIENTATION) @@ -34,13 +34,13 @@ namespace WebCore { -DeviceOrientation::DeviceOrientation(Page* page, DeviceOrientationClient* client) +DeviceOrientationController::DeviceOrientationController(Page* page, DeviceOrientationClient* client) : m_page(page) , m_client(client) { } -void DeviceOrientation::onDeviceOrientationChange(double alpha, double beta, double gamma) +void DeviceOrientationController::onDeviceOrientationChange(double alpha, double beta, double gamma) { // FIXME: Fire DeviceOrientationEvents on the window object of all frames // that are listening to orientation. diff --git a/WebCore/dom/DeviceOrientation.h b/WebCore/dom/DeviceOrientationController.h index e4d96be..5f8f49a 100644 --- a/WebCore/dom/DeviceOrientation.h +++ b/WebCore/dom/DeviceOrientationController.h @@ -23,17 +23,17 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef DeviceOrientation_h -#define DeviceOrientation_h +#ifndef DeviceOrientationController_h +#define DeviceOrientationController_h namespace WebCore { class DeviceOrientationClient; class Page; -class DeviceOrientation { +class DeviceOrientationController { public: - DeviceOrientation(Page*, DeviceOrientationClient*); + DeviceOrientationController(Page*, DeviceOrientationClient*); // FIXME: Add methods to start and stop the service. @@ -46,4 +46,4 @@ private: } // namespace WebCore -#endif // DeviceOrientation_h +#endif // DeviceOrientationController_h diff --git a/WebCore/dom/DeviceOrientationEvent.h b/WebCore/dom/DeviceOrientationEvent.h index 0cec9ba..33ff026 100644 --- a/WebCore/dom/DeviceOrientationEvent.h +++ b/WebCore/dom/DeviceOrientationEvent.h @@ -26,7 +26,6 @@ #ifndef DeviceOrientationEvent_h #define DeviceOrientationEvent_h -#include "DOMWindow.h" #include "Event.h" namespace WebCore { diff --git a/WebCore/dom/Document.cpp b/WebCore/dom/Document.cpp index be2bb4c..6f91738 100644 --- a/WebCore/dom/Document.cpp +++ b/WebCore/dom/Document.cpp @@ -44,6 +44,7 @@ #include "CustomEvent.h" #include "DOMImplementation.h" #include "DOMWindow.h" +#include "DeviceOrientationEvent.h" #include "DocLoader.h" #include "DocumentFragment.h" #include "DocumentLoader.h" @@ -2061,7 +2062,7 @@ void Document::write(const SegmentedString& text, Document* ownerDocument) printf("Beginning a document.write at %d\n", elapsedTime()); #endif - if (!m_parser || m_parser->finishWasCalled()) + if (!m_parser) open(ownerDocument); ASSERT(m_parser); @@ -2199,6 +2200,8 @@ const Vector<RefPtr<CSSStyleSheet> >* Document::pageGroupUserSheets() const const UserStyleSheetVector* sheets = it->second; for (unsigned i = 0; i < sheets->size(); ++i) { const UserStyleSheet* sheet = sheets->at(i).get(); + if (sheet->injectedFrames() == InjectInTopFrameOnly && ownerElement()) + continue; if (!UserContentURLPattern::matchesPatterns(url(), sheet->whitelist(), sheet->blacklist())) continue; RefPtr<CSSStyleSheet> parsedSheet = CSSStyleSheet::createInline(const_cast<Document*>(this), sheet->url()); @@ -3321,6 +3324,10 @@ PassRefPtr<Event> Document::createEvent(const String& eventType, ExceptionCode& #endif event = TouchEvent::create(); #endif +#if ENABLE(DEVICE_ORIENTATION) + else if (eventType == "DeviceOrientationEvent") + event = DeviceOrientationEvent::create(); +#endif if (event) return event.release(); @@ -3375,7 +3382,7 @@ CSSStyleDeclaration* Document::getOverrideStyle(Element*, const String&) return 0; } -Element* Document::ownerElement() const +HTMLFrameOwnerElement* Document::ownerElement() const { if (!frame()) return 0; diff --git a/WebCore/dom/Document.h b/WebCore/dom/Document.h index 3d9cf48..63a8d12 100644 --- a/WebCore/dom/Document.h +++ b/WebCore/dom/Document.h @@ -81,6 +81,7 @@ namespace WebCore { class HTMLDocument; class HTMLElement; class HTMLFormElement; + class HTMLFrameOwnerElement; class HTMLHeadElement; class HTMLInputElement; class HTMLMapElement; @@ -734,7 +735,7 @@ public: // Returns the owning element in the parent document. // Returns 0 if this is the top level document. - Element* ownerElement() const; + HTMLFrameOwnerElement* ownerElement() const; String title() const { return m_title; } void setTitle(const String&, Element* titleElement = 0); diff --git a/WebCore/dom/Element.cpp b/WebCore/dom/Element.cpp index 3dbd880..a1ff56d 100644 --- a/WebCore/dom/Element.cpp +++ b/WebCore/dom/Element.cpp @@ -70,8 +70,8 @@ PassRefPtr<Element> Element::create(const QualifiedName& tagName, Document* docu Element::~Element() { - if (namedAttrMap) - namedAttrMap->detachFromElement(); + if (m_attributeMap) + m_attributeMap->detachFromElement(); } inline ElementRareData* Element::rareData() const @@ -165,9 +165,9 @@ PassRefPtr<Element> Element::cloneElementWithoutChildren() void Element::removeAttribute(const QualifiedName& name, ExceptionCode& ec) { - if (namedAttrMap) { + if (m_attributeMap) { ec = 0; - namedAttrMap->removeNamedItem(name, ec); + m_attributeMap->removeNamedItem(name, ec); if (ec == NOT_FOUND_ERR) ec = 0; } @@ -195,12 +195,6 @@ void Element::setBooleanAttribute(const QualifiedName& name, bool b) } } -// Virtual function, defined in base class. -NamedNodeMap* Element::attributes() const -{ - return attributes(false); -} - Node::NodeType Element::nodeType() const { return ELEMENT_NODE; @@ -526,8 +520,8 @@ const AtomicString& Element::getAttribute(const String& name) const } #endif - if (namedAttrMap) { - if (Attribute* attribute = namedAttrMap->getAttributeItem(name, ignoreCase)) + if (m_attributeMap) { + if (Attribute* attribute = m_attributeMap->getAttributeItem(name, ignoreCase)) return attribute->value(); } @@ -560,9 +554,9 @@ void Element::setAttribute(const AtomicString& name, const AtomicString& value, updateId(old ? old->value() : nullAtom, value); if (old && value.isNull()) - namedAttrMap->removeAttribute(old->name()); + m_attributeMap->removeAttribute(old->name()); else if (!old && !value.isNull()) - namedAttrMap->addAttribute(createAttribute(QualifiedName(nullAtom, localName, nullAtom), value)); + m_attributeMap->addAttribute(createAttribute(QualifiedName(nullAtom, localName, nullAtom), value)); else if (old && !value.isNull()) { old->setValue(value); attributeChanged(old); @@ -589,9 +583,9 @@ void Element::setAttribute(const QualifiedName& name, const AtomicString& value, updateId(old ? old->value() : nullAtom, value); if (old && value.isNull()) - namedAttrMap->removeAttribute(name); + m_attributeMap->removeAttribute(name); else if (!old && !value.isNull()) - namedAttrMap->addAttribute(createAttribute(name, value)); + m_attributeMap->addAttribute(createAttribute(name, value)); else if (old) { old->setValue(value); attributeChanged(old); @@ -670,38 +664,38 @@ void Element::setAttributeMap(PassRefPtr<NamedNodeMap> list, FragmentScriptingPe // If setting the whole map changes the id attribute, we need to call updateId. const QualifiedName& idName = document()->idAttributeName(); - Attribute* oldId = namedAttrMap ? namedAttrMap->getAttributeItem(idName) : 0; + Attribute* oldId = m_attributeMap ? m_attributeMap->getAttributeItem(idName) : 0; Attribute* newId = list ? list->getAttributeItem(idName) : 0; if (oldId || newId) updateId(oldId ? oldId->value() : nullAtom, newId ? newId->value() : nullAtom); - if (namedAttrMap) - namedAttrMap->m_element = 0; + if (m_attributeMap) + m_attributeMap->m_element = 0; - namedAttrMap = list; + m_attributeMap = list; - if (namedAttrMap) { - namedAttrMap->m_element = this; + if (m_attributeMap) { + m_attributeMap->m_element = this; // If the element is created as result of a paste or drag-n-drop operation // we want to remove all the script and event handlers. if (scriptingPermission == FragmentScriptingNotAllowed) { unsigned i = 0; - while (i < namedAttrMap->length()) { - const QualifiedName& attributeName = namedAttrMap->m_attributes[i]->name(); + while (i < m_attributeMap->length()) { + const QualifiedName& attributeName = m_attributeMap->m_attributes[i]->name(); if (isEventHandlerAttribute(attributeName)) { - namedAttrMap->m_attributes.remove(i); + m_attributeMap->m_attributes.remove(i); continue; } - if (isAttributeToRemove(attributeName, namedAttrMap->m_attributes[i]->value())) - namedAttrMap->m_attributes[i]->setValue(nullAtom); + if (isAttributeToRemove(attributeName, m_attributeMap->m_attributes[i]->value())) + m_attributeMap->m_attributes[i]->setValue(nullAtom); i++; } } - unsigned len = namedAttrMap->length(); + unsigned len = m_attributeMap->length(); for (unsigned i = 0; i < len; i++) - attributeChanged(namedAttrMap->m_attributes[i].get()); + attributeChanged(m_attributeMap->m_attributes[i].get()); // FIXME: What about attributes that were in the old map that are not in the new map? } } @@ -716,7 +710,7 @@ bool Element::hasAttributes() const updateAnimatedSVGAttribute(anyQName()); #endif - return namedAttrMap && namedAttrMap->length() > 0; + return m_attributeMap && m_attributeMap->length(); } String Element::nodeName() const @@ -759,7 +753,7 @@ KURL Element::baseURI() const void Element::createAttributeMap() const { - namedAttrMap = NamedNodeMap::create(const_cast<Element*>(this)); + m_attributeMap = NamedNodeMap::create(const_cast<Element*>(this)); } bool Element::isURLAttribute(Attribute*) const @@ -792,8 +786,8 @@ void Element::insertedIntoDocument() ContainerNode::insertedIntoDocument(); if (hasID()) { - if (NamedNodeMap* attrs = namedAttrMap.get()) { - Attribute* idItem = attrs->getAttributeItem(document()->idAttributeName()); + if (m_attributeMap) { + Attribute* idItem = m_attributeMap->getAttributeItem(document()->idAttributeName()); if (idItem && !idItem->isNull()) updateId(nullAtom, idItem->value()); } @@ -803,8 +797,8 @@ void Element::insertedIntoDocument() void Element::removedFromDocument() { if (hasID()) { - if (NamedNodeMap* attrs = namedAttrMap.get()) { - Attribute* idItem = attrs->getAttributeItem(document()->idAttributeName()); + if (m_attributeMap) { + Attribute* idItem = m_attributeMap->getAttributeItem(document()->idAttributeName()); if (idItem && !idItem->isNull()) updateId(idItem->value(), nullAtom); } @@ -1231,8 +1225,8 @@ void Element::removeAttribute(const String& name, ExceptionCode& ec) { String localName = shouldIgnoreAttributeCase(this) ? name.lower() : name; - if (namedAttrMap) { - namedAttrMap->removeNamedItem(localName, ec); + if (m_attributeMap) { + m_attributeMap->removeNamedItem(localName, ec); if (ec == NOT_FOUND_ERR) ec = 0; } @@ -1532,14 +1526,28 @@ DOMStringMap* Element::dataset() KURL Element::getURLAttribute(const QualifiedName& name) const { #if !ASSERT_DISABLED - if (namedAttrMap) { - if (Attribute* attribute = namedAttrMap->getAttributeItem(name)) + if (m_attributeMap) { + if (Attribute* attribute = m_attributeMap->getAttributeItem(name)) ASSERT(isURLAttribute(attribute)); } #endif return document()->completeURL(deprecatedParseURL(getAttribute(name))); } +KURL Element::getNonEmptyURLAttribute(const QualifiedName& name) const +{ +#if !ASSERT_DISABLED + if (m_attributeMap) { + if (Attribute* attribute = m_attributeMap->getAttributeItem(name)) + ASSERT(isURLAttribute(attribute)); + } +#endif + String value = deprecatedParseURL(getAttribute(name)); + if (value.isEmpty()) + return KURL(); + return document()->completeURL(value); +} + int Element::getIntegralAttribute(const QualifiedName& attributeName) const { return getAttribute(attributeName).string().toInt(); diff --git a/WebCore/dom/Element.h b/WebCore/dom/Element.h index 7dd7d80..a66809a 100644 --- a/WebCore/dom/Element.h +++ b/WebCore/dom/Element.h @@ -198,15 +198,13 @@ public: // use a static AtomicString value instead to avoid the conversion overhead. void setCStringAttribute(const QualifiedName&, const char* cStringValue); - virtual NamedNodeMap* attributes() const; - NamedNodeMap* attributes(bool readonly) const; + NamedNodeMap* attributes(bool readonly = false) const; // This method is called whenever an attribute is added, changed or removed. virtual void attributeChanged(Attribute*, bool preserveDecls = false); - // not part of the DOM void setAttributeMap(PassRefPtr<NamedNodeMap>, FragmentScriptingPermission = FragmentScriptingAllowed); - NamedNodeMap* attributeMap() const { return namedAttrMap.get(); } + NamedNodeMap* attributeMap() const { return m_attributeMap.get(); } virtual void copyNonAttributeProperties(const Element* /*source*/) { } @@ -223,7 +221,10 @@ public: virtual void accessKeyAction(bool /*sendToAnyEvent*/) { } virtual bool isURLAttribute(Attribute*) const; + KURL getURLAttribute(const QualifiedName&) const; + KURL getNonEmptyURLAttribute(const QualifiedName&) const; + virtual const QualifiedName& imageSourceAttributeName() const; virtual String target() const { return String(); } @@ -348,8 +349,8 @@ private: ElementRareData* rareData() const; ElementRareData* ensureRareData(); -protected: - mutable RefPtr<NamedNodeMap> namedAttrMap; +private: + mutable RefPtr<NamedNodeMap> m_attributeMap; }; inline bool Node::hasTagName(const QualifiedName& name) const @@ -383,9 +384,9 @@ inline NamedNodeMap* Element::attributes(bool readonly) const updateAnimatedSVGAttribute(anyQName()); #endif - if (!readonly && !namedAttrMap) + if (!readonly && !m_attributeMap) createAttributeMap(); - return namedAttrMap.get(); + return m_attributeMap.get(); } inline void Element::updateId(const AtomicString& oldId, const AtomicString& newId) @@ -405,13 +406,13 @@ inline void Element::updateId(const AtomicString& oldId, const AtomicString& new inline bool Element::fastHasAttribute(const QualifiedName& name) const { - return namedAttrMap && namedAttrMap->getAttributeItem(name); + return m_attributeMap && m_attributeMap->getAttributeItem(name); } inline const AtomicString& Element::fastGetAttribute(const QualifiedName& name) const { - if (namedAttrMap) { - if (Attribute* attribute = namedAttrMap->getAttributeItem(name)) + if (m_attributeMap) { + if (Attribute* attribute = m_attributeMap->getAttributeItem(name)) return attribute->value(); } return nullAtom; @@ -420,7 +421,7 @@ inline const AtomicString& Element::fastGetAttribute(const QualifiedName& name) inline const AtomicString& Element::idForStyleResolution() const { ASSERT(hasID()); - return namedAttrMap->idForStyleResolution(); + return m_attributeMap->idForStyleResolution(); } inline bool Element::isIdAttributeName(const QualifiedName& attributeName) const diff --git a/WebCore/dom/EventListener.h b/WebCore/dom/EventListener.h index ff02204..96bc858 100644 --- a/WebCore/dom/EventListener.h +++ b/WebCore/dom/EventListener.h @@ -21,7 +21,6 @@ #ifndef EventListener_h #define EventListener_h -#include "PlatformString.h" #include <wtf/RefCounted.h> namespace JSC { diff --git a/WebCore/dom/MappedAttributeEntry.h b/WebCore/dom/MappedAttributeEntry.h index f28f182..aa1cd1f 100644 --- a/WebCore/dom/MappedAttributeEntry.h +++ b/WebCore/dom/MappedAttributeEntry.h @@ -4,6 +4,7 @@ * (C) 2001 Peter Kelly (pmk@post.com) * (C) 2001 Dirk Mueller (mueller@kde.org) * Copyright (C) 2003, 2004, 2005, 2006 Apple Computer, Inc. + * Copyright (C) 2010 Fran�ois Sausset (sausset@gmail.com). All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -44,6 +45,9 @@ enum MappedAttributeEntry { #if ENABLE(SVG) , eSVG #endif +#if ENABLE(MATHML) + , eMathML +#endif // When adding new entries, make sure to keep eLastEntry at the end of the list. , eLastEntry }; diff --git a/WebCore/dom/MessagePort.h b/WebCore/dom/MessagePort.h index ae1eb22..65332b8 100644 --- a/WebCore/dom/MessagePort.h +++ b/WebCore/dom/MessagePort.h @@ -29,10 +29,8 @@ #include "AtomicStringHash.h" #include "EventListener.h" -#include "EventNames.h" #include "EventTarget.h" #include "MessagePortChannel.h" -#include <wtf/HashMap.h> #include <wtf/OwnPtr.h> #include <wtf/PassOwnPtr.h> #include <wtf/PassRefPtr.h> diff --git a/WebCore/dom/Node.cpp b/WebCore/dom/Node.cpp index 77a88e7..73eb926 100644 --- a/WebCore/dom/Node.cpp +++ b/WebCore/dom/Node.cpp @@ -45,6 +45,7 @@ #include "ContextMenuController.h" #include "DOMImplementation.h" #include "Document.h" +#include "DocumentType.h" #include "DynamicNodeList.h" #include "Element.h" #include "Event.h" @@ -74,6 +75,7 @@ #include "RenderBox.h" #include "ScriptController.h" #include "SelectorNodeList.h" +#include "StaticNodeList.h" #include "StringBuilder.h" #include "TagNodeList.h" #include "Text.h" @@ -1735,12 +1737,13 @@ KURL Node::baseURI() const return parentNode() ? parentNode()->baseURI() : KURL(); } -bool Node::isEqualNode(Node *other) const +bool Node::isEqualNode(Node* other) const { if (!other) return false; - if (nodeType() != other->nodeType()) + NodeType nodeType = this->nodeType(); + if (nodeType != other->nodeType()) return false; if (nodeName() != other->nodeName()) @@ -1758,17 +1761,17 @@ bool Node::isEqualNode(Node *other) const if (nodeValue() != other->nodeValue()) return false; - NamedNodeMap *attrs = attributes(); - NamedNodeMap *otherAttrs = other->attributes(); + NamedNodeMap* attributes = this->attributes(); + NamedNodeMap* otherAttributes = other->attributes(); - if (!attrs && otherAttrs) + if (!attributes && otherAttributes) return false; - if (attrs && !attrs->mapsEquivalent(otherAttrs)) + if (attributes && !attributes->mapsEquivalent(otherAttributes)) return false; - Node *child = firstChild(); - Node *otherChild = other->firstChild(); + Node* child = firstChild(); + Node* otherChild = other->firstChild(); while (child) { if (!child->isEqualNode(otherChild)) @@ -1781,8 +1784,33 @@ bool Node::isEqualNode(Node *other) const if (otherChild) return false; - // FIXME: For DocumentType nodes we should check equality on - // the entities and notations NamedNodeMaps as well. + if (nodeType == DOCUMENT_TYPE_NODE) { + const DocumentType* documentTypeThis = static_cast<const DocumentType*>(this); + const DocumentType* documentTypeOther = static_cast<const DocumentType*>(other); + + if (documentTypeThis->publicId() != documentTypeOther->publicId()) + return false; + + if (documentTypeThis->systemId() != documentTypeOther->systemId()) + return false; + + if (documentTypeThis->internalSubset() != documentTypeOther->internalSubset()) + return false; + + NamedNodeMap* entities = documentTypeThis->entities(); + NamedNodeMap* otherEntities = documentTypeOther->entities(); + if (!entities && otherEntities) + return false; + if (entities && !entities->mapsEquivalent(otherEntities)) + return false; + + NamedNodeMap* notations = documentTypeThis->notations(); + NamedNodeMap* otherNotations = documentTypeOther->notations(); + if (!notations && otherNotations) + return false; + if (notations && !notations->mapsEquivalent(otherNotations)) + return false; + } return true; } @@ -3119,6 +3147,8 @@ void Node::defaultEventHandler(Event* event) if (startNode && startNode->renderer()) if (Frame* frame = document()->frame()) frame->eventHandler()->defaultWheelEventHandler(startNode, wheelEvent); + } else if (event->type() == eventNames().webkitEditableContentChangedEvent) { + dispatchEvent(Event::create(eventNames().inputEvent, true, false)); } } diff --git a/WebCore/dom/NodeFilter.h b/WebCore/dom/NodeFilter.h index 53b32e1..d2022bc 100644 --- a/WebCore/dom/NodeFilter.h +++ b/WebCore/dom/NodeFilter.h @@ -26,7 +26,6 @@ #define NodeFilter_h #include "NodeFilterCondition.h" -#include <wtf/PassRefPtr.h> #include <wtf/RefPtr.h> namespace WebCore { diff --git a/WebCore/dom/NodeRareData.h b/WebCore/dom/NodeRareData.h index d88f964..4d80cee 100644 --- a/WebCore/dom/NodeRareData.h +++ b/WebCore/dom/NodeRareData.h @@ -24,10 +24,8 @@ #include "ClassNodeList.h" #include "DynamicNodeList.h" -#include "EventListener.h" #include "NameNodeList.h" #include "QualifiedName.h" -#include "RegisteredEventListener.h" #include "StringHash.h" #include "TagNodeList.h" #include <wtf/HashSet.h> diff --git a/WebCore/dom/RegisteredEventListener.h b/WebCore/dom/RegisteredEventListener.h index c34a341..12483fa 100644 --- a/WebCore/dom/RegisteredEventListener.h +++ b/WebCore/dom/RegisteredEventListener.h @@ -24,8 +24,8 @@ #ifndef RegisteredEventListener_h #define RegisteredEventListener_h -#include "AtomicString.h" #include "EventListener.h" +#include <wtf/RefPtr.h> namespace WebCore { diff --git a/WebCore/dom/SelectorNodeList.cpp b/WebCore/dom/SelectorNodeList.cpp index bc97034..5beaaee 100644 --- a/WebCore/dom/SelectorNodeList.cpp +++ b/WebCore/dom/SelectorNodeList.cpp @@ -35,6 +35,7 @@ #include "Document.h" #include "Element.h" #include "HTMLNames.h" +#include "StaticNodeList.h" namespace WebCore { diff --git a/WebCore/dom/SelectorNodeList.h b/WebCore/dom/SelectorNodeList.h index 8240189..8357034 100644 --- a/WebCore/dom/SelectorNodeList.h +++ b/WebCore/dom/SelectorNodeList.h @@ -29,11 +29,13 @@ #ifndef SelectorNodeList_h #define SelectorNodeList_h -#include "StaticNodeList.h" +#include <wtf/PassRefPtr.h> namespace WebCore { class CSSSelectorList; + class Node; + class StaticNodeList; PassRefPtr<StaticNodeList> createSelectorNodeList(Node* rootNode, const CSSSelectorList&); diff --git a/WebCore/dom/SpaceSplitString.h b/WebCore/dom/SpaceSplitString.h index 2ef3fc4..9fd1832 100644 --- a/WebCore/dom/SpaceSplitString.h +++ b/WebCore/dom/SpaceSplitString.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. + * Copyright (C) 2007, 2008, 2010 Apple Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -23,6 +23,7 @@ #include "AtomicString.h" #include <wtf/OwnPtr.h> +#include <wtf/PassOwnPtr.h> #include <wtf/Vector.h> namespace WebCore { @@ -64,9 +65,9 @@ namespace WebCore { class SpaceSplitString { public: SpaceSplitString() { } - SpaceSplitString(const String& string, bool shouldFoldCase) : m_data(new SpaceSplitStringData(string, shouldFoldCase)) { } + SpaceSplitString(const String& string, bool shouldFoldCase) : m_data(adoptPtr(new SpaceSplitStringData(string, shouldFoldCase))) { } - void set(const String& string, bool shouldFoldCase) { m_data.set(new SpaceSplitStringData(string, shouldFoldCase)); } + void set(const String& string, bool shouldFoldCase) { m_data = adoptPtr(new SpaceSplitStringData(string, shouldFoldCase)); } void clear() { m_data.clear(); } bool contains(const AtomicString& string) const { return m_data && m_data->contains(string); } diff --git a/WebCore/dom/StyleElement.cpp b/WebCore/dom/StyleElement.cpp index a323e16..580f318 100644 --- a/WebCore/dom/StyleElement.cpp +++ b/WebCore/dom/StyleElement.cpp @@ -36,13 +36,13 @@ StyleElement::StyleElement() StyleSheet* StyleElement::sheet(Element* e) { if (!m_sheet) - createSheet(e); + createSheet(e, 0); return m_sheet.get(); } void StyleElement::insertedIntoDocument(Document*, Element* element) { - process(element); + process(element, 0); } void StyleElement::removedFromDocument(Document* document) @@ -56,7 +56,7 @@ void StyleElement::removedFromDocument(Document* document) document->updateStyleSelector(); } -void StyleElement::process(Element* e) +void StyleElement::process(Element* e, int startLineNumber) { if (!e || !e->inDocument()) return; @@ -82,10 +82,10 @@ void StyleElement::process(Element* e) } ASSERT(p == text + resultLength); - createSheet(e, sheetText); + createSheet(e, startLineNumber, sheetText); } -void StyleElement::createSheet(Element* e, const String& text) +void StyleElement::createSheet(Element* e, int startLineNumber, const String& text) { Document* document = e->document(); if (m_sheet) { @@ -104,7 +104,7 @@ void StyleElement::createSheet(Element* e, const String& text) document->addPendingSheet(); setLoading(true); m_sheet = CSSStyleSheet::create(e, String(), KURL(), document->inputEncoding()); - m_sheet->parseString(text, !document->inCompatMode()); + m_sheet->parseStringAtLine(text, !document->inCompatMode(), startLineNumber); m_sheet->setMedia(mediaList.get()); m_sheet->setTitle(e->title()); setLoading(false); diff --git a/WebCore/dom/StyleElement.h b/WebCore/dom/StyleElement.h index 9d3ac84..4ec10c4 100644 --- a/WebCore/dom/StyleElement.h +++ b/WebCore/dom/StyleElement.h @@ -24,6 +24,7 @@ namespace WebCore { +class Document; class Element; class StyleElement { @@ -41,9 +42,9 @@ protected: void insertedIntoDocument(Document*, Element*); void removedFromDocument(Document*); - void process(Element*); + void process(Element*, int startLineNumber); - void createSheet(Element* e, const String& text = String()); + void createSheet(Element* e, int startLineNumber, const String& text = String()); protected: RefPtr<CSSStyleSheet> m_sheet; diff --git a/WebCore/dom/StyledElement.cpp b/WebCore/dom/StyledElement.cpp index 994b084..9b22f1d 100644 --- a/WebCore/dom/StyledElement.cpp +++ b/WebCore/dom/StyledElement.cpp @@ -148,8 +148,8 @@ void StyledElement::attributeChanged(Attribute* attr, bool preserveDecls) if (attr->decl() && !preserveDecls) { attr->setDecl(0); setNeedsStyleRecalc(); - if (namedAttrMap) - mappedAttributes()->declRemoved(); + if (attributeMap()) + attributeMap()->declRemoved(); } bool checkDecl = true; @@ -158,8 +158,8 @@ void StyledElement::attributeChanged(Attribute* attr, bool preserveDecls) if (preserveDecls) { if (attr->decl()) { setNeedsStyleRecalc(); - if (namedAttrMap) - mappedAttributes()->declAdded(); + if (attributeMap()) + attributeMap()->declAdded(); checkDecl = false; } } else if (!attr->isNull() && entry != eNone) { @@ -167,8 +167,8 @@ void StyledElement::attributeChanged(Attribute* attr, bool preserveDecls) if (decl) { attr->setDecl(decl); setNeedsStyleRecalc(); - if (namedAttrMap) - mappedAttributes()->declAdded(); + if (attributeMap()) + attributeMap()->declAdded(); checkDecl = false; } else needToParse = true; @@ -191,8 +191,8 @@ void StyledElement::attributeChanged(Attribute* attr, bool preserveDecls) attr->decl()->setMappedState(entry, attr->name(), attr->value()); attr->decl()->setParent(0); attr->decl()->setNode(0); - if (namedAttrMap) - mappedAttributes()->declAdded(); + if (attributeMap()) + attributeMap()->declAdded(); } updateAfterAttributeChanged(attr); @@ -215,12 +215,13 @@ void StyledElement::classAttributeChanged(const AtomicString& newClassString) if (!isClassWhitespace(characters[i])) break; } - setHasClass(i < length); - if (namedAttrMap) { - if (i < length) - mappedAttributes()->setClass(newClassString); - else - mappedAttributes()->clearClass(); + bool hasClass = i < length; + setHasClass(hasClass); + if (hasClass) + attributes()->setClass(newClassString); + else { + if (attributeMap()) + attributeMap()->clearClass(); } setNeedsStyleRecalc(); dispatchSubtreeModifiedEvent(); @@ -230,13 +231,13 @@ void StyledElement::parseMappedAttribute(Attribute* attr) { if (isIdAttributeName(attr->name())) { setHasID(!attr->isNull()); - if (namedAttrMap) { + if (attributeMap()) { if (attr->isNull()) - namedAttrMap->setIdForStyleResolution(nullAtom); + attributeMap()->setIdForStyleResolution(nullAtom); else if (document()->inCompatMode()) - namedAttrMap->setIdForStyleResolution(attr->value().lower()); + attributeMap()->setIdForStyleResolution(attr->value().lower()); else - namedAttrMap->setIdForStyleResolution(attr->value()); + attributeMap()->setIdForStyleResolution(attr->value()); } setNeedsStyleRecalc(); } else if (attr->name() == classAttr) diff --git a/WebCore/dom/StyledElement.h b/WebCore/dom/StyledElement.h index 6facce7..8040dbf 100644 --- a/WebCore/dom/StyledElement.h +++ b/WebCore/dom/StyledElement.h @@ -3,7 +3,7 @@ * (C) 1999 Antti Koivisto (koivisto@kde.org) * (C) 2001 Peter Kelly (pmk@post.com) * (C) 2001 Dirk Mueller (mueller@kde.org) - * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. + * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -26,10 +26,8 @@ #define StyledElement_h #include "CSSMutableStyleDeclaration.h" -#include "CSSPrimitiveValue.h" #include "Element.h" #include "MappedAttributeEntry.h" -#include "NamedNodeMap.h" namespace WebCore { @@ -40,10 +38,7 @@ class StyledElement : public Element { public: virtual ~StyledElement(); - NamedNodeMap* mappedAttributes() { return namedAttrMap.get(); } - const NamedNodeMap* mappedAttributes() const { return namedAttrMap.get(); } - - bool hasMappedAttributes() const { return namedAttrMap && mappedAttributes()->hasMappedAttributes(); } + bool hasMappedAttributes() const { return attributeMap() && attributeMap()->hasMappedAttributes(); } bool isMappedAttribute(const QualifiedName& name) const { MappedAttributeEntry res = eNone; mapToEntry(name, res); return res != eNone; } void addCSSLength(Attribute*, int id, const String& value); @@ -61,12 +56,12 @@ public: CSSMutableStyleDeclaration* inlineStyleDecl() const { return m_inlineStyleDecl.get(); } virtual bool canHaveAdditionalAttributeStyleDecls() const { return false; } - virtual void additionalAttributeStyleDecls(Vector<CSSMutableStyleDeclaration*>&) {}; + virtual void additionalAttributeStyleDecls(Vector<CSSMutableStyleDeclaration*>&) { } CSSMutableStyleDeclaration* getInlineStyleDecl(); CSSStyleDeclaration* style(); void invalidateStyleAttribute(); - const SpaceSplitString& classNames() const { ASSERT(hasClass()); ASSERT(mappedAttributes()); return mappedAttributes()->classNames(); } + const SpaceSplitString& classNames() const; virtual bool mapToEntry(const QualifiedName& attrName, MappedAttributeEntry& result) const; @@ -101,6 +96,13 @@ private: RefPtr<CSSMutableStyleDeclaration> m_inlineStyleDecl; }; +inline const SpaceSplitString& StyledElement::classNames() const +{ + ASSERT(hasClass()); + ASSERT(attributeMap()); + return attributeMap()->classNames(); +} + inline void StyledElement::invalidateStyleAttribute() { clearIsStyleAttributeValid(); diff --git a/WebCore/dom/Traversal.h b/WebCore/dom/Traversal.h index fc4403f..8b4f764 100644 --- a/WebCore/dom/Traversal.h +++ b/WebCore/dom/Traversal.h @@ -26,7 +26,6 @@ #define Traversal_h #include "ScriptState.h" -#include <wtf/Forward.h> #include <wtf/RefPtr.h> namespace WebCore { diff --git a/WebCore/dom/make_names.pl b/WebCore/dom/make_names.pl index a675438..9e0784a 100755 --- a/WebCore/dom/make_names.pl +++ b/WebCore/dom/make_names.pl @@ -37,17 +37,26 @@ use IO::File; use InFilesParser; use Switch; +sub readTags($$); +sub readAttrs($$); + my $printFactory = 0; my $printWrapperFactory = 0; my $printWrapperFactoryV8 = 0; my $tagsFile = ""; my $attrsFile = ""; my $outputDir = "."; -my %tags = (); -my %attrs = (); +my %parsedTags = (); +my %parsedAttrs = (); +my %enabledTags = (); +my %enabledAttrs = (); +my %allTags = (); +my %allAttrs = (); my %parameters = (); my $extraDefines = 0; + require Config; + my $gccLocation = ""; if ($ENV{CC}) { $gccLocation = $ENV{CC}; @@ -71,8 +80,15 @@ GetOptions( die "You must specify at least one of --tags <file> or --attrs <file>" unless (length($tagsFile) || length($attrsFile)); -readNames($tagsFile, "tags") if length($tagsFile); -readNames($attrsFile, "attrs") if length($attrsFile); +if (length($tagsFile)) { + %allTags = %{readTags($tagsFile, 0)}; + %enabledTags = %{readTags($tagsFile, 1)}; +} + +if (length($attrsFile)) { + %allAttrs = %{readAttrs($attrsFile, 0)}; + %enabledAttrs = %{readAttrs($attrsFile, 1)}; +} die "You must specify a namespace (e.g. SVG) for <namespace>Names.h" unless $parameters{namespace}; die "You must specify a namespaceURI (e.g. http://www.w3.org/2000/svg)" unless $parameters{namespaceURI}; @@ -149,16 +165,16 @@ sub tagsHandler $tag =~ s/-/_/g; # Initialize default property values. - $tags{$tag} = { defaultTagPropertyHash($tag) } if !defined($tags{$tag}); + $parsedTags{$tag} = { defaultTagPropertyHash($tag) } if !defined($parsedTags{$tag}); if ($property) { - die "Unknown property $property for tag $tag\n" if !defined($tags{$tag}{$property}); + die "Unknown property $property for tag $tag\n" if !defined($parsedTags{$tag}{$property}); # The code relies on JSInterfaceName deriving from interfaceName to check for custom JSInterfaceName. # So override JSInterfaceName if it was not already set. - $tags{$tag}{JSInterfaceName} = $value if $property eq "interfaceName" && $tags{$tag}{JSInterfaceName} eq $tags{$tag}{interfaceName}; + $parsedTags{$tag}{JSInterfaceName} = $value if $property eq "interfaceName" && $parsedTags{$tag}{JSInterfaceName} eq $parsedTags{$tag}{interfaceName}; - $tags{$tag}{$property} = $value; + $parsedTags{$tag}{$property} = $value; } } @@ -169,11 +185,11 @@ sub attrsHandler $attr =~ s/-/_/g; # Initialize default properties' values. - $attrs{$attr} = {} if !defined($attrs{$attr}); + $parsedAttrs{$attr} = {} if !defined($parsedAttrs{$attr}); if ($property) { - die "Unknown property $property for attribute $attr\n" if !defined($attrs{$attr}{$property}); - $attrs{$attr}{$property} = $value; + die "Unknown property $property for attribute $attr\n" if !defined($parsedAttrs{$attr}{$property}); + $parsedAttrs{$attr}{$property} = $value; } } @@ -190,39 +206,43 @@ sub parametersHandler ## Support routines -sub readNames +sub preprocessorCommand() { - my ($namesFile, $type) = @_; + return $preprocessor if $extraDefines eq 0; + return $preprocessor . " -D" . join(" -D", split(" ", $extraDefines)); +} - my $names = new IO::File; +sub readNames($$$$) +{ + my ($namesFile, $hashToFillRef, $handler, $usePreprocessor) = @_; - if ($extraDefines eq 0) { - open($names, $preprocessor . " " . $namesFile . "|") or die "Failed to open file: $namesFile"; + my $names = new IO::File; + if ($usePreprocessor) { + open($names, preprocessorCommand() . " " . $namesFile . "|") or die "Failed to open file: $namesFile"; } else { - open($names, $preprocessor . " -D" . join(" -D", split(" ", $extraDefines)) . " " . $namesFile . "|") or die "Failed to open file: $namesFile"; + open($names, $namesFile) or die "Failed to open file: $namesFile"; } - # Store hashes keys count to know if some insertion occured. - my $tagsCount = keys %tags; - my $attrsCount = keys %attrs; - my $InParser = InFilesParser->new(); - - switch ($type) { - case "tags" { - $InParser->parse($names, \¶metersHandler, \&tagsHandler); - } - case "attrs" { - $InParser->parse($names, \¶metersHandler, \&attrsHandler); - } - else { - die "Do not know how to parse $type"; - } - } + $InParser->parse($names, \¶metersHandler, $handler); close($names); + die "Failed to read names from file: $namesFile" if (keys %{$hashToFillRef} == 0); + return $hashToFillRef; +} - die "Failed to read names from file: $namesFile" if ((keys %tags == $tagsCount) && (keys %attrs == $attrsCount)); +sub readAttrs($$) +{ + my ($namesFile, $usePreprocessor) = @_; + %parsedAttrs = (); + return readNames($namesFile, \%parsedAttrs, \&attrsHandler, $usePreprocessor); +} + +sub readTags($$) +{ + my ($namesFile, $usePreprocessor) = @_; + %parsedTags = (); + return readNames($namesFile, \%parsedTags, \&tagsHandler, $usePreprocessor); } sub printMacros @@ -246,13 +266,13 @@ sub usesDefaultWrapper sub buildConstructorMap { my %tagConstructorMap = (); - for my $tagName (keys %tags) { - my $interfaceName = $tags{$tagName}{interfaceName}; + for my $tagName (keys %enabledTags) { + my $interfaceName = $enabledTags{$tagName}{interfaceName}; next if (usesDefaultWrapper($interfaceName)); - if ($tags{$tagName}{mapToTagName}) { - die "Cannot handle multiple mapToTagName for $tagName\n" if $tags{$tags{$tagName}{mapToTagName}}{mapToTagName}; - $interfaceName = $tags{ $tags{$tagName}{mapToTagName} }{interfaceName}; + if ($enabledTags{$tagName}{mapToTagName}) { + die "Cannot handle multiple mapToTagName for $tagName\n" if $enabledTags{$enabledTags{$tagName}{mapToTagName}}{mapToTagName}; + $interfaceName = $enabledTags{ $enabledTags{$tagName}{mapToTagName} }{interfaceName}; } # Chop the string to keep the interesting part. @@ -272,10 +292,10 @@ sub printConstructorSignature print F "static PassRefPtr<$parameters{namespace}Element> ${constructorName}Constructor(const QualifiedName& $constructorTagName, Document* document"; if ($parameters{namespace} eq "HTML") { print F ", HTMLFormElement*"; - print F " formElement" if $tags{$tagName}{constructorNeedsFormElement}; + print F " formElement" if $enabledTags{$tagName}{constructorNeedsFormElement}; } print F ", bool"; - print F " createdByParser" if $tags{$tagName}{constructorNeedsCreatedByParser}; + print F " createdByParser" if $enabledTags{$tagName}{constructorNeedsCreatedByParser}; print F ")\n{\n"; } @@ -287,7 +307,7 @@ sub printConstructorInterior my ($F, $tagName, $interfaceName, $constructorTagName) = @_; # Handle media elements. - if ($tags{$tagName}{wrapperOnlyIfMediaIsAvailable}) { + if ($enabledTags{$tagName}{wrapperOnlyIfMediaIsAvailable}) { print F <<END Settings* settings = document->settings(); if (!MediaPlayer::isAvailable() || (settings && !settings->isMediaEnabled())) @@ -300,15 +320,15 @@ END my $newPrefix = ""; my $createSuffix = "::create"; - if ($tags{$tagName}{createWithNew}) { + if ($enabledTags{$tagName}{createWithNew}) { $newPrefix = "new "; $createSuffix = ""; } # Call the constructor with the right parameters. print F " return $newPrefix$interfaceName${createSuffix}($constructorTagName, document"; - print F ", formElement" if $tags{$tagName}{constructorNeedsFormElement}; - print F ", createdByParser" if $tags{$tagName}{constructorNeedsCreatedByParser}; + print F ", formElement" if $enabledTags{$tagName}{constructorNeedsFormElement}; + print F ", createdByParser" if $enabledTags{$tagName}{constructorNeedsCreatedByParser}; print F ");\n}\n\n"; } @@ -317,20 +337,18 @@ sub printConstructors my ($F, $tagConstructorMapRef) = @_; my %tagConstructorMap = %$tagConstructorMapRef; - print F "#if $parameters{guardFactoryWith}\n" if $parameters{guardFactoryWith}; - # This is to avoid generating the same constructor several times. my %uniqueTags = (); for my $tagName (sort keys %tagConstructorMap) { - my $interfaceName = $tags{$tagName}{interfaceName}; + my $interfaceName = $enabledTags{$tagName}{interfaceName}; # Ignore the mapped tag # FIXME: It could be moved inside this loop but was split for readibility. - next if (defined($uniqueTags{$interfaceName}) || $tags{$tagName}{mapToTagName}); + next if (defined($uniqueTags{$interfaceName}) || $enabledTags{$tagName}{mapToTagName}); $uniqueTags{$interfaceName} = '1'; - my $conditional = $tags{$tagName}{conditional}; + my $conditional = $enabledTags{$tagName}{conditional}; if ($conditional) { my $conditionalString = "ENABLE(" . join(") && ENABLE(", split(/&/, $conditional)) . ")"; print F "#if ${conditionalString}\n\n"; @@ -346,14 +364,12 @@ sub printConstructors # Mapped tag name uses a special wrapper to keep their prefix and namespaceURI while using the mapped localname. for my $tagName (sort keys %tagConstructorMap) { - if ($tags{$tagName}{mapToTagName}) { - my $mappedName = $tags{$tagName}{mapToTagName}; + if ($enabledTags{$tagName}{mapToTagName}) { + my $mappedName = $enabledTags{$tagName}{mapToTagName}; printConstructorSignature($F, $mappedName, $mappedName . "To" . $tagName, "tagName"); - printConstructorInterior($F, $mappedName, $tags{$mappedName}{interfaceName}, "QualifiedName(tagName.prefix(), ${mappedName}Tag.localName(), tagName.namespaceURI())"); + printConstructorInterior($F, $mappedName, $enabledTags{$mappedName}{interfaceName}, "QualifiedName(tagName.prefix(), ${mappedName}Tag.localName(), tagName.namespaceURI())"); } } - - print F "#endif\n" if $parameters{guardFactoryWith}; } sub printFunctionInits @@ -363,14 +379,14 @@ sub printFunctionInits for my $tagName (sort keys %tagConstructorMap) { - my $conditional = $tags{$tagName}{conditional}; + my $conditional = $enabledTags{$tagName}{conditional}; if ($conditional) { my $conditionalString = "ENABLE(" . join(") && ENABLE(", split(/&/, $conditional)) . ")"; print F "#if ${conditionalString}\n"; } - if ($tags{$tagName}{mapToTagName}) { - print F " addTag(${tagName}Tag, $tags{$tagName}{mapToTagName}To${tagName}Constructor);\n"; + if ($enabledTags{$tagName}{mapToTagName}) { + print F " addTag(${tagName}Tag, $enabledTags{$tagName}{mapToTagName}To${tagName}Constructor);\n"; } else { print F " addTag(${tagName}Tag, $tagConstructorMap{$tagName}Constructor);\n"; } @@ -456,22 +472,22 @@ sub printNamesHeaderFile print F "// Namespace\n"; print F "extern const WebCore::AtomicString ${lowerNamespace}NamespaceURI;\n\n"; - if (keys %tags) { + if (keys %allTags) { print F "// Tags\n"; - printMacros($F, "extern const WebCore::QualifiedName", "Tag", \%tags); + printMacros($F, "extern const WebCore::QualifiedName", "Tag", \%allTags); } - if (keys %attrs) { + if (keys %allAttrs) { print F "// Attributes\n"; - printMacros($F, "extern const WebCore::QualifiedName", "Attr", \%attrs); + printMacros($F, "extern const WebCore::QualifiedName", "Attr", \%allAttrs); } print F "#endif\n\n"; - if (keys %tags) { + if (keys %allTags) { print F "WebCore::QualifiedName** get$parameters{namespace}Tags(size_t* size);\n"; } - if (keys %attrs) { + if (keys %allAttrs) { print F "WebCore::QualifiedName** get$parameters{namespace}Attrs(size_t* size);\n"; } @@ -511,35 +527,35 @@ using namespace WebCore; DEFINE_GLOBAL(AtomicString, ${lowerNamespace}NamespaceURI, \"$parameters{namespaceURI}\") "; - if (keys %tags) { + if (keys %allTags) { print F "// Tags\n"; - for my $name (sort keys %tags) { + for my $name (sort keys %allTags) { print F "DEFINE_GLOBAL(QualifiedName, ", $name, "Tag, nullAtom, \"$name\", ${lowerNamespace}NamespaceURI);\n"; } print F "\n\nWebCore::QualifiedName** get$parameters{namespace}Tags(size_t* size)\n"; print F "{\n static WebCore::QualifiedName* $parameters{namespace}Tags[] = {\n"; - for my $name (sort keys %tags) { + for my $name (sort keys %allTags) { print F " (WebCore::QualifiedName*)&${name}Tag,\n"; } print F " };\n"; - print F " *size = ", scalar(keys %tags), ";\n"; + print F " *size = ", scalar(keys %allTags), ";\n"; print F " return $parameters{namespace}Tags;\n"; print F "}\n"; } - if (keys %attrs) { + if (keys %allAttrs) { print F "\n// Attributes\n"; - for my $name (sort keys %attrs) { + for my $name (sort keys %allAttrs) { print F "DEFINE_GLOBAL(QualifiedName, ", $name, "Attr, nullAtom, \"$name\", ${lowerNamespace}NamespaceURI);\n"; } print F "\n\nWebCore::QualifiedName** get$parameters{namespace}Attrs(size_t* size)\n"; print F "{\n static WebCore::QualifiedName* $parameters{namespace}Attr[] = {\n"; - for my $name (sort keys %attrs) { + for my $name (sort keys %allAttrs) { print F " (WebCore::QualifiedName*)&${name}Attr,\n"; } print F " };\n"; - print F " *size = ", scalar(keys %attrs), ";\n"; + print F " *size = ", scalar(keys %allAttrs), ";\n"; print F " return $parameters{namespace}Attr;\n"; print F "}\n"; } @@ -560,13 +576,13 @@ print F "\nvoid init() print(F " // Namespace\n"); print(F " new ((void*)&${lowerNamespace}NamespaceURI) AtomicString(${lowerNamespace}NS);\n\n"); - if (keys %tags) { + if (keys %allTags) { my $tagsNamespace = $parameters{tagsNullNamespace} ? "nullAtom" : "${lowerNamespace}NS"; - printDefinitions($F, \%tags, "tags", $tagsNamespace); + printDefinitions($F, \%allTags, "tags", $tagsNamespace); } - if (keys %attrs) { + if (keys %allAttrs) { my $attrsNamespace = $parameters{attrsNullNamespace} ? "nullAtom" : "${lowerNamespace}NS"; - printDefinitions($F, \%attrs, "attributes", $attrsNamespace); + printDefinitions($F, \%allAttrs, "attributes", $attrsNamespace); } print F "}\n\n} }\n\n"; @@ -579,8 +595,8 @@ sub printJSElementIncludes my $wrapperFactoryType = shift; my %tagsSeen; - for my $tagName (sort keys %tags) { - my $JSInterfaceName = $tags{$tagName}{JSInterfaceName}; + for my $tagName (sort keys %enabledTags) { + my $JSInterfaceName = $enabledTags{$tagName}{JSInterfaceName}; next if defined($tagsSeen{$JSInterfaceName}) || usesDefaultJSWrapper($tagName); $tagsSeen{$JSInterfaceName} = 1; @@ -593,8 +609,8 @@ sub printElementIncludes my $F = shift; my %tagsSeen; - for my $tagName (sort keys %tags) { - my $interfaceName = $tags{$tagName}{interfaceName}; + for my $tagName (sort keys %enabledTags) { + my $interfaceName = $enabledTags{$tagName}{interfaceName}; next if defined($tagsSeen{$interfaceName}); $tagsSeen{$interfaceName} = 1; @@ -632,11 +648,12 @@ printLicenseHeader($F); print F <<END #include "config.h" #include "$parameters{namespace}ElementFactory.h" - #include "$parameters{namespace}Names.h" END ; +print F "\n#if $parameters{guardFactoryWith}\n\n" if $parameters{guardFactoryWith}; + printElementIncludes($F); print F <<END @@ -669,8 +686,6 @@ my %tagConstructorMap = buildConstructorMap(); printConstructors($F, \%tagConstructorMap); -print F "#if $parameters{guardFactoryWith}\n" if $parameters{guardFactoryWith}; - print F <<END static void addTag(const QualifiedName& tag, ConstructorFunction func) { @@ -691,14 +706,11 @@ END printFunctionInits($F, \%tagConstructorMap); print F "}\n"; -print F "#endif\n" if $parameters{guardFactoryWith}; print F "\nPassRefPtr<$parameters{namespace}Element> $parameters{namespace}ElementFactory::create$parameters{namespace}Element(const QualifiedName& qName, Document* document"; print F ", HTMLFormElement* formElement" if $parameters{namespace} eq "HTML"; print F ", bool createdByParser)\n{\n"; -print F "#if $parameters{guardFactoryWith}\n" if $parameters{guardFactoryWith}; - print F <<END if (!document) return 0; @@ -733,17 +745,6 @@ if ($parameters{namespace} eq "HTML") { print F " return $parameters{namespace}Element::create(qName, document);\n"; -if ($parameters{guardFactoryWith}) { - -print F <<END -#else - return 0; -#endif -END -; - -} - print F <<END } @@ -752,6 +753,8 @@ print F <<END END ; + print F "#endif\n" if $parameters{guardFactoryWith}; + close F; } @@ -794,7 +797,7 @@ END ; print F " static PassRefPtr<$parameters{namespace}Element> create$parameters{namespace}Element(const WebCore::QualifiedName&, WebCore::Document*"; print F ", HTMLFormElement* = 0" if $parameters{namespace} eq "HTML"; -print F ", bool /*createdByParser*/ = true);\n"; +print F ", bool createdByParser = true);\n"; printf F<<END }; @@ -815,7 +818,7 @@ sub usesDefaultJSWrapper my $name = shift; # A tag reuses the default wrapper if its JSInterfaceName matches the default namespace Element. - return $tags{$name}{JSInterfaceName} eq $parameters{namespace} . "Element" || $tags{$name}{JSInterfaceName} eq "HTMLNoScriptElement"; + return $enabledTags{$name}{JSInterfaceName} eq $parameters{namespace} . "Element" || $enabledTags{$name}{JSInterfaceName} eq "HTMLNoScriptElement"; } sub printWrapperFunctions @@ -824,13 +827,13 @@ sub printWrapperFunctions my $wrapperFactoryType = shift; my %tagsSeen; - for my $tagName (sort keys %tags) { + for my $tagName (sort keys %enabledTags) { # Avoid defining the same wrapper method twice. - my $JSInterfaceName = $tags{$tagName}{JSInterfaceName}; + my $JSInterfaceName = $enabledTags{$tagName}{JSInterfaceName}; next if defined($tagsSeen{$JSInterfaceName}) || usesDefaultJSWrapper($tagName); $tagsSeen{$JSInterfaceName} = 1; - my $conditional = $tags{$tagName}{conditional}; + my $conditional = $enabledTags{$tagName}{conditional}; if ($conditional) { my $conditionalString = "ENABLE(" . join(") && ENABLE(", split(/&/, $conditional)) . ")"; print F "#if ${conditionalString}\n\n"; @@ -839,7 +842,7 @@ sub printWrapperFunctions if ($wrapperFactoryType eq "JS") { # Hack for the media tags # FIXME: This should have been done via a CustomWrapper attribute and a separate *Custom file. - if ($tags{$tagName}{wrapperOnlyIfMediaIsAvailable}) { + if ($enabledTags{$tagName}{wrapperOnlyIfMediaIsAvailable}) { print F <<END static JSNode* create${JSInterfaceName}Wrapper(ExecState* exec, JSDOMGlobalObject* globalObject, PassRefPtr<$parameters{namespace}Element> element) { @@ -862,7 +865,7 @@ END ; } } elsif ($wrapperFactoryType eq "V8") { - if ($tags{$tagName}{wrapperOnlyIfMediaIsAvailable}) { + if ($enabledTags{$tagName}{wrapperOnlyIfMediaIsAvailable}) { print F <<END static v8::Handle<v8::Value> create${JSInterfaceName}Wrapper($parameters{namespace}Element* element) { @@ -903,12 +906,11 @@ sub printWrapperFactoryCppFile printLicenseHeader($F); - print F "#include \"config.h\"\n\n"; - - print F "#if $parameters{guardFactoryWith}\n\n" if $parameters{guardFactoryWith}; - + print F "#include \"config.h\"\n"; print F "#include \"$wrapperFactoryType$parameters{namespace}ElementWrapperFactory.h\"\n"; + print F "\n#if $parameters{guardFactoryWith}\n\n" if $parameters{guardFactoryWith}; + printJSElementIncludes($F, $wrapperFactoryType); print F "\n#include \"$parameters{namespace}Names.h\"\n\n"; @@ -984,17 +986,17 @@ END ; } - for my $tag (sort keys %tags) { + for my $tag (sort keys %enabledTags) { # Do not add the name to the map if it does not have a JS wrapper constructor or uses the default wrapper. - next if usesDefaultJSWrapper($tag, \%tags); + next if usesDefaultJSWrapper($tag, \%enabledTags); - my $conditional = $tags{$tag}{conditional}; + my $conditional = $enabledTags{$tag}{conditional}; if ($conditional) { my $conditionalString = "ENABLE(" . join(") && ENABLE(", split(/&/, $conditional)) . ")"; print F "#if ${conditionalString}\n"; } - my $ucTag = $tags{$tag}{JSInterfaceName}; + my $ucTag = $enabledTags{$tag}{JSInterfaceName}; print F " map.set(${tag}Tag.localName().impl(), create${ucTag}Wrapper);\n"; if ($conditional) { diff --git a/WebCore/editing/EditingBehavior.h b/WebCore/editing/EditingBehavior.h index fe09e1b..d442ad6 100644 --- a/WebCore/editing/EditingBehavior.h +++ b/WebCore/editing/EditingBehavior.h @@ -49,6 +49,10 @@ public: // content should be scrolled such that the selection gets certer aligned. bool shouldCenterAlignWhenSelectionIsRevealed() const { return m_type == EditingMacBehavior; } + // On Mac, style is considered present when present at the beginning of selection. On other platforms, + // style has to be present throughout the selection. + bool shouldToggleStyleBasedOnStartOfSelection() const { return m_type == EditingMacBehavior; } + private: EditingBehaviorType m_type; }; diff --git a/WebCore/editing/EditorCommand.cpp b/WebCore/editing/EditorCommand.cpp index 0fc0068..1a77642 100644 --- a/WebCore/editing/EditorCommand.cpp +++ b/WebCore/editing/EditorCommand.cpp @@ -165,9 +165,10 @@ static bool executeToggleStyle(Frame* frame, EditorCommandSource source, EditAct // Style is considered present when // mac: present at the beginning of selection // other: present throughout the selection - Settings* settings = frame->document()->settings(); + + // FIXME: Make stateStyle() to use this editing method too for the cases where it's used for queryCommandState. bool styleIsPresent; - if (settings && settings->editingBehaviorType() == EditingMacBehavior) + if (frame->editor()->behavior().shouldToggleStyleBasedOnStartOfSelection()) styleIsPresent = frame->editor()->selectionStartHasStyle(style.get()); else styleIsPresent = frame->editor()->selectionHasStyle(style.get()) == TrueTriState; diff --git a/WebCore/editing/IndentOutdentCommand.cpp b/WebCore/editing/IndentOutdentCommand.cpp index 4158521..f041aa7 100644 --- a/WebCore/editing/IndentOutdentCommand.cpp +++ b/WebCore/editing/IndentOutdentCommand.cpp @@ -34,6 +34,7 @@ #include "InsertListCommand.h" #include "Range.h" #include "SplitElementCommand.h" +#include "Text.h" #include "TextIterator.h" #include "htmlediting.h" #include "visible_units.h" @@ -62,6 +63,22 @@ static bool isListOrIndentBlockquote(const Node* node) return node && (node->hasTagName(ulTag) || node->hasTagName(olTag) || node->hasTagName(blockquoteTag)); } +// This function can return -1 if we are unable to count the paragraphs between |start| and |end|. +static int countParagraphs(const VisiblePosition& endOfFirstParagraph, const VisiblePosition& endOfLastParagraph) +{ + int count = 0; + VisiblePosition cur = endOfFirstParagraph; + while (cur != endOfLastParagraph) { + ++count; + cur = endOfParagraph(cur.next()); + // If start is before a table and end is inside a table, we will never hit end because the + // whole table is considered a single paragraph. + if (cur.isNull()) + return -1; + } + return count; +} + IndentOutdentCommand::IndentOutdentCommand(Document* document, EIndentType typeOfAction, int marginInPixels) : CompositeEditCommand(document), m_typeOfAction(typeOfAction), m_marginInPixels(marginInPixels) { @@ -147,6 +164,24 @@ void IndentOutdentCommand::indentRegion(const VisiblePosition& startOfSelection, RefPtr<Element> blockquoteForNextIndent; VisiblePosition endOfCurrentParagraph = endOfParagraph(startOfSelection); VisiblePosition endAfterSelection = endOfParagraph(endOfParagraph(endOfSelection).next()); + int endOfCurrentParagraphIndex = indexForVisiblePosition(endOfCurrentParagraph); + int endAfterSelectionIndex = indexForVisiblePosition(endAfterSelection); + + // When indenting within a <pre> tag, we need to split each paragraph into a separate node for moveParagraphWithClones to work. + // However, splitting text nodes can cause endOfCurrentParagraph and endAfterSelection to point to an invalid position if we + // changed the text node it was pointing at. So we have to reset these positions. + int numParagraphs = countParagraphs(endOfCurrentParagraph, endAfterSelection); + if (splitTextNodes(startOfParagraph(startOfSelection), numParagraphs + 1)) { + RefPtr<Range> endOfCurrentParagraphRange = TextIterator::rangeFromLocationAndLength(document()->documentElement(), endOfCurrentParagraphIndex, 0, true); + RefPtr<Range> endAfterSelectionRange = TextIterator::rangeFromLocationAndLength(document()->documentElement(), endAfterSelectionIndex, 0, true); + if (!endOfCurrentParagraphRange.get() || !endAfterSelectionRange.get()) { + ASSERT_NOT_REACHED(); + return; + } + endOfCurrentParagraph = VisiblePosition(endOfCurrentParagraphRange->startPosition(), DOWNSTREAM); + endAfterSelection = VisiblePosition(endAfterSelectionRange->startPosition(), DOWNSTREAM); + } + while (endOfCurrentParagraph != endAfterSelection) { // Iterate across the selected paragraphs... VisiblePosition endOfNextParagraph = endOfParagraph(endOfCurrentParagraph.next()); @@ -170,6 +205,29 @@ void IndentOutdentCommand::indentRegion(const VisiblePosition& startOfSelection, } } +// Returns true if at least one text node was split. +bool IndentOutdentCommand::splitTextNodes(const VisiblePosition& start, int numParagraphs) +{ + VisiblePosition currentParagraphStart = start; + bool hasSplit = false; + int paragraphCount; + for (paragraphCount = 0; paragraphCount < numParagraphs; ++paragraphCount) { + // If there are multiple paragraphs in a single text node, we split the text node into a separate node for each paragraph. + if (currentParagraphStart.deepEquivalent().node()->isTextNode() && currentParagraphStart.deepEquivalent().node() == startOfParagraph(currentParagraphStart.previous()).deepEquivalent().node()) { + Text* textNode = static_cast<Text *>(currentParagraphStart.deepEquivalent().node()); + int offset = currentParagraphStart.deepEquivalent().offsetInContainerNode(); + splitTextNode(textNode, offset); + currentParagraphStart = VisiblePosition(textNode, 0, VP_DEFAULT_AFFINITY); + hasSplit = true; + } + VisiblePosition nextParagraph = startOfParagraph(endOfParagraph(currentParagraphStart).next()); + if (nextParagraph.isNull()) + break; + currentParagraphStart = nextParagraph; + } + return hasSplit; +} + void IndentOutdentCommand::outdentParagraph() { VisiblePosition visibleStartOfParagraph = startOfParagraph(endingSelection().visibleStart()); diff --git a/WebCore/editing/IndentOutdentCommand.h b/WebCore/editing/IndentOutdentCommand.h index 8705bf1..8644cc5 100644 --- a/WebCore/editing/IndentOutdentCommand.h +++ b/WebCore/editing/IndentOutdentCommand.h @@ -51,6 +51,7 @@ private: void outdentParagraph(); bool tryIndentingAsListItem(const VisiblePosition&); void indentIntoBlockquote(const VisiblePosition&, const VisiblePosition&, RefPtr<Element>&); + bool splitTextNodes(const VisiblePosition& start, int numParagraphs); EIndentType m_typeOfAction; int m_marginInPixels; diff --git a/WebCore/editing/InsertLineBreakCommand.cpp b/WebCore/editing/InsertLineBreakCommand.cpp index caaae0a..d805acf 100644 --- a/WebCore/editing/InsertLineBreakCommand.cpp +++ b/WebCore/editing/InsertLineBreakCommand.cpp @@ -94,6 +94,11 @@ void InsertLineBreakCommand::doApply() return; VisiblePosition caret(selection.visibleStart()); + // FIXME: If the node is hidden, we should still be able to insert text. + // For now, we return to avoid a crash. https://bugs.webkit.org/show_bug.cgi?id=40342 + if (caret.isNull()) + return; + Position pos(caret.deepEquivalent()); pos = positionAvoidingSpecialElementBoundary(pos); diff --git a/WebCore/editing/InsertParagraphSeparatorCommand.cpp b/WebCore/editing/InsertParagraphSeparatorCommand.cpp index f5825b7..d8aa98f 100644 --- a/WebCore/editing/InsertParagraphSeparatorCommand.cpp +++ b/WebCore/editing/InsertParagraphSeparatorCommand.cpp @@ -172,8 +172,9 @@ void InsertParagraphSeparatorCommand::doApply() || !startBlock->parentNode() || isTableCell(startBlock) || startBlock->hasTagName(formTag) - || (canonicalPos.node()->renderer() && canonicalPos.node()->renderer()->isTable()) - || canonicalPos.node()->hasTagName(hrTag)) { + // FIXME: If the node is hidden, we don't have a canonical position so we will do the wrong thing for tables and <hr>. https://bugs.webkit.org/show_bug.cgi?id=40342 + || (!canonicalPos.isNull() && canonicalPos.node()->renderer() && canonicalPos.node()->renderer()->isTable()) + || (!canonicalPos.isNull() && canonicalPos.node()->hasTagName(hrTag))) { applyCommandToComposite(InsertLineBreakCommand::create(document())); return; } diff --git a/WebCore/editing/SelectionController.cpp b/WebCore/editing/SelectionController.cpp index b17ab10..9ca375b 100644 --- a/WebCore/editing/SelectionController.cpp +++ b/WebCore/editing/SelectionController.cpp @@ -38,6 +38,7 @@ #include "FrameTree.h" #include "FrameView.h" #include "GraphicsContext.h" +#include "HTMLFrameOwnerElement.h" #include "HTMLInputElement.h" #include "HTMLNames.h" #include "HitTestRequest.h" @@ -106,11 +107,11 @@ void SelectionController::moveTo(const Position &base, const Position &extent, E setSelection(VisibleSelection(base, extent, affinity), true, true, userTriggered); } -void SelectionController::setSelection(const VisibleSelection& s, bool closeTyping, bool clearTypingStyle, bool userTriggered, CursorAlignOnScroll align, TextGranularity granularity) +void SelectionController::setSelection(const VisibleSelection& s, bool closeTyping, bool clearTypingStyle, bool userTriggered, CursorAlignOnScroll align, TextGranularity granularity, DirectionalityPolicy directionalityPolicy) { m_granularity = granularity; - setIsDirectional(false); + setIsDirectional(directionalityPolicy == MakeDirectionalSelection); if (m_isDragCaretController) { invalidateCaretRect(); @@ -1432,6 +1433,9 @@ void SelectionController::updateAppearance() } #endif + // We need to update style in case the node containing the selection is made display:none. + m_frame->document()->updateStyleIfNeeded(); + RenderView* view = m_frame->contentRenderer(); if (!view) return; diff --git a/WebCore/editing/SelectionController.h b/WebCore/editing/SelectionController.h index e4c2964..5d2ee9f 100644 --- a/WebCore/editing/SelectionController.h +++ b/WebCore/editing/SelectionController.h @@ -41,6 +41,8 @@ class RenderView; class Settings; class VisiblePosition; +enum DirectionalityPolicy { MakeNonDirectionalSelection, MakeDirectionalSelection }; + class SelectionController : public Noncopyable { public: enum EAlteration { AlterationMove, AlterationExtend }; @@ -62,8 +64,8 @@ public: void moveTo(const Position&, const Position&, EAffinity, bool userTriggered = false); const VisibleSelection& selection() const { return m_selection; } - void setSelection(const VisibleSelection&, bool closeTyping = true, bool clearTypingStyle = true, bool userTriggered = false, CursorAlignOnScroll = AlignCursorOnScrollIfNeeded, TextGranularity = CharacterGranularity); - void setSelection(const VisibleSelection& selection, TextGranularity granularity) { setSelection(selection, true, true, false, AlignCursorOnScrollIfNeeded, granularity); } + void setSelection(const VisibleSelection&, bool closeTyping = true, bool clearTypingStyle = true, bool userTriggered = false, CursorAlignOnScroll = AlignCursorOnScrollIfNeeded, TextGranularity = CharacterGranularity, DirectionalityPolicy = MakeDirectionalSelection); + void setSelection(const VisibleSelection& selection, TextGranularity granularity, DirectionalityPolicy directionality = MakeDirectionalSelection) { setSelection(selection, true, true, false, AlignCursorOnScrollIfNeeded, granularity, directionality); } bool setSelectedRange(Range*, EAffinity, bool closeTyping); void selectAll(); void clear(); diff --git a/WebCore/history/BackForwardController.cpp b/WebCore/history/BackForwardController.cpp new file mode 100644 index 0000000..9f557ac --- /dev/null +++ b/WebCore/history/BackForwardController.cpp @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "BackForwardController.h" + +#include "BackForwardControllerClient.h" +#include "BackForwardList.h" +#include "BackForwardListImpl.h" + +namespace WebCore { + +BackForwardController::BackForwardController(Page* page, BackForwardControllerClient* client) + : m_page(page) + , m_client(client) +{ + if (!m_client) + m_list = BackForwardListImpl::create(page); + else + m_list = m_client->createBackForwardList(page); +} + +BackForwardController::~BackForwardController() +{ + if (m_client) + m_client->backForwardControllerDestroyed(); +} + +} // namespace WebCore diff --git a/WebCore/history/BackForwardController.h b/WebCore/history/BackForwardController.h new file mode 100644 index 0000000..02c13a1 --- /dev/null +++ b/WebCore/history/BackForwardController.h @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef BackForwardController_h +#define BackForwardController_h + +#include "BackForwardList.h" +#include <wtf/Noncopyable.h> +#include <wtf/RefPtr.h> + +namespace WebCore { + +class Page; +class BackForwardControllerClient; + +class BackForwardController : public Noncopyable { +public: + BackForwardController(Page*, BackForwardControllerClient*); + ~BackForwardController(); + + BackForwardControllerClient* client() const { return m_client; } + BackForwardList* list() const { return m_list.get(); } + +private: + Page* m_page; + BackForwardControllerClient* m_client; + RefPtr<BackForwardList> m_list; +}; + +} // namespace WebCore + +#endif // BackForwardController_h diff --git a/WebCore/history/BackForwardControllerClient.h b/WebCore/history/BackForwardControllerClient.h new file mode 100644 index 0000000..289ad12 --- /dev/null +++ b/WebCore/history/BackForwardControllerClient.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef BackForwardControllerClient_h +#define BackForwardControllerClient_h + +#include "BackForwardList.h" +#include <wtf/PassRefPtr.h> + +namespace WebCore { + +class Page; + +class BackForwardControllerClient { +public: + virtual void backForwardControllerDestroyed() = 0; + + virtual PassRefPtr<BackForwardList> createBackForwardList(Page*) = 0; + +protected: + virtual ~BackForwardControllerClient() { } +}; + +} // namespace WebCore + +#endif // BackForwardControllerClient_h diff --git a/WebCore/history/BackForwardList.h b/WebCore/history/BackForwardList.h index eb4921a..0813054 100644 --- a/WebCore/history/BackForwardList.h +++ b/WebCore/history/BackForwardList.h @@ -30,19 +30,13 @@ #include <wtf/RefCounted.h> #include <wtf/PassRefPtr.h> -#include <wtf/HashSet.h> #include <wtf/Vector.h> namespace WebCore { -class Document; class HistoryItem; -class Page; -class SerializedScriptValue; -class String; typedef Vector<RefPtr<HistoryItem> > HistoryItemVector; -typedef HashSet<RefPtr<HistoryItem> > HistoryItemHashSet; #if PLATFORM(CHROMIUM) // In the Chromium port, the back/forward list is managed externally. @@ -62,65 +56,56 @@ public: class BackForwardList : public RefCounted<BackForwardList> { public: - static PassRefPtr<BackForwardList> create(Page* page) { return adoptRef(new BackForwardList(page)); } - ~BackForwardList(); + virtual ~BackForwardList() + { + } + + virtual bool isBackForwardListImpl() const { return false; } #if PLATFORM(CHROMIUM) // Must be called before any other methods. - void setClient(BackForwardListClient* client) { m_client = client; } + virtual void setClient(BackForwardListClient*) = 0; #endif - - Page* page() { return m_page; } - - void addItem(PassRefPtr<HistoryItem>); - void goBack(); - void goForward(); - void goToItem(HistoryItem*); + + virtual void addItem(PassRefPtr<HistoryItem>) = 0; + virtual void goBack() = 0; + virtual void goForward() = 0; + virtual void goToItem(HistoryItem*) = 0; - HistoryItem* backItem(); - HistoryItem* currentItem(); - HistoryItem* forwardItem(); - HistoryItem* itemAtIndex(int); - - void backListWithLimit(int, HistoryItemVector&); - void forwardListWithLimit(int, HistoryItemVector&); - - int capacity(); - void setCapacity(int); - bool enabled(); - void setEnabled(bool); - int backListCount(); - int forwardListCount(); - bool containsItem(HistoryItem*); - - void close(); - bool closed(); + virtual HistoryItem* backItem() = 0; + virtual HistoryItem* currentItem() = 0; + virtual HistoryItem* forwardItem() = 0; + virtual HistoryItem* itemAtIndex(int) = 0; + + virtual void backListWithLimit(int, HistoryItemVector&) = 0; + virtual void forwardListWithLimit(int, HistoryItemVector&) = 0; + + virtual int capacity() = 0; + virtual void setCapacity(int) = 0; + virtual bool enabled() = 0; + virtual void setEnabled(bool) = 0; + virtual int backListCount() = 0; + virtual int forwardListCount() = 0; + virtual bool containsItem(HistoryItem*) = 0; + + virtual void close() = 0; + virtual bool closed() = 0; - void removeItem(HistoryItem*); - HistoryItemVector& entries(); + virtual void removeItem(HistoryItem*) = 0; + virtual HistoryItemVector& entries() = 0; - void pushStateItem(PassRefPtr<HistoryItem>); + virtual void pushStateItem(PassRefPtr<HistoryItem>) = 0; #if ENABLE(WML) - void clearWMLPageHistory(); + virtual void clearWMLPageHistory() = 0; #endif -private: - BackForwardList(Page*); - - Page* m_page; -#if PLATFORM(CHROMIUM) - BackForwardListClient* m_client; -#else - HistoryItemVector m_entries; - HistoryItemHashSet m_entryHash; - unsigned m_current; -#endif - unsigned m_capacity; - bool m_closed; - bool m_enabled; +protected: + BackForwardList() + { + } }; -} //namespace WebCore +} // namespace WebCore -#endif +#endif // BackForwardList_h diff --git a/WebCore/history/BackForwardListChromium.cpp b/WebCore/history/BackForwardListChromium.cpp index a780b7d..ec0f117 100644 --- a/WebCore/history/BackForwardListChromium.cpp +++ b/WebCore/history/BackForwardListChromium.cpp @@ -26,7 +26,7 @@ */ #include "config.h" -#include "BackForwardList.h" +#include "BackForwardListImpl.h" #include "HistoryItem.h" #include "Logging.h" @@ -36,7 +36,7 @@ namespace WebCore { static const unsigned DefaultCapacity = 100; static const unsigned NoCurrentItemIndex = UINT_MAX; -BackForwardList::BackForwardList(Page* page) +BackForwardListImpl::BackForwardListImpl(Page* page) : m_page(page) , m_client(0) , m_capacity(DefaultCapacity) @@ -45,12 +45,12 @@ BackForwardList::BackForwardList(Page* page) { } -BackForwardList::~BackForwardList() +BackForwardListImpl::~BackForwardListImpl() { ASSERT(m_closed); } -void BackForwardList::addItem(PassRefPtr<HistoryItem> prpItem) +void BackForwardListImpl::addItem(PassRefPtr<HistoryItem> prpItem) { ASSERT(prpItem); if (m_capacity == 0 || !m_enabled) @@ -59,44 +59,44 @@ void BackForwardList::addItem(PassRefPtr<HistoryItem> prpItem) m_client->addItem(prpItem); } -void BackForwardList::goToItem(HistoryItem* item) +void BackForwardListImpl::goToItem(HistoryItem* item) { m_client->goToItem(item); } -HistoryItem* BackForwardList::backItem() +HistoryItem* BackForwardListImpl::backItem() { ASSERT_NOT_REACHED(); return 0; } -HistoryItem* BackForwardList::forwardItem() +HistoryItem* BackForwardListImpl::forwardItem() { ASSERT_NOT_REACHED(); return 0; } -HistoryItem* BackForwardList::currentItem() +HistoryItem* BackForwardListImpl::currentItem() { return m_client->currentItem(); } -int BackForwardList::capacity() +int BackForwardListImpl::capacity() { return m_capacity; } -void BackForwardList::setCapacity(int size) +void BackForwardListImpl::setCapacity(int size) { m_capacity = size; } -bool BackForwardList::enabled() +bool BackForwardListImpl::enabled() { return m_enabled; } -void BackForwardList::setEnabled(bool enabled) +void BackForwardListImpl::setEnabled(bool enabled) { m_enabled = enabled; if (!enabled) { @@ -106,22 +106,22 @@ void BackForwardList::setEnabled(bool enabled) } } -int BackForwardList::backListCount() +int BackForwardListImpl::backListCount() { return m_client->backListCount(); } -int BackForwardList::forwardListCount() +int BackForwardListImpl::forwardListCount() { return m_client->forwardListCount(); } -HistoryItem* BackForwardList::itemAtIndex(int index) +HistoryItem* BackForwardListImpl::itemAtIndex(int index) { return m_client->itemAtIndex(index); } -void BackForwardList::pushStateItem(PassRefPtr<HistoryItem> newItem) +void BackForwardListImpl::pushStateItem(PassRefPtr<HistoryItem> newItem) { RefPtr<HistoryItem> current = m_client->currentItem(); @@ -131,13 +131,13 @@ void BackForwardList::pushStateItem(PassRefPtr<HistoryItem> newItem) current->setStateObject(SerializedScriptValue::create()); } -HistoryItemVector& BackForwardList::entries() +HistoryItemVector& BackForwardListImpl::entries() { static HistoryItemVector noEntries; return noEntries; } -void BackForwardList::close() +void BackForwardListImpl::close() { if (m_client) m_client->close(); @@ -145,9 +145,40 @@ void BackForwardList::close() m_closed = true; } -bool BackForwardList::closed() +bool BackForwardListImpl::closed() { return m_closed; } +void BackForwardListImpl::goBack() +{ + ASSERT_NOT_REACHED(); +} + +void BackForwardListImpl::goForward() +{ + ASSERT_NOT_REACHED(); +} + +void BackForwardListImpl::backListWithLimit(int, HistoryItemVector&) +{ + ASSERT_NOT_REACHED(); +} + +void BackForwardListImpl::forwardListWithLimit(int, HistoryItemVector&) +{ + ASSERT_NOT_REACHED(); +} + +bool BackForwardListImpl::containsItem(HistoryItem*) +{ + ASSERT_NOT_REACHED(); + return false; +} + +void BackForwardListImpl::removeItem(HistoryItem*) +{ + ASSERT_NOT_REACHED(); +} + } // namespace WebCore diff --git a/WebCore/history/BackForwardList.cpp b/WebCore/history/BackForwardListImpl.cpp index 656cce2..9da3cad 100644 --- a/WebCore/history/BackForwardList.cpp +++ b/WebCore/history/BackForwardListImpl.cpp @@ -25,7 +25,7 @@ */ #include "config.h" -#include "BackForwardList.h" +#include "BackForwardListImpl.h" #include "Frame.h" #include "FrameLoader.h" @@ -43,7 +43,7 @@ namespace WebCore { static const unsigned DefaultCapacity = 100; static const unsigned NoCurrentItemIndex = UINT_MAX; -BackForwardList::BackForwardList(Page* page) +BackForwardListImpl::BackForwardListImpl(Page* page) : m_page(page) , m_current(NoCurrentItemIndex) , m_capacity(DefaultCapacity) @@ -52,12 +52,12 @@ BackForwardList::BackForwardList(Page* page) { } -BackForwardList::~BackForwardList() +BackForwardListImpl::~BackForwardListImpl() { ASSERT(m_closed); } -void BackForwardList::addItem(PassRefPtr<HistoryItem> prpItem) +void BackForwardListImpl::addItem(PassRefPtr<HistoryItem> prpItem) { ASSERT(prpItem); if (m_capacity == 0 || !m_enabled) @@ -93,7 +93,7 @@ void BackForwardList::addItem(PassRefPtr<HistoryItem> prpItem) m_page->mainFrame()->loader()->client()->dispatchDidAddBackForwardItem(currentItem()); } -void BackForwardList::goBack() +void BackForwardListImpl::goBack() { ASSERT(m_current > 0); if (m_current > 0) { @@ -103,7 +103,7 @@ void BackForwardList::goBack() } } -void BackForwardList::goForward() +void BackForwardListImpl::goForward() { ASSERT(m_current < m_entries.size() - 1); if (m_current < m_entries.size() - 1) { @@ -113,7 +113,7 @@ void BackForwardList::goForward() } } -void BackForwardList::goToItem(HistoryItem* item) +void BackForwardListImpl::goToItem(HistoryItem* item) { if (!m_entries.size() || !item) return; @@ -129,28 +129,28 @@ void BackForwardList::goToItem(HistoryItem* item) } } -HistoryItem* BackForwardList::backItem() +HistoryItem* BackForwardListImpl::backItem() { if (m_current && m_current != NoCurrentItemIndex) return m_entries[m_current - 1].get(); return 0; } -HistoryItem* BackForwardList::currentItem() +HistoryItem* BackForwardListImpl::currentItem() { if (m_current != NoCurrentItemIndex) return m_entries[m_current].get(); return 0; } -HistoryItem* BackForwardList::forwardItem() +HistoryItem* BackForwardListImpl::forwardItem() { if (m_entries.size() && m_current < m_entries.size() - 1) return m_entries[m_current + 1].get(); return 0; } -void BackForwardList::backListWithLimit(int limit, HistoryItemVector& list) +void BackForwardListImpl::backListWithLimit(int limit, HistoryItemVector& list) { list.clear(); if (m_current != NoCurrentItemIndex) { @@ -160,7 +160,7 @@ void BackForwardList::backListWithLimit(int limit, HistoryItemVector& list) } } -void BackForwardList::forwardListWithLimit(int limit, HistoryItemVector& list) +void BackForwardListImpl::forwardListWithLimit(int limit, HistoryItemVector& list) { ASSERT(limit > -1); list.clear(); @@ -176,12 +176,12 @@ void BackForwardList::forwardListWithLimit(int limit, HistoryItemVector& list) } } -int BackForwardList::capacity() +int BackForwardListImpl::capacity() { return m_capacity; } -void BackForwardList::setCapacity(int size) +void BackForwardListImpl::setCapacity(int size) { while (size < (int)m_entries.size()) { RefPtr<HistoryItem> item = m_entries.last(); @@ -200,12 +200,12 @@ void BackForwardList::setCapacity(int size) m_capacity = size; } -bool BackForwardList::enabled() +bool BackForwardListImpl::enabled() { return m_enabled; } -void BackForwardList::setEnabled(bool enabled) +void BackForwardListImpl::setEnabled(bool enabled) { m_enabled = enabled; if (!enabled) { @@ -215,17 +215,17 @@ void BackForwardList::setEnabled(bool enabled) } } -int BackForwardList::backListCount() +int BackForwardListImpl::backListCount() { return m_current == NoCurrentItemIndex ? 0 : m_current; } -int BackForwardList::forwardListCount() +int BackForwardListImpl::forwardListCount() { return m_current == NoCurrentItemIndex ? 0 : (int)m_entries.size() - (m_current + 1); } -HistoryItem* BackForwardList::itemAtIndex(int index) +HistoryItem* BackForwardListImpl::itemAtIndex(int index) { // Do range checks without doing math on index to avoid overflow. if (index < -(int)m_current) @@ -237,12 +237,12 @@ HistoryItem* BackForwardList::itemAtIndex(int index) return m_entries[index + m_current].get(); } -HistoryItemVector& BackForwardList::entries() +HistoryItemVector& BackForwardListImpl::entries() { return m_entries; } -void BackForwardList::pushStateItem(PassRefPtr<HistoryItem> newItem) +void BackForwardListImpl::pushStateItem(PassRefPtr<HistoryItem> newItem) { ASSERT(newItem); ASSERT(newItem->stateObject()); @@ -256,7 +256,7 @@ void BackForwardList::pushStateItem(PassRefPtr<HistoryItem> newItem) current->setStateObject(SerializedScriptValue::create()); } -void BackForwardList::close() +void BackForwardListImpl::close() { int size = m_entries.size(); for (int i = 0; i < size; ++i) @@ -267,12 +267,12 @@ void BackForwardList::close() m_closed = true; } -bool BackForwardList::closed() +bool BackForwardListImpl::closed() { return m_closed; } -void BackForwardList::removeItem(HistoryItem* item) +void BackForwardListImpl::removeItem(HistoryItem* item) { if (!item) return; @@ -294,13 +294,13 @@ void BackForwardList::removeItem(HistoryItem* item) } } -bool BackForwardList::containsItem(HistoryItem* entry) +bool BackForwardListImpl::containsItem(HistoryItem* entry) { return m_entryHash.contains(entry); } #if ENABLE(WML) -void BackForwardList::clearWMLPageHistory() +void BackForwardListImpl::clearWMLPageHistory() { RefPtr<HistoryItem> currentItem = this->currentItem(); diff --git a/WebCore/history/BackForwardListImpl.h b/WebCore/history/BackForwardListImpl.h new file mode 100644 index 0000000..86e1227 --- /dev/null +++ b/WebCore/history/BackForwardListImpl.h @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) + * Copyright (C) 2009 Google, Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef BackForwardListImpl_h +#define BackForwardListImpl_h + +#include "BackForwardList.h" +#include <wtf/HashSet.h> + +namespace WebCore { + +class HistoryItem; +class Page; + +typedef Vector<RefPtr<HistoryItem> > HistoryItemVector; +typedef HashSet<RefPtr<HistoryItem> > HistoryItemHashSet; + +class BackForwardListImpl : public BackForwardList { +public: + static PassRefPtr<BackForwardListImpl> create(Page* page) { return adoptRef(new BackForwardListImpl(page)); } + ~BackForwardListImpl(); + + bool isBackForwardListImpl() const { return true; } + +#if PLATFORM(CHROMIUM) + // Must be called before any other methods. + void setClient(BackForwardListClient* client) { m_client = client; } +#endif + + Page* page() { return m_page; } + + void addItem(PassRefPtr<HistoryItem>); + void goBack(); + void goForward(); + void goToItem(HistoryItem*); + + HistoryItem* backItem(); + HistoryItem* currentItem(); + HistoryItem* forwardItem(); + HistoryItem* itemAtIndex(int); + + void backListWithLimit(int, HistoryItemVector&); + void forwardListWithLimit(int, HistoryItemVector&); + + int capacity(); + void setCapacity(int); + bool enabled(); + void setEnabled(bool); + int backListCount(); + int forwardListCount(); + bool containsItem(HistoryItem*); + + void close(); + bool closed(); + + void removeItem(HistoryItem*); + HistoryItemVector& entries(); + + void pushStateItem(PassRefPtr<HistoryItem>); + +#if ENABLE(WML) + void clearWMLPageHistory(); +#endif + +private: + BackForwardListImpl(Page*); + + Page* m_page; +#if PLATFORM(CHROMIUM) + BackForwardListClient* m_client; +#else + HistoryItemVector m_entries; + HistoryItemHashSet m_entryHash; + unsigned m_current; +#endif + unsigned m_capacity; + bool m_closed; + bool m_enabled; +}; + +} // namespace WebCore + +#endif // BackForwardListImpl_h diff --git a/WebCore/history/CachedFrame.cpp b/WebCore/history/CachedFrame.cpp index 0be6710..1f4895f 100644 --- a/WebCore/history/CachedFrame.cpp +++ b/WebCore/history/CachedFrame.cpp @@ -124,7 +124,7 @@ CachedFrame::CachedFrame(Frame* frame) // Active DOM objects must be suspended before we cached the frame script data m_document->suspendActiveDOMObjects(); - m_cachedFrameScriptData.set(new ScriptCachedFrameData(frame)); + m_cachedFrameScriptData = adoptPtr(new ScriptCachedFrameData(frame)); // Custom scrollbar renderers will get reattached when the document comes out of the page cache m_view->detachCustomScrollbars(); @@ -232,9 +232,9 @@ void CachedFrame::destroy() clear(); } -void CachedFrame::setCachedFramePlatformData(CachedFramePlatformData* data) +void CachedFrame::setCachedFramePlatformData(PassOwnPtr<CachedFramePlatformData> data) { - m_cachedFramePlatformData.set(data); + m_cachedFramePlatformData = data; } CachedFramePlatformData* CachedFrame::cachedFramePlatformData() diff --git a/WebCore/history/CachedFrame.h b/WebCore/history/CachedFrame.h index ca772a4..884a601 100644 --- a/WebCore/history/CachedFrame.h +++ b/WebCore/history/CachedFrame.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 Apple Inc. All rights reserved. + * Copyright (C) 2009, 2010 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -28,6 +28,7 @@ #include "KURL.h" #include "ScriptCachedFrameData.h" +#include <wtf/PassOwnPtr.h> #include <wtf/RefPtr.h> namespace WebCore { @@ -75,7 +76,7 @@ public: void clear(); void destroy(); - void setCachedFramePlatformData(CachedFramePlatformData* data); + void setCachedFramePlatformData(PassOwnPtr<CachedFramePlatformData>); CachedFramePlatformData* cachedFramePlatformData(); using CachedFrameBase::document; diff --git a/WebCore/html/FileReader.cpp b/WebCore/html/FileReader.cpp index 2e020c1..b44ec9d 100644 --- a/WebCore/html/FileReader.cpp +++ b/WebCore/html/FileReader.cpp @@ -85,6 +85,9 @@ void FileReader::stop() void FileReader::readAsBinaryString(Blob* fileBlob) { + if (!fileBlob) + return; + // FIXME: needs to handle non-file blobs. LOG(FileAPI, "FileReader: reading as binary: %s\n", fileBlob->path().utf8().data()); @@ -93,6 +96,9 @@ void FileReader::readAsBinaryString(Blob* fileBlob) void FileReader::readAsText(Blob* fileBlob, const String& encoding) { + if (!fileBlob) + return; + // FIXME: needs to handle non-file blobs. LOG(FileAPI, "FileReader: reading as text: %s\n", fileBlob->path().utf8().data()); @@ -103,6 +109,9 @@ void FileReader::readAsText(Blob* fileBlob, const String& encoding) void FileReader::readAsDataURL(File* file) { + if (!file) + return; + LOG(FileAPI, "FileReader: reading as data URL: %s\n", file->path().utf8().data()); m_fileType = file->type(); diff --git a/WebCore/html/FileStreamClient.h b/WebCore/html/FileStreamClient.h index e1aec53..05c7df5 100644 --- a/WebCore/html/FileStreamClient.h +++ b/WebCore/html/FileStreamClient.h @@ -34,7 +34,6 @@ #if ENABLE(FILE_READER) || ENABLE(FILE_WRITER) #include "ExceptionCode.h" -#include <wtf/PassRefPtr.h> namespace WebCore { diff --git a/WebCore/html/FileStreamProxy.cpp b/WebCore/html/FileStreamProxy.cpp index eb99cf3..e2516df 100644 --- a/WebCore/html/FileStreamProxy.cpp +++ b/WebCore/html/FileStreamProxy.cpp @@ -44,15 +44,24 @@ namespace WebCore { -FileStreamProxy::FileStreamProxy(ScriptExecutionContext* context, FileStreamClient* client) +inline FileStreamProxy::FileStreamProxy(ScriptExecutionContext* context, FileStreamClient* client) : m_context(context) , m_client(client) , m_stream(FileStream::create(this)) { - // Holds an extra ref so that the instance will not get deleted while there can be any tasks on the file thread. - ref(); +} + +PassRefPtr<FileStreamProxy> FileStreamProxy::create(ScriptExecutionContext* context, FileStreamClient* client) +{ + RefPtr<FileStreamProxy> proxy = adoptRef(new FileStreamProxy(context, client)); + + // Hold an ref so that the instance will not get deleted while there are tasks on the file thread. + // This is balanced by the deref in derefProxyOnContext below. + proxy->ref(); + + proxy->fileThread()->postTask(createFileThreadTask(proxy->m_stream.get(), &FileStream::start)); - fileThread()->postTask(createFileThreadTask(m_stream.get(), &FileStream::start)); + return proxy.release(); } FileStreamProxy::~FileStreamProxy() diff --git a/WebCore/html/FileStreamProxy.h b/WebCore/html/FileStreamProxy.h index 308da15..66d8cb3 100644 --- a/WebCore/html/FileStreamProxy.h +++ b/WebCore/html/FileStreamProxy.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2010 Google Inc. All rights reserved. + * Copyright (C) 2010 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -33,7 +34,6 @@ #if ENABLE(FILE_READER) || ENABLE(FILE_WRITER) -#include "ExceptionCode.h" #include "FileStreamClient.h" #include <wtf/PassRefPtr.h> #include <wtf/RefCounted.h> @@ -50,10 +50,7 @@ class String; // A proxy module that calls corresponding FileStream methods on the file thread. Note: you must call stop() first and then release the reference to destruct the FileStreamProxy instance. class FileStreamProxy : public RefCounted<FileStreamProxy>, public FileStreamClient { public: - static PassRefPtr<FileStreamProxy> create(ScriptExecutionContext* context, FileStreamClient* client) - { - return adoptRef(new FileStreamProxy(context, client)); - } + static PassRefPtr<FileStreamProxy> create(ScriptExecutionContext*, FileStreamClient*); virtual ~FileStreamProxy(); void openForRead(Blob* blob); diff --git a/WebCore/html/HTMLAnchorElement.idl b/WebCore/html/HTMLAnchorElement.idl index 846162f..d57fcb6 100644 --- a/WebCore/html/HTMLAnchorElement.idl +++ b/WebCore/html/HTMLAnchorElement.idl @@ -24,7 +24,7 @@ module html { attribute [Reflect] DOMString accessKey; attribute [Reflect] DOMString charset; attribute [Reflect] DOMString coords; - attribute [ReflectURL] DOMString href; + attribute [Reflect,URL] DOMString href; attribute [Reflect] DOMString hreflang; attribute [Reflect] DOMString name; attribute [Reflect] DOMString rel; diff --git a/WebCore/html/HTMLAreaElement.idl b/WebCore/html/HTMLAreaElement.idl index 0f6fd72..64c6468 100644 --- a/WebCore/html/HTMLAreaElement.idl +++ b/WebCore/html/HTMLAreaElement.idl @@ -24,7 +24,7 @@ module html { attribute [Reflect] DOMString accessKey; attribute [Reflect] DOMString alt; attribute [Reflect] DOMString coords; - attribute [ReflectURL] DOMString href; + attribute [Reflect,URL] DOMString href; attribute [Reflect] boolean noHref; attribute [Reflect] DOMString shape; attribute [Reflect] DOMString target; diff --git a/WebCore/html/HTMLCanvasElement.cpp b/WebCore/html/HTMLCanvasElement.cpp index f8baf20..a14cbef 100644 --- a/WebCore/html/HTMLCanvasElement.cpp +++ b/WebCore/html/HTMLCanvasElement.cpp @@ -36,10 +36,12 @@ #include "CanvasStyle.h" #include "Chrome.h" #include "Document.h" +#include "ExceptionCode.h" #include "Frame.h" #include "GraphicsContext.h" #include "HTMLNames.h" #include "ImageBuffer.h" +#include "MIMETypeRegistry.h" #include "Page.h" #include "RenderHTMLCanvas.h" #include "Settings.h" @@ -55,11 +57,23 @@ namespace WebCore { using namespace HTMLNames; +// These values come from the WhatWG spec. +static const int DefaultWidth = 300; +static const int DefaultHeight = 150; + +// Firefox limits width/height to 32767 pixels, but slows down dramatically before it +// reaches that limit. We limit by area instead, giving us larger maximum dimensions, +// in exchange for a smaller maximum canvas size. +static const float MaxCanvasArea = 32768 * 8192; // Maximum canvas area in CSS pixels + HTMLCanvasElement::HTMLCanvasElement(const QualifiedName& tagName, Document* document) : HTMLElement(tagName, document) - , CanvasSurface(document->frame() ? document->frame()->page()->chrome()->scaleFactor() : 1) , m_observer(0) + , m_size(DefaultWidth, DefaultHeight) , m_ignoreReset(false) + , m_pageScaleFactor(document->frame() ? document->frame()->page()->chrome()->scaleFactor() : 1) + , m_originClean(true) + , m_hasCreatedImageBuffer(false) { ASSERT(hasTagName(canvasTag)); } @@ -186,7 +200,8 @@ CanvasRenderingContext* HTMLCanvasElement::getContext(const String& type, Canvas void HTMLCanvasElement::willDraw(const FloatRect& rect) { - CanvasSurface::willDraw(rect); + if (m_imageBuffer) + m_imageBuffer->clearImage(); if (RenderBox* ro = renderBox()) { FloatRect destRect = ro->contentBoxRect(); @@ -290,4 +305,108 @@ void HTMLCanvasElement::recalcStyle(StyleChange change) } } +void HTMLCanvasElement::setSurfaceSize(const IntSize& size) +{ + m_size = size; + m_hasCreatedImageBuffer = false; + m_imageBuffer.clear(); +} + +String HTMLCanvasElement::toDataURL(const String& mimeType, const double* quality, ExceptionCode& ec) +{ + if (!m_originClean) { + ec = SECURITY_ERR; + return String(); + } + + if (m_size.isEmpty() || !buffer()) + return String("data:,"); + + String lowercaseMimeType = mimeType.lower(); + + // FIXME: Make isSupportedImageMIMETypeForEncoding threadsafe (to allow this method to be used on a worker thread). + if (mimeType.isNull() || !MIMETypeRegistry::isSupportedImageMIMETypeForEncoding(lowercaseMimeType)) + return buffer()->toDataURL("image/png"); + + return buffer()->toDataURL(lowercaseMimeType, quality); +} + +IntRect HTMLCanvasElement::convertLogicalToDevice(const FloatRect& logicalRect) const +{ + return IntRect(convertLogicalToDevice(logicalRect.location()), convertLogicalToDevice(logicalRect.size())); +} + +IntSize HTMLCanvasElement::convertLogicalToDevice(const FloatSize& logicalSize) const +{ + float wf = ceilf(logicalSize.width() * m_pageScaleFactor); + float hf = ceilf(logicalSize.height() * m_pageScaleFactor); + + if (!(wf >= 1 && hf >= 1 && wf * hf <= MaxCanvasArea)) + return IntSize(); + + return IntSize(static_cast<unsigned>(wf), static_cast<unsigned>(hf)); +} + +IntPoint HTMLCanvasElement::convertLogicalToDevice(const FloatPoint& logicalPos) const +{ + float xf = logicalPos.x() * m_pageScaleFactor; + float yf = logicalPos.y() * m_pageScaleFactor; + + return IntPoint(static_cast<unsigned>(xf), static_cast<unsigned>(yf)); +} + +const SecurityOrigin& HTMLCanvasElement::securityOrigin() const +{ + return *document()->securityOrigin(); +} + +CSSStyleSelector* HTMLCanvasElement::styleSelector() +{ + return document()->styleSelector(); +} + +void HTMLCanvasElement::createImageBuffer() const +{ + ASSERT(!m_imageBuffer); + + m_hasCreatedImageBuffer = true; + + FloatSize unscaledSize(width(), height()); + IntSize size = convertLogicalToDevice(unscaledSize); + if (!size.width() || !size.height()) + return; + + m_imageBuffer = ImageBuffer::create(size); + // The convertLogicalToDevice MaxCanvasArea check should prevent common cases + // where ImageBuffer::create() returns 0, however we could still be low on memory. + if (!m_imageBuffer) + return; + m_imageBuffer->context()->scale(FloatSize(size.width() / unscaledSize.width(), size.height() / unscaledSize.height())); + m_imageBuffer->context()->setShadowsIgnoreTransforms(true); +} + +GraphicsContext* HTMLCanvasElement::drawingContext() const +{ + return buffer() ? m_imageBuffer->context() : 0; +} + +ImageBuffer* HTMLCanvasElement::buffer() const +{ + if (!m_hasCreatedImageBuffer) + createImageBuffer(); + return m_imageBuffer.get(); +} + +AffineTransform HTMLCanvasElement::baseTransform() const +{ + ASSERT(m_hasCreatedImageBuffer); + FloatSize unscaledSize(width(), height()); + IntSize size = convertLogicalToDevice(unscaledSize); + AffineTransform transform; + if (size.width() && size.height()) + transform.scaleNonUniform(size.width() / unscaledSize.width(), size.height() / unscaledSize.height()); + transform.multiply(m_imageBuffer->baseTransform()); + return transform; +} + } diff --git a/WebCore/html/HTMLCanvasElement.h b/WebCore/html/HTMLCanvasElement.h index 1337b87..d399d5f 100644 --- a/WebCore/html/HTMLCanvasElement.h +++ b/WebCore/html/HTMLCanvasElement.h @@ -28,7 +28,6 @@ #ifndef HTMLCanvasElement_h #define HTMLCanvasElement_h -#include "CanvasSurface.h" #include "FloatRect.h" #include "HTMLElement.h" #include "IntSize.h" @@ -43,6 +42,7 @@ class CanvasContextAttributes; class CanvasRenderingContext; class GraphicsContext; class HTMLCanvasElement; +class ImageBuffer; class IntSize; class CanvasObserver { @@ -54,17 +54,23 @@ public: virtual void canvasDestroyed(HTMLCanvasElement*) = 0; }; -class HTMLCanvasElement : public HTMLElement, public CanvasSurface { +class HTMLCanvasElement : public HTMLElement { public: static PassRefPtr<HTMLCanvasElement> create(Document*); static PassRefPtr<HTMLCanvasElement> create(const QualifiedName&, Document*); virtual ~HTMLCanvasElement(); + void setObserver(CanvasObserver* observer) { m_observer = observer; } + + // Attributes and functions exposed to script + int width() const { return size().width(); } + int height() const { return size().height(); } + + const IntSize& size() const { return m_size; } + void setWidth(int); void setHeight(int); - CanvasRenderingContext* getContext(const String&, CanvasContextAttributes* attributes = 0); - void setSize(const IntSize& newSize) { if (newSize == size()) @@ -76,16 +82,33 @@ public: reset(); } - virtual void willDraw(const FloatRect&); + CanvasRenderingContext* getContext(const String&, CanvasContextAttributes* attributes = 0); + + String toDataURL(const String& mimeType, const double* quality, ExceptionCode&); + String toDataURL(const String& mimeType, ExceptionCode& ec) { return toDataURL(mimeType, 0, ec); } + + // Used for rendering + void willDraw(const FloatRect&); void paint(GraphicsContext*, const IntRect&); - void setObserver(CanvasObserver* observer) { m_observer = observer; } + GraphicsContext* drawingContext() const; CanvasRenderingContext* renderingContext() const { return m_context.get(); } - RenderBox* renderBox() const { return HTMLElement::renderBox(); } - RenderStyle* computedStyle() { return HTMLElement::computedStyle(); } + ImageBuffer* buffer() const; + + IntRect convertLogicalToDevice(const FloatRect&) const; + IntSize convertLogicalToDevice(const FloatSize&) const; + IntPoint convertLogicalToDevice(const FloatPoint&) const; + + const SecurityOrigin& securityOrigin() const; + void setOriginTainted() { m_originClean = false; } + bool originClean() const { return m_originClean; } + + CSSStyleSelector* styleSelector(); + + AffineTransform baseTransform() const; #if ENABLE(3D_CANVAS) bool is3D() const; @@ -122,13 +145,28 @@ private: void reset(); - bool m_rendererIsCanvas; + void createImageBuffer() const; + + void setSurfaceSize(const IntSize&); + bool hasCreatedImageBuffer() const { return m_hasCreatedImageBuffer; } - OwnPtr<CanvasRenderingContext> m_context; CanvasObserver* m_observer; + IntSize m_size; + + OwnPtr<CanvasRenderingContext> m_context; + + bool m_rendererIsCanvas; + bool m_ignoreReset; FloatRect m_dirtyRect; + + float m_pageScaleFactor; + bool m_originClean; + + // m_createdImageBuffer means we tried to malloc the buffer. We didn't necessarily get it. + mutable bool m_hasCreatedImageBuffer; + mutable OwnPtr<ImageBuffer> m_imageBuffer; }; } //namespace diff --git a/WebCore/html/HTMLConstructionSite.cpp b/WebCore/html/HTMLConstructionSite.cpp new file mode 100644 index 0000000..5745625 --- /dev/null +++ b/WebCore/html/HTMLConstructionSite.cpp @@ -0,0 +1,367 @@ +/* + * Copyright (C) 2010 Google, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "HTMLTreeBuilder.h" + +#include "Comment.h" +#include "DocumentFragment.h" +#include "DocumentType.h" +#include "Element.h" +#include "Frame.h" +#include "HTMLDocument.h" +#include "HTMLHtmlElement.h" +#include "HTMLNames.h" +#include "HTMLScriptElement.h" +#include "HTMLToken.h" +#include "HTMLTokenizer.h" +#include "LegacyHTMLDocumentParser.h" +#include "LegacyHTMLTreeBuilder.h" +#include "LocalizedStrings.h" +#if ENABLE(MATHML) +#include "MathMLNames.h" +#endif +#include "NotImplemented.h" +#if ENABLE(SVG) +#include "SVGNames.h" +#endif +#include "ScriptController.h" +#include "Settings.h" +#include "Text.h" +#include <wtf/UnusedParam.h> + +namespace WebCore { + +using namespace HTMLNames; + +namespace { + +bool hasImpliedEndTag(Element* element) +{ + return element->hasTagName(ddTag) + || element->hasTagName(dtTag) + || element->hasTagName(liTag) + || element->hasTagName(optionTag) + || element->hasTagName(optgroupTag) + || element->hasTagName(pTag) + || element->hasTagName(rpTag) + || element->hasTagName(rtTag); +} + +} // namespace + +template<typename ChildType> +PassRefPtr<ChildType> HTMLConstructionSite::attach(Node* parent, PassRefPtr<ChildType> prpChild) +{ + RefPtr<ChildType> child = prpChild; + + // FIXME: It's confusing that HTMLConstructionSite::attach does the magic + // redirection to the foster parent but HTMLConstructionSite::attachAtSite + // doesn't. It feels like we're missing a concept somehow. + if (m_redirectAttachToFosterParent) { + fosterParent(child.get()); + ASSERT(child->attached()); + return child.release(); + } + + parent->parserAddChild(child); + // It's slightly unfortunate that we need to hold a reference to child + // here to call attach(). We should investigate whether we can rely on + // |parent| to hold a ref at this point. In the common case (at least + // for elements), however, we'll get to use this ref in the stack of + // open elements. + ASSERT(parent->attached()); + ASSERT(!child->attached()); + child->attach(); + return child.release(); +} + +void HTMLConstructionSite::attachAtSite(const AttachmentSite& site, PassRefPtr<Node> prpChild) +{ + RefPtr<Node> child = prpChild; + + if (site.nextChild) { + // FIXME: We need an insertElement which does not send mutation events. + ExceptionCode ec = 0; + site.parent->insertBefore(child, site.nextChild, ec); + ASSERT(!ec); + ASSERT(site.parent->attached()); + if (!child->attached()) + child->attach(); + return; + } + site.parent->parserAddChild(child); + // It's slightly unfortunate that we need to hold a reference to child + // here to call attach(). We should investigate whether we can rely on + // |site.parent| to hold a ref at this point. + ASSERT(site.parent->attached()); + if (!child->attached()) + child->attach(); +} + +HTMLConstructionSite::HTMLConstructionSite(Document* document, FragmentScriptingPermission scriptingPermission) + : m_document(document) + , m_fragmentScriptingPermission(scriptingPermission) + , m_redirectAttachToFosterParent(false) +{ +} + +HTMLConstructionSite::~HTMLConstructionSite() +{ +} + +void HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML(AtomicHTMLToken& token) +{ + RefPtr<Element> element = HTMLHtmlElement::create(m_document); + element->setAttributeMap(token.takeAtributes(), m_fragmentScriptingPermission); + m_openElements.pushHTMLHtmlElement(attach(m_document, element.release())); +} + +void HTMLConstructionSite::mergeAttributesFromTokenIntoElement(AtomicHTMLToken& token, Element* element) +{ + if (!token.attributes()) + return; + + NamedNodeMap* attributes = element->attributes(false); + for (unsigned i = 0; i < token.attributes()->length(); ++i) { + Attribute* attribute = token.attributes()->attributeItem(i); + if (!attributes->getAttributeItem(attribute->name())) + element->setAttribute(attribute->name(), attribute->value()); + } +} + +void HTMLConstructionSite::insertHTMLHtmlStartTagInBody(AtomicHTMLToken& token) +{ + // FIXME: parse error + mergeAttributesFromTokenIntoElement(token, m_openElements.htmlElement()); +} + +void HTMLConstructionSite::insertHTMLBodyStartTagInBody(AtomicHTMLToken& token) +{ + // FIXME: parse error + notImplemented(); // fragment case + mergeAttributesFromTokenIntoElement(token, m_openElements.bodyElement()); +} + +void HTMLConstructionSite::insertDoctype(AtomicHTMLToken& token) +{ + ASSERT(token.type() == HTMLToken::DOCTYPE); + attach(m_document, DocumentType::create(m_document, token.name(), String::adopt(token.publicIdentifier()), String::adopt(token.systemIdentifier()))); + // FIXME: Move quirks mode detection from DocumentType element to here. + notImplemented(); + if (token.forceQuirks()) + m_document->setParseMode(Document::Compat); +} + +void HTMLConstructionSite::insertComment(AtomicHTMLToken& token) +{ + ASSERT(token.type() == HTMLToken::Comment); + attach(currentElement(), Comment::create(m_document, token.comment())); +} + +void HTMLConstructionSite::insertCommentOnDocument(AtomicHTMLToken& token) +{ + ASSERT(token.type() == HTMLToken::Comment); + attach(m_document, Comment::create(m_document, token.comment())); +} + +void HTMLConstructionSite::insertCommentOnHTMLHtmlElement(AtomicHTMLToken& token) +{ + ASSERT(token.type() == HTMLToken::Comment); + attach(m_openElements.htmlElement(), Comment::create(m_document, token.comment())); +} + +PassRefPtr<Element> HTMLConstructionSite::createHTMLElementAndAttachToCurrent(AtomicHTMLToken& token) +{ + ASSERT(token.type() == HTMLToken::StartTag); + return attach(currentElement(), createHTMLElement(token)); +} + +void HTMLConstructionSite::insertHTMLHtmlElement(AtomicHTMLToken& token) +{ + ASSERT(!m_redirectAttachToFosterParent); + m_openElements.pushHTMLHtmlElement(createHTMLElementAndAttachToCurrent(token)); +} + +void HTMLConstructionSite::insertHTMLHeadElement(AtomicHTMLToken& token) +{ + ASSERT(!m_redirectAttachToFosterParent); + m_head = createHTMLElementAndAttachToCurrent(token); + m_openElements.pushHTMLHeadElement(m_head); +} + +void HTMLConstructionSite::insertHTMLBodyElement(AtomicHTMLToken& token) +{ + ASSERT(!m_redirectAttachToFosterParent); + m_openElements.pushHTMLBodyElement(createHTMLElementAndAttachToCurrent(token)); +} + +void HTMLConstructionSite::insertHTMLElement(AtomicHTMLToken& token) +{ + m_openElements.push(createHTMLElementAndAttachToCurrent(token)); +} + +void HTMLConstructionSite::insertSelfClosingHTMLElement(AtomicHTMLToken& token) +{ + ASSERT(token.type() == HTMLToken::StartTag); + createHTMLElementAndAttachToCurrent(token); + // FIXME: Do we want to acknowledge the token's self-closing flag? + // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#acknowledge-self-closing-flag +} + +void HTMLConstructionSite::insertFormattingElement(AtomicHTMLToken& token) +{ + // http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#the-stack-of-open-elements + // Possible active formatting elements include: + // a, b, big, code, em, font, i, nobr, s, small, strike, strong, tt, and u. + insertHTMLElement(token); + m_activeFormattingElements.append(currentElement()); +} + +void HTMLConstructionSite::insertScriptElement(AtomicHTMLToken& token) +{ + RefPtr<HTMLScriptElement> element = HTMLScriptElement::create(scriptTag, m_document, true); + element->setAttributeMap(token.takeAtributes(), m_fragmentScriptingPermission); + m_openElements.push(attach(currentElement(), element.release())); +} + +void HTMLConstructionSite::insertForeignElement(AtomicHTMLToken& token, const AtomicString& namespaceURI) +{ + ASSERT(token.type() == HTMLToken::StartTag); + notImplemented(); // parseError when xmlns or xmlns:xlink are wrong. + + RefPtr<Element> element = attach(currentElement(), createElement(token, namespaceURI)); + if (!token.selfClosing()) + m_openElements.push(element); +} + +void HTMLConstructionSite::insertTextNode(const String& characters) +{ + AttachmentSite site; + site.parent = currentElement(); + site.nextChild = 0; + if (m_redirectAttachToFosterParent) + findFosterSite(site); + + Node* previousChild = site.nextChild ? site.nextChild->previousSibling() : site.parent->lastChild(); + if (previousChild && previousChild->isTextNode()) { + // FIXME: We're only supposed to append to this text node if it + // was the last text node inserted by the parser. + CharacterData* textNode = static_cast<CharacterData*>(previousChild); + textNode->parserAppendData(characters); + return; + } + + attachAtSite(site, Text::create(m_document, characters)); +} + +PassRefPtr<Element> HTMLConstructionSite::createElement(AtomicHTMLToken& token, const AtomicString& namespaceURI) +{ + QualifiedName tagName(nullAtom, token.name(), namespaceURI); + RefPtr<Element> element = m_document->createElement(tagName, true); + element->setAttributeMap(token.takeAtributes(), m_fragmentScriptingPermission); + return element.release(); +} + +PassRefPtr<Element> HTMLConstructionSite::createHTMLElement(AtomicHTMLToken& token) +{ + RefPtr<Element> element = createElement(token, xhtmlNamespaceURI); + ASSERT(element->isHTMLElement()); + return element.release(); +} + +bool HTMLConstructionSite::indexOfFirstUnopenFormattingElement(unsigned& firstUnopenElementIndex) const +{ + if (m_activeFormattingElements.isEmpty()) + return false; + unsigned index = m_activeFormattingElements.size(); + do { + --index; + const HTMLFormattingElementList::Entry& entry = m_activeFormattingElements.at(index); + if (entry.isMarker() || m_openElements.contains(entry.element())) { + firstUnopenElementIndex = index + 1; + return firstUnopenElementIndex < m_activeFormattingElements.size(); + } + } while (index); + firstUnopenElementIndex = index; + return true; +} + +void HTMLConstructionSite::reconstructTheActiveFormattingElements() +{ + unsigned firstUnopenElementIndex; + if (!indexOfFirstUnopenFormattingElement(firstUnopenElementIndex)) + return; + + unsigned unopenEntryIndex = firstUnopenElementIndex; + ASSERT(unopenEntryIndex < m_activeFormattingElements.size()); + for (; unopenEntryIndex < m_activeFormattingElements.size(); ++unopenEntryIndex) { + HTMLFormattingElementList::Entry& unopenedEntry = m_activeFormattingElements.at(unopenEntryIndex); + // FIXME: We're supposed to save the original token in the entry. + AtomicHTMLToken fakeToken(HTMLToken::StartTag, unopenedEntry.element()->localName()); + insertHTMLElement(fakeToken); + unopenedEntry.replaceElement(currentElement()); + } +} + +void HTMLConstructionSite::generateImpliedEndTagsWithExclusion(const AtomicString& tagName) +{ + while (hasImpliedEndTag(currentElement()) && !currentElement()->hasLocalName(tagName)) + m_openElements.pop(); +} + +void HTMLConstructionSite::generateImpliedEndTags() +{ + while (hasImpliedEndTag(currentElement())) + m_openElements.pop(); +} + +void HTMLConstructionSite::findFosterSite(AttachmentSite& site) +{ + HTMLElementStack::ElementRecord* lastTableElementRecord = m_openElements.topmost(tableTag.localName()); + if (lastTableElementRecord) { + Element* lastTableElement = lastTableElementRecord->element(); + if (Node* parent = lastTableElement->parent()) { + site.parent = parent; + site.nextChild = lastTableElement; + return; + } + site.parent = lastTableElementRecord->next()->element(); + site.nextChild = 0; + return; + } + // Fragment case + site.parent = m_openElements.bottom(); // <html> element + site.nextChild = 0; +} + +void HTMLConstructionSite::fosterParent(Node* node) +{ + AttachmentSite site; + findFosterSite(site); + attachAtSite(site, node); +} + +} diff --git a/WebCore/html/HTMLConstructionSite.h b/WebCore/html/HTMLConstructionSite.h new file mode 100644 index 0000000..c0af9b3 --- /dev/null +++ b/WebCore/html/HTMLConstructionSite.h @@ -0,0 +1,141 @@ +/* + * Copyright (C) 2010 Google, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef HTMLConstructionSite_h +#define HTMLConstructionSite_h + +#include "FragmentScriptingPermission.h" +#include "HTMLElementStack.h" +#include "HTMLFormattingElementList.h" +#include "NotImplemented.h" +#include <wtf/Noncopyable.h> +#include <wtf/PassRefPtr.h> +#include <wtf/RefPtr.h> + +namespace WebCore { + +class AtomicHTMLToken; +class Document; +class Element; + +class HTMLConstructionSite : public Noncopyable { +public: + HTMLConstructionSite(Document*, FragmentScriptingPermission); + ~HTMLConstructionSite(); + + void insertDoctype(AtomicHTMLToken&); + void insertComment(AtomicHTMLToken&); + void insertCommentOnDocument(AtomicHTMLToken&); + void insertCommentOnHTMLHtmlElement(AtomicHTMLToken&); + void insertHTMLElement(AtomicHTMLToken&); + void insertSelfClosingHTMLElement(AtomicHTMLToken&); + void insertFormattingElement(AtomicHTMLToken&); + void insertHTMLHtmlElement(AtomicHTMLToken&); + void insertHTMLHeadElement(AtomicHTMLToken&); + void insertHTMLBodyElement(AtomicHTMLToken&); + void insertScriptElement(AtomicHTMLToken&); + void insertTextNode(const String&); + void insertForeignElement(AtomicHTMLToken&, const AtomicString& namespaceURI); + + void insertHTMLHtmlStartTagBeforeHTML(AtomicHTMLToken&); + void insertHTMLHtmlStartTagInBody(AtomicHTMLToken&); + void insertHTMLBodyStartTagInBody(AtomicHTMLToken&); + + PassRefPtr<Element> createHTMLElement(AtomicHTMLToken&); + + void fosterParent(Node*); + + bool indexOfFirstUnopenFormattingElement(unsigned& firstUnopenElementIndex) const; + void reconstructTheActiveFormattingElements(); + + void generateImpliedEndTags(); + void generateImpliedEndTagsWithExclusion(const AtomicString& tagName); + + Element* currentElement() const { return m_openElements.top(); } + Element* oneBelowTop() const { return m_openElements.oneBelowTop(); } + + HTMLElementStack* openElements() const { return &m_openElements; } + HTMLFormattingElementList* activeFormattingElements() const { return &m_activeFormattingElements; } + + Element* head() const { return m_head.get(); } + + Element* form() const { return m_form.get(); } + PassRefPtr<Element> takeForm() { return m_form.release(); } + + void setForm(PassRefPtr<Element> form) { m_form = form; } + + class RedirectToFosterParentGuard : public Noncopyable { + public: + RedirectToFosterParentGuard(HTMLConstructionSite& tree, bool shouldRedirect) + : m_tree(tree) + , m_wasRedirectingBefore(tree.m_redirectAttachToFosterParent) + { + m_tree.m_redirectAttachToFosterParent = shouldRedirect; + } + + ~RedirectToFosterParentGuard() + { + m_tree.m_redirectAttachToFosterParent = m_wasRedirectingBefore; + } + + private: + HTMLConstructionSite& m_tree; + bool m_wasRedirectingBefore; + }; + +private: + struct AttachmentSite { + Node* parent; + Node* nextChild; + }; + + template<typename ChildType> + PassRefPtr<ChildType> attach(Node* parent, PassRefPtr<ChildType> child); + + void attachAtSite(const AttachmentSite&, PassRefPtr<Node> child); + void findFosterSite(AttachmentSite&); + + PassRefPtr<Element> createElement(AtomicHTMLToken&, const AtomicString& namespaceURI); + + PassRefPtr<Element> createHTMLElementAndAttachToCurrent(AtomicHTMLToken&); + void mergeAttributesFromTokenIntoElement(AtomicHTMLToken&, Element*); + + Document* m_document; + RefPtr<Element> m_head; + RefPtr<Element> m_form; + mutable HTMLElementStack m_openElements; + mutable HTMLFormattingElementList m_activeFormattingElements; + FragmentScriptingPermission m_fragmentScriptingPermission; + + // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#parsing-main-intable + // In the "in table" insertion mode, we sometimes get into a state where + // "whenever a node would be inserted into the current node, it must instead + // be foster parented." This flag tracks whether we're in that state. + bool m_redirectAttachToFosterParent; +}; + +} + +#endif diff --git a/WebCore/html/HTMLDocumentParser.cpp b/WebCore/html/HTMLDocumentParser.cpp index 59b839d..129f6e9 100644 --- a/WebCore/html/HTMLDocumentParser.cpp +++ b/WebCore/html/HTMLDocumentParser.cpp @@ -222,9 +222,23 @@ void HTMLDocumentParser::insert(const SegmentedString& source) if (m_parserStopped) return; +<<<<<<< HEAD #ifdef ANDROID_INSTRUMENT android::TimeCounter::start(android::TimeCounter::ParsingTimeCounter); #endif +======= + if (m_scriptRunner && !m_scriptRunner->inScriptExecution() && m_input.haveSeenEndOfFile()) { + // document.write was called without a current insertion point. + // According to the spec, we're supposed to implicitly open the + // document. Unfortunately, that behavior isn't sufficiently compatible + // with the web. The working group is mulling over what exactly to + // do. In the meantime, we're going to try one of the potential + // solutions, which is to ignore the write. + // http://www.w3.org/Bugs/Public/show_bug.cgi?id=9767 + return; + } + +>>>>>>> webkit.org at r63173 { NestingLevelIncrementer nestingLevelIncrementer(m_writeNestingLevel); @@ -354,6 +368,7 @@ void HTMLDocumentParser::resumeParsingAfterScriptExecution() ASSERT(!inScriptExecution()); ASSERT(!m_treeBuilder->isPaused()); + m_preloadScanner.clear(); pumpTokenizerIfPossible(AllowYield); endIfDelayed(); } diff --git a/WebCore/html/HTMLElementStack.cpp b/WebCore/html/HTMLElementStack.cpp index 2f1b792..d1a1752 100644 --- a/WebCore/html/HTMLElementStack.cpp +++ b/WebCore/html/HTMLElementStack.cpp @@ -62,6 +62,7 @@ inline bool isListItemScopeMarker(Element* element) || element->hasTagName(olTag) || element->hasTagName(ulTag); } + inline bool isTableScopeMarker(Element* element) { return element->hasTagName(tableTag) @@ -76,6 +77,12 @@ inline bool isTableBodyScopeMarker(Element* element) || element->hasTagName(htmlTag); } +inline bool isTableRowScopeMarker(Element* element) +{ + return element->hasTagName(trTag) + || element->hasTagName(htmlTag); +} + } HTMLElementStack::ElementRecord::ElementRecord(PassRefPtr<Element> element, PassOwnPtr<ElementRecord> next) @@ -136,6 +143,12 @@ void HTMLElementStack::pop() popCommon(); } +void HTMLElementStack::popUntilElementWithNamespace(const AtomicString& namespaceURI) +{ + while (top()->namespaceURI() != namespaceURI) + pop(); +} + void HTMLElementStack::popUntil(const AtomicString& tagName) { while (!top()->hasLocalName(tagName)) { @@ -145,12 +158,24 @@ void HTMLElementStack::popUntil(const AtomicString& tagName) } } +void HTMLElementStack::popUntilPopped(const AtomicString& tagName) +{ + popUntil(tagName); + pop(); +} + void HTMLElementStack::popUntil(Element* element) { while (top() != element) pop(); } +void HTMLElementStack::popUntilPopped(Element* element) +{ + popUntil(element); + pop(); +} + void HTMLElementStack::popUntilTableScopeMarker() { // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#clear-the-stack-back-to-a-table-context @@ -165,6 +190,13 @@ void HTMLElementStack::popUntilTableBodyScopeMarker() pop(); } +void HTMLElementStack::popUntilTableRowScopeMarker() +{ + // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#clear-the-stack-back-to-a-table-row-context + while (!isTableRowScopeMarker(top())) + pop(); +} + void HTMLElementStack::pushHTMLHtmlElement(PassRefPtr<Element> element) { ASSERT(!m_top); // <html> should always be the bottom of the stack. @@ -226,14 +258,24 @@ void HTMLElementStack::insertAbove(PassRefPtr<Element> element, ElementRecord* r HTMLElementStack::ElementRecord* HTMLElementStack::topRecord() const { + ASSERT(m_top); return m_top.get(); } Element* HTMLElementStack::top() const { + ASSERT(m_top->element()); return m_top->element(); } +Element* HTMLElementStack::oneBelowTop() const +{ + // We should never be calling this if it could be 0. + ASSERT(m_top); + ASSERT(m_top->next()); + return m_top->next()->element(); +} + Element* HTMLElementStack::bottom() const { return htmlElement(); @@ -297,6 +339,19 @@ bool inScopeCommon(HTMLElementStack::ElementRecord* top, const AtomicString& tar return false; } +bool HTMLElementStack::hasOnlyHTMLElementsInScope() const +{ + for (ElementRecord* record = m_top.get(); record; record = record->next()) { + Element* element = record->element(); + if (element->namespaceURI() != xhtmlNamespaceURI) + return false; + if (isScopeMarker(element)) + return true; + } + ASSERT_NOT_REACHED(); // <html> is always on the stack and is a scope marker. + return true; +} + bool HTMLElementStack::inScope(Element* targetElement) const { for (ElementRecord* pos = m_top.get(); pos; pos = pos->next()) { @@ -315,16 +370,34 @@ bool HTMLElementStack::inScope(const AtomicString& targetTag) const return inScopeCommon<isScopeMarker>(m_top.get(), targetTag); } +bool HTMLElementStack::inScope(const QualifiedName& tagName) const +{ + // FIXME: Is localName() right for non-html elements? + return inScope(tagName.localName()); +} + bool HTMLElementStack::inListItemScope(const AtomicString& targetTag) const { return inScopeCommon<isListItemScopeMarker>(m_top.get(), targetTag); } +bool HTMLElementStack::inListItemScope(const QualifiedName& tagName) const +{ + // FIXME: Is localName() right for non-html elements? + return inListItemScope(tagName.localName()); +} + bool HTMLElementStack::inTableScope(const AtomicString& targetTag) const { return inScopeCommon<isTableScopeMarker>(m_top.get(), targetTag); } +bool HTMLElementStack::inTableScope(const QualifiedName& tagName) const +{ + // FIXME: Is localName() right for non-html elements? + return inTableScope(tagName.localName()); +} + Element* HTMLElementStack::htmlElement() const { ASSERT(m_htmlElement); @@ -376,4 +449,14 @@ void HTMLElementStack::removeNonTopCommon(Element* element) ASSERT_NOT_REACHED(); } +#ifndef NDEBUG + +void HTMLElementStack::show() +{ + for (ElementRecord* record = m_top.get(); record; record = record->next()) + record->element()->showNode(); +} + +#endif + } diff --git a/WebCore/html/HTMLElementStack.h b/WebCore/html/HTMLElementStack.h index efc3fd8..8be4422 100644 --- a/WebCore/html/HTMLElementStack.h +++ b/WebCore/html/HTMLElementStack.h @@ -35,6 +35,7 @@ namespace WebCore { class AtomicString; class Element; +class QualifiedName; // NOTE: The HTML5 spec uses a backwards (grows downward) stack. We're using // more standard (grows upwards) stack terminology here. @@ -67,6 +68,7 @@ public: }; Element* top() const; + Element* oneBelowTop() const; ElementRecord* topRecord() const; Element* bottom() const; ElementRecord* find(Element*) const; @@ -81,9 +83,13 @@ public: void pop(); void popUntil(const AtomicString& tagName); + void popUntilElementWithNamespace(const AtomicString& namespaceURI); void popUntil(Element*); + void popUntilPopped(const AtomicString& tagName); + void popUntilPopped(Element*); void popUntilTableScopeMarker(); // "clear the stack back to a table context" in the spec. void popUntilTableBodyScopeMarker(); // "clear the stack back to a table body context" in the spec. + void popUntilTableRowScopeMarker(); // "clear the stack back to a table row context" in the spec. void popHTMLHeadElement(); void popHTMLBodyElement(); @@ -94,13 +100,22 @@ public: bool inScope(Element*) const; bool inScope(const AtomicString& tagName) const; + bool inScope(const QualifiedName&) const; bool inListItemScope(const AtomicString& tagName) const; + bool inListItemScope(const QualifiedName&) const; bool inTableScope(const AtomicString& tagName) const; + bool inTableScope(const QualifiedName&) const; + + bool hasOnlyHTMLElementsInScope() const; Element* htmlElement() const; Element* headElement() const; Element* bodyElement() const; +#ifndef NDEBUG + void show(); +#endif + private: void pushCommon(PassRefPtr<Element>); void popCommon(); diff --git a/WebCore/html/HTMLEntityNames.json b/WebCore/html/HTMLEntityNames.json new file mode 100644 index 0000000..7be8c5b --- /dev/null +++ b/WebCore/html/HTMLEntityNames.json @@ -0,0 +1,8554 @@ +[ + { + entity: "AElig;", + value: "U+000C6" + }, + { + entity: "AElig", + value: "U+000C6" + }, + { + entity: "AMP;", + value: "U+00026" + }, + { + entity: "AMP", + value: "U+00026" + }, + { + entity: "Aacute;", + value: "U+000C1" + }, + { + entity: "Aacute", + value: "U+000C1" + }, + { + entity: "Abreve;", + value: "U+00102" + }, + { + entity: "Acirc;", + value: "U+000C2" + }, + { + entity: "Acirc", + value: "U+000C2" + }, + { + entity: "Acy;", + value: "U+00410" + }, + { + entity: "Afr;", + value: "U+1D504" + }, + { + entity: "Agrave;", + value: "U+000C0" + }, + { + entity: "Agrave", + value: "U+000C0" + }, + { + entity: "Alpha;", + value: "U+00391" + }, + { + entity: "Amacr;", + value: "U+00100" + }, + { + entity: "And;", + value: "U+02A53" + }, + { + entity: "Aogon;", + value: "U+00104" + }, + { + entity: "Aopf;", + value: "U+1D538" + }, + { + entity: "ApplyFunction;", + value: "U+02061" + }, + { + entity: "Aring;", + value: "U+000C5" + }, + { + entity: "Aring", + value: "U+000C5" + }, + { + entity: "Ascr;", + value: "U+1D49C" + }, + { + entity: "Assign;", + value: "U+02254" + }, + { + entity: "Atilde;", + value: "U+000C3" + }, + { + entity: "Atilde", + value: "U+000C3" + }, + { + entity: "Auml;", + value: "U+000C4" + }, + { + entity: "Auml", + value: "U+000C4" + }, + { + entity: "Backslash;", + value: "U+02216" + }, + { + entity: "Barv;", + value: "U+02AE7" + }, + { + entity: "Barwed;", + value: "U+02306" + }, + { + entity: "Bcy;", + value: "U+00411" + }, + { + entity: "Because;", + value: "U+02235" + }, + { + entity: "Bernoullis;", + value: "U+0212C" + }, + { + entity: "Beta;", + value: "U+00392" + }, + { + entity: "Bfr;", + value: "U+1D505" + }, + { + entity: "Bopf;", + value: "U+1D539" + }, + { + entity: "Breve;", + value: "U+002D8" + }, + { + entity: "Bscr;", + value: "U+0212C" + }, + { + entity: "Bumpeq;", + value: "U+0224E" + }, + { + entity: "CHcy;", + value: "U+00427" + }, + { + entity: "COPY;", + value: "U+000A9" + }, + { + entity: "COPY", + value: "U+000A9" + }, + { + entity: "Cacute;", + value: "U+00106" + }, + { + entity: "Cap;", + value: "U+022D2" + }, + { + entity: "CapitalDifferentialD;", + value: "U+02145" + }, + { + entity: "Cayleys;", + value: "U+0212D" + }, + { + entity: "Ccaron;", + value: "U+0010C" + }, + { + entity: "Ccedil;", + value: "U+000C7" + }, + { + entity: "Ccedil", + value: "U+000C7" + }, + { + entity: "Ccirc;", + value: "U+00108" + }, + { + entity: "Cconint;", + value: "U+02230" + }, + { + entity: "Cdot;", + value: "U+0010A" + }, + { + entity: "Cedilla;", + value: "U+000B8" + }, + { + entity: "CenterDot;", + value: "U+000B7" + }, + { + entity: "Cfr;", + value: "U+0212D" + }, + { + entity: "Chi;", + value: "U+003A7" + }, + { + entity: "CircleDot;", + value: "U+02299" + }, + { + entity: "CircleMinus;", + value: "U+02296" + }, + { + entity: "CirclePlus;", + value: "U+02295" + }, + { + entity: "CircleTimes;", + value: "U+02297" + }, + { + entity: "ClockwiseContourIntegral;", + value: "U+02232" + }, + { + entity: "CloseCurlyDoubleQuote;", + value: "U+0201D" + }, + { + entity: "CloseCurlyQuote;", + value: "U+02019" + }, + { + entity: "Colon;", + value: "U+02237" + }, + { + entity: "Colone;", + value: "U+02A74" + }, + { + entity: "Congruent;", + value: "U+02261" + }, + { + entity: "Conint;", + value: "U+0222F" + }, + { + entity: "ContourIntegral;", + value: "U+0222E" + }, + { + entity: "Copf;", + value: "U+02102" + }, + { + entity: "Coproduct;", + value: "U+02210" + }, + { + entity: "CounterClockwiseContourIntegral;", + value: "U+02233" + }, + { + entity: "Cross;", + value: "U+02A2F" + }, + { + entity: "Cscr;", + value: "U+1D49E" + }, + { + entity: "Cup;", + value: "U+022D3" + }, + { + entity: "CupCap;", + value: "U+0224D" + }, + { + entity: "DD;", + value: "U+02145" + }, + { + entity: "DDotrahd;", + value: "U+02911" + }, + { + entity: "DJcy;", + value: "U+00402" + }, + { + entity: "DScy;", + value: "U+00405" + }, + { + entity: "DZcy;", + value: "U+0040F" + }, + { + entity: "Dagger;", + value: "U+02021" + }, + { + entity: "Darr;", + value: "U+021A1" + }, + { + entity: "Dashv;", + value: "U+02AE4" + }, + { + entity: "Dcaron;", + value: "U+0010E" + }, + { + entity: "Dcy;", + value: "U+00414" + }, + { + entity: "Del;", + value: "U+02207" + }, + { + entity: "Delta;", + value: "U+00394" + }, + { + entity: "Dfr;", + value: "U+1D507" + }, + { + entity: "DiacriticalAcute;", + value: "U+000B4" + }, + { + entity: "DiacriticalDot;", + value: "U+002D9" + }, + { + entity: "DiacriticalDoubleAcute;", + value: "U+002DD" + }, + { + entity: "DiacriticalGrave;", + value: "U+00060" + }, + { + entity: "DiacriticalTilde;", + value: "U+002DC" + }, + { + entity: "Diamond;", + value: "U+022C4" + }, + { + entity: "DifferentialD;", + value: "U+02146" + }, + { + entity: "Dopf;", + value: "U+1D53B" + }, + { + entity: "Dot;", + value: "U+000A8" + }, + { + entity: "DotDot;", + value: "U+020DC" + }, + { + entity: "DotEqual;", + value: "U+02250" + }, + { + entity: "DoubleContourIntegral;", + value: "U+0222F" + }, + { + entity: "DoubleDot;", + value: "U+000A8" + }, + { + entity: "DoubleDownArrow;", + value: "U+021D3" + }, + { + entity: "DoubleLeftArrow;", + value: "U+021D0" + }, + { + entity: "DoubleLeftRightArrow;", + value: "U+021D4" + }, + { + entity: "DoubleLeftTee;", + value: "U+02AE4" + }, + { + entity: "DoubleLongLeftArrow;", + value: "U+027F8" + }, + { + entity: "DoubleLongLeftRightArrow;", + value: "U+027FA" + }, + { + entity: "DoubleLongRightArrow;", + value: "U+027F9" + }, + { + entity: "DoubleRightArrow;", + value: "U+021D2" + }, + { + entity: "DoubleRightTee;", + value: "U+022A8" + }, + { + entity: "DoubleUpArrow;", + value: "U+021D1" + }, + { + entity: "DoubleUpDownArrow;", + value: "U+021D5" + }, + { + entity: "DoubleVerticalBar;", + value: "U+02225" + }, + { + entity: "DownArrow;", + value: "U+02193" + }, + { + entity: "DownArrowBar;", + value: "U+02913" + }, + { + entity: "DownArrowUpArrow;", + value: "U+021F5" + }, + { + entity: "DownBreve;", + value: "U+00311" + }, + { + entity: "DownLeftRightVector;", + value: "U+02950" + }, + { + entity: "DownLeftTeeVector;", + value: "U+0295E" + }, + { + entity: "DownLeftVector;", + value: "U+021BD" + }, + { + entity: "DownLeftVectorBar;", + value: "U+02956" + }, + { + entity: "DownRightTeeVector;", + value: "U+0295F" + }, + { + entity: "DownRightVector;", + value: "U+021C1" + }, + { + entity: "DownRightVectorBar;", + value: "U+02957" + }, + { + entity: "DownTee;", + value: "U+022A4" + }, + { + entity: "DownTeeArrow;", + value: "U+021A7" + }, + { + entity: "Downarrow;", + value: "U+021D3" + }, + { + entity: "Dscr;", + value: "U+1D49F" + }, + { + entity: "Dstrok;", + value: "U+00110" + }, + { + entity: "ENG;", + value: "U+0014A" + }, + { + entity: "ETH;", + value: "U+000D0" + }, + { + entity: "ETH", + value: "U+000D0" + }, + { + entity: "Eacute;", + value: "U+000C9" + }, + { + entity: "Eacute", + value: "U+000C9" + }, + { + entity: "Ecaron;", + value: "U+0011A" + }, + { + entity: "Ecirc;", + value: "U+000CA" + }, + { + entity: "Ecirc", + value: "U+000CA" + }, + { + entity: "Ecy;", + value: "U+0042D" + }, + { + entity: "Edot;", + value: "U+00116" + }, + { + entity: "Efr;", + value: "U+1D508" + }, + { + entity: "Egrave;", + value: "U+000C8" + }, + { + entity: "Egrave", + value: "U+000C8" + }, + { + entity: "Element;", + value: "U+02208" + }, + { + entity: "Emacr;", + value: "U+00112" + }, + { + entity: "EmptySmallSquare;", + value: "U+025FB" + }, + { + entity: "EmptyVerySmallSquare;", + value: "U+025AB" + }, + { + entity: "Eogon;", + value: "U+00118" + }, + { + entity: "Eopf;", + value: "U+1D53C" + }, + { + entity: "Epsilon;", + value: "U+00395" + }, + { + entity: "Equal;", + value: "U+02A75" + }, + { + entity: "EqualTilde;", + value: "U+02242" + }, + { + entity: "Equilibrium;", + value: "U+021CC" + }, + { + entity: "Escr;", + value: "U+02130" + }, + { + entity: "Esim;", + value: "U+02A73" + }, + { + entity: "Eta;", + value: "U+00397" + }, + { + entity: "Euml;", + value: "U+000CB" + }, + { + entity: "Euml", + value: "U+000CB" + }, + { + entity: "Exists;", + value: "U+02203" + }, + { + entity: "ExponentialE;", + value: "U+02147" + }, + { + entity: "Fcy;", + value: "U+00424" + }, + { + entity: "Ffr;", + value: "U+1D509" + }, + { + entity: "FilledSmallSquare;", + value: "U+025FC" + }, + { + entity: "FilledVerySmallSquare;", + value: "U+025AA" + }, + { + entity: "Fopf;", + value: "U+1D53D" + }, + { + entity: "ForAll;", + value: "U+02200" + }, + { + entity: "Fouriertrf;", + value: "U+02131" + }, + { + entity: "Fscr;", + value: "U+02131" + }, + { + entity: "GJcy;", + value: "U+00403" + }, + { + entity: "GT;", + value: "U+0003E" + }, + { + entity: "GT", + value: "U+0003E" + }, + { + entity: "Gamma;", + value: "U+00393" + }, + { + entity: "Gammad;", + value: "U+003DC" + }, + { + entity: "Gbreve;", + value: "U+0011E" + }, + { + entity: "Gcedil;", + value: "U+00122" + }, + { + entity: "Gcirc;", + value: "U+0011C" + }, + { + entity: "Gcy;", + value: "U+00413" + }, + { + entity: "Gdot;", + value: "U+00120" + }, + { + entity: "Gfr;", + value: "U+1D50A" + }, + { + entity: "Gg;", + value: "U+022D9" + }, + { + entity: "Gopf;", + value: "U+1D53E" + }, + { + entity: "GreaterEqual;", + value: "U+02265" + }, + { + entity: "GreaterEqualLess;", + value: "U+022DB" + }, + { + entity: "GreaterFullEqual;", + value: "U+02267" + }, + { + entity: "GreaterGreater;", + value: "U+02AA2" + }, + { + entity: "GreaterLess;", + value: "U+02277" + }, + { + entity: "GreaterSlantEqual;", + value: "U+02A7E" + }, + { + entity: "GreaterTilde;", + value: "U+02273" + }, + { + entity: "Gscr;", + value: "U+1D4A2" + }, + { + entity: "Gt;", + value: "U+0226B" + }, + { + entity: "HARDcy;", + value: "U+0042A" + }, + { + entity: "Hacek;", + value: "U+002C7" + }, + { + entity: "Hat;", + value: "U+0005E" + }, + { + entity: "Hcirc;", + value: "U+00124" + }, + { + entity: "Hfr;", + value: "U+0210C" + }, + { + entity: "HilbertSpace;", + value: "U+0210B" + }, + { + entity: "Hopf;", + value: "U+0210D" + }, + { + entity: "HorizontalLine;", + value: "U+02500" + }, + { + entity: "Hscr;", + value: "U+0210B" + }, + { + entity: "Hstrok;", + value: "U+00126" + }, + { + entity: "HumpDownHump;", + value: "U+0224E" + }, + { + entity: "HumpEqual;", + value: "U+0224F" + }, + { + entity: "IEcy;", + value: "U+00415" + }, + { + entity: "IJlig;", + value: "U+00132" + }, + { + entity: "IOcy;", + value: "U+00401" + }, + { + entity: "Iacute;", + value: "U+000CD" + }, + { + entity: "Iacute", + value: "U+000CD" + }, + { + entity: "Icirc;", + value: "U+000CE" + }, + { + entity: "Icirc", + value: "U+000CE" + }, + { + entity: "Icy;", + value: "U+00418" + }, + { + entity: "Idot;", + value: "U+00130" + }, + { + entity: "Ifr;", + value: "U+02111" + }, + { + entity: "Igrave;", + value: "U+000CC" + }, + { + entity: "Igrave", + value: "U+000CC" + }, + { + entity: "Im;", + value: "U+02111" + }, + { + entity: "Imacr;", + value: "U+0012A" + }, + { + entity: "ImaginaryI;", + value: "U+02148" + }, + { + entity: "Implies;", + value: "U+021D2" + }, + { + entity: "Int;", + value: "U+0222C" + }, + { + entity: "Integral;", + value: "U+0222B" + }, + { + entity: "Intersection;", + value: "U+022C2" + }, + { + entity: "InvisibleComma;", + value: "U+02063" + }, + { + entity: "InvisibleTimes;", + value: "U+02062" + }, + { + entity: "Iogon;", + value: "U+0012E" + }, + { + entity: "Iopf;", + value: "U+1D540" + }, + { + entity: "Iota;", + value: "U+00399" + }, + { + entity: "Iscr;", + value: "U+02110" + }, + { + entity: "Itilde;", + value: "U+00128" + }, + { + entity: "Iukcy;", + value: "U+00406" + }, + { + entity: "Iuml;", + value: "U+000CF" + }, + { + entity: "Iuml", + value: "U+000CF" + }, + { + entity: "Jcirc;", + value: "U+00134" + }, + { + entity: "Jcy;", + value: "U+00419" + }, + { + entity: "Jfr;", + value: "U+1D50D" + }, + { + entity: "Jopf;", + value: "U+1D541" + }, + { + entity: "Jscr;", + value: "U+1D4A5" + }, + { + entity: "Jsercy;", + value: "U+00408" + }, + { + entity: "Jukcy;", + value: "U+00404" + }, + { + entity: "KHcy;", + value: "U+00425" + }, + { + entity: "KJcy;", + value: "U+0040C" + }, + { + entity: "Kappa;", + value: "U+0039A" + }, + { + entity: "Kcedil;", + value: "U+00136" + }, + { + entity: "Kcy;", + value: "U+0041A" + }, + { + entity: "Kfr;", + value: "U+1D50E" + }, + { + entity: "Kopf;", + value: "U+1D542" + }, + { + entity: "Kscr;", + value: "U+1D4A6" + }, + { + entity: "LJcy;", + value: "U+00409" + }, + { + entity: "LT;", + value: "U+0003C" + }, + { + entity: "LT", + value: "U+0003C" + }, + { + entity: "Lacute;", + value: "U+00139" + }, + { + entity: "Lambda;", + value: "U+0039B" + }, + { + entity: "Lang;", + value: "U+027EA" + }, + { + entity: "Laplacetrf;", + value: "U+02112" + }, + { + entity: "Larr;", + value: "U+0219E" + }, + { + entity: "Lcaron;", + value: "U+0013D" + }, + { + entity: "Lcedil;", + value: "U+0013B" + }, + { + entity: "Lcy;", + value: "U+0041B" + }, + { + entity: "LeftAngleBracket;", + value: "U+027E8" + }, + { + entity: "LeftArrow;", + value: "U+02190" + }, + { + entity: "LeftArrowBar;", + value: "U+021E4" + }, + { + entity: "LeftArrowRightArrow;", + value: "U+021C6" + }, + { + entity: "LeftCeiling;", + value: "U+02308" + }, + { + entity: "LeftDoubleBracket;", + value: "U+027E6" + }, + { + entity: "LeftDownTeeVector;", + value: "U+02961" + }, + { + entity: "LeftDownVector;", + value: "U+021C3" + }, + { + entity: "LeftDownVectorBar;", + value: "U+02959" + }, + { + entity: "LeftFloor;", + value: "U+0230A" + }, + { + entity: "LeftRightArrow;", + value: "U+02194" + }, + { + entity: "LeftRightVector;", + value: "U+0294E" + }, + { + entity: "LeftTee;", + value: "U+022A3" + }, + { + entity: "LeftTeeArrow;", + value: "U+021A4" + }, + { + entity: "LeftTeeVector;", + value: "U+0295A" + }, + { + entity: "LeftTriangle;", + value: "U+022B2" + }, + { + entity: "LeftTriangleBar;", + value: "U+029CF" + }, + { + entity: "LeftTriangleEqual;", + value: "U+022B4" + }, + { + entity: "LeftUpDownVector;", + value: "U+02951" + }, + { + entity: "LeftUpTeeVector;", + value: "U+02960" + }, + { + entity: "LeftUpVector;", + value: "U+021BF" + }, + { + entity: "LeftUpVectorBar;", + value: "U+02958" + }, + { + entity: "LeftVector;", + value: "U+021BC" + }, + { + entity: "LeftVectorBar;", + value: "U+02952" + }, + { + entity: "Leftarrow;", + value: "U+021D0" + }, + { + entity: "Leftrightarrow;", + value: "U+021D4" + }, + { + entity: "LessEqualGreater;", + value: "U+022DA" + }, + { + entity: "LessFullEqual;", + value: "U+02266" + }, + { + entity: "LessGreater;", + value: "U+02276" + }, + { + entity: "LessLess;", + value: "U+02AA1" + }, + { + entity: "LessSlantEqual;", + value: "U+02A7D" + }, + { + entity: "LessTilde;", + value: "U+02272" + }, + { + entity: "Lfr;", + value: "U+1D50F" + }, + { + entity: "Ll;", + value: "U+022D8" + }, + { + entity: "Lleftarrow;", + value: "U+021DA" + }, + { + entity: "Lmidot;", + value: "U+0013F" + }, + { + entity: "LongLeftArrow;", + value: "U+027F5" + }, + { + entity: "LongLeftRightArrow;", + value: "U+027F7" + }, + { + entity: "LongRightArrow;", + value: "U+027F6" + }, + { + entity: "Longleftarrow;", + value: "U+027F8" + }, + { + entity: "Longleftrightarrow;", + value: "U+027FA" + }, + { + entity: "Longrightarrow;", + value: "U+027F9" + }, + { + entity: "Lopf;", + value: "U+1D543" + }, + { + entity: "LowerLeftArrow;", + value: "U+02199" + }, + { + entity: "LowerRightArrow;", + value: "U+02198" + }, + { + entity: "Lscr;", + value: "U+02112" + }, + { + entity: "Lsh;", + value: "U+021B0" + }, + { + entity: "Lstrok;", + value: "U+00141" + }, + { + entity: "Lt;", + value: "U+0226A" + }, + { + entity: "Map;", + value: "U+02905" + }, + { + entity: "Mcy;", + value: "U+0041C" + }, + { + entity: "MediumSpace;", + value: "U+0205F" + }, + { + entity: "Mellintrf;", + value: "U+02133" + }, + { + entity: "Mfr;", + value: "U+1D510" + }, + { + entity: "MinusPlus;", + value: "U+02213" + }, + { + entity: "Mopf;", + value: "U+1D544" + }, + { + entity: "Mscr;", + value: "U+02133" + }, + { + entity: "Mu;", + value: "U+0039C" + }, + { + entity: "NJcy;", + value: "U+0040A" + }, + { + entity: "Nacute;", + value: "U+00143" + }, + { + entity: "Ncaron;", + value: "U+00147" + }, + { + entity: "Ncedil;", + value: "U+00145" + }, + { + entity: "Ncy;", + value: "U+0041D" + }, + { + entity: "NegativeMediumSpace;", + value: "U+0200B" + }, + { + entity: "NegativeThickSpace;", + value: "U+0200B" + }, + { + entity: "NegativeThinSpace;", + value: "U+0200B" + }, + { + entity: "NegativeVeryThinSpace;", + value: "U+0200B" + }, + { + entity: "NestedGreaterGreater;", + value: "U+0226B" + }, + { + entity: "NestedLessLess;", + value: "U+0226A" + }, + { + entity: "NewLine;", + value: "U+0000A" + }, + { + entity: "Nfr;", + value: "U+1D511" + }, + { + entity: "NoBreak;", + value: "U+02060" + }, + { + entity: "NonBreakingSpace;", + value: "U+000A0" + }, + { + entity: "Nopf;", + value: "U+02115" + }, + { + entity: "Not;", + value: "U+02AEC" + }, + { + entity: "NotCongruent;", + value: "U+02262" + }, + { + entity: "NotCupCap;", + value: "U+0226D" + }, + { + entity: "NotDoubleVerticalBar;", + value: "U+02226" + }, + { + entity: "NotElement;", + value: "U+02209" + }, + { + entity: "NotEqual;", + value: "U+02260" + }, + { + entity: "NotExists;", + value: "U+02204" + }, + { + entity: "NotGreater;", + value: "U+0226F" + }, + { + entity: "NotGreaterEqual;", + value: "U+02271" + }, + { + entity: "NotGreaterLess;", + value: "U+02279" + }, + { + entity: "NotGreaterTilde;", + value: "U+02275" + }, + { + entity: "NotLeftTriangle;", + value: "U+022EA" + }, + { + entity: "NotLeftTriangleEqual;", + value: "U+022EC" + }, + { + entity: "NotLess;", + value: "U+0226E" + }, + { + entity: "NotLessEqual;", + value: "U+02270" + }, + { + entity: "NotLessGreater;", + value: "U+02278" + }, + { + entity: "NotLessTilde;", + value: "U+02274" + }, + { + entity: "NotPrecedes;", + value: "U+02280" + }, + { + entity: "NotPrecedesSlantEqual;", + value: "U+022E0" + }, + { + entity: "NotReverseElement;", + value: "U+0220C" + }, + { + entity: "NotRightTriangle;", + value: "U+022EB" + }, + { + entity: "NotRightTriangleEqual;", + value: "U+022ED" + }, + { + entity: "NotSquareSubsetEqual;", + value: "U+022E2" + }, + { + entity: "NotSquareSupersetEqual;", + value: "U+022E3" + }, + { + entity: "NotSubsetEqual;", + value: "U+02288" + }, + { + entity: "NotSucceeds;", + value: "U+02281" + }, + { + entity: "NotSucceedsSlantEqual;", + value: "U+022E1" + }, + { + entity: "NotSupersetEqual;", + value: "U+02289" + }, + { + entity: "NotTilde;", + value: "U+02241" + }, + { + entity: "NotTildeEqual;", + value: "U+02244" + }, + { + entity: "NotTildeFullEqual;", + value: "U+02247" + }, + { + entity: "NotTildeTilde;", + value: "U+02249" + }, + { + entity: "NotVerticalBar;", + value: "U+02224" + }, + { + entity: "Nscr;", + value: "U+1D4A9" + }, + { + entity: "Ntilde;", + value: "U+000D1" + }, + { + entity: "Ntilde", + value: "U+000D1" + }, + { + entity: "Nu;", + value: "U+0039D" + }, + { + entity: "OElig;", + value: "U+00152" + }, + { + entity: "Oacute;", + value: "U+000D3" + }, + { + entity: "Oacute", + value: "U+000D3" + }, + { + entity: "Ocirc;", + value: "U+000D4" + }, + { + entity: "Ocirc", + value: "U+000D4" + }, + { + entity: "Ocy;", + value: "U+0041E" + }, + { + entity: "Odblac;", + value: "U+00150" + }, + { + entity: "Ofr;", + value: "U+1D512" + }, + { + entity: "Ograve;", + value: "U+000D2" + }, + { + entity: "Ograve", + value: "U+000D2" + }, + { + entity: "Omacr;", + value: "U+0014C" + }, + { + entity: "Omega;", + value: "U+003A9" + }, + { + entity: "Omicron;", + value: "U+0039F" + }, + { + entity: "Oopf;", + value: "U+1D546" + }, + { + entity: "OpenCurlyDoubleQuote;", + value: "U+0201C" + }, + { + entity: "OpenCurlyQuote;", + value: "U+02018" + }, + { + entity: "Or;", + value: "U+02A54" + }, + { + entity: "Oscr;", + value: "U+1D4AA" + }, + { + entity: "Oslash;", + value: "U+000D8" + }, + { + entity: "Oslash", + value: "U+000D8" + }, + { + entity: "Otilde;", + value: "U+000D5" + }, + { + entity: "Otilde", + value: "U+000D5" + }, + { + entity: "Otimes;", + value: "U+02A37" + }, + { + entity: "Ouml;", + value: "U+000D6" + }, + { + entity: "Ouml", + value: "U+000D6" + }, + { + entity: "OverBar;", + value: "U+0203E" + }, + { + entity: "OverBrace;", + value: "U+023DE" + }, + { + entity: "OverBracket;", + value: "U+023B4" + }, + { + entity: "OverParenthesis;", + value: "U+023DC" + }, + { + entity: "PartialD;", + value: "U+02202" + }, + { + entity: "Pcy;", + value: "U+0041F" + }, + { + entity: "Pfr;", + value: "U+1D513" + }, + { + entity: "Phi;", + value: "U+003A6" + }, + { + entity: "Pi;", + value: "U+003A0" + }, + { + entity: "PlusMinus;", + value: "U+000B1" + }, + { + entity: "Poincareplane;", + value: "U+0210C" + }, + { + entity: "Popf;", + value: "U+02119" + }, + { + entity: "Pr;", + value: "U+02ABB" + }, + { + entity: "Precedes;", + value: "U+0227A" + }, + { + entity: "PrecedesEqual;", + value: "U+02AAF" + }, + { + entity: "PrecedesSlantEqual;", + value: "U+0227C" + }, + { + entity: "PrecedesTilde;", + value: "U+0227E" + }, + { + entity: "Prime;", + value: "U+02033" + }, + { + entity: "Product;", + value: "U+0220F" + }, + { + entity: "Proportion;", + value: "U+02237" + }, + { + entity: "Proportional;", + value: "U+0221D" + }, + { + entity: "Pscr;", + value: "U+1D4AB" + }, + { + entity: "Psi;", + value: "U+003A8" + }, + { + entity: "QUOT;", + value: "U+00022" + }, + { + entity: "QUOT", + value: "U+00022" + }, + { + entity: "Qfr;", + value: "U+1D514" + }, + { + entity: "Qopf;", + value: "U+0211A" + }, + { + entity: "Qscr;", + value: "U+1D4AC" + }, + { + entity: "RBarr;", + value: "U+02910" + }, + { + entity: "REG;", + value: "U+000AE" + }, + { + entity: "REG", + value: "U+000AE" + }, + { + entity: "Racute;", + value: "U+00154" + }, + { + entity: "Rang;", + value: "U+027EB" + }, + { + entity: "Rarr;", + value: "U+021A0" + }, + { + entity: "Rarrtl;", + value: "U+02916" + }, + { + entity: "Rcaron;", + value: "U+00158" + }, + { + entity: "Rcedil;", + value: "U+00156" + }, + { + entity: "Rcy;", + value: "U+00420" + }, + { + entity: "Re;", + value: "U+0211C" + }, + { + entity: "ReverseElement;", + value: "U+0220B" + }, + { + entity: "ReverseEquilibrium;", + value: "U+021CB" + }, + { + entity: "ReverseUpEquilibrium;", + value: "U+0296F" + }, + { + entity: "Rfr;", + value: "U+0211C" + }, + { + entity: "Rho;", + value: "U+003A1" + }, + { + entity: "RightAngleBracket;", + value: "U+027E9" + }, + { + entity: "RightArrow;", + value: "U+02192" + }, + { + entity: "RightArrowBar;", + value: "U+021E5" + }, + { + entity: "RightArrowLeftArrow;", + value: "U+021C4" + }, + { + entity: "RightCeiling;", + value: "U+02309" + }, + { + entity: "RightDoubleBracket;", + value: "U+027E7" + }, + { + entity: "RightDownTeeVector;", + value: "U+0295D" + }, + { + entity: "RightDownVector;", + value: "U+021C2" + }, + { + entity: "RightDownVectorBar;", + value: "U+02955" + }, + { + entity: "RightFloor;", + value: "U+0230B" + }, + { + entity: "RightTee;", + value: "U+022A2" + }, + { + entity: "RightTeeArrow;", + value: "U+021A6" + }, + { + entity: "RightTeeVector;", + value: "U+0295B" + }, + { + entity: "RightTriangle;", + value: "U+022B3" + }, + { + entity: "RightTriangleBar;", + value: "U+029D0" + }, + { + entity: "RightTriangleEqual;", + value: "U+022B5" + }, + { + entity: "RightUpDownVector;", + value: "U+0294F" + }, + { + entity: "RightUpTeeVector;", + value: "U+0295C" + }, + { + entity: "RightUpVector;", + value: "U+021BE" + }, + { + entity: "RightUpVectorBar;", + value: "U+02954" + }, + { + entity: "RightVector;", + value: "U+021C0" + }, + { + entity: "RightVectorBar;", + value: "U+02953" + }, + { + entity: "Rightarrow;", + value: "U+021D2" + }, + { + entity: "Ropf;", + value: "U+0211D" + }, + { + entity: "RoundImplies;", + value: "U+02970" + }, + { + entity: "Rrightarrow;", + value: "U+021DB" + }, + { + entity: "Rscr;", + value: "U+0211B" + }, + { + entity: "Rsh;", + value: "U+021B1" + }, + { + entity: "RuleDelayed;", + value: "U+029F4" + }, + { + entity: "SHCHcy;", + value: "U+00429" + }, + { + entity: "SHcy;", + value: "U+00428" + }, + { + entity: "SOFTcy;", + value: "U+0042C" + }, + { + entity: "Sacute;", + value: "U+0015A" + }, + { + entity: "Sc;", + value: "U+02ABC" + }, + { + entity: "Scaron;", + value: "U+00160" + }, + { + entity: "Scedil;", + value: "U+0015E" + }, + { + entity: "Scirc;", + value: "U+0015C" + }, + { + entity: "Scy;", + value: "U+00421" + }, + { + entity: "Sfr;", + value: "U+1D516" + }, + { + entity: "ShortDownArrow;", + value: "U+02193" + }, + { + entity: "ShortLeftArrow;", + value: "U+02190" + }, + { + entity: "ShortRightArrow;", + value: "U+02192" + }, + { + entity: "ShortUpArrow;", + value: "U+02191" + }, + { + entity: "Sigma;", + value: "U+003A3" + }, + { + entity: "SmallCircle;", + value: "U+02218" + }, + { + entity: "Sopf;", + value: "U+1D54A" + }, + { + entity: "Sqrt;", + value: "U+0221A" + }, + { + entity: "Square;", + value: "U+025A1" + }, + { + entity: "SquareIntersection;", + value: "U+02293" + }, + { + entity: "SquareSubset;", + value: "U+0228F" + }, + { + entity: "SquareSubsetEqual;", + value: "U+02291" + }, + { + entity: "SquareSuperset;", + value: "U+02290" + }, + { + entity: "SquareSupersetEqual;", + value: "U+02292" + }, + { + entity: "SquareUnion;", + value: "U+02294" + }, + { + entity: "Sscr;", + value: "U+1D4AE" + }, + { + entity: "Star;", + value: "U+022C6" + }, + { + entity: "Sub;", + value: "U+022D0" + }, + { + entity: "Subset;", + value: "U+022D0" + }, + { + entity: "SubsetEqual;", + value: "U+02286" + }, + { + entity: "Succeeds;", + value: "U+0227B" + }, + { + entity: "SucceedsEqual;", + value: "U+02AB0" + }, + { + entity: "SucceedsSlantEqual;", + value: "U+0227D" + }, + { + entity: "SucceedsTilde;", + value: "U+0227F" + }, + { + entity: "SuchThat;", + value: "U+0220B" + }, + { + entity: "Sum;", + value: "U+02211" + }, + { + entity: "Sup;", + value: "U+022D1" + }, + { + entity: "Superset;", + value: "U+02283" + }, + { + entity: "SupersetEqual;", + value: "U+02287" + }, + { + entity: "Supset;", + value: "U+022D1" + }, + { + entity: "THORN;", + value: "U+000DE" + }, + { + entity: "THORN", + value: "U+000DE" + }, + { + entity: "TRADE;", + value: "U+02122" + }, + { + entity: "TSHcy;", + value: "U+0040B" + }, + { + entity: "TScy;", + value: "U+00426" + }, + { + entity: "Tab;", + value: "U+00009" + }, + { + entity: "Tau;", + value: "U+003A4" + }, + { + entity: "Tcaron;", + value: "U+00164" + }, + { + entity: "Tcedil;", + value: "U+00162" + }, + { + entity: "Tcy;", + value: "U+00422" + }, + { + entity: "Tfr;", + value: "U+1D517" + }, + { + entity: "Therefore;", + value: "U+02234" + }, + { + entity: "Theta;", + value: "U+00398" + }, + { + entity: "ThinSpace;", + value: "U+02009" + }, + { + entity: "Tilde;", + value: "U+0223C" + }, + { + entity: "TildeEqual;", + value: "U+02243" + }, + { + entity: "TildeFullEqual;", + value: "U+02245" + }, + { + entity: "TildeTilde;", + value: "U+02248" + }, + { + entity: "Topf;", + value: "U+1D54B" + }, + { + entity: "TripleDot;", + value: "U+020DB" + }, + { + entity: "Tscr;", + value: "U+1D4AF" + }, + { + entity: "Tstrok;", + value: "U+00166" + }, + { + entity: "Uacute;", + value: "U+000DA" + }, + { + entity: "Uacute", + value: "U+000DA" + }, + { + entity: "Uarr;", + value: "U+0219F" + }, + { + entity: "Uarrocir;", + value: "U+02949" + }, + { + entity: "Ubrcy;", + value: "U+0040E" + }, + { + entity: "Ubreve;", + value: "U+0016C" + }, + { + entity: "Ucirc;", + value: "U+000DB" + }, + { + entity: "Ucirc", + value: "U+000DB" + }, + { + entity: "Ucy;", + value: "U+00423" + }, + { + entity: "Udblac;", + value: "U+00170" + }, + { + entity: "Ufr;", + value: "U+1D518" + }, + { + entity: "Ugrave;", + value: "U+000D9" + }, + { + entity: "Ugrave", + value: "U+000D9" + }, + { + entity: "Umacr;", + value: "U+0016A" + }, + { + entity: "UnderBar;", + value: "U+0005F" + }, + { + entity: "UnderBrace;", + value: "U+023DF" + }, + { + entity: "UnderBracket;", + value: "U+023B5" + }, + { + entity: "UnderParenthesis;", + value: "U+023DD" + }, + { + entity: "Union;", + value: "U+022C3" + }, + { + entity: "UnionPlus;", + value: "U+0228E" + }, + { + entity: "Uogon;", + value: "U+00172" + }, + { + entity: "Uopf;", + value: "U+1D54C" + }, + { + entity: "UpArrow;", + value: "U+02191" + }, + { + entity: "UpArrowBar;", + value: "U+02912" + }, + { + entity: "UpArrowDownArrow;", + value: "U+021C5" + }, + { + entity: "UpDownArrow;", + value: "U+02195" + }, + { + entity: "UpEquilibrium;", + value: "U+0296E" + }, + { + entity: "UpTee;", + value: "U+022A5" + }, + { + entity: "UpTeeArrow;", + value: "U+021A5" + }, + { + entity: "Uparrow;", + value: "U+021D1" + }, + { + entity: "Updownarrow;", + value: "U+021D5" + }, + { + entity: "UpperLeftArrow;", + value: "U+02196" + }, + { + entity: "UpperRightArrow;", + value: "U+02197" + }, + { + entity: "Upsi;", + value: "U+003D2" + }, + { + entity: "Upsilon;", + value: "U+003A5" + }, + { + entity: "Uring;", + value: "U+0016E" + }, + { + entity: "Uscr;", + value: "U+1D4B0" + }, + { + entity: "Utilde;", + value: "U+00168" + }, + { + entity: "Uuml;", + value: "U+000DC" + }, + { + entity: "Uuml", + value: "U+000DC" + }, + { + entity: "VDash;", + value: "U+022AB" + }, + { + entity: "Vbar;", + value: "U+02AEB" + }, + { + entity: "Vcy;", + value: "U+00412" + }, + { + entity: "Vdash;", + value: "U+022A9" + }, + { + entity: "Vdashl;", + value: "U+02AE6" + }, + { + entity: "Vee;", + value: "U+022C1" + }, + { + entity: "Verbar;", + value: "U+02016" + }, + { + entity: "Vert;", + value: "U+02016" + }, + { + entity: "VerticalBar;", + value: "U+02223" + }, + { + entity: "VerticalLine;", + value: "U+0007C" + }, + { + entity: "VerticalSeparator;", + value: "U+02758" + }, + { + entity: "VerticalTilde;", + value: "U+02240" + }, + { + entity: "VeryThinSpace;", + value: "U+0200A" + }, + { + entity: "Vfr;", + value: "U+1D519" + }, + { + entity: "Vopf;", + value: "U+1D54D" + }, + { + entity: "Vscr;", + value: "U+1D4B1" + }, + { + entity: "Vvdash;", + value: "U+022AA" + }, + { + entity: "Wcirc;", + value: "U+00174" + }, + { + entity: "Wedge;", + value: "U+022C0" + }, + { + entity: "Wfr;", + value: "U+1D51A" + }, + { + entity: "Wopf;", + value: "U+1D54E" + }, + { + entity: "Wscr;", + value: "U+1D4B2" + }, + { + entity: "Xfr;", + value: "U+1D51B" + }, + { + entity: "Xi;", + value: "U+0039E" + }, + { + entity: "Xopf;", + value: "U+1D54F" + }, + { + entity: "Xscr;", + value: "U+1D4B3" + }, + { + entity: "YAcy;", + value: "U+0042F" + }, + { + entity: "YIcy;", + value: "U+00407" + }, + { + entity: "YUcy;", + value: "U+0042E" + }, + { + entity: "Yacute;", + value: "U+000DD" + }, + { + entity: "Yacute", + value: "U+000DD" + }, + { + entity: "Ycirc;", + value: "U+00176" + }, + { + entity: "Ycy;", + value: "U+0042B" + }, + { + entity: "Yfr;", + value: "U+1D51C" + }, + { + entity: "Yopf;", + value: "U+1D550" + }, + { + entity: "Yscr;", + value: "U+1D4B4" + }, + { + entity: "Yuml;", + value: "U+00178" + }, + { + entity: "ZHcy;", + value: "U+00416" + }, + { + entity: "Zacute;", + value: "U+00179" + }, + { + entity: "Zcaron;", + value: "U+0017D" + }, + { + entity: "Zcy;", + value: "U+00417" + }, + { + entity: "Zdot;", + value: "U+0017B" + }, + { + entity: "ZeroWidthSpace;", + value: "U+0200B" + }, + { + entity: "Zeta;", + value: "U+00396" + }, + { + entity: "Zfr;", + value: "U+02128" + }, + { + entity: "Zopf;", + value: "U+02124" + }, + { + entity: "Zscr;", + value: "U+1D4B5" + }, + { + entity: "aacute;", + value: "U+000E1" + }, + { + entity: "aacute", + value: "U+000E1" + }, + { + entity: "abreve;", + value: "U+00103" + }, + { + entity: "ac;", + value: "U+0223E" + }, + { + entity: "acd;", + value: "U+0223F" + }, + { + entity: "acirc;", + value: "U+000E2" + }, + { + entity: "acirc", + value: "U+000E2" + }, + { + entity: "acute;", + value: "U+000B4" + }, + { + entity: "acute", + value: "U+000B4" + }, + { + entity: "acy;", + value: "U+00430" + }, + { + entity: "aelig;", + value: "U+000E6" + }, + { + entity: "aelig", + value: "U+000E6" + }, + { + entity: "af;", + value: "U+02061" + }, + { + entity: "afr;", + value: "U+1D51E" + }, + { + entity: "agrave;", + value: "U+000E0" + }, + { + entity: "agrave", + value: "U+000E0" + }, + { + entity: "alefsym;", + value: "U+02135" + }, + { + entity: "aleph;", + value: "U+02135" + }, + { + entity: "alpha;", + value: "U+003B1" + }, + { + entity: "amacr;", + value: "U+00101" + }, + { + entity: "amalg;", + value: "U+02A3F" + }, + { + entity: "amp;", + value: "U+00026" + }, + { + entity: "amp", + value: "U+00026" + }, + { + entity: "and;", + value: "U+02227" + }, + { + entity: "andand;", + value: "U+02A55" + }, + { + entity: "andd;", + value: "U+02A5C" + }, + { + entity: "andslope;", + value: "U+02A58" + }, + { + entity: "andv;", + value: "U+02A5A" + }, + { + entity: "ang;", + value: "U+02220" + }, + { + entity: "ange;", + value: "U+029A4" + }, + { + entity: "angle;", + value: "U+02220" + }, + { + entity: "angmsd;", + value: "U+02221" + }, + { + entity: "angmsdaa;", + value: "U+029A8" + }, + { + entity: "angmsdab;", + value: "U+029A9" + }, + { + entity: "angmsdac;", + value: "U+029AA" + }, + { + entity: "angmsdad;", + value: "U+029AB" + }, + { + entity: "angmsdae;", + value: "U+029AC" + }, + { + entity: "angmsdaf;", + value: "U+029AD" + }, + { + entity: "angmsdag;", + value: "U+029AE" + }, + { + entity: "angmsdah;", + value: "U+029AF" + }, + { + entity: "angrt;", + value: "U+0221F" + }, + { + entity: "angrtvb;", + value: "U+022BE" + }, + { + entity: "angrtvbd;", + value: "U+0299D" + }, + { + entity: "angsph;", + value: "U+02222" + }, + { + entity: "angst;", + value: "U+000C5" + }, + { + entity: "angzarr;", + value: "U+0237C" + }, + { + entity: "aogon;", + value: "U+00105" + }, + { + entity: "aopf;", + value: "U+1D552" + }, + { + entity: "ap;", + value: "U+02248" + }, + { + entity: "apE;", + value: "U+02A70" + }, + { + entity: "apacir;", + value: "U+02A6F" + }, + { + entity: "ape;", + value: "U+0224A" + }, + { + entity: "apid;", + value: "U+0224B" + }, + { + entity: "apos;", + value: "U+00027" + }, + { + entity: "approx;", + value: "U+02248" + }, + { + entity: "approxeq;", + value: "U+0224A" + }, + { + entity: "aring;", + value: "U+000E5" + }, + { + entity: "aring", + value: "U+000E5" + }, + { + entity: "ascr;", + value: "U+1D4B6" + }, + { + entity: "ast;", + value: "U+0002A" + }, + { + entity: "asymp;", + value: "U+02248" + }, + { + entity: "asympeq;", + value: "U+0224D" + }, + { + entity: "atilde;", + value: "U+000E3" + }, + { + entity: "atilde", + value: "U+000E3" + }, + { + entity: "auml;", + value: "U+000E4" + }, + { + entity: "auml", + value: "U+000E4" + }, + { + entity: "awconint;", + value: "U+02233" + }, + { + entity: "awint;", + value: "U+02A11" + }, + { + entity: "bNot;", + value: "U+02AED" + }, + { + entity: "backcong;", + value: "U+0224C" + }, + { + entity: "backepsilon;", + value: "U+003F6" + }, + { + entity: "backprime;", + value: "U+02035" + }, + { + entity: "backsim;", + value: "U+0223D" + }, + { + entity: "backsimeq;", + value: "U+022CD" + }, + { + entity: "barvee;", + value: "U+022BD" + }, + { + entity: "barwed;", + value: "U+02305" + }, + { + entity: "barwedge;", + value: "U+02305" + }, + { + entity: "bbrk;", + value: "U+023B5" + }, + { + entity: "bbrktbrk;", + value: "U+023B6" + }, + { + entity: "bcong;", + value: "U+0224C" + }, + { + entity: "bcy;", + value: "U+00431" + }, + { + entity: "bdquo;", + value: "U+0201E" + }, + { + entity: "becaus;", + value: "U+02235" + }, + { + entity: "because;", + value: "U+02235" + }, + { + entity: "bemptyv;", + value: "U+029B0" + }, + { + entity: "bepsi;", + value: "U+003F6" + }, + { + entity: "bernou;", + value: "U+0212C" + }, + { + entity: "beta;", + value: "U+003B2" + }, + { + entity: "beth;", + value: "U+02136" + }, + { + entity: "between;", + value: "U+0226C" + }, + { + entity: "bfr;", + value: "U+1D51F" + }, + { + entity: "bigcap;", + value: "U+022C2" + }, + { + entity: "bigcirc;", + value: "U+025EF" + }, + { + entity: "bigcup;", + value: "U+022C3" + }, + { + entity: "bigodot;", + value: "U+02A00" + }, + { + entity: "bigoplus;", + value: "U+02A01" + }, + { + entity: "bigotimes;", + value: "U+02A02" + }, + { + entity: "bigsqcup;", + value: "U+02A06" + }, + { + entity: "bigstar;", + value: "U+02605" + }, + { + entity: "bigtriangledown;", + value: "U+025BD" + }, + { + entity: "bigtriangleup;", + value: "U+025B3" + }, + { + entity: "biguplus;", + value: "U+02A04" + }, + { + entity: "bigvee;", + value: "U+022C1" + }, + { + entity: "bigwedge;", + value: "U+022C0" + }, + { + entity: "bkarow;", + value: "U+0290D" + }, + { + entity: "blacklozenge;", + value: "U+029EB" + }, + { + entity: "blacksquare;", + value: "U+025AA" + }, + { + entity: "blacktriangle;", + value: "U+025B4" + }, + { + entity: "blacktriangledown;", + value: "U+025BE" + }, + { + entity: "blacktriangleleft;", + value: "U+025C2" + }, + { + entity: "blacktriangleright;", + value: "U+025B8" + }, + { + entity: "blank;", + value: "U+02423" + }, + { + entity: "blk12;", + value: "U+02592" + }, + { + entity: "blk14;", + value: "U+02591" + }, + { + entity: "blk34;", + value: "U+02593" + }, + { + entity: "block;", + value: "U+02588" + }, + { + entity: "bnot;", + value: "U+02310" + }, + { + entity: "bopf;", + value: "U+1D553" + }, + { + entity: "bot;", + value: "U+022A5" + }, + { + entity: "bottom;", + value: "U+022A5" + }, + { + entity: "bowtie;", + value: "U+022C8" + }, + { + entity: "boxDL;", + value: "U+02557" + }, + { + entity: "boxDR;", + value: "U+02554" + }, + { + entity: "boxDl;", + value: "U+02556" + }, + { + entity: "boxDr;", + value: "U+02553" + }, + { + entity: "boxH;", + value: "U+02550" + }, + { + entity: "boxHD;", + value: "U+02566" + }, + { + entity: "boxHU;", + value: "U+02569" + }, + { + entity: "boxHd;", + value: "U+02564" + }, + { + entity: "boxHu;", + value: "U+02567" + }, + { + entity: "boxUL;", + value: "U+0255D" + }, + { + entity: "boxUR;", + value: "U+0255A" + }, + { + entity: "boxUl;", + value: "U+0255C" + }, + { + entity: "boxUr;", + value: "U+02559" + }, + { + entity: "boxV;", + value: "U+02551" + }, + { + entity: "boxVH;", + value: "U+0256C" + }, + { + entity: "boxVL;", + value: "U+02563" + }, + { + entity: "boxVR;", + value: "U+02560" + }, + { + entity: "boxVh;", + value: "U+0256B" + }, + { + entity: "boxVl;", + value: "U+02562" + }, + { + entity: "boxVr;", + value: "U+0255F" + }, + { + entity: "boxbox;", + value: "U+029C9" + }, + { + entity: "boxdL;", + value: "U+02555" + }, + { + entity: "boxdR;", + value: "U+02552" + }, + { + entity: "boxdl;", + value: "U+02510" + }, + { + entity: "boxdr;", + value: "U+0250C" + }, + { + entity: "boxh;", + value: "U+02500" + }, + { + entity: "boxhD;", + value: "U+02565" + }, + { + entity: "boxhU;", + value: "U+02568" + }, + { + entity: "boxhd;", + value: "U+0252C" + }, + { + entity: "boxhu;", + value: "U+02534" + }, + { + entity: "boxminus;", + value: "U+0229F" + }, + { + entity: "boxplus;", + value: "U+0229E" + }, + { + entity: "boxtimes;", + value: "U+022A0" + }, + { + entity: "boxuL;", + value: "U+0255B" + }, + { + entity: "boxuR;", + value: "U+02558" + }, + { + entity: "boxul;", + value: "U+02518" + }, + { + entity: "boxur;", + value: "U+02514" + }, + { + entity: "boxv;", + value: "U+02502" + }, + { + entity: "boxvH;", + value: "U+0256A" + }, + { + entity: "boxvL;", + value: "U+02561" + }, + { + entity: "boxvR;", + value: "U+0255E" + }, + { + entity: "boxvh;", + value: "U+0253C" + }, + { + entity: "boxvl;", + value: "U+02524" + }, + { + entity: "boxvr;", + value: "U+0251C" + }, + { + entity: "bprime;", + value: "U+02035" + }, + { + entity: "breve;", + value: "U+002D8" + }, + { + entity: "brvbar;", + value: "U+000A6" + }, + { + entity: "brvbar", + value: "U+000A6" + }, + { + entity: "bscr;", + value: "U+1D4B7" + }, + { + entity: "bsemi;", + value: "U+0204F" + }, + { + entity: "bsim;", + value: "U+0223D" + }, + { + entity: "bsime;", + value: "U+022CD" + }, + { + entity: "bsol;", + value: "U+0005C" + }, + { + entity: "bsolb;", + value: "U+029C5" + }, + { + entity: "bsolhsub;", + value: "U+027C8" + }, + { + entity: "bull;", + value: "U+02022" + }, + { + entity: "bullet;", + value: "U+02022" + }, + { + entity: "bump;", + value: "U+0224E" + }, + { + entity: "bumpE;", + value: "U+02AAE" + }, + { + entity: "bumpe;", + value: "U+0224F" + }, + { + entity: "bumpeq;", + value: "U+0224F" + }, + { + entity: "cacute;", + value: "U+00107" + }, + { + entity: "cap;", + value: "U+02229" + }, + { + entity: "capand;", + value: "U+02A44" + }, + { + entity: "capbrcup;", + value: "U+02A49" + }, + { + entity: "capcap;", + value: "U+02A4B" + }, + { + entity: "capcup;", + value: "U+02A47" + }, + { + entity: "capdot;", + value: "U+02A40" + }, + { + entity: "caret;", + value: "U+02041" + }, + { + entity: "caron;", + value: "U+002C7" + }, + { + entity: "ccaps;", + value: "U+02A4D" + }, + { + entity: "ccaron;", + value: "U+0010D" + }, + { + entity: "ccedil;", + value: "U+000E7" + }, + { + entity: "ccedil", + value: "U+000E7" + }, + { + entity: "ccirc;", + value: "U+00109" + }, + { + entity: "ccups;", + value: "U+02A4C" + }, + { + entity: "ccupssm;", + value: "U+02A50" + }, + { + entity: "cdot;", + value: "U+0010B" + }, + { + entity: "cedil;", + value: "U+000B8" + }, + { + entity: "cedil", + value: "U+000B8" + }, + { + entity: "cemptyv;", + value: "U+029B2" + }, + { + entity: "cent;", + value: "U+000A2" + }, + { + entity: "cent", + value: "U+000A2" + }, + { + entity: "centerdot;", + value: "U+000B7" + }, + { + entity: "cfr;", + value: "U+1D520" + }, + { + entity: "chcy;", + value: "U+00447" + }, + { + entity: "check;", + value: "U+02713" + }, + { + entity: "checkmark;", + value: "U+02713" + }, + { + entity: "chi;", + value: "U+003C7" + }, + { + entity: "cir;", + value: "U+025CB" + }, + { + entity: "cirE;", + value: "U+029C3" + }, + { + entity: "circ;", + value: "U+002C6" + }, + { + entity: "circeq;", + value: "U+02257" + }, + { + entity: "circlearrowleft;", + value: "U+021BA" + }, + { + entity: "circlearrowright;", + value: "U+021BB" + }, + { + entity: "circledR;", + value: "U+000AE" + }, + { + entity: "circledS;", + value: "U+024C8" + }, + { + entity: "circledast;", + value: "U+0229B" + }, + { + entity: "circledcirc;", + value: "U+0229A" + }, + { + entity: "circleddash;", + value: "U+0229D" + }, + { + entity: "cire;", + value: "U+02257" + }, + { + entity: "cirfnint;", + value: "U+02A10" + }, + { + entity: "cirmid;", + value: "U+02AEF" + }, + { + entity: "cirscir;", + value: "U+029C2" + }, + { + entity: "clubs;", + value: "U+02663" + }, + { + entity: "clubsuit;", + value: "U+02663" + }, + { + entity: "colon;", + value: "U+0003A" + }, + { + entity: "colone;", + value: "U+02254" + }, + { + entity: "coloneq;", + value: "U+02254" + }, + { + entity: "comma;", + value: "U+0002C" + }, + { + entity: "commat;", + value: "U+00040" + }, + { + entity: "comp;", + value: "U+02201" + }, + { + entity: "compfn;", + value: "U+02218" + }, + { + entity: "complement;", + value: "U+02201" + }, + { + entity: "complexes;", + value: "U+02102" + }, + { + entity: "cong;", + value: "U+02245" + }, + { + entity: "congdot;", + value: "U+02A6D" + }, + { + entity: "conint;", + value: "U+0222E" + }, + { + entity: "copf;", + value: "U+1D554" + }, + { + entity: "coprod;", + value: "U+02210" + }, + { + entity: "copy;", + value: "U+000A9" + }, + { + entity: "copy", + value: "U+000A9" + }, + { + entity: "copysr;", + value: "U+02117" + }, + { + entity: "crarr;", + value: "U+021B5" + }, + { + entity: "cross;", + value: "U+02717" + }, + { + entity: "cscr;", + value: "U+1D4B8" + }, + { + entity: "csub;", + value: "U+02ACF" + }, + { + entity: "csube;", + value: "U+02AD1" + }, + { + entity: "csup;", + value: "U+02AD0" + }, + { + entity: "csupe;", + value: "U+02AD2" + }, + { + entity: "ctdot;", + value: "U+022EF" + }, + { + entity: "cudarrl;", + value: "U+02938" + }, + { + entity: "cudarrr;", + value: "U+02935" + }, + { + entity: "cuepr;", + value: "U+022DE" + }, + { + entity: "cuesc;", + value: "U+022DF" + }, + { + entity: "cularr;", + value: "U+021B6" + }, + { + entity: "cularrp;", + value: "U+0293D" + }, + { + entity: "cup;", + value: "U+0222A" + }, + { + entity: "cupbrcap;", + value: "U+02A48" + }, + { + entity: "cupcap;", + value: "U+02A46" + }, + { + entity: "cupcup;", + value: "U+02A4A" + }, + { + entity: "cupdot;", + value: "U+0228D" + }, + { + entity: "cupor;", + value: "U+02A45" + }, + { + entity: "curarr;", + value: "U+021B7" + }, + { + entity: "curarrm;", + value: "U+0293C" + }, + { + entity: "curlyeqprec;", + value: "U+022DE" + }, + { + entity: "curlyeqsucc;", + value: "U+022DF" + }, + { + entity: "curlyvee;", + value: "U+022CE" + }, + { + entity: "curlywedge;", + value: "U+022CF" + }, + { + entity: "curren;", + value: "U+000A4" + }, + { + entity: "curren", + value: "U+000A4" + }, + { + entity: "curvearrowleft;", + value: "U+021B6" + }, + { + entity: "curvearrowright;", + value: "U+021B7" + }, + { + entity: "cuvee;", + value: "U+022CE" + }, + { + entity: "cuwed;", + value: "U+022CF" + }, + { + entity: "cwconint;", + value: "U+02232" + }, + { + entity: "cwint;", + value: "U+02231" + }, + { + entity: "cylcty;", + value: "U+0232D" + }, + { + entity: "dArr;", + value: "U+021D3" + }, + { + entity: "dHar;", + value: "U+02965" + }, + { + entity: "dagger;", + value: "U+02020" + }, + { + entity: "daleth;", + value: "U+02138" + }, + { + entity: "darr;", + value: "U+02193" + }, + { + entity: "dash;", + value: "U+02010" + }, + { + entity: "dashv;", + value: "U+022A3" + }, + { + entity: "dbkarow;", + value: "U+0290F" + }, + { + entity: "dblac;", + value: "U+002DD" + }, + { + entity: "dcaron;", + value: "U+0010F" + }, + { + entity: "dcy;", + value: "U+00434" + }, + { + entity: "dd;", + value: "U+02146" + }, + { + entity: "ddagger;", + value: "U+02021" + }, + { + entity: "ddarr;", + value: "U+021CA" + }, + { + entity: "ddotseq;", + value: "U+02A77" + }, + { + entity: "deg;", + value: "U+000B0" + }, + { + entity: "deg", + value: "U+000B0" + }, + { + entity: "delta;", + value: "U+003B4" + }, + { + entity: "demptyv;", + value: "U+029B1" + }, + { + entity: "dfisht;", + value: "U+0297F" + }, + { + entity: "dfr;", + value: "U+1D521" + }, + { + entity: "dharl;", + value: "U+021C3" + }, + { + entity: "dharr;", + value: "U+021C2" + }, + { + entity: "diam;", + value: "U+022C4" + }, + { + entity: "diamond;", + value: "U+022C4" + }, + { + entity: "diamondsuit;", + value: "U+02666" + }, + { + entity: "diams;", + value: "U+02666" + }, + { + entity: "die;", + value: "U+000A8" + }, + { + entity: "digamma;", + value: "U+003DD" + }, + { + entity: "disin;", + value: "U+022F2" + }, + { + entity: "div;", + value: "U+000F7" + }, + { + entity: "divide;", + value: "U+000F7" + }, + { + entity: "divide", + value: "U+000F7" + }, + { + entity: "divideontimes;", + value: "U+022C7" + }, + { + entity: "divonx;", + value: "U+022C7" + }, + { + entity: "djcy;", + value: "U+00452" + }, + { + entity: "dlcorn;", + value: "U+0231E" + }, + { + entity: "dlcrop;", + value: "U+0230D" + }, + { + entity: "dollar;", + value: "U+00024" + }, + { + entity: "dopf;", + value: "U+1D555" + }, + { + entity: "dot;", + value: "U+002D9" + }, + { + entity: "doteq;", + value: "U+02250" + }, + { + entity: "doteqdot;", + value: "U+02251" + }, + { + entity: "dotminus;", + value: "U+02238" + }, + { + entity: "dotplus;", + value: "U+02214" + }, + { + entity: "dotsquare;", + value: "U+022A1" + }, + { + entity: "doublebarwedge;", + value: "U+02306" + }, + { + entity: "downarrow;", + value: "U+02193" + }, + { + entity: "downdownarrows;", + value: "U+021CA" + }, + { + entity: "downharpoonleft;", + value: "U+021C3" + }, + { + entity: "downharpoonright;", + value: "U+021C2" + }, + { + entity: "drbkarow;", + value: "U+02910" + }, + { + entity: "drcorn;", + value: "U+0231F" + }, + { + entity: "drcrop;", + value: "U+0230C" + }, + { + entity: "dscr;", + value: "U+1D4B9" + }, + { + entity: "dscy;", + value: "U+00455" + }, + { + entity: "dsol;", + value: "U+029F6" + }, + { + entity: "dstrok;", + value: "U+00111" + }, + { + entity: "dtdot;", + value: "U+022F1" + }, + { + entity: "dtri;", + value: "U+025BF" + }, + { + entity: "dtrif;", + value: "U+025BE" + }, + { + entity: "duarr;", + value: "U+021F5" + }, + { + entity: "duhar;", + value: "U+0296F" + }, + { + entity: "dwangle;", + value: "U+029A6" + }, + { + entity: "dzcy;", + value: "U+0045F" + }, + { + entity: "dzigrarr;", + value: "U+027FF" + }, + { + entity: "eDDot;", + value: "U+02A77" + }, + { + entity: "eDot;", + value: "U+02251" + }, + { + entity: "eacute;", + value: "U+000E9" + }, + { + entity: "eacute", + value: "U+000E9" + }, + { + entity: "easter;", + value: "U+02A6E" + }, + { + entity: "ecaron;", + value: "U+0011B" + }, + { + entity: "ecir;", + value: "U+02256" + }, + { + entity: "ecirc;", + value: "U+000EA" + }, + { + entity: "ecirc", + value: "U+000EA" + }, + { + entity: "ecolon;", + value: "U+02255" + }, + { + entity: "ecy;", + value: "U+0044D" + }, + { + entity: "edot;", + value: "U+00117" + }, + { + entity: "ee;", + value: "U+02147" + }, + { + entity: "efDot;", + value: "U+02252" + }, + { + entity: "efr;", + value: "U+1D522" + }, + { + entity: "eg;", + value: "U+02A9A" + }, + { + entity: "egrave;", + value: "U+000E8" + }, + { + entity: "egrave", + value: "U+000E8" + }, + { + entity: "egs;", + value: "U+02A96" + }, + { + entity: "egsdot;", + value: "U+02A98" + }, + { + entity: "el;", + value: "U+02A99" + }, + { + entity: "elinters;", + value: "U+023E7" + }, + { + entity: "ell;", + value: "U+02113" + }, + { + entity: "els;", + value: "U+02A95" + }, + { + entity: "elsdot;", + value: "U+02A97" + }, + { + entity: "emacr;", + value: "U+00113" + }, + { + entity: "empty;", + value: "U+02205" + }, + { + entity: "emptyset;", + value: "U+02205" + }, + { + entity: "emptyv;", + value: "U+02205" + }, + { + entity: "emsp13;", + value: "U+02004" + }, + { + entity: "emsp14;", + value: "U+02005" + }, + { + entity: "emsp;", + value: "U+02003" + }, + { + entity: "eng;", + value: "U+0014B" + }, + { + entity: "ensp;", + value: "U+02002" + }, + { + entity: "eogon;", + value: "U+00119" + }, + { + entity: "eopf;", + value: "U+1D556" + }, + { + entity: "epar;", + value: "U+022D5" + }, + { + entity: "eparsl;", + value: "U+029E3" + }, + { + entity: "eplus;", + value: "U+02A71" + }, + { + entity: "epsi;", + value: "U+003B5" + }, + { + entity: "epsilon;", + value: "U+003B5" + }, + { + entity: "epsiv;", + value: "U+003F5" + }, + { + entity: "eqcirc;", + value: "U+02256" + }, + { + entity: "eqcolon;", + value: "U+02255" + }, + { + entity: "eqsim;", + value: "U+02242" + }, + { + entity: "eqslantgtr;", + value: "U+02A96" + }, + { + entity: "eqslantless;", + value: "U+02A95" + }, + { + entity: "equals;", + value: "U+0003D" + }, + { + entity: "equest;", + value: "U+0225F" + }, + { + entity: "equiv;", + value: "U+02261" + }, + { + entity: "equivDD;", + value: "U+02A78" + }, + { + entity: "eqvparsl;", + value: "U+029E5" + }, + { + entity: "erDot;", + value: "U+02253" + }, + { + entity: "erarr;", + value: "U+02971" + }, + { + entity: "escr;", + value: "U+0212F" + }, + { + entity: "esdot;", + value: "U+02250" + }, + { + entity: "esim;", + value: "U+02242" + }, + { + entity: "eta;", + value: "U+003B7" + }, + { + entity: "eth;", + value: "U+000F0" + }, + { + entity: "eth", + value: "U+000F0" + }, + { + entity: "euml;", + value: "U+000EB" + }, + { + entity: "euml", + value: "U+000EB" + }, + { + entity: "euro;", + value: "U+020AC" + }, + { + entity: "excl;", + value: "U+00021" + }, + { + entity: "exist;", + value: "U+02203" + }, + { + entity: "expectation;", + value: "U+02130" + }, + { + entity: "exponentiale;", + value: "U+02147" + }, + { + entity: "fallingdotseq;", + value: "U+02252" + }, + { + entity: "fcy;", + value: "U+00444" + }, + { + entity: "female;", + value: "U+02640" + }, + { + entity: "ffilig;", + value: "U+0FB03" + }, + { + entity: "fflig;", + value: "U+0FB00" + }, + { + entity: "ffllig;", + value: "U+0FB04" + }, + { + entity: "ffr;", + value: "U+1D523" + }, + { + entity: "filig;", + value: "U+0FB01" + }, + { + entity: "flat;", + value: "U+0266D" + }, + { + entity: "fllig;", + value: "U+0FB02" + }, + { + entity: "fltns;", + value: "U+025B1" + }, + { + entity: "fnof;", + value: "U+00192" + }, + { + entity: "fopf;", + value: "U+1D557" + }, + { + entity: "forall;", + value: "U+02200" + }, + { + entity: "fork;", + value: "U+022D4" + }, + { + entity: "forkv;", + value: "U+02AD9" + }, + { + entity: "fpartint;", + value: "U+02A0D" + }, + { + entity: "frac12;", + value: "U+000BD" + }, + { + entity: "frac12", + value: "U+000BD" + }, + { + entity: "frac13;", + value: "U+02153" + }, + { + entity: "frac14;", + value: "U+000BC" + }, + { + entity: "frac14", + value: "U+000BC" + }, + { + entity: "frac15;", + value: "U+02155" + }, + { + entity: "frac16;", + value: "U+02159" + }, + { + entity: "frac18;", + value: "U+0215B" + }, + { + entity: "frac23;", + value: "U+02154" + }, + { + entity: "frac25;", + value: "U+02156" + }, + { + entity: "frac34;", + value: "U+000BE" + }, + { + entity: "frac34", + value: "U+000BE" + }, + { + entity: "frac35;", + value: "U+02157" + }, + { + entity: "frac38;", + value: "U+0215C" + }, + { + entity: "frac45;", + value: "U+02158" + }, + { + entity: "frac56;", + value: "U+0215A" + }, + { + entity: "frac58;", + value: "U+0215D" + }, + { + entity: "frac78;", + value: "U+0215E" + }, + { + entity: "frasl;", + value: "U+02044" + }, + { + entity: "frown;", + value: "U+02322" + }, + { + entity: "fscr;", + value: "U+1D4BB" + }, + { + entity: "gE;", + value: "U+02267" + }, + { + entity: "gEl;", + value: "U+02A8C" + }, + { + entity: "gacute;", + value: "U+001F5" + }, + { + entity: "gamma;", + value: "U+003B3" + }, + { + entity: "gammad;", + value: "U+003DD" + }, + { + entity: "gap;", + value: "U+02A86" + }, + { + entity: "gbreve;", + value: "U+0011F" + }, + { + entity: "gcirc;", + value: "U+0011D" + }, + { + entity: "gcy;", + value: "U+00433" + }, + { + entity: "gdot;", + value: "U+00121" + }, + { + entity: "ge;", + value: "U+02265" + }, + { + entity: "gel;", + value: "U+022DB" + }, + { + entity: "geq;", + value: "U+02265" + }, + { + entity: "geqq;", + value: "U+02267" + }, + { + entity: "geqslant;", + value: "U+02A7E" + }, + { + entity: "ges;", + value: "U+02A7E" + }, + { + entity: "gescc;", + value: "U+02AA9" + }, + { + entity: "gesdot;", + value: "U+02A80" + }, + { + entity: "gesdoto;", + value: "U+02A82" + }, + { + entity: "gesdotol;", + value: "U+02A84" + }, + { + entity: "gesles;", + value: "U+02A94" + }, + { + entity: "gfr;", + value: "U+1D524" + }, + { + entity: "gg;", + value: "U+0226B" + }, + { + entity: "ggg;", + value: "U+022D9" + }, + { + entity: "gimel;", + value: "U+02137" + }, + { + entity: "gjcy;", + value: "U+00453" + }, + { + entity: "gl;", + value: "U+02277" + }, + { + entity: "glE;", + value: "U+02A92" + }, + { + entity: "gla;", + value: "U+02AA5" + }, + { + entity: "glj;", + value: "U+02AA4" + }, + { + entity: "gnE;", + value: "U+02269" + }, + { + entity: "gnap;", + value: "U+02A8A" + }, + { + entity: "gnapprox;", + value: "U+02A8A" + }, + { + entity: "gne;", + value: "U+02A88" + }, + { + entity: "gneq;", + value: "U+02A88" + }, + { + entity: "gneqq;", + value: "U+02269" + }, + { + entity: "gnsim;", + value: "U+022E7" + }, + { + entity: "gopf;", + value: "U+1D558" + }, + { + entity: "grave;", + value: "U+00060" + }, + { + entity: "gscr;", + value: "U+0210A" + }, + { + entity: "gsim;", + value: "U+02273" + }, + { + entity: "gsime;", + value: "U+02A8E" + }, + { + entity: "gsiml;", + value: "U+02A90" + }, + { + entity: "gt;", + value: "U+0003E" + }, + { + entity: "gt", + value: "U+0003E" + }, + { + entity: "gtcc;", + value: "U+02AA7" + }, + { + entity: "gtcir;", + value: "U+02A7A" + }, + { + entity: "gtdot;", + value: "U+022D7" + }, + { + entity: "gtlPar;", + value: "U+02995" + }, + { + entity: "gtquest;", + value: "U+02A7C" + }, + { + entity: "gtrapprox;", + value: "U+02A86" + }, + { + entity: "gtrarr;", + value: "U+02978" + }, + { + entity: "gtrdot;", + value: "U+022D7" + }, + { + entity: "gtreqless;", + value: "U+022DB" + }, + { + entity: "gtreqqless;", + value: "U+02A8C" + }, + { + entity: "gtrless;", + value: "U+02277" + }, + { + entity: "gtrsim;", + value: "U+02273" + }, + { + entity: "hArr;", + value: "U+021D4" + }, + { + entity: "hairsp;", + value: "U+0200A" + }, + { + entity: "half;", + value: "U+000BD" + }, + { + entity: "hamilt;", + value: "U+0210B" + }, + { + entity: "hardcy;", + value: "U+0044A" + }, + { + entity: "harr;", + value: "U+02194" + }, + { + entity: "harrcir;", + value: "U+02948" + }, + { + entity: "harrw;", + value: "U+021AD" + }, + { + entity: "hbar;", + value: "U+0210F" + }, + { + entity: "hcirc;", + value: "U+00125" + }, + { + entity: "hearts;", + value: "U+02665" + }, + { + entity: "heartsuit;", + value: "U+02665" + }, + { + entity: "hellip;", + value: "U+02026" + }, + { + entity: "hercon;", + value: "U+022B9" + }, + { + entity: "hfr;", + value: "U+1D525" + }, + { + entity: "hksearow;", + value: "U+02925" + }, + { + entity: "hkswarow;", + value: "U+02926" + }, + { + entity: "hoarr;", + value: "U+021FF" + }, + { + entity: "homtht;", + value: "U+0223B" + }, + { + entity: "hookleftarrow;", + value: "U+021A9" + }, + { + entity: "hookrightarrow;", + value: "U+021AA" + }, + { + entity: "hopf;", + value: "U+1D559" + }, + { + entity: "horbar;", + value: "U+02015" + }, + { + entity: "hscr;", + value: "U+1D4BD" + }, + { + entity: "hslash;", + value: "U+0210F" + }, + { + entity: "hstrok;", + value: "U+00127" + }, + { + entity: "hybull;", + value: "U+02043" + }, + { + entity: "hyphen;", + value: "U+02010" + }, + { + entity: "iacute;", + value: "U+000ED" + }, + { + entity: "iacute", + value: "U+000ED" + }, + { + entity: "ic;", + value: "U+02063" + }, + { + entity: "icirc;", + value: "U+000EE" + }, + { + entity: "icirc", + value: "U+000EE" + }, + { + entity: "icy;", + value: "U+00438" + }, + { + entity: "iecy;", + value: "U+00435" + }, + { + entity: "iexcl;", + value: "U+000A1" + }, + { + entity: "iexcl", + value: "U+000A1" + }, + { + entity: "iff;", + value: "U+021D4" + }, + { + entity: "ifr;", + value: "U+1D526" + }, + { + entity: "igrave;", + value: "U+000EC" + }, + { + entity: "igrave", + value: "U+000EC" + }, + { + entity: "ii;", + value: "U+02148" + }, + { + entity: "iiiint;", + value: "U+02A0C" + }, + { + entity: "iiint;", + value: "U+0222D" + }, + { + entity: "iinfin;", + value: "U+029DC" + }, + { + entity: "iiota;", + value: "U+02129" + }, + { + entity: "ijlig;", + value: "U+00133" + }, + { + entity: "imacr;", + value: "U+0012B" + }, + { + entity: "image;", + value: "U+02111" + }, + { + entity: "imagline;", + value: "U+02110" + }, + { + entity: "imagpart;", + value: "U+02111" + }, + { + entity: "imath;", + value: "U+00131" + }, + { + entity: "imof;", + value: "U+022B7" + }, + { + entity: "imped;", + value: "U+001B5" + }, + { + entity: "in;", + value: "U+02208" + }, + { + entity: "incare;", + value: "U+02105" + }, + { + entity: "infin;", + value: "U+0221E" + }, + { + entity: "infintie;", + value: "U+029DD" + }, + { + entity: "inodot;", + value: "U+00131" + }, + { + entity: "int;", + value: "U+0222B" + }, + { + entity: "intcal;", + value: "U+022BA" + }, + { + entity: "integers;", + value: "U+02124" + }, + { + entity: "intercal;", + value: "U+022BA" + }, + { + entity: "intlarhk;", + value: "U+02A17" + }, + { + entity: "intprod;", + value: "U+02A3C" + }, + { + entity: "iocy;", + value: "U+00451" + }, + { + entity: "iogon;", + value: "U+0012F" + }, + { + entity: "iopf;", + value: "U+1D55A" + }, + { + entity: "iota;", + value: "U+003B9" + }, + { + entity: "iprod;", + value: "U+02A3C" + }, + { + entity: "iquest;", + value: "U+000BF" + }, + { + entity: "iquest", + value: "U+000BF" + }, + { + entity: "iscr;", + value: "U+1D4BE" + }, + { + entity: "isin;", + value: "U+02208" + }, + { + entity: "isinE;", + value: "U+022F9" + }, + { + entity: "isindot;", + value: "U+022F5" + }, + { + entity: "isins;", + value: "U+022F4" + }, + { + entity: "isinsv;", + value: "U+022F3" + }, + { + entity: "isinv;", + value: "U+02208" + }, + { + entity: "it;", + value: "U+02062" + }, + { + entity: "itilde;", + value: "U+00129" + }, + { + entity: "iukcy;", + value: "U+00456" + }, + { + entity: "iuml;", + value: "U+000EF" + }, + { + entity: "iuml", + value: "U+000EF" + }, + { + entity: "jcirc;", + value: "U+00135" + }, + { + entity: "jcy;", + value: "U+00439" + }, + { + entity: "jfr;", + value: "U+1D527" + }, + { + entity: "jmath;", + value: "U+00237" + }, + { + entity: "jopf;", + value: "U+1D55B" + }, + { + entity: "jscr;", + value: "U+1D4BF" + }, + { + entity: "jsercy;", + value: "U+00458" + }, + { + entity: "jukcy;", + value: "U+00454" + }, + { + entity: "kappa;", + value: "U+003BA" + }, + { + entity: "kappav;", + value: "U+003F0" + }, + { + entity: "kcedil;", + value: "U+00137" + }, + { + entity: "kcy;", + value: "U+0043A" + }, + { + entity: "kfr;", + value: "U+1D528" + }, + { + entity: "kgreen;", + value: "U+00138" + }, + { + entity: "khcy;", + value: "U+00445" + }, + { + entity: "kjcy;", + value: "U+0045C" + }, + { + entity: "kopf;", + value: "U+1D55C" + }, + { + entity: "kscr;", + value: "U+1D4C0" + }, + { + entity: "lAarr;", + value: "U+021DA" + }, + { + entity: "lArr;", + value: "U+021D0" + }, + { + entity: "lAtail;", + value: "U+0291B" + }, + { + entity: "lBarr;", + value: "U+0290E" + }, + { + entity: "lE;", + value: "U+02266" + }, + { + entity: "lEg;", + value: "U+02A8B" + }, + { + entity: "lHar;", + value: "U+02962" + }, + { + entity: "lacute;", + value: "U+0013A" + }, + { + entity: "laemptyv;", + value: "U+029B4" + }, + { + entity: "lagran;", + value: "U+02112" + }, + { + entity: "lambda;", + value: "U+003BB" + }, + { + entity: "lang;", + value: "U+027E8" + }, + { + entity: "langd;", + value: "U+02991" + }, + { + entity: "langle;", + value: "U+027E8" + }, + { + entity: "lap;", + value: "U+02A85" + }, + { + entity: "laquo;", + value: "U+000AB" + }, + { + entity: "laquo", + value: "U+000AB" + }, + { + entity: "larr;", + value: "U+02190" + }, + { + entity: "larrb;", + value: "U+021E4" + }, + { + entity: "larrbfs;", + value: "U+0291F" + }, + { + entity: "larrfs;", + value: "U+0291D" + }, + { + entity: "larrhk;", + value: "U+021A9" + }, + { + entity: "larrlp;", + value: "U+021AB" + }, + { + entity: "larrpl;", + value: "U+02939" + }, + { + entity: "larrsim;", + value: "U+02973" + }, + { + entity: "larrtl;", + value: "U+021A2" + }, + { + entity: "lat;", + value: "U+02AAB" + }, + { + entity: "latail;", + value: "U+02919" + }, + { + entity: "late;", + value: "U+02AAD" + }, + { + entity: "lbarr;", + value: "U+0290C" + }, + { + entity: "lbbrk;", + value: "U+02772" + }, + { + entity: "lbrace;", + value: "U+0007B" + }, + { + entity: "lbrack;", + value: "U+0005B" + }, + { + entity: "lbrke;", + value: "U+0298B" + }, + { + entity: "lbrksld;", + value: "U+0298F" + }, + { + entity: "lbrkslu;", + value: "U+0298D" + }, + { + entity: "lcaron;", + value: "U+0013E" + }, + { + entity: "lcedil;", + value: "U+0013C" + }, + { + entity: "lceil;", + value: "U+02308" + }, + { + entity: "lcub;", + value: "U+0007B" + }, + { + entity: "lcy;", + value: "U+0043B" + }, + { + entity: "ldca;", + value: "U+02936" + }, + { + entity: "ldquo;", + value: "U+0201C" + }, + { + entity: "ldquor;", + value: "U+0201E" + }, + { + entity: "ldrdhar;", + value: "U+02967" + }, + { + entity: "ldrushar;", + value: "U+0294B" + }, + { + entity: "ldsh;", + value: "U+021B2" + }, + { + entity: "le;", + value: "U+02264" + }, + { + entity: "leftarrow;", + value: "U+02190" + }, + { + entity: "leftarrowtail;", + value: "U+021A2" + }, + { + entity: "leftharpoondown;", + value: "U+021BD" + }, + { + entity: "leftharpoonup;", + value: "U+021BC" + }, + { + entity: "leftleftarrows;", + value: "U+021C7" + }, + { + entity: "leftrightarrow;", + value: "U+02194" + }, + { + entity: "leftrightarrows;", + value: "U+021C6" + }, + { + entity: "leftrightharpoons;", + value: "U+021CB" + }, + { + entity: "leftrightsquigarrow;", + value: "U+021AD" + }, + { + entity: "leftthreetimes;", + value: "U+022CB" + }, + { + entity: "leg;", + value: "U+022DA" + }, + { + entity: "leq;", + value: "U+02264" + }, + { + entity: "leqq;", + value: "U+02266" + }, + { + entity: "leqslant;", + value: "U+02A7D" + }, + { + entity: "les;", + value: "U+02A7D" + }, + { + entity: "lescc;", + value: "U+02AA8" + }, + { + entity: "lesdot;", + value: "U+02A7F" + }, + { + entity: "lesdoto;", + value: "U+02A81" + }, + { + entity: "lesdotor;", + value: "U+02A83" + }, + { + entity: "lesges;", + value: "U+02A93" + }, + { + entity: "lessapprox;", + value: "U+02A85" + }, + { + entity: "lessdot;", + value: "U+022D6" + }, + { + entity: "lesseqgtr;", + value: "U+022DA" + }, + { + entity: "lesseqqgtr;", + value: "U+02A8B" + }, + { + entity: "lessgtr;", + value: "U+02276" + }, + { + entity: "lesssim;", + value: "U+02272" + }, + { + entity: "lfisht;", + value: "U+0297C" + }, + { + entity: "lfloor;", + value: "U+0230A" + }, + { + entity: "lfr;", + value: "U+1D529" + }, + { + entity: "lg;", + value: "U+02276" + }, + { + entity: "lgE;", + value: "U+02A91" + }, + { + entity: "lhard;", + value: "U+021BD" + }, + { + entity: "lharu;", + value: "U+021BC" + }, + { + entity: "lharul;", + value: "U+0296A" + }, + { + entity: "lhblk;", + value: "U+02584" + }, + { + entity: "ljcy;", + value: "U+00459" + }, + { + entity: "ll;", + value: "U+0226A" + }, + { + entity: "llarr;", + value: "U+021C7" + }, + { + entity: "llcorner;", + value: "U+0231E" + }, + { + entity: "llhard;", + value: "U+0296B" + }, + { + entity: "lltri;", + value: "U+025FA" + }, + { + entity: "lmidot;", + value: "U+00140" + }, + { + entity: "lmoust;", + value: "U+023B0" + }, + { + entity: "lmoustache;", + value: "U+023B0" + }, + { + entity: "lnE;", + value: "U+02268" + }, + { + entity: "lnap;", + value: "U+02A89" + }, + { + entity: "lnapprox;", + value: "U+02A89" + }, + { + entity: "lne;", + value: "U+02A87" + }, + { + entity: "lneq;", + value: "U+02A87" + }, + { + entity: "lneqq;", + value: "U+02268" + }, + { + entity: "lnsim;", + value: "U+022E6" + }, + { + entity: "loang;", + value: "U+027EC" + }, + { + entity: "loarr;", + value: "U+021FD" + }, + { + entity: "lobrk;", + value: "U+027E6" + }, + { + entity: "longleftarrow;", + value: "U+027F5" + }, + { + entity: "longleftrightarrow;", + value: "U+027F7" + }, + { + entity: "longmapsto;", + value: "U+027FC" + }, + { + entity: "longrightarrow;", + value: "U+027F6" + }, + { + entity: "looparrowleft;", + value: "U+021AB" + }, + { + entity: "looparrowright;", + value: "U+021AC" + }, + { + entity: "lopar;", + value: "U+02985" + }, + { + entity: "lopf;", + value: "U+1D55D" + }, + { + entity: "loplus;", + value: "U+02A2D" + }, + { + entity: "lotimes;", + value: "U+02A34" + }, + { + entity: "lowast;", + value: "U+02217" + }, + { + entity: "lowbar;", + value: "U+0005F" + }, + { + entity: "loz;", + value: "U+025CA" + }, + { + entity: "lozenge;", + value: "U+025CA" + }, + { + entity: "lozf;", + value: "U+029EB" + }, + { + entity: "lpar;", + value: "U+00028" + }, + { + entity: "lparlt;", + value: "U+02993" + }, + { + entity: "lrarr;", + value: "U+021C6" + }, + { + entity: "lrcorner;", + value: "U+0231F" + }, + { + entity: "lrhar;", + value: "U+021CB" + }, + { + entity: "lrhard;", + value: "U+0296D" + }, + { + entity: "lrm;", + value: "U+0200E" + }, + { + entity: "lrtri;", + value: "U+022BF" + }, + { + entity: "lsaquo;", + value: "U+02039" + }, + { + entity: "lscr;", + value: "U+1D4C1" + }, + { + entity: "lsh;", + value: "U+021B0" + }, + { + entity: "lsim;", + value: "U+02272" + }, + { + entity: "lsime;", + value: "U+02A8D" + }, + { + entity: "lsimg;", + value: "U+02A8F" + }, + { + entity: "lsqb;", + value: "U+0005B" + }, + { + entity: "lsquo;", + value: "U+02018" + }, + { + entity: "lsquor;", + value: "U+0201A" + }, + { + entity: "lstrok;", + value: "U+00142" + }, + { + entity: "lt;", + value: "U+0003C" + }, + { + entity: "lt", + value: "U+0003C" + }, + { + entity: "ltcc;", + value: "U+02AA6" + }, + { + entity: "ltcir;", + value: "U+02A79" + }, + { + entity: "ltdot;", + value: "U+022D6" + }, + { + entity: "lthree;", + value: "U+022CB" + }, + { + entity: "ltimes;", + value: "U+022C9" + }, + { + entity: "ltlarr;", + value: "U+02976" + }, + { + entity: "ltquest;", + value: "U+02A7B" + }, + { + entity: "ltrPar;", + value: "U+02996" + }, + { + entity: "ltri;", + value: "U+025C3" + }, + { + entity: "ltrie;", + value: "U+022B4" + }, + { + entity: "ltrif;", + value: "U+025C2" + }, + { + entity: "lurdshar;", + value: "U+0294A" + }, + { + entity: "luruhar;", + value: "U+02966" + }, + { + entity: "mDDot;", + value: "U+0223A" + }, + { + entity: "macr;", + value: "U+000AF" + }, + { + entity: "macr", + value: "U+000AF" + }, + { + entity: "male;", + value: "U+02642" + }, + { + entity: "malt;", + value: "U+02720" + }, + { + entity: "maltese;", + value: "U+02720" + }, + { + entity: "map;", + value: "U+021A6" + }, + { + entity: "mapsto;", + value: "U+021A6" + }, + { + entity: "mapstodown;", + value: "U+021A7" + }, + { + entity: "mapstoleft;", + value: "U+021A4" + }, + { + entity: "mapstoup;", + value: "U+021A5" + }, + { + entity: "marker;", + value: "U+025AE" + }, + { + entity: "mcomma;", + value: "U+02A29" + }, + { + entity: "mcy;", + value: "U+0043C" + }, + { + entity: "mdash;", + value: "U+02014" + }, + { + entity: "measuredangle;", + value: "U+02221" + }, + { + entity: "mfr;", + value: "U+1D52A" + }, + { + entity: "mho;", + value: "U+02127" + }, + { + entity: "micro;", + value: "U+000B5" + }, + { + entity: "micro", + value: "U+000B5" + }, + { + entity: "mid;", + value: "U+02223" + }, + { + entity: "midast;", + value: "U+0002A" + }, + { + entity: "midcir;", + value: "U+02AF0" + }, + { + entity: "middot;", + value: "U+000B7" + }, + { + entity: "middot", + value: "U+000B7" + }, + { + entity: "minus;", + value: "U+02212" + }, + { + entity: "minusb;", + value: "U+0229F" + }, + { + entity: "minusd;", + value: "U+02238" + }, + { + entity: "minusdu;", + value: "U+02A2A" + }, + { + entity: "mlcp;", + value: "U+02ADB" + }, + { + entity: "mldr;", + value: "U+02026" + }, + { + entity: "mnplus;", + value: "U+02213" + }, + { + entity: "models;", + value: "U+022A7" + }, + { + entity: "mopf;", + value: "U+1D55E" + }, + { + entity: "mp;", + value: "U+02213" + }, + { + entity: "mscr;", + value: "U+1D4C2" + }, + { + entity: "mstpos;", + value: "U+0223E" + }, + { + entity: "mu;", + value: "U+003BC" + }, + { + entity: "multimap;", + value: "U+022B8" + }, + { + entity: "mumap;", + value: "U+022B8" + }, + { + entity: "nLeftarrow;", + value: "U+021CD" + }, + { + entity: "nLeftrightarrow;", + value: "U+021CE" + }, + { + entity: "nRightarrow;", + value: "U+021CF" + }, + { + entity: "nVDash;", + value: "U+022AF" + }, + { + entity: "nVdash;", + value: "U+022AE" + }, + { + entity: "nabla;", + value: "U+02207" + }, + { + entity: "nacute;", + value: "U+00144" + }, + { + entity: "nap;", + value: "U+02249" + }, + { + entity: "napos;", + value: "U+00149" + }, + { + entity: "napprox;", + value: "U+02249" + }, + { + entity: "natur;", + value: "U+0266E" + }, + { + entity: "natural;", + value: "U+0266E" + }, + { + entity: "naturals;", + value: "U+02115" + }, + { + entity: "nbsp;", + value: "U+000A0" + }, + { + entity: "nbsp", + value: "U+000A0" + }, + { + entity: "ncap;", + value: "U+02A43" + }, + { + entity: "ncaron;", + value: "U+00148" + }, + { + entity: "ncedil;", + value: "U+00146" + }, + { + entity: "ncong;", + value: "U+02247" + }, + { + entity: "ncup;", + value: "U+02A42" + }, + { + entity: "ncy;", + value: "U+0043D" + }, + { + entity: "ndash;", + value: "U+02013" + }, + { + entity: "ne;", + value: "U+02260" + }, + { + entity: "neArr;", + value: "U+021D7" + }, + { + entity: "nearhk;", + value: "U+02924" + }, + { + entity: "nearr;", + value: "U+02197" + }, + { + entity: "nearrow;", + value: "U+02197" + }, + { + entity: "nequiv;", + value: "U+02262" + }, + { + entity: "nesear;", + value: "U+02928" + }, + { + entity: "nexist;", + value: "U+02204" + }, + { + entity: "nexists;", + value: "U+02204" + }, + { + entity: "nfr;", + value: "U+1D52B" + }, + { + entity: "nge;", + value: "U+02271" + }, + { + entity: "ngeq;", + value: "U+02271" + }, + { + entity: "ngsim;", + value: "U+02275" + }, + { + entity: "ngt;", + value: "U+0226F" + }, + { + entity: "ngtr;", + value: "U+0226F" + }, + { + entity: "nhArr;", + value: "U+021CE" + }, + { + entity: "nharr;", + value: "U+021AE" + }, + { + entity: "nhpar;", + value: "U+02AF2" + }, + { + entity: "ni;", + value: "U+0220B" + }, + { + entity: "nis;", + value: "U+022FC" + }, + { + entity: "nisd;", + value: "U+022FA" + }, + { + entity: "niv;", + value: "U+0220B" + }, + { + entity: "njcy;", + value: "U+0045A" + }, + { + entity: "nlArr;", + value: "U+021CD" + }, + { + entity: "nlarr;", + value: "U+0219A" + }, + { + entity: "nldr;", + value: "U+02025" + }, + { + entity: "nle;", + value: "U+02270" + }, + { + entity: "nleftarrow;", + value: "U+0219A" + }, + { + entity: "nleftrightarrow;", + value: "U+021AE" + }, + { + entity: "nleq;", + value: "U+02270" + }, + { + entity: "nless;", + value: "U+0226E" + }, + { + entity: "nlsim;", + value: "U+02274" + }, + { + entity: "nlt;", + value: "U+0226E" + }, + { + entity: "nltri;", + value: "U+022EA" + }, + { + entity: "nltrie;", + value: "U+022EC" + }, + { + entity: "nmid;", + value: "U+02224" + }, + { + entity: "nopf;", + value: "U+1D55F" + }, + { + entity: "not;", + value: "U+000AC" + }, + { + entity: "not", + value: "U+000AC" + }, + { + entity: "notin;", + value: "U+02209" + }, + { + entity: "notinva;", + value: "U+02209" + }, + { + entity: "notinvb;", + value: "U+022F7" + }, + { + entity: "notinvc;", + value: "U+022F6" + }, + { + entity: "notni;", + value: "U+0220C" + }, + { + entity: "notniva;", + value: "U+0220C" + }, + { + entity: "notnivb;", + value: "U+022FE" + }, + { + entity: "notnivc;", + value: "U+022FD" + }, + { + entity: "npar;", + value: "U+02226" + }, + { + entity: "nparallel;", + value: "U+02226" + }, + { + entity: "npolint;", + value: "U+02A14" + }, + { + entity: "npr;", + value: "U+02280" + }, + { + entity: "nprcue;", + value: "U+022E0" + }, + { + entity: "nprec;", + value: "U+02280" + }, + { + entity: "nrArr;", + value: "U+021CF" + }, + { + entity: "nrarr;", + value: "U+0219B" + }, + { + entity: "nrightarrow;", + value: "U+0219B" + }, + { + entity: "nrtri;", + value: "U+022EB" + }, + { + entity: "nrtrie;", + value: "U+022ED" + }, + { + entity: "nsc;", + value: "U+02281" + }, + { + entity: "nsccue;", + value: "U+022E1" + }, + { + entity: "nscr;", + value: "U+1D4C3" + }, + { + entity: "nshortmid;", + value: "U+02224" + }, + { + entity: "nshortparallel;", + value: "U+02226" + }, + { + entity: "nsim;", + value: "U+02241" + }, + { + entity: "nsime;", + value: "U+02244" + }, + { + entity: "nsimeq;", + value: "U+02244" + }, + { + entity: "nsmid;", + value: "U+02224" + }, + { + entity: "nspar;", + value: "U+02226" + }, + { + entity: "nsqsube;", + value: "U+022E2" + }, + { + entity: "nsqsupe;", + value: "U+022E3" + }, + { + entity: "nsub;", + value: "U+02284" + }, + { + entity: "nsube;", + value: "U+02288" + }, + { + entity: "nsubseteq;", + value: "U+02288" + }, + { + entity: "nsucc;", + value: "U+02281" + }, + { + entity: "nsup;", + value: "U+02285" + }, + { + entity: "nsupe;", + value: "U+02289" + }, + { + entity: "nsupseteq;", + value: "U+02289" + }, + { + entity: "ntgl;", + value: "U+02279" + }, + { + entity: "ntilde;", + value: "U+000F1" + }, + { + entity: "ntilde", + value: "U+000F1" + }, + { + entity: "ntlg;", + value: "U+02278" + }, + { + entity: "ntriangleleft;", + value: "U+022EA" + }, + { + entity: "ntrianglelefteq;", + value: "U+022EC" + }, + { + entity: "ntriangleright;", + value: "U+022EB" + }, + { + entity: "ntrianglerighteq;", + value: "U+022ED" + }, + { + entity: "nu;", + value: "U+003BD" + }, + { + entity: "num;", + value: "U+00023" + }, + { + entity: "numero;", + value: "U+02116" + }, + { + entity: "numsp;", + value: "U+02007" + }, + { + entity: "nvDash;", + value: "U+022AD" + }, + { + entity: "nvHarr;", + value: "U+02904" + }, + { + entity: "nvdash;", + value: "U+022AC" + }, + { + entity: "nvinfin;", + value: "U+029DE" + }, + { + entity: "nvlArr;", + value: "U+02902" + }, + { + entity: "nvrArr;", + value: "U+02903" + }, + { + entity: "nwArr;", + value: "U+021D6" + }, + { + entity: "nwarhk;", + value: "U+02923" + }, + { + entity: "nwarr;", + value: "U+02196" + }, + { + entity: "nwarrow;", + value: "U+02196" + }, + { + entity: "nwnear;", + value: "U+02927" + }, + { + entity: "oS;", + value: "U+024C8" + }, + { + entity: "oacute;", + value: "U+000F3" + }, + { + entity: "oacute", + value: "U+000F3" + }, + { + entity: "oast;", + value: "U+0229B" + }, + { + entity: "ocir;", + value: "U+0229A" + }, + { + entity: "ocirc;", + value: "U+000F4" + }, + { + entity: "ocirc", + value: "U+000F4" + }, + { + entity: "ocy;", + value: "U+0043E" + }, + { + entity: "odash;", + value: "U+0229D" + }, + { + entity: "odblac;", + value: "U+00151" + }, + { + entity: "odiv;", + value: "U+02A38" + }, + { + entity: "odot;", + value: "U+02299" + }, + { + entity: "odsold;", + value: "U+029BC" + }, + { + entity: "oelig;", + value: "U+00153" + }, + { + entity: "ofcir;", + value: "U+029BF" + }, + { + entity: "ofr;", + value: "U+1D52C" + }, + { + entity: "ogon;", + value: "U+002DB" + }, + { + entity: "ograve;", + value: "U+000F2" + }, + { + entity: "ograve", + value: "U+000F2" + }, + { + entity: "ogt;", + value: "U+029C1" + }, + { + entity: "ohbar;", + value: "U+029B5" + }, + { + entity: "ohm;", + value: "U+003A9" + }, + { + entity: "oint;", + value: "U+0222E" + }, + { + entity: "olarr;", + value: "U+021BA" + }, + { + entity: "olcir;", + value: "U+029BE" + }, + { + entity: "olcross;", + value: "U+029BB" + }, + { + entity: "oline;", + value: "U+0203E" + }, + { + entity: "olt;", + value: "U+029C0" + }, + { + entity: "omacr;", + value: "U+0014D" + }, + { + entity: "omega;", + value: "U+003C9" + }, + { + entity: "omicron;", + value: "U+003BF" + }, + { + entity: "omid;", + value: "U+029B6" + }, + { + entity: "ominus;", + value: "U+02296" + }, + { + entity: "oopf;", + value: "U+1D560" + }, + { + entity: "opar;", + value: "U+029B7" + }, + { + entity: "operp;", + value: "U+029B9" + }, + { + entity: "oplus;", + value: "U+02295" + }, + { + entity: "or;", + value: "U+02228" + }, + { + entity: "orarr;", + value: "U+021BB" + }, + { + entity: "ord;", + value: "U+02A5D" + }, + { + entity: "order;", + value: "U+02134" + }, + { + entity: "orderof;", + value: "U+02134" + }, + { + entity: "ordf;", + value: "U+000AA" + }, + { + entity: "ordf", + value: "U+000AA" + }, + { + entity: "ordm;", + value: "U+000BA" + }, + { + entity: "ordm", + value: "U+000BA" + }, + { + entity: "origof;", + value: "U+022B6" + }, + { + entity: "oror;", + value: "U+02A56" + }, + { + entity: "orslope;", + value: "U+02A57" + }, + { + entity: "orv;", + value: "U+02A5B" + }, + { + entity: "oscr;", + value: "U+02134" + }, + { + entity: "oslash;", + value: "U+000F8" + }, + { + entity: "oslash", + value: "U+000F8" + }, + { + entity: "osol;", + value: "U+02298" + }, + { + entity: "otilde;", + value: "U+000F5" + }, + { + entity: "otilde", + value: "U+000F5" + }, + { + entity: "otimes;", + value: "U+02297" + }, + { + entity: "otimesas;", + value: "U+02A36" + }, + { + entity: "ouml;", + value: "U+000F6" + }, + { + entity: "ouml", + value: "U+000F6" + }, + { + entity: "ovbar;", + value: "U+0233D" + }, + { + entity: "par;", + value: "U+02225" + }, + { + entity: "para;", + value: "U+000B6" + }, + { + entity: "para", + value: "U+000B6" + }, + { + entity: "parallel;", + value: "U+02225" + }, + { + entity: "parsim;", + value: "U+02AF3" + }, + { + entity: "parsl;", + value: "U+02AFD" + }, + { + entity: "part;", + value: "U+02202" + }, + { + entity: "pcy;", + value: "U+0043F" + }, + { + entity: "percnt;", + value: "U+00025" + }, + { + entity: "period;", + value: "U+0002E" + }, + { + entity: "permil;", + value: "U+02030" + }, + { + entity: "perp;", + value: "U+022A5" + }, + { + entity: "pertenk;", + value: "U+02031" + }, + { + entity: "pfr;", + value: "U+1D52D" + }, + { + entity: "phi;", + value: "U+003C6" + }, + { + entity: "phiv;", + value: "U+003D5" + }, + { + entity: "phmmat;", + value: "U+02133" + }, + { + entity: "phone;", + value: "U+0260E" + }, + { + entity: "pi;", + value: "U+003C0" + }, + { + entity: "pitchfork;", + value: "U+022D4" + }, + { + entity: "piv;", + value: "U+003D6" + }, + { + entity: "planck;", + value: "U+0210F" + }, + { + entity: "planckh;", + value: "U+0210E" + }, + { + entity: "plankv;", + value: "U+0210F" + }, + { + entity: "plus;", + value: "U+0002B" + }, + { + entity: "plusacir;", + value: "U+02A23" + }, + { + entity: "plusb;", + value: "U+0229E" + }, + { + entity: "pluscir;", + value: "U+02A22" + }, + { + entity: "plusdo;", + value: "U+02214" + }, + { + entity: "plusdu;", + value: "U+02A25" + }, + { + entity: "pluse;", + value: "U+02A72" + }, + { + entity: "plusmn;", + value: "U+000B1" + }, + { + entity: "plusmn", + value: "U+000B1" + }, + { + entity: "plussim;", + value: "U+02A26" + }, + { + entity: "plustwo;", + value: "U+02A27" + }, + { + entity: "pm;", + value: "U+000B1" + }, + { + entity: "pointint;", + value: "U+02A15" + }, + { + entity: "popf;", + value: "U+1D561" + }, + { + entity: "pound;", + value: "U+000A3" + }, + { + entity: "pound", + value: "U+000A3" + }, + { + entity: "pr;", + value: "U+0227A" + }, + { + entity: "prE;", + value: "U+02AB3" + }, + { + entity: "prap;", + value: "U+02AB7" + }, + { + entity: "prcue;", + value: "U+0227C" + }, + { + entity: "pre;", + value: "U+02AAF" + }, + { + entity: "prec;", + value: "U+0227A" + }, + { + entity: "precapprox;", + value: "U+02AB7" + }, + { + entity: "preccurlyeq;", + value: "U+0227C" + }, + { + entity: "preceq;", + value: "U+02AAF" + }, + { + entity: "precnapprox;", + value: "U+02AB9" + }, + { + entity: "precneqq;", + value: "U+02AB5" + }, + { + entity: "precnsim;", + value: "U+022E8" + }, + { + entity: "precsim;", + value: "U+0227E" + }, + { + entity: "prime;", + value: "U+02032" + }, + { + entity: "primes;", + value: "U+02119" + }, + { + entity: "prnE;", + value: "U+02AB5" + }, + { + entity: "prnap;", + value: "U+02AB9" + }, + { + entity: "prnsim;", + value: "U+022E8" + }, + { + entity: "prod;", + value: "U+0220F" + }, + { + entity: "profalar;", + value: "U+0232E" + }, + { + entity: "profline;", + value: "U+02312" + }, + { + entity: "profsurf;", + value: "U+02313" + }, + { + entity: "prop;", + value: "U+0221D" + }, + { + entity: "propto;", + value: "U+0221D" + }, + { + entity: "prsim;", + value: "U+0227E" + }, + { + entity: "prurel;", + value: "U+022B0" + }, + { + entity: "pscr;", + value: "U+1D4C5" + }, + { + entity: "psi;", + value: "U+003C8" + }, + { + entity: "puncsp;", + value: "U+02008" + }, + { + entity: "qfr;", + value: "U+1D52E" + }, + { + entity: "qint;", + value: "U+02A0C" + }, + { + entity: "qopf;", + value: "U+1D562" + }, + { + entity: "qprime;", + value: "U+02057" + }, + { + entity: "qscr;", + value: "U+1D4C6" + }, + { + entity: "quaternions;", + value: "U+0210D" + }, + { + entity: "quatint;", + value: "U+02A16" + }, + { + entity: "quest;", + value: "U+0003F" + }, + { + entity: "questeq;", + value: "U+0225F" + }, + { + entity: "quot;", + value: "U+00022" + }, + { + entity: "quot", + value: "U+00022" + }, + { + entity: "rAarr;", + value: "U+021DB" + }, + { + entity: "rArr;", + value: "U+021D2" + }, + { + entity: "rAtail;", + value: "U+0291C" + }, + { + entity: "rBarr;", + value: "U+0290F" + }, + { + entity: "rHar;", + value: "U+02964" + }, + { + entity: "racute;", + value: "U+00155" + }, + { + entity: "radic;", + value: "U+0221A" + }, + { + entity: "raemptyv;", + value: "U+029B3" + }, + { + entity: "rang;", + value: "U+027E9" + }, + { + entity: "rangd;", + value: "U+02992" + }, + { + entity: "range;", + value: "U+029A5" + }, + { + entity: "rangle;", + value: "U+027E9" + }, + { + entity: "raquo;", + value: "U+000BB" + }, + { + entity: "raquo", + value: "U+000BB" + }, + { + entity: "rarr;", + value: "U+02192" + }, + { + entity: "rarrap;", + value: "U+02975" + }, + { + entity: "rarrb;", + value: "U+021E5" + }, + { + entity: "rarrbfs;", + value: "U+02920" + }, + { + entity: "rarrc;", + value: "U+02933" + }, + { + entity: "rarrfs;", + value: "U+0291E" + }, + { + entity: "rarrhk;", + value: "U+021AA" + }, + { + entity: "rarrlp;", + value: "U+021AC" + }, + { + entity: "rarrpl;", + value: "U+02945" + }, + { + entity: "rarrsim;", + value: "U+02974" + }, + { + entity: "rarrtl;", + value: "U+021A3" + }, + { + entity: "rarrw;", + value: "U+0219D" + }, + { + entity: "ratail;", + value: "U+0291A" + }, + { + entity: "ratio;", + value: "U+02236" + }, + { + entity: "rationals;", + value: "U+0211A" + }, + { + entity: "rbarr;", + value: "U+0290D" + }, + { + entity: "rbbrk;", + value: "U+02773" + }, + { + entity: "rbrace;", + value: "U+0007D" + }, + { + entity: "rbrack;", + value: "U+0005D" + }, + { + entity: "rbrke;", + value: "U+0298C" + }, + { + entity: "rbrksld;", + value: "U+0298E" + }, + { + entity: "rbrkslu;", + value: "U+02990" + }, + { + entity: "rcaron;", + value: "U+00159" + }, + { + entity: "rcedil;", + value: "U+00157" + }, + { + entity: "rceil;", + value: "U+02309" + }, + { + entity: "rcub;", + value: "U+0007D" + }, + { + entity: "rcy;", + value: "U+00440" + }, + { + entity: "rdca;", + value: "U+02937" + }, + { + entity: "rdldhar;", + value: "U+02969" + }, + { + entity: "rdquo;", + value: "U+0201D" + }, + { + entity: "rdquor;", + value: "U+0201D" + }, + { + entity: "rdsh;", + value: "U+021B3" + }, + { + entity: "real;", + value: "U+0211C" + }, + { + entity: "realine;", + value: "U+0211B" + }, + { + entity: "realpart;", + value: "U+0211C" + }, + { + entity: "reals;", + value: "U+0211D" + }, + { + entity: "rect;", + value: "U+025AD" + }, + { + entity: "reg;", + value: "U+000AE" + }, + { + entity: "reg", + value: "U+000AE" + }, + { + entity: "rfisht;", + value: "U+0297D" + }, + { + entity: "rfloor;", + value: "U+0230B" + }, + { + entity: "rfr;", + value: "U+1D52F" + }, + { + entity: "rhard;", + value: "U+021C1" + }, + { + entity: "rharu;", + value: "U+021C0" + }, + { + entity: "rharul;", + value: "U+0296C" + }, + { + entity: "rho;", + value: "U+003C1" + }, + { + entity: "rhov;", + value: "U+003F1" + }, + { + entity: "rightarrow;", + value: "U+02192" + }, + { + entity: "rightarrowtail;", + value: "U+021A3" + }, + { + entity: "rightharpoondown;", + value: "U+021C1" + }, + { + entity: "rightharpoonup;", + value: "U+021C0" + }, + { + entity: "rightleftarrows;", + value: "U+021C4" + }, + { + entity: "rightleftharpoons;", + value: "U+021CC" + }, + { + entity: "rightrightarrows;", + value: "U+021C9" + }, + { + entity: "rightsquigarrow;", + value: "U+0219D" + }, + { + entity: "rightthreetimes;", + value: "U+022CC" + }, + { + entity: "ring;", + value: "U+002DA" + }, + { + entity: "risingdotseq;", + value: "U+02253" + }, + { + entity: "rlarr;", + value: "U+021C4" + }, + { + entity: "rlhar;", + value: "U+021CC" + }, + { + entity: "rlm;", + value: "U+0200F" + }, + { + entity: "rmoust;", + value: "U+023B1" + }, + { + entity: "rmoustache;", + value: "U+023B1" + }, + { + entity: "rnmid;", + value: "U+02AEE" + }, + { + entity: "roang;", + value: "U+027ED" + }, + { + entity: "roarr;", + value: "U+021FE" + }, + { + entity: "robrk;", + value: "U+027E7" + }, + { + entity: "ropar;", + value: "U+02986" + }, + { + entity: "ropf;", + value: "U+1D563" + }, + { + entity: "roplus;", + value: "U+02A2E" + }, + { + entity: "rotimes;", + value: "U+02A35" + }, + { + entity: "rpar;", + value: "U+00029" + }, + { + entity: "rpargt;", + value: "U+02994" + }, + { + entity: "rppolint;", + value: "U+02A12" + }, + { + entity: "rrarr;", + value: "U+021C9" + }, + { + entity: "rsaquo;", + value: "U+0203A" + }, + { + entity: "rscr;", + value: "U+1D4C7" + }, + { + entity: "rsh;", + value: "U+021B1" + }, + { + entity: "rsqb;", + value: "U+0005D" + }, + { + entity: "rsquo;", + value: "U+02019" + }, + { + entity: "rsquor;", + value: "U+02019" + }, + { + entity: "rthree;", + value: "U+022CC" + }, + { + entity: "rtimes;", + value: "U+022CA" + }, + { + entity: "rtri;", + value: "U+025B9" + }, + { + entity: "rtrie;", + value: "U+022B5" + }, + { + entity: "rtrif;", + value: "U+025B8" + }, + { + entity: "rtriltri;", + value: "U+029CE" + }, + { + entity: "ruluhar;", + value: "U+02968" + }, + { + entity: "rx;", + value: "U+0211E" + }, + { + entity: "sacute;", + value: "U+0015B" + }, + { + entity: "sbquo;", + value: "U+0201A" + }, + { + entity: "sc;", + value: "U+0227B" + }, + { + entity: "scE;", + value: "U+02AB4" + }, + { + entity: "scap;", + value: "U+02AB8" + }, + { + entity: "scaron;", + value: "U+00161" + }, + { + entity: "sccue;", + value: "U+0227D" + }, + { + entity: "sce;", + value: "U+02AB0" + }, + { + entity: "scedil;", + value: "U+0015F" + }, + { + entity: "scirc;", + value: "U+0015D" + }, + { + entity: "scnE;", + value: "U+02AB6" + }, + { + entity: "scnap;", + value: "U+02ABA" + }, + { + entity: "scnsim;", + value: "U+022E9" + }, + { + entity: "scpolint;", + value: "U+02A13" + }, + { + entity: "scsim;", + value: "U+0227F" + }, + { + entity: "scy;", + value: "U+00441" + }, + { + entity: "sdot;", + value: "U+022C5" + }, + { + entity: "sdotb;", + value: "U+022A1" + }, + { + entity: "sdote;", + value: "U+02A66" + }, + { + entity: "seArr;", + value: "U+021D8" + }, + { + entity: "searhk;", + value: "U+02925" + }, + { + entity: "searr;", + value: "U+02198" + }, + { + entity: "searrow;", + value: "U+02198" + }, + { + entity: "sect;", + value: "U+000A7" + }, + { + entity: "sect", + value: "U+000A7" + }, + { + entity: "semi;", + value: "U+0003B" + }, + { + entity: "seswar;", + value: "U+02929" + }, + { + entity: "setminus;", + value: "U+02216" + }, + { + entity: "setmn;", + value: "U+02216" + }, + { + entity: "sext;", + value: "U+02736" + }, + { + entity: "sfr;", + value: "U+1D530" + }, + { + entity: "sfrown;", + value: "U+02322" + }, + { + entity: "sharp;", + value: "U+0266F" + }, + { + entity: "shchcy;", + value: "U+00449" + }, + { + entity: "shcy;", + value: "U+00448" + }, + { + entity: "shortmid;", + value: "U+02223" + }, + { + entity: "shortparallel;", + value: "U+02225" + }, + { + entity: "shy;", + value: "U+000AD " + }, + { + entity: "shy", + value: "U+000AD " + }, + { + entity: "sigma;", + value: "U+003C3" + }, + { + entity: "sigmaf;", + value: "U+003C2" + }, + { + entity: "sigmav;", + value: "U+003C2" + }, + { + entity: "sim;", + value: "U+0223C" + }, + { + entity: "simdot;", + value: "U+02A6A" + }, + { + entity: "sime;", + value: "U+02243" + }, + { + entity: "simeq;", + value: "U+02243" + }, + { + entity: "simg;", + value: "U+02A9E" + }, + { + entity: "simgE;", + value: "U+02AA0" + }, + { + entity: "siml;", + value: "U+02A9D" + }, + { + entity: "simlE;", + value: "U+02A9F" + }, + { + entity: "simne;", + value: "U+02246" + }, + { + entity: "simplus;", + value: "U+02A24" + }, + { + entity: "simrarr;", + value: "U+02972" + }, + { + entity: "slarr;", + value: "U+02190" + }, + { + entity: "smallsetminus;", + value: "U+02216" + }, + { + entity: "smashp;", + value: "U+02A33" + }, + { + entity: "smeparsl;", + value: "U+029E4" + }, + { + entity: "smid;", + value: "U+02223" + }, + { + entity: "smile;", + value: "U+02323" + }, + { + entity: "smt;", + value: "U+02AAA" + }, + { + entity: "smte;", + value: "U+02AAC" + }, + { + entity: "softcy;", + value: "U+0044C" + }, + { + entity: "sol;", + value: "U+0002F" + }, + { + entity: "solb;", + value: "U+029C4" + }, + { + entity: "solbar;", + value: "U+0233F" + }, + { + entity: "sopf;", + value: "U+1D564" + }, + { + entity: "spades;", + value: "U+02660" + }, + { + entity: "spadesuit;", + value: "U+02660" + }, + { + entity: "spar;", + value: "U+02225" + }, + { + entity: "sqcap;", + value: "U+02293" + }, + { + entity: "sqcup;", + value: "U+02294" + }, + { + entity: "sqsub;", + value: "U+0228F" + }, + { + entity: "sqsube;", + value: "U+02291" + }, + { + entity: "sqsubset;", + value: "U+0228F" + }, + { + entity: "sqsubseteq;", + value: "U+02291" + }, + { + entity: "sqsup;", + value: "U+02290" + }, + { + entity: "sqsupe;", + value: "U+02292" + }, + { + entity: "sqsupset;", + value: "U+02290" + }, + { + entity: "sqsupseteq;", + value: "U+02292" + }, + { + entity: "squ;", + value: "U+025A1" + }, + { + entity: "square;", + value: "U+025A1" + }, + { + entity: "squarf;", + value: "U+025AA" + }, + { + entity: "squf;", + value: "U+025AA" + }, + { + entity: "srarr;", + value: "U+02192" + }, + { + entity: "sscr;", + value: "U+1D4C8" + }, + { + entity: "ssetmn;", + value: "U+02216" + }, + { + entity: "ssmile;", + value: "U+02323" + }, + { + entity: "sstarf;", + value: "U+022C6" + }, + { + entity: "star;", + value: "U+02606" + }, + { + entity: "starf;", + value: "U+02605" + }, + { + entity: "straightepsilon;", + value: "U+003F5" + }, + { + entity: "straightphi;", + value: "U+003D5" + }, + { + entity: "strns;", + value: "U+000AF" + }, + { + entity: "sub;", + value: "U+02282" + }, + { + entity: "subE;", + value: "U+02AC5" + }, + { + entity: "subdot;", + value: "U+02ABD" + }, + { + entity: "sube;", + value: "U+02286" + }, + { + entity: "subedot;", + value: "U+02AC3" + }, + { + entity: "submult;", + value: "U+02AC1" + }, + { + entity: "subnE;", + value: "U+02ACB" + }, + { + entity: "subne;", + value: "U+0228A" + }, + { + entity: "subplus;", + value: "U+02ABF" + }, + { + entity: "subrarr;", + value: "U+02979" + }, + { + entity: "subset;", + value: "U+02282" + }, + { + entity: "subseteq;", + value: "U+02286" + }, + { + entity: "subseteqq;", + value: "U+02AC5" + }, + { + entity: "subsetneq;", + value: "U+0228A" + }, + { + entity: "subsetneqq;", + value: "U+02ACB" + }, + { + entity: "subsim;", + value: "U+02AC7" + }, + { + entity: "subsub;", + value: "U+02AD5" + }, + { + entity: "subsup;", + value: "U+02AD3" + }, + { + entity: "succ;", + value: "U+0227B" + }, + { + entity: "succapprox;", + value: "U+02AB8" + }, + { + entity: "succcurlyeq;", + value: "U+0227D" + }, + { + entity: "succeq;", + value: "U+02AB0" + }, + { + entity: "succnapprox;", + value: "U+02ABA" + }, + { + entity: "succneqq;", + value: "U+02AB6" + }, + { + entity: "succnsim;", + value: "U+022E9" + }, + { + entity: "succsim;", + value: "U+0227F" + }, + { + entity: "sum;", + value: "U+02211" + }, + { + entity: "sung;", + value: "U+0266A" + }, + { + entity: "sup1;", + value: "U+000B9" + }, + { + entity: "sup1", + value: "U+000B9" + }, + { + entity: "sup2;", + value: "U+000B2" + }, + { + entity: "sup2", + value: "U+000B2" + }, + { + entity: "sup3;", + value: "U+000B3" + }, + { + entity: "sup3", + value: "U+000B3" + }, + { + entity: "sup;", + value: "U+02283" + }, + { + entity: "supE;", + value: "U+02AC6" + }, + { + entity: "supdot;", + value: "U+02ABE" + }, + { + entity: "supdsub;", + value: "U+02AD8" + }, + { + entity: "supe;", + value: "U+02287" + }, + { + entity: "supedot;", + value: "U+02AC4" + }, + { + entity: "suphsol;", + value: "U+027C9" + }, + { + entity: "suphsub;", + value: "U+02AD7" + }, + { + entity: "suplarr;", + value: "U+0297B" + }, + { + entity: "supmult;", + value: "U+02AC2" + }, + { + entity: "supnE;", + value: "U+02ACC" + }, + { + entity: "supne;", + value: "U+0228B" + }, + { + entity: "supplus;", + value: "U+02AC0" + }, + { + entity: "supset;", + value: "U+02283" + }, + { + entity: "supseteq;", + value: "U+02287" + }, + { + entity: "supseteqq;", + value: "U+02AC6" + }, + { + entity: "supsetneq;", + value: "U+0228B" + }, + { + entity: "supsetneqq;", + value: "U+02ACC" + }, + { + entity: "supsim;", + value: "U+02AC8" + }, + { + entity: "supsub;", + value: "U+02AD4" + }, + { + entity: "supsup;", + value: "U+02AD6" + }, + { + entity: "swArr;", + value: "U+021D9" + }, + { + entity: "swarhk;", + value: "U+02926" + }, + { + entity: "swarr;", + value: "U+02199" + }, + { + entity: "swarrow;", + value: "U+02199" + }, + { + entity: "swnwar;", + value: "U+0292A" + }, + { + entity: "szlig;", + value: "U+000DF" + }, + { + entity: "szlig", + value: "U+000DF" + }, + { + entity: "target;", + value: "U+02316" + }, + { + entity: "tau;", + value: "U+003C4" + }, + { + entity: "tbrk;", + value: "U+023B4" + }, + { + entity: "tcaron;", + value: "U+00165" + }, + { + entity: "tcedil;", + value: "U+00163" + }, + { + entity: "tcy;", + value: "U+00442" + }, + { + entity: "tdot;", + value: "U+020DB" + }, + { + entity: "telrec;", + value: "U+02315" + }, + { + entity: "tfr;", + value: "U+1D531" + }, + { + entity: "there4;", + value: "U+02234" + }, + { + entity: "therefore;", + value: "U+02234" + }, + { + entity: "theta;", + value: "U+003B8" + }, + { + entity: "thetasym;", + value: "U+003D1" + }, + { + entity: "thetav;", + value: "U+003D1" + }, + { + entity: "thickapprox;", + value: "U+02248" + }, + { + entity: "thicksim;", + value: "U+0223C" + }, + { + entity: "thinsp;", + value: "U+02009" + }, + { + entity: "thkap;", + value: "U+02248" + }, + { + entity: "thksim;", + value: "U+0223C" + }, + { + entity: "thorn;", + value: "U+000FE" + }, + { + entity: "thorn", + value: "U+000FE" + }, + { + entity: "tilde;", + value: "U+002DC" + }, + { + entity: "times;", + value: "U+000D7" + }, + { + entity: "times", + value: "U+000D7" + }, + { + entity: "timesb;", + value: "U+022A0" + }, + { + entity: "timesbar;", + value: "U+02A31" + }, + { + entity: "timesd;", + value: "U+02A30" + }, + { + entity: "tint;", + value: "U+0222D" + }, + { + entity: "toea;", + value: "U+02928" + }, + { + entity: "top;", + value: "U+022A4" + }, + { + entity: "topbot;", + value: "U+02336" + }, + { + entity: "topcir;", + value: "U+02AF1" + }, + { + entity: "topf;", + value: "U+1D565" + }, + { + entity: "topfork;", + value: "U+02ADA" + }, + { + entity: "tosa;", + value: "U+02929" + }, + { + entity: "tprime;", + value: "U+02034" + }, + { + entity: "trade;", + value: "U+02122" + }, + { + entity: "triangle;", + value: "U+025B5" + }, + { + entity: "triangledown;", + value: "U+025BF" + }, + { + entity: "triangleleft;", + value: "U+025C3" + }, + { + entity: "trianglelefteq;", + value: "U+022B4" + }, + { + entity: "triangleq;", + value: "U+0225C" + }, + { + entity: "triangleright;", + value: "U+025B9" + }, + { + entity: "trianglerighteq;", + value: "U+022B5" + }, + { + entity: "tridot;", + value: "U+025EC" + }, + { + entity: "trie;", + value: "U+0225C" + }, + { + entity: "triminus;", + value: "U+02A3A" + }, + { + entity: "triplus;", + value: "U+02A39" + }, + { + entity: "trisb;", + value: "U+029CD" + }, + { + entity: "tritime;", + value: "U+02A3B" + }, + { + entity: "trpezium;", + value: "U+023E2" + }, + { + entity: "tscr;", + value: "U+1D4C9" + }, + { + entity: "tscy;", + value: "U+00446" + }, + { + entity: "tshcy;", + value: "U+0045B" + }, + { + entity: "tstrok;", + value: "U+00167" + }, + { + entity: "twixt;", + value: "U+0226C" + }, + { + entity: "twoheadleftarrow;", + value: "U+0219E" + }, + { + entity: "twoheadrightarrow;", + value: "U+021A0" + }, + { + entity: "uArr;", + value: "U+021D1" + }, + { + entity: "uHar;", + value: "U+02963" + }, + { + entity: "uacute;", + value: "U+000FA" + }, + { + entity: "uacute", + value: "U+000FA" + }, + { + entity: "uarr;", + value: "U+02191" + }, + { + entity: "ubrcy;", + value: "U+0045E" + }, + { + entity: "ubreve;", + value: "U+0016D" + }, + { + entity: "ucirc;", + value: "U+000FB" + }, + { + entity: "ucirc", + value: "U+000FB" + }, + { + entity: "ucy;", + value: "U+00443" + }, + { + entity: "udarr;", + value: "U+021C5" + }, + { + entity: "udblac;", + value: "U+00171" + }, + { + entity: "udhar;", + value: "U+0296E" + }, + { + entity: "ufisht;", + value: "U+0297E" + }, + { + entity: "ufr;", + value: "U+1D532" + }, + { + entity: "ugrave;", + value: "U+000F9" + }, + { + entity: "ugrave", + value: "U+000F9" + }, + { + entity: "uharl;", + value: "U+021BF" + }, + { + entity: "uharr;", + value: "U+021BE" + }, + { + entity: "uhblk;", + value: "U+02580" + }, + { + entity: "ulcorn;", + value: "U+0231C" + }, + { + entity: "ulcorner;", + value: "U+0231C" + }, + { + entity: "ulcrop;", + value: "U+0230F" + }, + { + entity: "ultri;", + value: "U+025F8" + }, + { + entity: "umacr;", + value: "U+0016B" + }, + { + entity: "uml;", + value: "U+000A8" + }, + { + entity: "uml", + value: "U+000A8" + }, + { + entity: "uogon;", + value: "U+00173" + }, + { + entity: "uopf;", + value: "U+1D566" + }, + { + entity: "uparrow;", + value: "U+02191" + }, + { + entity: "updownarrow;", + value: "U+02195" + }, + { + entity: "upharpoonleft;", + value: "U+021BF" + }, + { + entity: "upharpoonright;", + value: "U+021BE" + }, + { + entity: "uplus;", + value: "U+0228E" + }, + { + entity: "upsi;", + value: "U+003C5" + }, + { + entity: "upsih;", + value: "U+003D2" + }, + { + entity: "upsilon;", + value: "U+003C5" + }, + { + entity: "upuparrows;", + value: "U+021C8" + }, + { + entity: "urcorn;", + value: "U+0231D" + }, + { + entity: "urcorner;", + value: "U+0231D" + }, + { + entity: "urcrop;", + value: "U+0230E" + }, + { + entity: "uring;", + value: "U+0016F" + }, + { + entity: "urtri;", + value: "U+025F9" + }, + { + entity: "uscr;", + value: "U+1D4CA" + }, + { + entity: "utdot;", + value: "U+022F0" + }, + { + entity: "utilde;", + value: "U+00169" + }, + { + entity: "utri;", + value: "U+025B5" + }, + { + entity: "utrif;", + value: "U+025B4" + }, + { + entity: "uuarr;", + value: "U+021C8" + }, + { + entity: "uuml;", + value: "U+000FC" + }, + { + entity: "uuml", + value: "U+000FC" + }, + { + entity: "uwangle;", + value: "U+029A7" + }, + { + entity: "vArr;", + value: "U+021D5" + }, + { + entity: "vBar;", + value: "U+02AE8" + }, + { + entity: "vBarv;", + value: "U+02AE9" + }, + { + entity: "vDash;", + value: "U+022A8" + }, + { + entity: "vangrt;", + value: "U+0299C" + }, + { + entity: "varepsilon;", + value: "U+003F5" + }, + { + entity: "varkappa;", + value: "U+003F0" + }, + { + entity: "varnothing;", + value: "U+02205" + }, + { + entity: "varphi;", + value: "U+003D5" + }, + { + entity: "varpi;", + value: "U+003D6" + }, + { + entity: "varpropto;", + value: "U+0221D" + }, + { + entity: "varr;", + value: "U+02195" + }, + { + entity: "varrho;", + value: "U+003F1" + }, + { + entity: "varsigma;", + value: "U+003C2" + }, + { + entity: "vartheta;", + value: "U+003D1" + }, + { + entity: "vartriangleleft;", + value: "U+022B2" + }, + { + entity: "vartriangleright;", + value: "U+022B3" + }, + { + entity: "vcy;", + value: "U+00432" + }, + { + entity: "vdash;", + value: "U+022A2" + }, + { + entity: "vee;", + value: "U+02228" + }, + { + entity: "veebar;", + value: "U+022BB" + }, + { + entity: "veeeq;", + value: "U+0225A" + }, + { + entity: "vellip;", + value: "U+022EE" + }, + { + entity: "verbar;", + value: "U+0007C" + }, + { + entity: "vert;", + value: "U+0007C" + }, + { + entity: "vfr;", + value: "U+1D533" + }, + { + entity: "vltri;", + value: "U+022B2" + }, + { + entity: "vopf;", + value: "U+1D567" + }, + { + entity: "vprop;", + value: "U+0221D" + }, + { + entity: "vrtri;", + value: "U+022B3" + }, + { + entity: "vscr;", + value: "U+1D4CB" + }, + { + entity: "vzigzag;", + value: "U+0299A" + }, + { + entity: "wcirc;", + value: "U+00175" + }, + { + entity: "wedbar;", + value: "U+02A5F" + }, + { + entity: "wedge;", + value: "U+02227" + }, + { + entity: "wedgeq;", + value: "U+02259" + }, + { + entity: "weierp;", + value: "U+02118" + }, + { + entity: "wfr;", + value: "U+1D534" + }, + { + entity: "wopf;", + value: "U+1D568" + }, + { + entity: "wp;", + value: "U+02118" + }, + { + entity: "wr;", + value: "U+02240" + }, + { + entity: "wreath;", + value: "U+02240" + }, + { + entity: "wscr;", + value: "U+1D4CC" + }, + { + entity: "xcap;", + value: "U+022C2" + }, + { + entity: "xcirc;", + value: "U+025EF" + }, + { + entity: "xcup;", + value: "U+022C3" + }, + { + entity: "xdtri;", + value: "U+025BD" + }, + { + entity: "xfr;", + value: "U+1D535" + }, + { + entity: "xhArr;", + value: "U+027FA" + }, + { + entity: "xharr;", + value: "U+027F7" + }, + { + entity: "xi;", + value: "U+003BE" + }, + { + entity: "xlArr;", + value: "U+027F8" + }, + { + entity: "xlarr;", + value: "U+027F5" + }, + { + entity: "xmap;", + value: "U+027FC" + }, + { + entity: "xnis;", + value: "U+022FB" + }, + { + entity: "xodot;", + value: "U+02A00" + }, + { + entity: "xopf;", + value: "U+1D569" + }, + { + entity: "xoplus;", + value: "U+02A01" + }, + { + entity: "xotime;", + value: "U+02A02" + }, + { + entity: "xrArr;", + value: "U+027F9" + }, + { + entity: "xrarr;", + value: "U+027F6" + }, + { + entity: "xscr;", + value: "U+1D4CD" + }, + { + entity: "xsqcup;", + value: "U+02A06" + }, + { + entity: "xuplus;", + value: "U+02A04" + }, + { + entity: "xutri;", + value: "U+025B3" + }, + { + entity: "xvee;", + value: "U+022C1" + }, + { + entity: "xwedge;", + value: "U+022C0" + }, + { + entity: "yacute;", + value: "U+000FD" + }, + { + entity: "yacute", + value: "U+000FD" + }, + { + entity: "yacy;", + value: "U+0044F" + }, + { + entity: "ycirc;", + value: "U+00177" + }, + { + entity: "ycy;", + value: "U+0044B" + }, + { + entity: "yen;", + value: "U+000A5" + }, + { + entity: "yen", + value: "U+000A5" + }, + { + entity: "yfr;", + value: "U+1D536" + }, + { + entity: "yicy;", + value: "U+00457" + }, + { + entity: "yopf;", + value: "U+1D56A" + }, + { + entity: "yscr;", + value: "U+1D4CE" + }, + { + entity: "yucy;", + value: "U+0044E" + }, + { + entity: "yuml;", + value: "U+000FF" + }, + { + entity: "yuml", + value: "U+000FF" + }, + { + entity: "zacute;", + value: "U+0017A" + }, + { + entity: "zcaron;", + value: "U+0017E" + }, + { + entity: "zcy;", + value: "U+00437" + }, + { + entity: "zdot;", + value: "U+0017C" + }, + { + entity: "zeetrf;", + value: "U+02128" + }, + { + entity: "zeta;", + value: "U+003B6" + }, + { + entity: "zfr;", + value: "U+1D537" + }, + { + entity: "zhcy;", + value: "U+00436" + }, + { + entity: "zigrarr;", + value: "U+021DD" + }, + { + entity: "zopf;", + value: "U+1D56B" + }, + { + entity: "zscr;", + value: "U+1D4CF" + }, + { + entity: "zwj;", + value: "U+0200D" + }, + { + entity: "zwnj;", + value: "U+0200C" + } +] diff --git a/WebCore/html/HTMLFormattingElementList.cpp b/WebCore/html/HTMLFormattingElementList.cpp index 0198261..d71cc8c 100644 --- a/WebCore/html/HTMLFormattingElementList.cpp +++ b/WebCore/html/HTMLFormattingElementList.cpp @@ -31,49 +31,6 @@ namespace WebCore { -HTMLFormattingElementList::Entry::Entry(Element* element) - : m_element(element) -{ - ASSERT(element); -} - -HTMLFormattingElementList::Entry::Entry(MarkerEntryType) -{ -} - -HTMLFormattingElementList::Entry::~Entry() -{ -} - -bool HTMLFormattingElementList::Entry::isMarker() const -{ - return !m_element; -} - -Element* HTMLFormattingElementList::Entry::element() const -{ - // The fact that !m_element == isMarker() is an implementation detail - // callers should check isMarker() before calling element(). - ASSERT(m_element); - return m_element.get(); -} - -void HTMLFormattingElementList::Entry::replaceElement(PassRefPtr<Element> element) -{ - ASSERT(m_element); // Once a marker, always a marker. - m_element = element; -} - -bool HTMLFormattingElementList::Entry::operator==(const Entry& other) const -{ - return element() == other.element(); -} - -bool HTMLFormattingElementList::Entry::operator!=(const Entry& other) const -{ - return element() != other.element(); -} - HTMLFormattingElementList::HTMLFormattingElementList() { } @@ -101,7 +58,7 @@ bool HTMLFormattingElementList::contains(Element* element) HTMLFormattingElementList::Entry* HTMLFormattingElementList::find(Element* element) { - size_t index = m_entries.find(element); + size_t index = m_entries.reverseFind(element); if (index != notFound) { // This is somewhat of a hack, and is why this method can't be const. return &m_entries[index]; @@ -109,6 +66,42 @@ HTMLFormattingElementList::Entry* HTMLFormattingElementList::find(Element* eleme return 0; } +HTMLFormattingElementList::Bookmark HTMLFormattingElementList::bookmarkFor(Element* element) +{ + size_t index = m_entries.reverseFind(element); + ASSERT(index != notFound); + Element* elementBefore = (index > 1) ? m_entries[index - 1].element() : 0; + Element* elementAfter = (index < m_entries.size() - 1) ? m_entries[index + 1].element() : 0; + return Bookmark(elementBefore, elementAfter); +} + +void HTMLFormattingElementList::insertAt(Element* element, const Bookmark& bookmark) +{ + size_t beforeIndex = notFound; + if (bookmark.elementBefore()) { + beforeIndex = m_entries.reverseFind(bookmark.elementBefore()); + ASSERT(beforeIndex != notFound); + } + size_t afterIndex = notFound; + if (bookmark.elementAfter()) { + afterIndex = m_entries.reverseFind(bookmark.elementAfter()); + ASSERT(afterIndex != notFound); + } + + if (!bookmark.elementBefore()) { + if (bookmark.elementAfter()) + ASSERT(!afterIndex); + m_entries.prepend(element); + } else { + if (bookmark.elementAfter()) { + // Bookmarks are not general purpose. They're only for the Adoption + // Agency. Assume the bookmarked element was already removed. + ASSERT(beforeIndex + 1 == afterIndex); + } + m_entries.insert(beforeIndex + 1, element); + } +} + void HTMLFormattingElementList::append(Element* element) { m_entries.append(element); @@ -116,7 +109,7 @@ void HTMLFormattingElementList::append(Element* element) void HTMLFormattingElementList::remove(Element* element) { - size_t index = m_entries.find(element); + size_t index = m_entries.reverseFind(element); if (index != notFound) m_entries.remove(index); } @@ -132,4 +125,19 @@ void HTMLFormattingElementList::clearToLastMarker() m_entries.removeLast(); } +#ifndef NDEBUG + +void HTMLFormattingElementList::show() +{ + for (unsigned i = 1; i <= m_entries.size(); ++i) { + const Entry& entry = m_entries[m_entries.size() - i]; + if (entry.isMarker()) + fprintf(stderr, "marker\n"); + else + entry.element()->showNode(); + } +} + +#endif + } diff --git a/WebCore/html/HTMLFormattingElementList.h b/WebCore/html/HTMLFormattingElementList.h index da30f75..6b41da4 100644 --- a/WebCore/html/HTMLFormattingElementList.h +++ b/WebCore/html/HTMLFormattingElementList.h @@ -46,22 +46,58 @@ public: // access to Entry::isMarker() and Entry::replaceElement() to do so. class Entry { public: - Entry(Element*); + // Inline because they're hot and Vector<T> uses them. + explicit Entry(Element* element) + : m_element(element) + { + ASSERT(element); + } enum MarkerEntryType { MarkerEntry }; - Entry(MarkerEntryType); - ~Entry(); + Entry(MarkerEntryType) + : m_element(0) + { + } + ~Entry() {} + + bool isMarker() const { return !m_element; } + + Element* element() const + { + // The fact that !m_element == isMarker() is an implementation detail + // callers should check isMarker() before calling element(). + ASSERT(m_element); + return m_element.get(); + } + void replaceElement(PassRefPtr<Element> element) { m_element = element; } + + // Needed for use with Vector. These are super-hot and must be inline. + bool operator==(Element* element) const { return m_element == element; } + bool operator!=(Element* element) const { return m_element != element; } - bool isMarker() const; + private: + RefPtr<Element> m_element; + }; + + class Bookmark { + public: + Bookmark(Element* before, Element* after) + : m_before(before) + , m_after(after) + { + } - Element* element() const; - void replaceElement(PassRefPtr<Element>); + void moveToAfter(Element* before) + { + m_before = before; + m_after = 0; + } - // Needed for use with Vector. - bool operator==(const Entry&) const; - bool operator!=(const Entry&) const; + Element* elementBefore() const { return m_before; } + Element* elementAfter() const { return m_after; } private: - RefPtr<Element> m_element; + Element* m_before; + Element* m_after; }; bool isEmpty() const { return !size(); } @@ -74,11 +110,18 @@ public: void append(Element*); void remove(Element*); + Bookmark bookmarkFor(Element*); + void insertAt(Element*, const Bookmark&); + void appendMarker(); void clearToLastMarker(); - const Entry& operator[](size_t i) const { return m_entries[i]; } - Entry& operator[](size_t i) { return m_entries[i]; } + const Entry& at(size_t i) const { return m_entries[i]; } + Entry& at(size_t i) { return m_entries[i]; } + +#ifndef NDEBUG + void show(); +#endif private: Vector<Entry> m_entries; diff --git a/WebCore/html/HTMLFrameElement.idl b/WebCore/html/HTMLFrameElement.idl index f1451f5..4a5268c 100644 --- a/WebCore/html/HTMLFrameElement.idl +++ b/WebCore/html/HTMLFrameElement.idl @@ -29,7 +29,7 @@ module html { attribute [Reflect] DOMString name; attribute [Reflect] boolean noResize; attribute [Reflect] DOMString scrolling; - attribute [ReflectURL] DOMString src; + attribute [Reflect,URL] DOMString src; // Introduced in DOM Level 2: readonly attribute [CheckFrameSecurity] Document contentDocument; diff --git a/WebCore/html/HTMLImageElement.idl b/WebCore/html/HTMLImageElement.idl index 0fc7271..1bf8a28 100644 --- a/WebCore/html/HTMLImageElement.idl +++ b/WebCore/html/HTMLImageElement.idl @@ -30,15 +30,15 @@ module html { attribute long height; attribute [Reflect] long hspace; attribute [Reflect] boolean isMap; - attribute [ReflectURL=longdesc] DOMString longDesc; - attribute [ReflectURL] DOMString src; + attribute [Reflect,URL] DOMString longDesc; + attribute [Reflect,URL] DOMString src; attribute [Reflect] DOMString useMap; attribute [Reflect] long vspace; attribute long width; // Extensions readonly attribute boolean complete; - attribute [ReflectURL] DOMString lowsrc; + attribute [Reflect,URL] DOMString lowsrc; readonly attribute long naturalHeight; readonly attribute long naturalWidth; readonly attribute long x; diff --git a/WebCore/html/HTMLInputElement.cpp b/WebCore/html/HTMLInputElement.cpp index d6136d8..8502814 100644 --- a/WebCore/html/HTMLInputElement.cpp +++ b/WebCore/html/HTMLInputElement.cpp @@ -871,7 +871,7 @@ void HTMLInputElement::setInputType(const String& t) registerForActivationCallbackIfNeeded(); if (didRespectHeightAndWidth != willRespectHeightAndWidth) { - NamedNodeMap* map = mappedAttributes(); + NamedNodeMap* map = attributeMap(); ASSERT(map); if (Attribute* height = map->getAttributeItem(heightAttr)) attributeChanged(height, false); diff --git a/WebCore/html/HTMLInputElement.h b/WebCore/html/HTMLInputElement.h index 6791fa2..b055e73 100644 --- a/WebCore/html/HTMLInputElement.h +++ b/WebCore/html/HTMLInputElement.h @@ -124,6 +124,9 @@ public: virtual void setValue(const String&, bool sendChangeEvent = false); virtual void setValueForUser(const String&); + virtual const String& suggestedValue() const; + void setSuggestedValue(const String&); + double valueAsDate() const; void setValueAsDate(double, ExceptionCode&); @@ -239,9 +242,6 @@ private: virtual const AtomicString& formControlType() const; - virtual const String& suggestedValue() const; - void setSuggestedValue(const String&); - virtual bool searchEventsShouldBeDispatched() const; virtual bool saveFormControlState(String& value) const; diff --git a/WebCore/html/HTMLInputElement.idl b/WebCore/html/HTMLInputElement.idl index 9b6bbbf..b93f05c 100644 --- a/WebCore/html/HTMLInputElement.idl +++ b/WebCore/html/HTMLInputElement.idl @@ -51,7 +51,7 @@ module html { // FIXME: The spec says this should be a long, not an unsigned long. attribute unsigned long size; // Changed string -> long as part of DOM level 2 #endif - attribute [ReflectURL] DOMString src; + attribute [Reflect,URL] DOMString src; attribute [Reflect] DOMString step; attribute [ConvertNullToNullString, JSCCustomGetter] DOMString type; // readonly dropped as part of DOM level 2 attribute [Reflect] DOMString useMap; diff --git a/WebCore/html/HTMLLinkElement.cpp b/WebCore/html/HTMLLinkElement.cpp index eff250a..bad236a 100644 --- a/WebCore/html/HTMLLinkElement.cpp +++ b/WebCore/html/HTMLLinkElement.cpp @@ -147,10 +147,13 @@ void HTMLLinkElement::tokenizeRelAttribute(const AtomicString& rel, RelAttribute #if ENABLE(LINK_PREFETCH) relAttribute.m_isLinkPrefetch = false; #endif +<<<<<<< HEAD #ifdef ANDROID_APPLE_TOUCH_ICON relAttribute.m_isTouchIcon = false; relAttribute.m_isPrecomposedTouchIcon = false; #endif +======= +>>>>>>> webkit.org at r63173 if (equalIgnoringCase(rel, "stylesheet")) relAttribute.m_isStyleSheet = true; else if (equalIgnoringCase(rel, "icon") || equalIgnoringCase(rel, "shortcut icon")) diff --git a/WebCore/html/HTMLLinkElement.h b/WebCore/html/HTMLLinkElement.h index 8fb93ba..cc8d2d1 100644 --- a/WebCore/html/HTMLLinkElement.h +++ b/WebCore/html/HTMLLinkElement.h @@ -41,10 +41,13 @@ public: bool m_isIcon; bool m_isAlternate; bool m_isDNSPrefetch; +<<<<<<< HEAD #ifdef ANDROID_APPLE_TOUCH_ICON bool m_isTouchIcon; bool m_isPrecomposedTouchIcon; #endif +======= +>>>>>>> webkit.org at r63173 #if ENABLE(LINK_PREFETCH) bool m_isLinkPrefetch; #endif @@ -57,7 +60,12 @@ public: #if ENABLE(LINK_PREFETCH) , m_isLinkPrefetch(false) #endif +<<<<<<< HEAD { }; +======= + { + } +>>>>>>> webkit.org at r63173 }; static PassRefPtr<HTMLLinkElement> create(const QualifiedName&, Document*, bool createdByParser); diff --git a/WebCore/html/HTMLLinkElement.idl b/WebCore/html/HTMLLinkElement.idl index a7e7d32..dfec24b 100644 --- a/WebCore/html/HTMLLinkElement.idl +++ b/WebCore/html/HTMLLinkElement.idl @@ -23,7 +23,7 @@ module html { interface HTMLLinkElement : HTMLElement { attribute [Reflect] boolean disabled; attribute [Reflect] DOMString charset; - attribute [ReflectURL] DOMString href; + attribute [Reflect,URL] DOMString href; attribute [Reflect] DOMString hreflang; attribute [Reflect] DOMString media; attribute [Reflect] DOMString rel; diff --git a/WebCore/html/HTMLMediaElement.cpp b/WebCore/html/HTMLMediaElement.cpp index fb024e0..b83d1cb 100644 --- a/WebCore/html/HTMLMediaElement.cpp +++ b/WebCore/html/HTMLMediaElement.cpp @@ -424,7 +424,7 @@ PassRefPtr<MediaError> HTMLMediaElement::error() const KURL HTMLMediaElement::src() const { - return document()->completeURL(getAttribute(srcAttr)); + return getNonEmptyURLAttribute(srcAttr); } void HTMLMediaElement::setSrc(const String& url) @@ -545,14 +545,16 @@ void HTMLMediaElement::loadInternal() void HTMLMediaElement::selectMediaResource() { + enum Mode { attribute, children }; + Mode mode = attribute; + // 1 - Set the networkState to NETWORK_NO_SOURCE m_networkState = NETWORK_NO_SOURCE; // 2 - Asynchronously await a stable state. // 3 - ... the media element has neither a src attribute ... - String mediaSrc = getAttribute(srcAttr); - if (!mediaSrc) { + if (!hasAttribute(srcAttr)) { // ... nor a source element child: ... Node* node; for (node = firstChild(); node; node = node->nextSibling()) { @@ -568,6 +570,8 @@ void HTMLMediaElement::selectMediaResource() ASSERT(!m_delayingTheLoadEvent); return; } + + mode = children; } // 4 @@ -577,11 +581,17 @@ void HTMLMediaElement::selectMediaResource() // 5 scheduleEvent(eventNames().loadstartEvent); - // 6 - If the media element has a src attribute, then run these substeps - ContentType contentType(""); - if (!mediaSrc.isNull()) { - KURL mediaURL = document()->completeURL(mediaSrc); + // 6 - If mode is attribute, then run these substeps + if (mode == attribute) { + // If the src attribute's value is the empty string ... jump down to the failed step below + KURL mediaURL = getNonEmptyURLAttribute(srcAttr); + if (mediaURL.isEmpty()) { + noneSupported(); + return; + } + if (isSafeToLoadURL(mediaURL, Complain) && dispatchBeforeLoadEvent(mediaURL.string())) { + ContentType contentType(""); m_loadState = LoadingFromSrcAttr; loadResource(mediaURL, contentType); } else @@ -1474,9 +1484,12 @@ KURL HTMLMediaElement::selectNextSourceChild(ContentType *contentType, InvalidSo } HTMLSourceElement* source = static_cast<HTMLSourceElement*>(node); - if (!source->hasAttribute(srcAttr)) - goto check_again; + // If candidate does not have a src attribute, or if its src attribute's value is the empty string ... jump down to the failed step below + mediaURL = source->getNonEmptyURLAttribute(srcAttr); + if (mediaURL.isEmpty()) + goto check_again; + if (source->hasAttribute(mediaAttr)) { MediaQueryEvaluator screenEval("screen", document()->frame(), renderer() ? renderer()->style() : 0); RefPtr<MediaList> media = MediaList::createAllowingDescriptionSyntax(source->media()); @@ -1490,7 +1503,6 @@ KURL HTMLMediaElement::selectNextSourceChild(ContentType *contentType, InvalidSo } // Is it safe to load this url? - mediaURL = source->src(); if (!isSafeToLoadURL(mediaURL, actionIfInvalid) || !dispatchBeforeLoadEvent(mediaURL.string())) goto check_again; diff --git a/WebCore/html/HTMLMediaElement.idl b/WebCore/html/HTMLMediaElement.idl index 93430b4..baea577 100644 --- a/WebCore/html/HTMLMediaElement.idl +++ b/WebCore/html/HTMLMediaElement.idl @@ -30,7 +30,7 @@ interface [Conditional=VIDEO] HTMLMediaElement : HTMLElement { readonly attribute MediaError error; // network state - attribute [ReflectURL] DOMString src; + attribute [Reflect,NonEmpty,URL] DOMString src; readonly attribute DOMString currentSrc; const unsigned short NETWORK_EMPTY = 0; diff --git a/WebCore/html/HTMLObjectElement.cpp b/WebCore/html/HTMLObjectElement.cpp index 0724ce6..d4bccc3 100644 --- a/WebCore/html/HTMLObjectElement.cpp +++ b/WebCore/html/HTMLObjectElement.cpp @@ -154,12 +154,6 @@ void HTMLObjectElement::attach() if (!m_imageLoader) m_imageLoader.set(new HTMLImageLoader(this)); m_imageLoader->updateFromElement(); - // updateForElement() may have changed us to use fallback content and called detach() and attach(). - if (m_useFallbackContent) - return; - - if (renderer()) - toRenderImage(renderer())->setCachedImage(m_imageLoader->image()); } } diff --git a/WebCore/html/HTMLObjectElement.idl b/WebCore/html/HTMLObjectElement.idl index ee0f1c6..e4d85b3 100644 --- a/WebCore/html/HTMLObjectElement.idl +++ b/WebCore/html/HTMLObjectElement.idl @@ -32,7 +32,7 @@ module html { attribute [Reflect] DOMString border; attribute [Reflect] DOMString codeBase; attribute [Reflect] DOMString codeType; - attribute [ReflectURL] DOMString data; + attribute [Reflect,URL] DOMString data; attribute [Reflect] boolean declare; attribute [Reflect] DOMString height; attribute [Reflect] long hspace; diff --git a/WebCore/html/HTMLPlugInElement.cpp b/WebCore/html/HTMLPlugInElement.cpp index ffc6b64..7737dc4 100644 --- a/WebCore/html/HTMLPlugInElement.cpp +++ b/WebCore/html/HTMLPlugInElement.cpp @@ -51,6 +51,7 @@ HTMLPlugInElement::HTMLPlugInElement(const QualifiedName& tagName, Document* doc : HTMLFrameOwnerElement(tagName, doc) #if ENABLE(NETSCAPE_PLUGIN_API) , m_NPObject(0) + , m_isCapturingMouseEvents(false) #endif { } @@ -70,6 +71,13 @@ HTMLPlugInElement::~HTMLPlugInElement() void HTMLPlugInElement::detach() { m_instance.clear(); + + if (m_isCapturingMouseEvents) { + if (Frame* frame = document()->frame()) + frame->eventHandler()->setCapturingMouseEventsNode(0); + m_isCapturingMouseEvents = false; + } + HTMLFrameOwnerElement::detach(); } @@ -142,14 +150,7 @@ void HTMLPlugInElement::defaultEventHandler(Event* event) RenderObject* r = renderer(); if (r && r->isEmbeddedObject() && toRenderEmbeddedObject(r)->showsMissingPluginIndicator()) { - if (event->type() != eventNames().clickEvent) - return; - - Page* page = document()->page(); - if (!page) - return; - - page->chrome()->client()->missingPluginButtonClicked(this); + toRenderEmbeddedObject(r)->handleMissingPluginIndicatorEvent(event); return; } diff --git a/WebCore/html/HTMLPlugInElement.h b/WebCore/html/HTMLPlugInElement.h index 525dc40..e4f3474 100644 --- a/WebCore/html/HTMLPlugInElement.h +++ b/WebCore/html/HTMLPlugInElement.h @@ -44,6 +44,9 @@ public: NPObject* getNPObject(); #endif + bool isCapturingMouseEvents() const { return m_isCapturingMouseEvents; } + void setIsCapturingMouseEvents(bool capturing) { m_isCapturingMouseEvents = capturing; } + protected: HTMLPlugInElement(const QualifiedName& tagName, Document*); @@ -78,6 +81,7 @@ private: #if ENABLE(NETSCAPE_PLUGIN_API) NPObject* m_NPObject; #endif + bool m_isCapturingMouseEvents; }; } // namespace WebCore diff --git a/WebCore/html/HTMLScriptElement.idl b/WebCore/html/HTMLScriptElement.idl index 399b5cd..6b7c86d 100644 --- a/WebCore/html/HTMLScriptElement.idl +++ b/WebCore/html/HTMLScriptElement.idl @@ -26,7 +26,7 @@ module html { attribute [Reflect] DOMString charset; attribute [Reflect] boolean async; attribute [Reflect] boolean defer; - attribute [ReflectURL] DOMString src; + attribute [Reflect,URL] DOMString src; attribute [Reflect] DOMString type; }; } diff --git a/WebCore/html/HTMLSourceElement.cpp b/WebCore/html/HTMLSourceElement.cpp index f6ffd9f..2c83fed 100644 --- a/WebCore/html/HTMLSourceElement.cpp +++ b/WebCore/html/HTMLSourceElement.cpp @@ -64,7 +64,7 @@ void HTMLSourceElement::insertedIntoDocument() KURL HTMLSourceElement::src() const { - return document()->completeURL(getAttribute(srcAttr)); + return getNonEmptyURLAttribute(srcAttr); } void HTMLSourceElement::setSrc(const String& url) @@ -110,5 +110,11 @@ void HTMLSourceElement::errorEventTimerFired(Timer<HTMLSourceElement>*) dispatchEvent(Event::create(eventNames().errorEvent, false, true)); } +bool HTMLSourceElement::isURLAttribute(Attribute* attribute) const +{ + return attribute->name() == srcAttr; +} + } + #endif diff --git a/WebCore/html/HTMLSourceElement.h b/WebCore/html/HTMLSourceElement.h index e11c9d0..6cca64e 100644 --- a/WebCore/html/HTMLSourceElement.h +++ b/WebCore/html/HTMLSourceElement.h @@ -54,7 +54,8 @@ private: virtual int tagPriority() const { return 0; } virtual void insertedIntoDocument(); - + virtual bool isURLAttribute(Attribute*) const; + void errorEventTimerFired(Timer<HTMLSourceElement>*); Timer<HTMLSourceElement> m_errorEventTimer; diff --git a/WebCore/html/HTMLSourceElement.idl b/WebCore/html/HTMLSourceElement.idl index 863e180..f7229f1 100644 --- a/WebCore/html/HTMLSourceElement.idl +++ b/WebCore/html/HTMLSourceElement.idl @@ -25,7 +25,7 @@ module html { interface [Conditional=VIDEO] HTMLSourceElement : HTMLElement { - attribute DOMString src; + attribute [Reflect,NonEmpty,URL] DOMString src; attribute DOMString type; attribute DOMString media; }; diff --git a/WebCore/html/HTMLStyleElement.cpp b/WebCore/html/HTMLStyleElement.cpp index 79bafe6..4fa08ad 100644 --- a/WebCore/html/HTMLStyleElement.cpp +++ b/WebCore/html/HTMLStyleElement.cpp @@ -27,6 +27,7 @@ #include "Attribute.h" #include "Document.h" #include "HTMLNames.h" +#include "ScriptableDocumentParser.h" #include "ScriptEventListener.h" namespace WebCore { @@ -37,8 +38,11 @@ inline HTMLStyleElement::HTMLStyleElement(const QualifiedName& tagName, Document : HTMLElement(tagName, document) , m_loading(false) , m_createdByParser(createdByParser) + , m_startLineNumber(0) { ASSERT(hasTagName(styleTag)); + if (createdByParser && document && document->scriptableDocumentParser()) + m_startLineNumber = document->scriptableDocumentParser()->lineNumber(); } PassRefPtr<HTMLStyleElement> HTMLStyleElement::create(const QualifiedName& tagName, Document* document, bool createdByParser) @@ -58,7 +62,7 @@ void HTMLStyleElement::parseMappedAttribute(Attribute* attr) void HTMLStyleElement::finishParsingChildren() { - StyleElement::process(this); + StyleElement::process(this, m_startLineNumber); StyleElement::sheet(this); m_createdByParser = false; HTMLElement::finishParsingChildren(); @@ -83,7 +87,7 @@ void HTMLStyleElement::removedFromDocument() void HTMLStyleElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta) { if (!changedByParser) - StyleElement::process(this); + StyleElement::process(this, 0); HTMLElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta); } diff --git a/WebCore/html/HTMLStyleElement.h b/WebCore/html/HTMLStyleElement.h index 0f8a83b..10f5b10 100644 --- a/WebCore/html/HTMLStyleElement.h +++ b/WebCore/html/HTMLStyleElement.h @@ -65,6 +65,7 @@ private: bool m_loading; bool m_createdByParser; + int m_startLineNumber; }; } //namespace diff --git a/WebCore/html/HTMLToken.h b/WebCore/html/HTMLToken.h index 741f5cd..c2db87d 100644 --- a/WebCore/html/HTMLToken.h +++ b/WebCore/html/HTMLToken.h @@ -28,6 +28,7 @@ #include "NamedNodeMap.h" #include <wtf/Noncopyable.h> +#include <wtf/PassOwnPtr.h> #include <wtf/Vector.h> namespace WebCore { @@ -173,6 +174,12 @@ public: return m_selfClosing; } + void setSelfClosing() + { + ASSERT(m_type == HTMLToken::StartTag || m_type == HTMLToken::EndTag); + m_selfClosing = true; + } + const AttributeList& attributes() const { ASSERT(m_type == StartTag || m_type == EndTag); @@ -306,7 +313,7 @@ public: break; case HTMLToken::DOCTYPE: m_name = AtomicString(token.name().data(), token.name().size()); - m_doctypeData.set(token.m_doctypeData.release()); + m_doctypeData = token.m_doctypeData.release(); break; case HTMLToken::EndOfFile: break; @@ -337,9 +344,17 @@ public: } } - AtomicHTMLToken(HTMLToken::Type type, AtomicString name) + AtomicHTMLToken(HTMLToken::Type type, AtomicString name, PassRefPtr<NamedNodeMap> attributes = 0) : m_type(type) , m_name(name) + , m_attributes(attributes) + { + ASSERT(usesName()); + } + + explicit AtomicHTMLToken(const String& characters) + : m_type(HTMLToken::Character) + , m_data(characters) { } @@ -347,13 +362,13 @@ public: const AtomicString& name() const { - ASSERT(m_type == HTMLToken::StartTag || m_type == HTMLToken::EndTag || m_type == HTMLToken::DOCTYPE); + ASSERT(usesName()); return m_name; } void setName(const AtomicString& name) { - ASSERT(m_type == HTMLToken::StartTag || m_type == HTMLToken::EndTag || m_type == HTMLToken::DOCTYPE); + ASSERT(usesName()); m_name = name; } @@ -363,12 +378,26 @@ public: return m_selfClosing; } + Attribute* getAttributeItem(const QualifiedName& attributeName) + { + ASSERT(usesAttributes()); + if (!m_attributes) + return 0; + return m_attributes->getAttributeItem(attributeName); + } + NamedNodeMap* attributes() const { - ASSERT(m_type == HTMLToken::StartTag || m_type == HTMLToken::EndTag); + ASSERT(usesAttributes()); return m_attributes.get(); } + PassRefPtr<NamedNodeMap> takeAtributes() + { + ASSERT(usesAttributes()); + return m_attributes.release(); + } + const String& characters() const { ASSERT(m_type == HTMLToken::Character); @@ -404,6 +433,16 @@ public: private: HTMLToken::Type m_type; + bool usesName() const + { + return m_type == HTMLToken::StartTag || m_type == HTMLToken::EndTag || m_type == HTMLToken::DOCTYPE; + } + + bool usesAttributes() const + { + return m_type == HTMLToken::StartTag || m_type == HTMLToken::EndTag; + } + // "name" for DOCTYPE, StartTag, and EndTag AtomicString m_name; diff --git a/WebCore/html/HTMLTokenizer.cpp b/WebCore/html/HTMLTokenizer.cpp index 54e604a..55fd1ca 100644 --- a/WebCore/html/HTMLTokenizer.cpp +++ b/WebCore/html/HTMLTokenizer.cpp @@ -274,8 +274,13 @@ bool HTMLTokenizer::nextToken(SegmentedString& source, HTMLToken& token) // without getting an extra newline at the start of their <pre> element. if (m_skipLeadingNewLineForListing) { m_skipLeadingNewLineForListing = false; - if (m_state == DataState && cc == '\n') - ADVANCE_TO(DataState); + if (cc == '\n') { + if (m_state == DataState) + ADVANCE_TO(DataState); + if (m_state == RCDATAState) + ADVANCE_TO(RCDATAState); + ASSERT_NOT_REACHED(); + } } // Source: http://www.whatwg.org/specs/web-apps/current-work/#tokenisation0 @@ -1045,7 +1050,7 @@ bool HTMLTokenizer::nextToken(SegmentedString& source, HTMLToken& token) BEGIN_STATE(SelfClosingStartTagState) { if (cc == '>') { - notImplemented(); + m_token->setSelfClosing(); return emitAndResumeIn(source, DataState); } else if (cc == InputStreamPreprocessor::endOfFileMarker) { parseError(); diff --git a/WebCore/html/HTMLTreeBuilder.cpp b/WebCore/html/HTMLTreeBuilder.cpp index b4e7ce1..80d4530 100644 --- a/WebCore/html/HTMLTreeBuilder.cpp +++ b/WebCore/html/HTMLTreeBuilder.cpp @@ -20,7 +20,7 @@ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "config.h" @@ -40,13 +40,16 @@ #include "HTMLTokenizer.h" #include "LegacyHTMLDocumentParser.h" #include "LegacyHTMLTreeBuilder.h" +#include "LocalizedStrings.h" +#include "MathMLNames.h" #include "NotImplemented.h" -#if ENABLE(SVG) #include "SVGNames.h" -#endif #include "ScriptController.h" #include "Settings.h" #include "Text.h" +#include "XLinkNames.h" +#include "XMLNSNames.h" +#include "XMLNames.h" #include <wtf/UnusedParam.h> namespace WebCore { @@ -57,11 +60,93 @@ static const int uninitializedLineNumberValue = -1; namespace { -inline bool isTreeBuilderWhiteSpace(UChar cc) +inline bool isTreeBuilderWhitepace(UChar cc) { return cc == '\t' || cc == '\x0A' || cc == '\x0C' || cc == '\x0D' || cc == ' '; } +class ExternalCharacterTokenBuffer : public Noncopyable { +public: + explicit ExternalCharacterTokenBuffer(AtomicHTMLToken& token) + : m_current(token.characters().characters()) + , m_end(m_current + token.characters().length()) + { + ASSERT(!isEmpty()); + } + + ~ExternalCharacterTokenBuffer() + { + ASSERT(isEmpty()); + } + + bool isEmpty() const { return m_current == m_end; } + + void skipLeadingWhitespace() + { + ASSERT(!isEmpty()); + while (isTreeBuilderWhitepace(*m_current)) { + if (++m_current == m_end) + return; + } + } + + String takeLeadingWhitespace() + { + ASSERT(!isEmpty()); + const UChar* start = m_current; + skipLeadingWhitespace(); + if (start == m_current) + return String(); + return String(start, m_current - start); + } + + String takeRemaining() + { + ASSERT(!isEmpty()); + const UChar* start = m_current; + m_current = m_end; + return String(start, m_current - start); + } + + void giveRemainingTo(Vector<UChar>& recipient) + { + recipient.append(m_current, m_end - m_current); + m_current = m_end; + } + + String takeRemainingWhitespace() + { + ASSERT(!isEmpty()); + Vector<UChar> whitespace; + do { + UChar cc = *m_current++; + if (isTreeBuilderWhitepace(cc)) + whitespace.append(cc); + } while (m_current < m_end); + // Returning the null string when there aren't any whitespace + // characters is slightly cleaner semantically because we don't want + // to insert a text node (as opposed to inserting an empty text node). + if (whitespace.isEmpty()) + return String(); + return String::adopt(whitespace); + } + +private: + const UChar* m_current; + const UChar* m_end; +}; + +inline bool hasNonWhitespace(const String& string) +{ + const UChar* characters = string.characters(); + const unsigned length = string.length(); + for (unsigned i = 0; i < length; ++i) { + if (!isTreeBuilderWhitepace(characters[i])) + return true; + } + return false; +} + bool shouldUseLegacyTreeBuilder(Document* document) { return !document->settings() || !document->settings()->html5TreeBuilderEnabled(); @@ -77,6 +162,18 @@ bool isNumberedHeaderTag(const AtomicString& tagName) || tagName == h6Tag; } +bool isCaptionColOrColgroupTag(const AtomicString& tagName) +{ + return tagName == captionTag + || tagName == colTag + || tagName == colgroupTag; +} + +bool isTableCellContextTag(const AtomicString& tagName) +{ + return tagName == thTag || tagName == tdTag; +} + bool isTableBodyContextTag(const AtomicString& tagName) { return tagName == tbodyTag @@ -158,18 +255,15 @@ bool isScopingTag(const AtomicString& tagName) return tagName == appletTag || tagName == buttonTag || tagName == captionTag -#if ENABLE(SVG_FOREIGN_OBJECT) || tagName == SVGNames::foreignObjectTag -#endif || tagName == htmlTag || tagName == marqueeTag || tagName == objectTag || tagName == tableTag - || tagName == tdTag - || tagName == thTag; + || isTableCellContextTag(tagName); } -bool isNonAnchorFormattingTag(const AtomicString& tagName) +bool isNonAnchorNonNobrFormattingTag(const AtomicString& tagName) { return tagName == bTag || tagName == bigTag @@ -177,7 +271,6 @@ bool isNonAnchorFormattingTag(const AtomicString& tagName) || tagName == emTag || tagName == fontTag || tagName == iTag - || tagName == nobrTag || tagName == sTag || tagName == smallTag || tagName == strikeTag @@ -186,6 +279,19 @@ bool isNonAnchorFormattingTag(const AtomicString& tagName) || tagName == uTag; } +bool isNonAnchorFormattingTag(const AtomicString& tagName) +{ + return tagName == nobrTag + || isNonAnchorNonNobrFormattingTag(tagName); +} + +bool requiresRedirectToFosterParent(Element* element) +{ + return element->hasTagName(tableTag) + || isTableBodyContextTag(element->localName()) + || element->hasTagName(trTag); +} + // http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#formatting bool isFormattingTag(const AtomicString& tagName) { @@ -198,15 +304,27 @@ bool isPhrasingTag(const AtomicString& tagName) return !isSpecialTag(tagName) && !isScopingTag(tagName) && !isFormattingTag(tagName); } +bool isNotFormattingAndNotPhrasing(const Element* element) +{ + // The spec often says "node is not in the formatting category, and is not + // in the phrasing category". !phrasing && !formatting == scoping || special + // scoping || special is easier to compute. + // FIXME: localName() is wrong for non-html content. + const AtomicString& tagName = element->localName(); + return isScopingTag(tagName) || isSpecialTag(tagName); +} + } // namespace HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, HTMLDocument* document, bool reportErrors) : m_framesetOk(true) , m_document(document) + , m_tree(document, FragmentScriptingAllowed) , m_reportErrors(reportErrors) , m_isPaused(false) , m_insertionMode(InitialMode) , m_originalInsertionMode(InitialMode) + , m_secondaryInsertionMode(InitialMode) , m_tokenizer(tokenizer) , m_legacyTreeBuilder(shouldUseLegacyTreeBuilder(document) ? new LegacyHTMLTreeBuilder(document, reportErrors) : 0) , m_lastScriptElementStartLine(uninitializedLineNumberValue) @@ -221,10 +339,12 @@ HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, HTMLDocument* documen HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, DocumentFragment* fragment, FragmentScriptingPermission scriptingPermission) : m_framesetOk(true) , m_document(fragment->document()) + , m_tree(fragment->document(), scriptingPermission) , m_reportErrors(false) // FIXME: Why not report errors in fragments? , m_isPaused(false) , m_insertionMode(InitialMode) , m_originalInsertionMode(InitialMode) + , m_secondaryInsertionMode(InitialMode) , m_tokenizer(tokenizer) , m_legacyTreeBuilder(new LegacyHTMLTreeBuilder(fragment, scriptingPermission)) , m_lastScriptElementStartLine(uninitializedLineNumberValue) @@ -238,7 +358,7 @@ HTMLTreeBuilder::~HTMLTreeBuilder() { } -static void convertToOldStyle(const AtomicHTMLToken& token, Token& oldStyleToken) +static void convertToOldStyle(AtomicHTMLToken& token, Token& oldStyleToken) { switch (token.type()) { case HTMLToken::Uninitialized: @@ -252,9 +372,12 @@ static void convertToOldStyle(const AtomicHTMLToken& token, Token& oldStyleToken case HTMLToken::StartTag: case HTMLToken::EndTag: { oldStyleToken.beginTag = (token.type() == HTMLToken::StartTag); - oldStyleToken.selfClosingTag = token.selfClosing(); + // The LegacyHTMLTreeBuilder seems to work better if we lie here and + // say that tags are never self closing. As a wise man once said: + // "You can't handle the truth!" + oldStyleToken.selfClosingTag = false; oldStyleToken.tagName = token.name(); - oldStyleToken.attrs = token.attributes(); + oldStyleToken.attrs = token.takeAtributes(); break; } case HTMLToken::Comment: @@ -306,8 +429,12 @@ HTMLTokenizer::State HTMLTreeBuilder::adjustedLexerState(HTMLTokenizer::State st if (tagName == textareaTag || tagName == titleTag) return HTMLTokenizer::RCDATAState; - if (tagName == styleTag || tagName == iframeTag || tagName == xmpTag || tagName == noembedTag - || tagName == noframesTag || (tagName == noscriptTag && isScriptingFlagEnabled(frame))) + if (tagName == styleTag + || tagName == iframeTag + || tagName == xmpTag + || tagName == noembedTag + || tagName == noframesTag + || (tagName == noscriptTag && isScriptingFlagEnabled(frame))) return HTMLTokenizer::RAWTEXTState; if (tagName == plaintextTag) @@ -409,49 +536,645 @@ void HTMLTreeBuilder::processToken(AtomicHTMLToken& token) void HTMLTreeBuilder::processDoctypeToken(AtomicHTMLToken& token) { - if (insertionMode() == InitialMode) { - insertDoctype(token); + ASSERT(token.type() == HTMLToken::DOCTYPE); + if (m_insertionMode == InitialMode) { + m_tree.insertDoctype(token); + return; + } + if (m_insertionMode == InTableTextMode) { + processDefaultForInTableTextMode(token); + processDoctypeToken(token); return; } parseError(token); } -void HTMLTreeBuilder::insertHTMLStartTagBeforeHTML(AtomicHTMLToken& token) +void HTMLTreeBuilder::processFakeStartTag(const QualifiedName& tagName, PassRefPtr<NamedNodeMap> attributes) +{ + // FIXME: We'll need a fancier conversion than just "localName" for SVG/MathML tags. + AtomicHTMLToken fakeToken(HTMLToken::StartTag, tagName.localName(), attributes); + processStartTag(fakeToken); +} + +void HTMLTreeBuilder::processFakeEndTag(const QualifiedName& tagName) { - RefPtr<Element> element = HTMLHtmlElement::create(m_document); - element->setAttributeMap(token.attributes(), m_fragmentScriptingPermission); - m_openElements.pushHTMLHtmlElement(attach(m_document, element.release())); + // FIXME: We'll need a fancier conversion than just "localName" for SVG/MathML tags. + AtomicHTMLToken fakeToken(HTMLToken::EndTag, tagName.localName()); + processEndTag(fakeToken); } -void HTMLTreeBuilder::mergeAttributesFromTokenIntoElement(AtomicHTMLToken& token, Element* element) +void HTMLTreeBuilder::processFakeCharacters(const String& characters) { - if (!token.attributes()) + AtomicHTMLToken fakeToken(characters); + processCharacter(fakeToken); +} + +void HTMLTreeBuilder::processFakePEndTagIfPInScope() +{ + if (!m_tree.openElements()->inScope(pTag.localName())) return; + AtomicHTMLToken endP(HTMLToken::EndTag, pTag.localName()); + processEndTag(endP); +} - NamedNodeMap* attributes = element->attributes(false); - for (unsigned i = 0; i < token.attributes()->length(); ++i) { - Attribute* attribute = token.attributes()->attributeItem(i); - if (!attributes->getAttributeItem(attribute->name())) - element->setAttribute(attribute->name(), attribute->value()); +PassRefPtr<NamedNodeMap> HTMLTreeBuilder::attributesForIsindexInput(AtomicHTMLToken& token) +{ + RefPtr<NamedNodeMap> attributes = token.takeAtributes(); + if (!attributes) + attributes = NamedNodeMap::create(); + else { + attributes->removeAttribute(nameAttr); + attributes->removeAttribute(actionAttr); + attributes->removeAttribute(promptAttr); } + + RefPtr<Attribute> mappedAttribute = Attribute::createMapped(nameAttr, isindexTag.localName()); + attributes->insertAttribute(mappedAttribute.release(), false); + return attributes.release(); } -void HTMLTreeBuilder::insertHTMLStartTagInBody(AtomicHTMLToken& token) +void HTMLTreeBuilder::processIsindexStartTagForInBody(AtomicHTMLToken& token) { + ASSERT(token.type() == HTMLToken::StartTag); + ASSERT(token.name() == isindexTag); parseError(token); - mergeAttributesFromTokenIntoElement(token, m_openElements.htmlElement()); + if (m_tree.form()) + return; + notImplemented(); // Acknowledge self-closing flag + processFakeStartTag(formTag); + Attribute* actionAttribute = token.getAttributeItem(actionAttr); + if (actionAttribute) { + ASSERT(m_tree.currentElement()->hasTagName(formTag)); + m_tree.currentElement()->setAttribute(actionAttr, actionAttribute->value()); + } + processFakeStartTag(hrTag); + processFakeStartTag(labelTag); + Attribute* promptAttribute = token.getAttributeItem(promptAttr); + if (promptAttribute) + processFakeCharacters(promptAttribute->value()); + else + processFakeCharacters(searchableIndexIntroduction()); + processFakeStartTag(inputTag, attributesForIsindexInput(token)); + notImplemented(); // This second set of characters may be needed by non-english locales. + processFakeEndTag(labelTag); + processFakeStartTag(hrTag); + processFakeEndTag(formTag); } -void HTMLTreeBuilder::processFakePEndTagIfPInScope() +namespace { + +bool isLi(const Element* element) +{ + return element->hasTagName(liTag); +} + +bool isDdOrDt(const Element* element) +{ + return element->hasTagName(ddTag) + || element->hasTagName(dtTag); +} + +} + +template <bool shouldClose(const Element*)> +void HTMLTreeBuilder::processCloseWhenNestedTag(AtomicHTMLToken& token) +{ + m_framesetOk = false; + HTMLElementStack::ElementRecord* nodeRecord = m_tree.openElements()->topRecord(); + while (1) { + Element* node = nodeRecord->element(); + if (shouldClose(node)) { + processFakeEndTag(node->tagQName()); + break; + } + if (isNotFormattingAndNotPhrasing(node) && !node->hasTagName(addressTag) && !node->hasTagName(divTag) && !node->hasTagName(pTag)) + break; + nodeRecord = nodeRecord->next(); + } + processFakePEndTagIfPInScope(); + m_tree.insertHTMLElement(token); +} + +namespace { + +typedef HashMap<AtomicString, QualifiedName> PrefixedNameToQualifiedNameMap; + +void mapLoweredLocalNameToName(PrefixedNameToQualifiedNameMap* map, QualifiedName** names, size_t length) +{ + for (size_t i = 0; i < length; ++i) { + const QualifiedName& name = *names[i]; + const AtomicString& localName = name.localName(); + AtomicString loweredLocalName = localName.lower(); + if (loweredLocalName != localName) + map->add(loweredLocalName, name); + } +} + +void addName(PrefixedNameToQualifiedNameMap* map, const QualifiedName& name) +{ + map->add(name.localName().lower(), name); +} + +void adjustSVGTagNameCase(AtomicHTMLToken& token) { - if (!m_openElements.inScope(pTag.localName())) + static PrefixedNameToQualifiedNameMap* caseMap = 0; + if (!caseMap) { + caseMap = new PrefixedNameToQualifiedNameMap; + size_t length = 0; + QualifiedName** svgTags = SVGNames::getSVGTags(&length); + mapLoweredLocalNameToName(caseMap, svgTags, length); + } + + const QualifiedName& casedName = caseMap->get(token.name()); + if (casedName.localName().isNull()) return; - AtomicHTMLToken endP(HTMLToken::EndTag, pTag.localName()); - processEndTag(endP); + token.setName(casedName.localName()); +} + +void adjustSVGAttributes(AtomicHTMLToken& token) +{ + static PrefixedNameToQualifiedNameMap* caseMap = 0; + if (!caseMap) { + caseMap = new PrefixedNameToQualifiedNameMap; + size_t length = 0; + QualifiedName** svgAttrs = SVGNames::getSVGAttrs(&length); + mapLoweredLocalNameToName(caseMap, svgAttrs, length); + } + + NamedNodeMap* attributes = token.attributes(); + if (!attributes) + return; + + for (unsigned x = 0; x < attributes->length(); ++x) { + Attribute* attribute = attributes->attributeItem(x); + const QualifiedName& casedName = caseMap->get(attribute->localName()); + if (!casedName.localName().isNull()) + attribute->parserSetName(casedName); + } +} + +void adjustMathMLAttributes(AtomicHTMLToken&) +{ + notImplemented(); +} + +void addNamesWithPrefix(PrefixedNameToQualifiedNameMap* map, const AtomicString& prefix, QualifiedName** names, size_t length) +{ + for (size_t i = 0; i < length; ++i) { + QualifiedName* name = names[i]; + const AtomicString& localName = name->localName(); + AtomicString prefixColonLocalName(prefix + ":" + localName); + QualifiedName nameWithPrefix(prefix, localName, name->namespaceURI()); + map->add(prefixColonLocalName, nameWithPrefix); + } +} + +void adjustForeignAttributes(AtomicHTMLToken& token) +{ + static PrefixedNameToQualifiedNameMap* map = 0; + if (!map) { + map = new PrefixedNameToQualifiedNameMap; + size_t length = 0; + QualifiedName** attrs = XLinkNames::getXLinkAttrs(&length); + addNamesWithPrefix(map, "xlink", attrs, length); + + attrs = XMLNames::getXMLAttrs(&length); + addNamesWithPrefix(map, "xml", attrs, length); + + map->add("xmlns", XMLNSNames::xmlnsAttr); + map->add("xmlns:xlink", QualifiedName("xmlns", "xlink", XMLNSNames::xmlnsNamespaceURI)); + } + + NamedNodeMap* attributes = token.attributes(); + if (!attributes) + return; + + for (unsigned x = 0; x < attributes->length(); ++x) { + Attribute* attribute = attributes->attributeItem(x); + const QualifiedName& name = map->get(attribute->localName()); + if (!name.localName().isNull()) + attribute->parserSetName(name); + } +} + +} + +void HTMLTreeBuilder::processStartTagForInBody(AtomicHTMLToken& token) +{ + ASSERT(token.type() == HTMLToken::StartTag); + if (token.name() == htmlTag) { + m_tree.insertHTMLHtmlStartTagInBody(token); + return; + } + if (token.name() == baseTag + || token.name() == "command" + || token.name() == linkTag + || token.name() == metaTag + || token.name() == noframesTag + || token.name() == scriptTag + || token.name() == styleTag + || token.name() == titleTag) { + bool didProcess = processStartTagForInHead(token); + ASSERT_UNUSED(didProcess, didProcess); + return; + } + if (token.name() == bodyTag) { + m_tree.insertHTMLBodyStartTagInBody(token); + return; + } + if (token.name() == framesetTag) { + parseError(token); + notImplemented(); // fragment case + if (!m_framesetOk) + return; + ExceptionCode ec = 0; + m_tree.openElements()->bodyElement()->remove(ec); + ASSERT(!ec); + m_tree.openElements()->popUntil(m_tree.openElements()->bodyElement()); + m_tree.openElements()->popHTMLBodyElement(); + ASSERT(m_tree.openElements()->top() == m_tree.openElements()->htmlElement()); + m_tree.insertHTMLElement(token); + setInsertionMode(InFramesetMode); + return; + } + if (token.name() == addressTag + || token.name() == articleTag + || token.name() == asideTag + || token.name() == blockquoteTag + || token.name() == centerTag + || token.name() == "details" + || token.name() == dirTag + || token.name() == divTag + || token.name() == dlTag + || token.name() == fieldsetTag + || token.name() == "figure" + || token.name() == footerTag + || token.name() == headerTag + || token.name() == hgroupTag + || token.name() == menuTag + || token.name() == navTag + || token.name() == olTag + || token.name() == pTag + || token.name() == sectionTag + || token.name() == ulTag) { + processFakePEndTagIfPInScope(); + m_tree.insertHTMLElement(token); + return; + } + if (isNumberedHeaderTag(token.name())) { + processFakePEndTagIfPInScope(); + if (isNumberedHeaderTag(m_tree.currentElement()->localName())) { + parseError(token); + m_tree.openElements()->pop(); + } + m_tree.insertHTMLElement(token); + return; + } + if (token.name() == preTag || token.name() == listingTag) { + processFakePEndTagIfPInScope(); + m_tree.insertHTMLElement(token); + m_tokenizer->skipLeadingNewLineForListing(); + m_framesetOk = false; + return; + } + if (token.name() == formTag) { + if (m_tree.form()) { + parseError(token); + return; + } + processFakePEndTagIfPInScope(); + m_tree.insertHTMLElement(token); + m_tree.setForm(m_tree.currentElement()); + return; + } + if (token.name() == liTag) { + processCloseWhenNestedTag<isLi>(token); + return; + } + if (token.name() == ddTag || token.name() == dtTag) { + processCloseWhenNestedTag<isDdOrDt>(token); + return; + } + if (token.name() == plaintextTag) { + processFakePEndTagIfPInScope(); + m_tree.insertHTMLElement(token); + m_tokenizer->setState(HTMLTokenizer::PLAINTEXTState); + return; + } + if (token.name() == buttonTag) { + if (m_tree.openElements()->inScope(buttonTag)) { + parseError(token); + processFakeEndTag(buttonTag); + processStartTag(token); // FIXME: Could we just fall through here? + return; + } + m_tree.reconstructTheActiveFormattingElements(); + m_tree.insertHTMLElement(token); + m_framesetOk = false; + return; + } + if (token.name() == aTag) { + Element* activeATag = m_tree.activeFormattingElements()->closestElementInScopeWithName(aTag.localName()); + if (activeATag) { + parseError(token); + processFakeEndTag(aTag); + m_tree.activeFormattingElements()->remove(activeATag); + if (m_tree.openElements()->contains(activeATag)) + m_tree.openElements()->remove(activeATag); + } + m_tree.reconstructTheActiveFormattingElements(); + m_tree.insertFormattingElement(token); + return; + } + if (isNonAnchorNonNobrFormattingTag(token.name())) { + m_tree.reconstructTheActiveFormattingElements(); + m_tree.insertFormattingElement(token); + return; + } + if (token.name() == nobrTag) { + m_tree.reconstructTheActiveFormattingElements(); + if (m_tree.openElements()->inScope(nobrTag)) { + parseError(token); + processFakeEndTag(nobrTag); + m_tree.reconstructTheActiveFormattingElements(); + } + m_tree.insertFormattingElement(token); + return; + } + if (token.name() == appletTag + || token.name() == marqueeTag + || token.name() == objectTag) { + m_tree.reconstructTheActiveFormattingElements(); + m_tree.insertHTMLElement(token); + m_tree.activeFormattingElements()->appendMarker(); + m_framesetOk = false; + return; + } + if (token.name() == tableTag) { + if (m_document->parseMode() != Document::Compat && m_tree.openElements()->inScope(pTag)) + processFakeEndTag(pTag); + m_tree.insertHTMLElement(token); + m_framesetOk = false; + setInsertionMode(InTableMode); + return; + } + if (token.name() == imageTag) { + parseError(token); + // Apparently we're not supposed to ask. + token.setName(imgTag.localName()); + // Note the fall through to the imgTag handling below! + } + if (token.name() == areaTag + || token.name() == basefontTag + || token.name() == "bgsound" + || token.name() == brTag + || token.name() == embedTag + || token.name() == imgTag + || token.name() == inputTag + || token.name() == keygenTag + || token.name() == wbrTag) { + m_tree.reconstructTheActiveFormattingElements(); + m_tree.insertSelfClosingHTMLElement(token); + m_framesetOk = false; + return; + } + if (token.name() == paramTag + || token.name() == sourceTag + || token.name() == "track") { + m_tree.insertSelfClosingHTMLElement(token); + return; + } + if (token.name() == hrTag) { + processFakePEndTagIfPInScope(); + m_tree.insertSelfClosingHTMLElement(token); + m_framesetOk = false; + return; + } + if (token.name() == isindexTag) { + processIsindexStartTagForInBody(token); + return; + } + if (token.name() == textareaTag) { + m_tree.insertHTMLElement(token); + m_tokenizer->skipLeadingNewLineForListing(); + m_tokenizer->setState(HTMLTokenizer::RCDATAState); + m_originalInsertionMode = m_insertionMode; + m_framesetOk = false; + setInsertionMode(TextMode); + return; + } + if (token.name() == xmpTag) { + processFakePEndTagIfPInScope(); + m_tree.reconstructTheActiveFormattingElements(); + m_framesetOk = false; + processGenericRawTextStartTag(token); + return; + } + if (token.name() == iframeTag) { + m_framesetOk = false; + processGenericRawTextStartTag(token); + return; + } + if (token.name() == noembedTag) { + processGenericRawTextStartTag(token); + return; + } + if (token.name() == noscriptTag && isScriptingFlagEnabled(m_document->frame())) { + processGenericRawTextStartTag(token); + return; + } + if (token.name() == selectTag) { + m_tree.reconstructTheActiveFormattingElements(); + m_tree.insertHTMLElement(token); + m_framesetOk = false; + if (m_insertionMode == InTableMode + || m_insertionMode == InCaptionMode + || m_insertionMode == InColumnGroupMode + || m_insertionMode == InTableBodyMode + || m_insertionMode == InRowMode + || m_insertionMode == InCellMode) + setInsertionMode(InSelectInTableMode); + else + setInsertionMode(InSelectMode); + return; + } + if (token.name() == optgroupTag || token.name() == optionTag) { + if (m_tree.openElements()->inScope(optionTag.localName())) { + AtomicHTMLToken endOption(HTMLToken::EndTag, optionTag.localName()); + processEndTag(endOption); + } + m_tree.reconstructTheActiveFormattingElements(); + m_tree.insertHTMLElement(token); + return; + } + if (token.name() == rpTag || token.name() == rtTag) { + if (m_tree.openElements()->inScope(rubyTag.localName())) { + m_tree.generateImpliedEndTags(); + if (!m_tree.currentElement()->hasTagName(rubyTag)) { + parseError(token); + m_tree.openElements()->popUntil(rubyTag.localName()); + } + } + m_tree.insertHTMLElement(token); + return; + } + if (token.name() == MathMLNames::mathTag.localName()) { + m_tree.reconstructTheActiveFormattingElements(); + adjustMathMLAttributes(token); + adjustForeignAttributes(token); + m_tree.insertForeignElement(token, MathMLNames::mathmlNamespaceURI); + if (m_insertionMode != InForeignContentMode) { + setSecondaryInsertionMode(m_insertionMode); + setInsertionMode(InForeignContentMode); + } + return; + } + if (token.name() == SVGNames::svgTag.localName()) { + m_tree.reconstructTheActiveFormattingElements(); + adjustSVGAttributes(token); + adjustForeignAttributes(token); + m_tree.insertForeignElement(token, SVGNames::svgNamespaceURI); + if (m_insertionMode != InForeignContentMode) { + setSecondaryInsertionMode(m_insertionMode); + setInsertionMode(InForeignContentMode); + } + return; + } + if (isCaptionColOrColgroupTag(token.name()) + || token.name() == frameTag + || token.name() == headTag + || isTableBodyContextTag(token.name()) + || isTableCellContextTag(token.name()) + || token.name() == trTag) { + parseError(token); + return; + } + m_tree.reconstructTheActiveFormattingElements(); + m_tree.insertHTMLElement(token); +} + +bool HTMLTreeBuilder::processColgroupEndTagForInColumnGroup() +{ + if (m_tree.currentElement() == m_tree.openElements()->htmlElement()) { + ASSERT(m_isParsingFragment); + // FIXME: parse error + return false; + } + m_tree.openElements()->pop(); + setInsertionMode(InTableMode); + return true; +} + +// http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#close-the-cell +void HTMLTreeBuilder::closeTheCell() +{ + ASSERT(insertionMode() == InCellMode); + if (m_tree.openElements()->inScope(tdTag)) { + ASSERT(!m_tree.openElements()->inScope(thTag)); + processFakeEndTag(tdTag); + return; + } + ASSERT(m_tree.openElements()->inScope(thTag)); + processFakeEndTag(thTag); + ASSERT(insertionMode() == InRowMode); +} + +void HTMLTreeBuilder::processStartTagForInTable(AtomicHTMLToken& token) +{ + ASSERT(token.type() == HTMLToken::StartTag); + if (token.name() == captionTag) { + m_tree.openElements()->popUntilTableScopeMarker(); + m_tree.activeFormattingElements()->appendMarker(); + m_tree.insertHTMLElement(token); + setInsertionMode(InCaptionMode); + return; + } + if (token.name() == colgroupTag) { + m_tree.openElements()->popUntilTableScopeMarker(); + m_tree.insertHTMLElement(token); + setInsertionMode(InColumnGroupMode); + return; + } + if (token.name() == colTag) { + processFakeStartTag(colgroupTag); + ASSERT(InColumnGroupMode); + processStartTag(token); + return; + } + if (isTableBodyContextTag(token.name())) { + m_tree.openElements()->popUntilTableScopeMarker(); + m_tree.insertHTMLElement(token); + setInsertionMode(InTableBodyMode); + return; + } + if (isTableCellContextTag(token.name()) + || token.name() == trTag) { + processFakeStartTag(tbodyTag); + ASSERT(insertionMode() == InTableBodyMode); + processStartTag(token); + return; + } + if (token.name() == tableTag) { + parseError(token); + if (!processTableEndTagForInTable()) { + ASSERT(m_isParsingFragment); + return; + } + processStartTag(token); + return; + } + if (token.name() == styleTag || token.name() == scriptTag) { + processStartTagForInHead(token); + return; + } + if (token.name() == inputTag) { + Attribute* typeAttribute = token.getAttributeItem(typeAttr); + if (!typeAttribute || equalIgnoringCase(typeAttribute->value(), "hidden")) { + parseError(token); + m_tree.insertSelfClosingHTMLElement(token); + return; + } + // Fall through to "anything else" case. + } + if (token.name() == formTag) { + parseError(token); + if (m_tree.form()) + return; + m_tree.insertSelfClosingHTMLElement(token); + return; + } + parseError(token); + HTMLConstructionSite::RedirectToFosterParentGuard redirecter(m_tree, requiresRedirectToFosterParent(m_tree.currentElement())); + processStartTagForInBody(token); +} + +namespace { + +bool shouldProcessUsingSecondaryInsertionMode(AtomicHTMLToken& token, Element* currentElement) +{ + ASSERT(token.type() == HTMLToken::StartTag); + if (currentElement->hasTagName(MathMLNames::miTag) + || currentElement->hasTagName(MathMLNames::moTag) + || currentElement->hasTagName(MathMLNames::mnTag) + || currentElement->hasTagName(MathMLNames::msTag) + || currentElement->hasTagName(MathMLNames::mtextTag)) { + return token.name() != MathMLNames::mglyphTag + && token.name() != MathMLNames::malignmarkTag; + } + if (currentElement->hasTagName(MathMLNames::annotation_xmlTag)) + return token.name() == SVGNames::svgTag; + if (currentElement->hasTagName(SVGNames::foreignObjectTag) + || currentElement->hasTagName(SVGNames::descTag) + || currentElement->hasTagName(SVGNames::titleTag)) + return true; + return currentElement->namespaceURI() == HTMLNames::xhtmlNamespaceURI; +} + } void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token) { + ASSERT(token.type() == HTMLToken::StartTag); switch (insertionMode()) { case InitialMode: ASSERT(insertionMode() == InitialMode); @@ -460,7 +1183,7 @@ void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token) case BeforeHTMLMode: ASSERT(insertionMode() == BeforeHTMLMode); if (token.name() == htmlTag) { - insertHTMLStartTagBeforeHTML(token); + m_tree.insertHTMLHtmlStartTagBeforeHTML(token); setInsertionMode(BeforeHeadMode); return; } @@ -469,11 +1192,11 @@ void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token) case BeforeHeadMode: ASSERT(insertionMode() == BeforeHeadMode); if (token.name() == htmlTag) { - insertHTMLStartTagInBody(token); + m_tree.insertHTMLHtmlStartTagInBody(token); return; } if (token.name() == headTag) { - insertHTMLHeadElement(token); + m_tree.insertHTMLHeadElement(token); setInsertionMode(InHeadMode); return; } @@ -488,26 +1211,32 @@ void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token) case AfterHeadMode: ASSERT(insertionMode() == AfterHeadMode); if (token.name() == htmlTag) { - insertHTMLStartTagInBody(token); + m_tree.insertHTMLHtmlStartTagInBody(token); return; } if (token.name() == bodyTag) { m_framesetOk = false; - insertHTMLBodyElement(token); - m_insertionMode = InBodyMode; + m_tree.insertHTMLBodyElement(token); + setInsertionMode(InBodyMode); return; } if (token.name() == framesetTag) { - insertElement(token); + m_tree.insertHTMLElement(token); setInsertionMode(InFramesetMode); return; } - if (token.name() == baseTag || token.name() == linkTag || token.name() == metaTag || token.name() == noframesTag || token.name() == scriptTag || token.name() == styleTag || token.name() == titleTag) { + if (token.name() == baseTag + || token.name() == linkTag + || token.name() == metaTag + || token.name() == noframesTag + || token.name() == scriptTag + || token.name() == styleTag + || token.name() == titleTag) { parseError(token); - ASSERT(m_headElement); - m_openElements.pushHTMLHeadElement(m_headElement); + ASSERT(m_tree.head()); + m_tree.openElements()->pushHTMLHeadElement(m_tree.head()); processStartTagForInHead(token); - m_openElements.removeHTMLHeadElement(m_headElement.get()); + m_tree.openElements()->removeHTMLHeadElement(m_tree.head()); return; } if (token.name() == headTag) { @@ -518,309 +1247,134 @@ void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token) // Fall through case InBodyMode: ASSERT(insertionMode() == InBodyMode); - if (token.name() == htmlTag) { - insertHTMLStartTagInBody(token); - return; - } - if (token.name() == baseTag || token.name() == "command" || token.name() == linkTag || token.name() == metaTag || token.name() == noframesTag || token.name() == scriptTag || token.name() == styleTag || token.name() == titleTag) { - bool didProcess = processStartTagForInHead(token); - ASSERT_UNUSED(didProcess, didProcess); - return; - } - if (token.name() == bodyTag) { - parseError(token); - notImplemented(); // fragment case - mergeAttributesFromTokenIntoElement(token, m_openElements.bodyElement()); - return; - } - if (token.name() == framesetTag) { + processStartTagForInBody(token); + break; + case InTableMode: + ASSERT(insertionMode() == InTableMode); + processStartTagForInTable(token); + break; + case InCaptionMode: + ASSERT(insertionMode() == InCaptionMode); + if (isCaptionColOrColgroupTag(token.name()) + || isTableBodyContextTag(token.name()) + || isTableCellContextTag(token.name()) + || token.name() == trTag) { parseError(token); - notImplemented(); // fragment case - if (!m_framesetOk) + if (!processCaptionEndTagForInCaption()) { + ASSERT(m_isParsingFragment); return; - ExceptionCode ec = 0; - m_openElements.bodyElement()->remove(ec); - ASSERT(!ec); - m_openElements.popUntil(m_openElements.bodyElement()); - m_openElements.popHTMLBodyElement(); - ASSERT(m_openElements.top() == m_openElements.htmlElement()); - insertElement(token); - m_insertionMode = InFramesetMode; - return; - } - if (token.name() == addressTag || token.name() == articleTag || token.name() == asideTag || token.name() == blockquoteTag || token.name() == centerTag || token.name() == "details" || token.name() == dirTag || token.name() == divTag || token.name() == dlTag || token.name() == fieldsetTag || token.name() == "figure" || token.name() == footerTag || token.name() == headerTag || token.name() == hgroupTag || token.name() == menuTag || token.name() == navTag || token.name() == olTag || token.name() == pTag || token.name() == sectionTag || token.name() == ulTag) { - processFakePEndTagIfPInScope(); - insertElement(token); - return; - } - if (isNumberedHeaderTag(token.name())) { - processFakePEndTagIfPInScope(); - notImplemented(); - insertElement(token); - return; - } - if (token.name() == preTag || token.name() == listingTag) { - processFakePEndTagIfPInScope(); - insertElement(token); - m_tokenizer->skipLeadingNewLineForListing(); - m_framesetOk = false; - return; - } - if (token.name() == formTag) { - notImplemented(); - processFakePEndTagIfPInScope(); - insertElement(token); - m_formElement = currentElement(); - return; - } - if (token.name() == liTag) { - notImplemented(); - processFakePEndTagIfPInScope(); - insertElement(token); - return; - } - if (token.name() == ddTag || token.name() == dtTag) { - notImplemented(); - processFakePEndTagIfPInScope(); - insertElement(token); - return; - } - if (token.name() == plaintextTag) { - processFakePEndTagIfPInScope(); - insertElement(token); - m_tokenizer->setState(HTMLTokenizer::PLAINTEXTState); - return; - } - if (token.name() == buttonTag) { - notImplemented(); - reconstructTheActiveFormattingElements(); - insertElement(token); - m_framesetOk = false; - return; - } - if (token.name() == aTag) { - notImplemented(); - reconstructTheActiveFormattingElements(); - insertFormattingElement(token); - return; - } - if (isNonAnchorFormattingTag(token.name())) { - reconstructTheActiveFormattingElements(); - insertFormattingElement(token); - return; - } - if (token.name() == nobrTag) { - reconstructTheActiveFormattingElements(); - notImplemented(); - insertFormattingElement(token); - return; - } - if (token.name() == appletTag || token.name() == marqueeTag || token.name() == objectTag) { - reconstructTheActiveFormattingElements(); - insertElement(token); - notImplemented(); - m_framesetOk = false; - return; - } - if (token.name() == tableTag) { - notImplemented(); - insertElement(token); - m_framesetOk = false; - m_insertionMode = InTableMode; - return; - } - if (token.name() == imageTag) { - parseError(token); - // Apparently we're not supposed to ask. - token.setName(imgTag.localName()); - // Note the fall through to the imgTag handling below! - } - if (token.name() == areaTag || token.name() == basefontTag || token.name() == "bgsound" || token.name() == brTag || token.name() == embedTag || token.name() == imgTag || token.name() == inputTag || token.name() == keygenTag || token.name() == wbrTag) { - reconstructTheActiveFormattingElements(); - insertSelfClosingElement(token); - m_framesetOk = false; - return; - } - if (token.name() == paramTag || token.name() == sourceTag || token.name() == "track") { - insertSelfClosingElement(token); - return; - } - if (token.name() == hrTag) { - processFakePEndTagIfPInScope(); - insertSelfClosingElement(token); - m_framesetOk = false; - return; - } - if (token.name() == isindexTag) { - parseError(token); - notImplemented(); - return; - } - if (token.name() == textareaTag) { - insertElement(token); - m_tokenizer->skipLeadingNewLineForListing(); - m_tokenizer->setState(HTMLTokenizer::RCDATAState); - m_originalInsertionMode = m_insertionMode; - m_framesetOk = false; - m_insertionMode = TextMode; - return; - } - if (token.name() == xmpTag) { - processFakePEndTagIfPInScope(); - reconstructTheActiveFormattingElements(); - m_framesetOk = false; - insertGenericRawTextElement(token); - return; - } - if (token.name() == iframeTag) { - m_framesetOk = false; - insertGenericRawTextElement(token); - return; - } - if (token.name() == noembedTag) { - insertGenericRawTextElement(token); - return; - } - if (token.name() == noscriptTag && isScriptingFlagEnabled(m_document->frame())) { - insertGenericRawTextElement(token); - return; - } - if (token.name() == selectTag) { - reconstructTheActiveFormattingElements(); - insertElement(token); - m_framesetOk = false; - if (m_insertionMode == InTableMode || m_insertionMode == InCaptionMode || m_insertionMode == InColumnGroupMode || m_insertionMode == InTableBodyMode || m_insertionMode == InRowMode || m_insertionMode == InCellMode) - m_insertionMode = InSelectInTableMode; - else - m_insertionMode = InSelectMode; - return; - } - if (token.name() == optgroupTag || token.name() == optionTag) { - if (m_openElements.inScope(optionTag.localName())) { - AtomicHTMLToken endOption(HTMLToken::EndTag, optionTag.localName()); - processEndTag(endOption); } - reconstructTheActiveFormattingElements(); - insertElement(token); - return; - } - if (token.name() == rpTag || token.name() == rtTag) { - if (m_openElements.inScope(rubyTag.localName())) { - generateImpliedEndTags(); - if (!currentElement()->hasTagName(rubyTag)) { - parseError(token); - m_openElements.popUntil(rubyTag.localName()); - } - } - insertElement(token); - return; - } - if (token.name() == "math") { - // This is the MathML foreign content branch point. - notImplemented(); - } - if (token.name() == "svg") { - // This is the SVG foreign content branch point. - notImplemented(); - } - if (token.name() == captionTag || token.name() == colTag || token.name() == colgroupTag || token.name() == frameTag || token.name() == headTag || token.name() == tbodyTag || token.name() == tdTag || token.name() == tfootTag || token.name() == thTag || token.name() == theadTag || token.name() == trTag) { - parseError(token); + processStartTag(token); return; } - reconstructTheActiveFormattingElements(); - insertElement(token); + processStartTagForInBody(token); break; - case InTableMode: - ASSERT(insertionMode() == InTableMode); - if (token.name() == captionTag) { - m_openElements.popUntilTableScopeMarker(); - m_activeFormattingElements.appendMarker(); - insertElement(token); - m_insertionMode = InCaptionMode; - return; - } - if (token.name() == colgroupTag) { - m_openElements.popUntilTableScopeMarker(); - insertElement(token); - m_insertionMode = InColumnGroupMode; + case InColumnGroupMode: + ASSERT(insertionMode() == InColumnGroupMode); + if (token.name() == htmlTag) { + m_tree.insertHTMLHtmlStartTagInBody(token); return; } if (token.name() == colTag) { - notImplemented(); + m_tree.insertSelfClosingHTMLElement(token); return; } - if (isTableBodyContextTag(token.name())) { - m_openElements.popUntilTableScopeMarker(); - insertElement(token); - m_insertionMode = InTableBodyMode; + if (!processColgroupEndTagForInColumnGroup()) { + ASSERT(m_isParsingFragment); return; } - if (token.name() == tdTag || token.name() == thTag || token.name() == trTag) { - notImplemented(); - return; - } - if (token.name() == tableTag) { - notImplemented(); - return; - } - if (token.name() == styleTag || token.name() == scriptTag) { - processStartTagForInHead(token); - return; - } - if (token.name() == inputTag) { - notImplemented(); - return; - } - if (token.name() == formTag) { - parseError(token); - if (m_formElement) - return; - insertSelfClosingElement(token); - return; - } - parseError(token); - notImplemented(); + processStartTag(token); break; case InTableBodyMode: ASSERT(insertionMode() == InTableBodyMode); if (token.name() == trTag) { - m_openElements.popUntilTableBodyScopeMarker(); // How is there ever anything to pop? - insertElement(token); - m_insertionMode = InRowMode; + m_tree.openElements()->popUntilTableBodyScopeMarker(); // How is there ever anything to pop? + m_tree.insertHTMLElement(token); + setInsertionMode(InRowMode); return; } - if (token.name() == thTag || token.name() == tdTag) { + if (isTableCellContextTag(token.name())) { parseError(token); - AtomicHTMLToken fakeToken(HTMLToken::StartTag, trTag.localName()); - processStartTag(fakeToken); + processFakeStartTag(trTag); ASSERT(insertionMode() == InRowMode); processStartTag(token); return; } - if (token.name() == captionTag || token.name() == colTag || token.name() == colgroupTag || isTableBodyContextTag(token.name())) { - // FIXME: The spec is unclear as to what is supposed to happen here. - notImplemented(); + if (isCaptionColOrColgroupTag(token.name()) || isTableBodyContextTag(token.name())) { + // FIXME: This is slow. + if (!m_tree.openElements()->inTableScope(tbodyTag.localName()) && !m_tree.openElements()->inTableScope(theadTag.localName()) && !m_tree.openElements()->inTableScope(tfootTag.localName())) { + ASSERT(m_isParsingFragment); + parseError(token); + return; + } + m_tree.openElements()->popUntilTableBodyScopeMarker(); + ASSERT(isTableBodyContextTag(m_tree.currentElement()->localName())); + processFakeEndTag(m_tree.currentElement()->tagQName()); + processStartTag(token); return; } - notImplemented(); // process using "in table" rules + processStartTagForInTable(token); + break; + case InRowMode: + ASSERT(insertionMode() == InRowMode); + if (isTableCellContextTag(token.name())) { + m_tree.openElements()->popUntilTableRowScopeMarker(); + m_tree.insertHTMLElement(token); + setInsertionMode(InCellMode); + m_tree.activeFormattingElements()->appendMarker(); + return; + } + if (token.name() == trTag + || isCaptionColOrColgroupTag(token.name()) + || isTableBodyContextTag(token.name())) { + if (!processTrEndTagForInRow()) { + ASSERT(m_isParsingFragment); + return; + } + ASSERT(insertionMode() == InTableBodyMode); + processStartTag(token); + return; + } + processStartTagForInTable(token); + break; + case InCellMode: + ASSERT(insertionMode() == InCellMode); + if (isCaptionColOrColgroupTag(token.name()) + || isTableCellContextTag(token.name()) + || token.name() == trTag + || isTableBodyContextTag(token.name())) { + // FIXME: This could be more efficient. + if (!m_tree.openElements()->inTableScope(tdTag) && !m_tree.openElements()->inTableScope(thTag)) { + ASSERT(m_isParsingFragment); + parseError(token); + return; + } + closeTheCell(); + processStartTag(token); + return; + } + processStartTagForInBody(token); break; case AfterBodyMode: case AfterAfterBodyMode: ASSERT(insertionMode() == AfterBodyMode || insertionMode() == AfterAfterBodyMode); if (token.name() == htmlTag) { - insertHTMLStartTagInBody(token); + m_tree.insertHTMLHtmlStartTagInBody(token); return; } - m_insertionMode = InBodyMode; + setInsertionMode(InBodyMode); processStartTag(token); break; case InHeadNoscriptMode: ASSERT(insertionMode() == InHeadNoscriptMode); if (token.name() == htmlTag) { - insertHTMLStartTagInBody(token); + m_tree.insertHTMLHtmlStartTagInBody(token); return; } - if (token.name() == linkTag || token.name() == metaTag || token.name() == noframesTag || token.name() == styleTag) { + if (token.name() == linkTag + || token.name() == metaTag + || token.name() == noframesTag + || token.name() == styleTag) { bool didProcess = processStartTagForInHead(token); ASSERT_UNUSED(didProcess, didProcess); return; @@ -835,15 +1389,15 @@ void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token) case InFramesetMode: ASSERT(insertionMode() == InFramesetMode); if (token.name() == htmlTag) { - insertHTMLStartTagInBody(token); + m_tree.insertHTMLHtmlStartTagInBody(token); return; } if (token.name() == framesetTag) { - insertElement(token); + m_tree.insertHTMLElement(token); return; } if (token.name() == frameTag) { - insertSelfClosingElement(token); + m_tree.insertSelfClosingHTMLElement(token); return; } if (token.name() == noframesTag) { @@ -856,7 +1410,7 @@ void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token) case AfterAfterFramesetMode: ASSERT(insertionMode() == AfterFramesetMode || insertionMode() == AfterAfterFramesetMode); if (token.name() == htmlTag) { - insertHTMLStartTagInBody(token); + m_tree.insertHTMLHtmlStartTagInBody(token); return; } if (token.name() == noframesTag) { @@ -865,61 +1419,197 @@ void HTMLTreeBuilder::processStartTag(AtomicHTMLToken& token) } parseError(token); break; - default: + case InSelectInTableMode: + ASSERT(insertionMode() == InSelectInTableMode); + if (token.name() == captionTag + || token.name() == tableTag + || isTableBodyContextTag(token.name()) + || token.name() == trTag + || isTableCellContextTag(token.name())) { + parseError(token); + AtomicHTMLToken endSelect(HTMLToken::EndTag, selectTag.localName()); + processEndTag(endSelect); + processStartTag(token); + return; + } + // Fall through + case InSelectMode: + ASSERT(insertionMode() == InSelectMode || insertionMode() == InSelectInTableMode); + if (token.name() == htmlTag) { + m_tree.insertHTMLHtmlStartTagInBody(token); + return; + } + if (token.name() == optionTag) { + if (m_tree.currentElement()->hasTagName(optionTag)) { + AtomicHTMLToken endOption(HTMLToken::EndTag, optionTag.localName()); + processEndTag(endOption); + } + m_tree.insertHTMLElement(token); + return; + } + if (token.name() == optgroupTag) { + if (m_tree.currentElement()->hasTagName(optionTag)) { + AtomicHTMLToken endOption(HTMLToken::EndTag, optionTag.localName()); + processEndTag(endOption); + } + if (m_tree.currentElement()->hasTagName(optgroupTag)) { + AtomicHTMLToken endOptgroup(HTMLToken::EndTag, optgroupTag.localName()); + processEndTag(endOptgroup); + } + m_tree.insertHTMLElement(token); + return; + } + if (token.name() == selectTag) { + parseError(token); + AtomicHTMLToken endSelect(HTMLToken::EndTag, selectTag.localName()); + processEndTag(endSelect); + return; + } + if (token.name() == inputTag + || token.name() == keygenTag + || token.name() == textareaTag) { + parseError(token); + notImplemented(); // fragment case + AtomicHTMLToken endSelect(HTMLToken::EndTag, selectTag.localName()); + processEndTag(endSelect); + processStartTag(token); + return; + } + if (token.name() == scriptTag) { + bool didProcess = processStartTagForInHead(token); + ASSERT_UNUSED(didProcess, didProcess); + return; + } + break; + case InTableTextMode: + processDefaultForInTableTextMode(token); + processStartTag(token); + break; + case InForeignContentMode: { + // FIXME: We're missing a bunch of if branches here. + if (shouldProcessUsingSecondaryInsertionMode(token, m_tree.currentElement())) { + processUsingSecondaryInsertionModeAndAdjustInsertionMode(token); + return; + } + if (token.name() == bTag + || token.name() == bigTag + || token.name() == blockquoteTag + || token.name() == bodyTag + || token.name() == brTag + || token.name() == centerTag + || token.name() == codeTag + || token.name() == ddTag + || token.name() == divTag + || token.name() == dlTag + || token.name() == dtTag + || token.name() == emTag + || token.name() == embedTag + || isNumberedHeaderTag(token.name()) + || token.name() == headTag + || token.name() == hrTag + || token.name() == iTag + || token.name() == imgTag + || token.name() == liTag + || token.name() == listingTag + || token.name() == menuTag + || token.name() == metaTag + || token.name() == nobrTag + || token.name() == olTag + || token.name() == pTag + || token.name() == preTag + || token.name() == rubyTag + || token.name() == sTag + || token.name() == smallTag + || token.name() == spanTag + || token.name() == strongTag + || token.name() == strikeTag + || token.name() == subTag + || token.name() == supTag + || token.name() == tableTag + || token.name() == ttTag + || token.name() == uTag + || token.name() == ulTag + || token.name() == varTag + || (token.name() == fontTag && (token.getAttributeItem(colorAttr) || token.getAttributeItem(faceAttr) || token.getAttributeItem(sizeAttr)))) { + m_tree.openElements()->popUntilElementWithNamespace(xhtmlNamespaceURI); + setInsertionMode(m_secondaryInsertionMode); + processStartTag(token); + return; + } + const AtomicString& currentNamespace = m_tree.currentElement()->namespaceURI(); + if (currentNamespace == MathMLNames::mathmlNamespaceURI) + adjustMathMLAttributes(token); + if (currentNamespace == SVGNames::svgNamespaceURI) { + adjustSVGTagNameCase(token); + adjustSVGAttributes(token); + } + adjustForeignAttributes(token); + m_tree.insertForeignElement(token, currentNamespace); + break; + } + case TextMode: notImplemented(); + break; } } bool HTMLTreeBuilder::processBodyEndTagForInBody(AtomicHTMLToken& token) { - if (!m_openElements.inScope(bodyTag.localName())) { + ASSERT(token.type() == HTMLToken::EndTag); + ASSERT(token.name() == bodyTag); + if (!m_tree.openElements()->inScope(bodyTag.localName())) { parseError(token); return false; } notImplemented(); - m_insertionMode = AfterBodyMode; + setInsertionMode(AfterBodyMode); return true; } +void HTMLTreeBuilder::processAnyOtherEndTagForInBody(AtomicHTMLToken& token) +{ + ASSERT(token.type() == HTMLToken::EndTag); + HTMLElementStack::ElementRecord* record = m_tree.openElements()->topRecord(); + while (1) { + Element* node = record->element(); + if (node->hasLocalName(token.name())) { + m_tree.generateImpliedEndTags(); + if (!m_tree.currentElement()->hasLocalName(token.name())) { + parseError(token); + // FIXME: This is either a bug in the spec, or a bug in our + // implementation. Filed a bug with HTML5: + // http://www.w3.org/Bugs/Public/show_bug.cgi?id=10080 + // We might have already popped the node for the token in + // generateImpliedEndTags, just abort. + if (!m_tree.openElements()->contains(node)) + return; + } + m_tree.openElements()->popUntilPopped(node); + return; + } + if (isNotFormattingAndNotPhrasing(node)) { + parseError(token); + return; + } + record = record->next(); + } +} + // FIXME: This probably belongs on HTMLElementStack. HTMLElementStack::ElementRecord* HTMLTreeBuilder::furthestBlockForFormattingElement(Element* formattingElement) { HTMLElementStack::ElementRecord* furthestBlock = 0; - HTMLElementStack::ElementRecord* record = m_openElements.topRecord(); + HTMLElementStack::ElementRecord* record = m_tree.openElements()->topRecord(); for (; record; record = record->next()) { if (record->element() == formattingElement) return furthestBlock; - const AtomicString& tagName = record->element()->localName(); - // !phrasing && !formatting == scoping || special - if (isScopingTag(tagName) || isSpecialTag(tagName)) + if (isNotFormattingAndNotPhrasing(record->element())) furthestBlock = record; } ASSERT_NOT_REACHED(); return 0; } -void HTMLTreeBuilder::findFosterParentFor(Element* element) -{ - Element* fosterParentElement = 0; - HTMLElementStack::ElementRecord* lastTableElementRecord = m_openElements.topmost(tableTag.localName()); - if (lastTableElementRecord) { - Element* lastTableElement = lastTableElementRecord->element(); - if (lastTableElement->parent()) { - // FIXME: We need an insertElement which does not send mutation events. - ExceptionCode ec = 0; - lastTableElement->parent()->insertBefore(element, lastTableElement, ec); - ASSERT(!ec); - return; - } - fosterParentElement = lastTableElementRecord->next()->element(); - } else { - ASSERT(m_isParsingFragment); - fosterParentElement = m_openElements.bottom(); // <html> element - } - - fosterParentElement->parserAddChild(element); -} - // FIXME: This should have a whitty name. // FIXME: This must be implemented in many other places in WebCore. void HTMLTreeBuilder::reparentChildren(Element* oldParent, Element* newParent) @@ -939,34 +1629,33 @@ void HTMLTreeBuilder::callTheAdoptionAgency(AtomicHTMLToken& token) { while (1) { // 1. - Element* formattingElement = m_activeFormattingElements.closestElementInScopeWithName(token.name()); - if (!formattingElement || !m_openElements.inScope(formattingElement)) { + Element* formattingElement = m_tree.activeFormattingElements()->closestElementInScopeWithName(token.name()); + if (!formattingElement || (m_tree.openElements()->contains(formattingElement)) && !m_tree.openElements()->inScope(formattingElement)) { parseError(token); notImplemented(); // Check the stack of open elements for a more specific parse error. return; } - HTMLElementStack::ElementRecord* formattingElementRecord = m_openElements.find(formattingElement); + HTMLElementStack::ElementRecord* formattingElementRecord = m_tree.openElements()->find(formattingElement); if (!formattingElementRecord) { parseError(token); - m_activeFormattingElements.remove(formattingElement); + m_tree.activeFormattingElements()->remove(formattingElement); return; } - if (formattingElement != currentElement()) + if (formattingElement != m_tree.currentElement()) parseError(token); // 2. HTMLElementStack::ElementRecord* furthestBlock = furthestBlockForFormattingElement(formattingElement); // 3. if (!furthestBlock) { - m_openElements.popUntil(formattingElement); - m_openElements.pop(); - m_activeFormattingElements.remove(formattingElement); + m_tree.openElements()->popUntilPopped(formattingElement); + m_tree.activeFormattingElements()->remove(formattingElement); return; } // 4. ASSERT(furthestBlock->isAbove(formattingElementRecord)); Element* commonAncestor = formattingElementRecord->next()->element(); // 5. - notImplemented(); // bookmark? + HTMLFormattingElementList::Bookmark bookmark = m_tree.activeFormattingElements()->bookmarkFor(formattingElement); // 6. HTMLElementStack::ElementRecord* node = furthestBlock; HTMLElementStack::ElementRecord* nextNode = node->next(); @@ -977,26 +1666,28 @@ void HTMLTreeBuilder::callTheAdoptionAgency(AtomicHTMLToken& token) ASSERT(node); nextNode = node->next(); // Save node->next() for the next iteration in case node is deleted in 6.2. // 6.2 - if (!m_activeFormattingElements.contains(node->element())) { - m_openElements.remove(node->element()); + if (!m_tree.activeFormattingElements()->contains(node->element())) { + m_tree.openElements()->remove(node->element()); node = 0; continue; } // 6.3 if (node == formattingElementRecord) break; - // 6.4 - if (lastNode == furthestBlock) - notImplemented(); // move bookmark. // 6.5 // FIXME: We're supposed to save the original token in the entry. AtomicHTMLToken fakeToken(HTMLToken::StartTag, node->element()->localName()); - // Is createElement correct? (instead of insertElement) + // Is createHTMLElement correct? (instead of insertHTMLElement) // Does this code ever leave newElement unattached? - RefPtr<Element> newElement = createElement(fakeToken); - HTMLFormattingElementList::Entry* nodeEntry = m_activeFormattingElements.find(node->element()); + RefPtr<Element> newElement = m_tree.createHTMLElement(fakeToken); + HTMLFormattingElementList::Entry* nodeEntry = m_tree.activeFormattingElements()->find(node->element()); nodeEntry->replaceElement(newElement.get()); node->replaceElement(newElement.release()); + // 6.4 -- Intentionally out of order to handle the case where node + // was replaced in 6.5. + // http://www.w3.org/Bugs/Public/show_bug.cgi?id=10096 + if (lastNode == furthestBlock) + bookmark.moveToAfter(node->element()); // 6.6 // Use appendChild instead of parserAddChild to handle possible reparenting. ExceptionCode ec; @@ -1010,7 +1701,7 @@ void HTMLTreeBuilder::callTheAdoptionAgency(AtomicHTMLToken& token) if (commonAncestorTag == tableTag || commonAncestorTag == trTag || isTableBodyContextTag(commonAncestorTag)) - findFosterParentFor(lastNode->element()); + m_tree.fosterParent(lastNode->element()); else { ExceptionCode ec; commonAncestor->appendChild(lastNode->element(), ec); @@ -1019,22 +1710,403 @@ void HTMLTreeBuilder::callTheAdoptionAgency(AtomicHTMLToken& token) // 8 // FIXME: We're supposed to save the original token in the entry. AtomicHTMLToken fakeToken(HTMLToken::StartTag, formattingElement->localName()); - RefPtr<Element> newElement = createElement(fakeToken); + RefPtr<Element> newElement = m_tree.createHTMLElement(fakeToken); // 9 reparentChildren(furthestBlock->element(), newElement.get()); // 10 furthestBlock->element()->parserAddChild(newElement); // 11 - m_activeFormattingElements.remove(formattingElement); - notImplemented(); // insert new element at bookmark + m_tree.activeFormattingElements()->remove(formattingElement); + m_tree.activeFormattingElements()->insertAt(newElement.get(), bookmark); // 12 - m_openElements.remove(formattingElement); - m_openElements.insertAbove(newElement, furthestBlock); + m_tree.openElements()->remove(formattingElement); + m_tree.openElements()->insertAbove(newElement, furthestBlock); + } +} + +void HTMLTreeBuilder::setSecondaryInsertionMode(InsertionMode mode) +{ + ASSERT(mode != InForeignContentMode); + m_secondaryInsertionMode = mode; +} + +void HTMLTreeBuilder::setInsertionModeAndEnd(InsertionMode newInsertionMode, bool foreign) +{ + setInsertionMode(newInsertionMode); + if (foreign) { + setSecondaryInsertionMode(m_insertionMode); + setInsertionMode(InForeignContentMode); + } +} + +void HTMLTreeBuilder::resetInsertionModeAppropriately() +{ + // http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#reset-the-insertion-mode-appropriately + bool last = false; + bool foreign = false; + HTMLElementStack::ElementRecord* nodeRecord = m_tree.openElements()->topRecord(); + while (1) { + Element* node = nodeRecord->element(); + if (node == m_tree.openElements()->bottom()) { + ASSERT(m_isParsingFragment); + last = true; + notImplemented(); // node = m_contextElement; + } + if (node->hasTagName(selectTag)) { + ASSERT(m_isParsingFragment); + return setInsertionModeAndEnd(InSelectMode, foreign); + } + if (node->hasTagName(tdTag) || node->hasTagName(thTag)) + return setInsertionModeAndEnd(InCellMode, foreign); + if (node->hasTagName(trTag)) + return setInsertionModeAndEnd(InRowMode, foreign); + if (isTableBodyContextTag(node->localName())) + return setInsertionModeAndEnd(InTableBodyMode, foreign); + if (node->hasTagName(captionTag)) + return setInsertionModeAndEnd(InCaptionMode, foreign); + if (node->hasTagName(colgroupTag)) { + ASSERT(m_isParsingFragment); + return setInsertionModeAndEnd(InColumnGroupMode, foreign); + } + if (node->hasTagName(tableTag)) + return setInsertionModeAndEnd(InTableMode, foreign); + if (node->hasTagName(headTag)) { + ASSERT(m_isParsingFragment); + return setInsertionModeAndEnd(InBodyMode, foreign); + } + if (node->hasTagName(bodyTag)) + return setInsertionModeAndEnd(InBodyMode, foreign); + if (node->hasTagName(framesetTag)) { + ASSERT(m_isParsingFragment); + return setInsertionModeAndEnd(InFramesetMode, foreign); + } + if (node->hasTagName(htmlTag)) { + ASSERT(m_isParsingFragment); + return setInsertionModeAndEnd(BeforeHeadMode, foreign); + } + if (node->namespaceURI() == SVGNames::svgNamespaceURI + || node->namespaceURI() == MathMLNames::mathmlNamespaceURI) + foreign = true; + if (last) { + ASSERT(m_isParsingFragment); + return setInsertionModeAndEnd(InBodyMode, foreign); + } + nodeRecord = nodeRecord->next(); + } +} + +void HTMLTreeBuilder::processEndTagForInTableBody(AtomicHTMLToken& token) +{ + ASSERT(token.type() == HTMLToken::EndTag); + if (isTableBodyContextTag(token.name())) { + if (!m_tree.openElements()->inTableScope(token.name())) { + parseError(token); + return; + } + m_tree.openElements()->popUntilTableBodyScopeMarker(); + m_tree.openElements()->pop(); + setInsertionMode(InTableMode); + return; + } + if (token.name() == tableTag) { + // FIXME: This is slow. + if (!m_tree.openElements()->inTableScope(tbodyTag.localName()) && !m_tree.openElements()->inTableScope(theadTag.localName()) && !m_tree.openElements()->inTableScope(tfootTag.localName())) { + ASSERT(m_isParsingFragment); + parseError(token); + return; + } + m_tree.openElements()->popUntilTableBodyScopeMarker(); + ASSERT(isTableBodyContextTag(m_tree.currentElement()->localName())); + processFakeEndTag(m_tree.currentElement()->tagQName()); + processEndTag(token); + return; + } + if (token.name() == bodyTag + || isCaptionColOrColgroupTag(token.name()) + || token.name() == htmlTag + || isTableCellContextTag(token.name()) + || token.name() == trTag) { + parseError(token); + return; + } + processEndTagForInTable(token); +} + +void HTMLTreeBuilder::processEndTagForInRow(AtomicHTMLToken& token) +{ + ASSERT(token.type() == HTMLToken::EndTag); + if (token.name() == trTag) { + processTrEndTagForInRow(); + return; + } + if (token.name() == tableTag) { + if (!processTrEndTagForInRow()) { + ASSERT(m_isParsingFragment); + return; + } + ASSERT(insertionMode() == InTableBodyMode); + processEndTag(token); + return; + } + if (isTableBodyContextTag(token.name())) { + if (!m_tree.openElements()->inTableScope(token.name())) { + parseError(token); + return; + } + processFakeEndTag(trTag); + ASSERT(insertionMode() == InTableBodyMode); + processEndTag(token); + return; + } + if (token.name() == bodyTag + || isCaptionColOrColgroupTag(token.name()) + || token.name() == htmlTag + || isTableCellContextTag(token.name())) { + parseError(token); + return; + } + processEndTagForInTable(token); +} + +void HTMLTreeBuilder::processEndTagForInCell(AtomicHTMLToken& token) +{ + ASSERT(token.type() == HTMLToken::EndTag); + if (isTableCellContextTag(token.name())) { + if (!m_tree.openElements()->inTableScope(token.name())) { + parseError(token); + return; + } + m_tree.generateImpliedEndTags(); + if (!m_tree.currentElement()->hasLocalName(token.name())) + parseError(token); + m_tree.openElements()->popUntilPopped(token.name()); + m_tree.activeFormattingElements()->clearToLastMarker(); + setInsertionMode(InRowMode); + ASSERT(m_tree.currentElement()->hasTagName(trTag)); + return; + } + if (token.name() == bodyTag + || isCaptionColOrColgroupTag(token.name()) + || token.name() == htmlTag) { + parseError(token); + return; } + if (token.name() == tableTag + || token.name() == trTag + || isTableBodyContextTag(token.name())) { + if (!m_tree.openElements()->inTableScope(token.name())) { + ASSERT(m_isParsingFragment); + // FIXME: It is unclear what the exact ASSERT should be. + // http://www.w3.org/Bugs/Public/show_bug.cgi?id=10098 + parseError(token); + return; + } + closeTheCell(); + processEndTag(token); + return; + } + processEndTagForInBody(token); +} + +void HTMLTreeBuilder::processEndTagForInBody(AtomicHTMLToken& token) +{ + ASSERT(token.type() == HTMLToken::EndTag); + if (token.name() == bodyTag) { + processBodyEndTagForInBody(token); + return; + } + if (token.name() == htmlTag) { + AtomicHTMLToken endBody(HTMLToken::EndTag, bodyTag.localName()); + if (processBodyEndTagForInBody(endBody)) + processEndTag(token); + return; + } + if (token.name() == addressTag + || token.name() == articleTag + || token.name() == asideTag + || token.name() == blockquoteTag + || token.name() == buttonTag + || token.name() == centerTag + || token.name() == "details" + || token.name() == dirTag + || token.name() == divTag + || token.name() == dlTag + || token.name() == fieldsetTag + || token.name() == "figure" + || token.name() == footerTag + || token.name() == headerTag + || token.name() == hgroupTag + || token.name() == listingTag + || token.name() == menuTag + || token.name() == navTag + || token.name() == olTag + || token.name() == preTag + || token.name() == sectionTag + || token.name() == ulTag) { + if (!m_tree.openElements()->inScope(token.name())) { + parseError(token); + return; + } + m_tree.generateImpliedEndTags(); + if (!m_tree.currentElement()->hasLocalName(token.name())) + parseError(token); + m_tree.openElements()->popUntilPopped(token.name()); + return; + } + if (token.name() == formTag) { + RefPtr<Element> node = m_tree.takeForm(); + if (!node || !m_tree.openElements()->inScope(node.get())) { + parseError(token); + return; + } + m_tree.generateImpliedEndTags(); + if (m_tree.currentElement() != node.get()) + parseError(token); + m_tree.openElements()->remove(node.get()); + } + if (token.name() == pTag) { + if (!m_tree.openElements()->inScope(token.name())) { + parseError(token); + processFakeStartTag(pTag); + ASSERT(m_tree.openElements()->inScope(token.name())); + processEndTag(token); + return; + } + m_tree.generateImpliedEndTagsWithExclusion(token.name()); + if (!m_tree.currentElement()->hasLocalName(token.name())) + parseError(token); + m_tree.openElements()->popUntilPopped(token.name()); + return; + } + if (token.name() == liTag) { + if (!m_tree.openElements()->inListItemScope(token.name())) { + parseError(token); + return; + } + m_tree.generateImpliedEndTagsWithExclusion(token.name()); + if (!m_tree.currentElement()->hasLocalName(token.name())) + parseError(token); + m_tree.openElements()->popUntilPopped(token.name()); + return; + } + if (token.name() == ddTag + || token.name() == dtTag) { + if (!m_tree.openElements()->inScope(token.name())) { + parseError(token); + return; + } + m_tree.generateImpliedEndTagsWithExclusion(token.name()); + if (!m_tree.currentElement()->hasLocalName(token.name())) + parseError(token); + m_tree.openElements()->popUntilPopped(token.name()); + return; + } + if (isNumberedHeaderTag(token.name())) { + if (!m_tree.openElements()->inScope(token.name())) { + parseError(token); + return; + } + m_tree.generateImpliedEndTags(); + if (!m_tree.currentElement()->hasLocalName(token.name())) + parseError(token); + m_tree.openElements()->popUntilPopped(token.name()); + return; + } + if (token.name() == "sarcasm") { + notImplemented(); // Take a deep breath. + return; + } + if (isFormattingTag(token.name())) { + callTheAdoptionAgency(token); + return; + } + if (token.name() == appletTag + || token.name() == marqueeTag + || token.name() == objectTag) { + if (!m_tree.openElements()->inScope(token.name())) { + parseError(token); + return; + } + m_tree.generateImpliedEndTags(); + if (!m_tree.currentElement()->hasLocalName(token.name())) + parseError(token); + m_tree.openElements()->popUntilPopped(token.name()); + m_tree.activeFormattingElements()->clearToLastMarker(); + return; + } + if (token.name() == brTag) { + parseError(token); + processFakeStartTag(brTag); + return; + } + processAnyOtherEndTagForInBody(token); +} + +bool HTMLTreeBuilder::processCaptionEndTagForInCaption() +{ + if (!m_tree.openElements()->inTableScope(captionTag.localName())) { + ASSERT(m_isParsingFragment); + // FIXME: parse error + return false; + } + m_tree.generateImpliedEndTags(); + // FIXME: parse error if (!m_tree.currentElement()->hasTagName(captionTag)) + m_tree.openElements()->popUntilPopped(captionTag.localName()); + m_tree.activeFormattingElements()->clearToLastMarker(); + setInsertionMode(InTableMode); + return true; +} + +bool HTMLTreeBuilder::processTrEndTagForInRow() +{ + if (!m_tree.openElements()->inTableScope(trTag.localName())) { + ASSERT(m_isParsingFragment); + // FIXME: parse error + return false; + } + m_tree.openElements()->popUntilTableRowScopeMarker(); + ASSERT(m_tree.currentElement()->hasTagName(trTag)); + m_tree.openElements()->pop(); + setInsertionMode(InTableBodyMode); + return true; +} + +bool HTMLTreeBuilder::processTableEndTagForInTable() +{ + if (!m_tree.openElements()->inTableScope(tableTag)) { + ASSERT(m_isParsingFragment); + // FIXME: parse error. + return false; + } + m_tree.openElements()->popUntilPopped(tableTag.localName()); + resetInsertionModeAppropriately(); + return true; +} + +void HTMLTreeBuilder::processEndTagForInTable(AtomicHTMLToken& token) +{ + ASSERT(token.type() == HTMLToken::EndTag); + if (token.name() == tableTag) { + processTableEndTagForInTable(); + return; + } + if (token.name() == bodyTag + || isCaptionColOrColgroupTag(token.name()) + || token.name() == htmlTag + || isTableBodyContextTag(token.name()) + || isTableCellContextTag(token.name()) + || token.name() == trTag) { + parseError(token); + return; + } + // Is this redirection necessary here? + HTMLConstructionSite::RedirectToFosterParentGuard redirecter(m_tree, requiresRedirectToFosterParent(m_tree.currentElement())); + processEndTagForInBody(token); } void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token) { + ASSERT(token.type() == HTMLToken::EndTag); switch (insertionMode()) { case InitialMode: ASSERT(insertionMode() == InitialMode); @@ -1050,7 +2122,7 @@ void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token) // Fall through. case BeforeHeadMode: ASSERT(insertionMode() == BeforeHeadMode); - if (token.name() != headTag && token.name() != bodyTag && token.name() != brTag) { + if (token.name() != headTag && token.name() != bodyTag && token.name() != htmlTag && token.name() != brTag) { parseError(token); return; } @@ -1059,7 +2131,7 @@ void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token) case InHeadMode: ASSERT(insertionMode() == InHeadMode); if (token.name() == headTag) { - m_openElements.popHTMLHeadElement(); + m_tree.openElements()->popHTMLHeadElement(); setInsertionMode(AfterHeadMode); return; } @@ -1079,123 +2151,66 @@ void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token) // Fall through case InBodyMode: ASSERT(insertionMode() == InBodyMode); - if (token.name() == bodyTag) { - processBodyEndTagForInBody(token); - return; - } - if (token.name() == htmlTag) { - if (processBodyEndTagForInBody(token)) - processEndTag(token); - return; - } - if (token.name() == addressTag || token.name() == articleTag || token.name() == asideTag || token.name() == blockquoteTag || token.name() == buttonTag || token.name() == centerTag || token.name() == "details" || token.name() == dirTag || token.name() == divTag || token.name() == dlTag || token.name() == fieldsetTag || token.name() == "figure" || token.name() == footerTag || token.name() == headerTag || token.name() == hgroupTag || token.name() == listingTag || token.name() == menuTag || token.name() == navTag || token.name() == olTag || token.name() == preTag || token.name() == sectionTag || token.name() == ulTag) { - if (!m_openElements.inScope(token.name())) { - parseError(token); - return; - } - generateImpliedEndTags(); - if (currentElement()->tagQName() != token.name()) - parseError(token); - m_openElements.popUntil(token.name()); - m_openElements.pop(); - } - if (token.name() == formTag) { - RefPtr<Element> node = m_formElement.release(); - if (!node || !m_openElements.inScope(node.get())) { - parseError(token); - return; - } - generateImpliedEndTags(); - if (currentElement() != node.get()) - parseError(token); - m_openElements.remove(node.get()); - } - if (token.name() == pTag) { - if (!m_openElements.inScope(token.name())) { - parseError(token); - notImplemented(); - return; - } - generateImpliedEndTagsWithExclusion(token.name()); - if (!currentElement()->hasLocalName(token.name())) - parseError(token); - m_openElements.popUntil(token.name()); - m_openElements.pop(); - return; - } - if (token.name() == liTag) { - if (!m_openElements.inListItemScope(token.name())) { - parseError(token); - return; - } - generateImpliedEndTagsWithExclusion(token.name()); - if (!currentElement()->hasLocalName(token.name())) - parseError(token); - m_openElements.popUntil(token.name()); - m_openElements.pop(); - return; - } - if (token.name() == ddTag || token.name() == dtTag) { - if (!m_openElements.inScope(token.name())) { - parseError(token); - return; - } - generateImpliedEndTagsWithExclusion(token.name()); - if (!currentElement()->hasLocalName(token.name())) - parseError(token); - m_openElements.popUntil(token.name()); - m_openElements.pop(); + processEndTagForInBody(token); + break; + case InTableMode: + ASSERT(insertionMode() == InTableMode); + processEndTagForInTable(token); + break; + case InCaptionMode: + ASSERT(insertionMode() == InCaptionMode); + if (token.name() == captionTag) { + processCaptionEndTagForInCaption(); return; } - if (isNumberedHeaderTag(token.name())) { - if (!m_openElements.inScope(token.name())) { - parseError(token); + if (token.name() == tableTag) { + parseError(token); + if (!processCaptionEndTagForInCaption()) { + ASSERT(m_isParsingFragment); return; } - generateImpliedEndTags(); - if (!currentElement()->hasLocalName(token.name())) - parseError(token); - m_openElements.popUntil(token.name()); - m_openElements.pop(); - return; - } - if (token.name() == "sarcasm") { - notImplemented(); // Take a deep breath. + processEndTag(token); return; } - if (isFormattingTag(token.name())) { - callTheAdoptionAgency(token); + if (token.name() == bodyTag + || token.name() == colTag + || token.name() == colgroupTag + || token.name() == htmlTag + || isTableBodyContextTag(token.name()) + || isTableCellContextTag(token.name()) + || token.name() == trTag) { + parseError(token); return; } - if (token.name() == appletTag || token.name() == marqueeTag || token.name() == objectTag) { - if (!m_openElements.inScope(token.name())) { - parseError(token); - return; - } - generateImpliedEndTags(); - if (currentElement()->tagQName() != token.name()) - parseError(token); - m_openElements.popUntil(token.name()); - m_openElements.pop(); - m_activeFormattingElements.clearToLastMarker(); + processEndTagForInBody(token); + break; + case InColumnGroupMode: + ASSERT(insertionMode() == InColumnGroupMode); + if (token.name() == colgroupTag) { + processColgroupEndTagForInColumnGroup(); return; } - if (token.name() == brTag) { + if (token.name() == colTag) { parseError(token); - reconstructTheActiveFormattingElements(); - // Notice that we lose the attributes. - AtomicHTMLToken startBr(HTMLToken::StartTag, token.name()); - insertSelfClosingElement(startBr); - m_framesetOk = false; return; } - // FIXME: We need an iterator over m_openElements to implement this - // correctly. - notImplemented(); - if (!m_openElements.inScope(token.name())) + if (!processColgroupEndTagForInColumnGroup()) { + ASSERT(m_isParsingFragment); return; - m_openElements.popUntil(token.name()); - m_openElements.pop(); + } + processEndTag(token); + break; + case InRowMode: + ASSERT(insertionMode() == InRowMode); + processEndTagForInRow(token); + break; + case InCellMode: + ASSERT(insertionMode() == InCellMode); + processEndTagForInCell(token); + break; + case InTableBodyMode: + ASSERT(insertionMode() == InTableBodyMode); + processEndTagForInTableBody(token); break; case AfterBodyMode: ASSERT(insertionMode() == AfterBodyMode); @@ -1204,22 +2219,22 @@ void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token) parseError(token); return; } - m_insertionMode = AfterAfterBodyMode; + setInsertionMode(AfterAfterBodyMode); return; } // Fall through. case AfterAfterBodyMode: ASSERT(insertionMode() == AfterBodyMode || insertionMode() == AfterAfterBodyMode); parseError(token); - m_insertionMode = InBodyMode; + setInsertionMode(InBodyMode); processEndTag(token); break; case InHeadNoscriptMode: ASSERT(insertionMode() == InHeadNoscriptMode); if (token.name() == noscriptTag) { - ASSERT(currentElement()->tagQName() == noscriptTag); - m_openElements.pop(); - ASSERT(currentElement()->tagQName() == headTag); + ASSERT(m_tree.currentElement()->hasTagName(noscriptTag)); + m_tree.openElements()->pop(); + ASSERT(m_tree.currentElement()->hasTagName(headTag)); setInsertionMode(InHeadMode); return; } @@ -1234,32 +2249,32 @@ void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token) if (token.name() == scriptTag) { // Pause ourselves so that parsing stops until the script can be processed by the caller. m_isPaused = true; - ASSERT(currentElement()->tagQName() == scriptTag); - m_scriptToProcess = currentElement(); - m_openElements.pop(); - m_insertionMode = m_originalInsertionMode; + ASSERT(m_tree.currentElement()->hasTagName(scriptTag)); + m_scriptToProcess = m_tree.currentElement(); + m_tree.openElements()->pop(); + setInsertionMode(m_originalInsertionMode); return; } - m_openElements.pop(); - m_insertionMode = m_originalInsertionMode; + m_tree.openElements()->pop(); + setInsertionMode(m_originalInsertionMode); break; case InFramesetMode: ASSERT(insertionMode() == InFramesetMode); if (token.name() == framesetTag) { - if (currentElement() == m_openElements.htmlElement()) { + if (m_tree.currentElement() == m_tree.openElements()->htmlElement()) { parseError(token); return; } - m_openElements.pop(); - if (!m_isParsingFragment && !currentElement()->hasTagName(framesetTag)) - m_insertionMode = AfterFramesetMode; + m_tree.openElements()->pop(); + if (!m_isParsingFragment && !m_tree.currentElement()->hasTagName(framesetTag)) + setInsertionMode(AfterFramesetMode); return; } break; case AfterFramesetMode: ASSERT(insertionMode() == AfterFramesetMode); if (token.name() == htmlTag) { - m_insertionMode = AfterAfterFramesetMode; + setInsertionMode(AfterAfterFramesetMode); return; } // Fall through. @@ -1267,87 +2282,296 @@ void HTMLTreeBuilder::processEndTag(AtomicHTMLToken& token) ASSERT(insertionMode() == AfterFramesetMode || insertionMode() == AfterAfterFramesetMode); parseError(token); break; - default: - notImplemented(); + case InSelectInTableMode: + ASSERT(insertionMode() == InSelectInTableMode); + if (token.name() == captionTag + || token.name() == tableTag + || isTableBodyContextTag(token.name()) + || token.name() == trTag + || isTableCellContextTag(token.name())) { + parseError(token); + if (m_tree.openElements()->inTableScope(token.name())) { + AtomicHTMLToken endSelect(HTMLToken::EndTag, selectTag.localName()); + processEndTag(endSelect); + processEndTag(token); + } + return; + } + // Fall through. + case InSelectMode: + ASSERT(insertionMode() == InSelectMode || insertionMode() == InSelectInTableMode); + if (token.name() == optgroupTag) { + if (m_tree.currentElement()->hasTagName(optionTag) && m_tree.oneBelowTop()->hasTagName(optgroupTag)) + processFakeEndTag(optionTag); + if (m_tree.currentElement()->hasTagName(optgroupTag)) { + m_tree.openElements()->pop(); + return; + } + parseError(token); + return; + } + if (token.name() == optionTag) { + if (m_tree.currentElement()->hasTagName(optionTag)) { + m_tree.openElements()->pop(); + return; + } + parseError(token); + return; + } + if (token.name() == selectTag) { + notImplemented(); // fragment case + m_tree.openElements()->popUntilPopped(selectTag.localName()); + resetInsertionModeAppropriately(); + return; + } + break; + case InTableTextMode: + processDefaultForInTableTextMode(token); + processEndTag(token); + break; + case InForeignContentMode: + if (token.name() == SVGNames::scriptTag && m_tree.currentElement()->hasTagName(SVGNames::scriptTag)) { + notImplemented(); + return; + } + if (m_tree.currentElement()->namespaceURI() != xhtmlNamespaceURI) { + // FIXME: This code just wants an Element* iterator, instead of an ElementRecord* + HTMLElementStack::ElementRecord* nodeRecord = m_tree.openElements()->topRecord(); + if (!nodeRecord->element()->hasLocalName(token.name())) { + parseError(token); + // FIXME: This return is not in the spec but appears to be needed. + // http://www.w3.org/Bugs/Public/show_bug.cgi?id=10118 + return; + } + while (1) { + if (nodeRecord->element()->hasLocalName(token.name())) { + m_tree.openElements()->popUntilPopped(nodeRecord->element()); + return; + } + nodeRecord = nodeRecord->next(); + if (nodeRecord->element()->namespaceURI() == xhtmlNamespaceURI) + processUsingSecondaryInsertionModeAndAdjustInsertionMode(token); + } + return; + } + processUsingSecondaryInsertionModeAndAdjustInsertionMode(token); + break; + } +} + +class HTMLTreeBuilder::FakeInsertionMode : public Noncopyable { +public: + FakeInsertionMode(HTMLTreeBuilder* treeBuilder, InsertionMode mode) + : m_treeBuilder(treeBuilder) + , m_originalMode(treeBuilder->insertionMode()) + { + m_treeBuilder->setFakeInsertionMode(mode); + } + + ~FakeInsertionMode() + { + if (m_treeBuilder->isFakeInsertionMode()) + m_treeBuilder->setInsertionMode(m_originalMode); + } + +private: + HTMLTreeBuilder* m_treeBuilder; + InsertionMode m_originalMode; +}; + +// This handles both secondary insertion mode processing, as well as updating +// the insertion mode. These are separate steps in the spec, but always occur +// right after one another. +void HTMLTreeBuilder::processUsingSecondaryInsertionModeAndAdjustInsertionMode(AtomicHTMLToken& token) +{ + ASSERT(token.type() == HTMLToken::StartTag || token.type() == HTMLToken::EndTag); + { + FakeInsertionMode fakeMode(this, m_secondaryInsertionMode); + processToken(token); } + if (insertionMode() == InForeignContentMode && m_tree.openElements()->hasOnlyHTMLElementsInScope()) + setInsertionMode(m_secondaryInsertionMode); } void HTMLTreeBuilder::processComment(AtomicHTMLToken& token) { - if (m_insertionMode == InitialMode || m_insertionMode == BeforeHTMLMode || m_insertionMode == AfterAfterBodyMode || m_insertionMode == AfterAfterFramesetMode) { - insertCommentOnDocument(token); + ASSERT(token.type() == HTMLToken::Comment); + if (m_insertionMode == InitialMode + || m_insertionMode == BeforeHTMLMode + || m_insertionMode == AfterAfterBodyMode + || m_insertionMode == AfterAfterFramesetMode) { + m_tree.insertCommentOnDocument(token); return; } if (m_insertionMode == AfterBodyMode) { - insertCommentOnHTMLHtmlElement(token); + m_tree.insertCommentOnHTMLHtmlElement(token); + return; + } + if (m_insertionMode == InTableTextMode) { + processDefaultForInTableTextMode(token); + processComment(token); return; } - insertComment(token); + m_tree.insertComment(token); } void HTMLTreeBuilder::processCharacter(AtomicHTMLToken& token) { - // FIXME: We need to figure out how to handle each character individually. + ASSERT(token.type() == HTMLToken::Character); + + // FIXME: Currently this design has an extra memcpy because we copy the + // characters out of the HTMLTokenizer's buffer into the AtomicHTMLToken + // and then into the text node. What we'd really like is to copy directly + // from the HTMLTokenizer's buffer into the text node. + ExternalCharacterTokenBuffer buffer(token); + +ReprocessBuffer: switch (insertionMode()) { - case InitialMode: + case InitialMode: { ASSERT(insertionMode() == InitialMode); - notImplemented(); + buffer.skipLeadingWhitespace(); + if (buffer.isEmpty()) + return; processDefaultForInitialMode(token); // Fall through. - case BeforeHTMLMode: + } + case BeforeHTMLMode: { ASSERT(insertionMode() == BeforeHTMLMode); - notImplemented(); + buffer.skipLeadingWhitespace(); + if (buffer.isEmpty()) + return; processDefaultForBeforeHTMLMode(token); // Fall through. - case BeforeHeadMode: + } + case BeforeHeadMode: { ASSERT(insertionMode() == BeforeHeadMode); - notImplemented(); + buffer.skipLeadingWhitespace(); + if (buffer.isEmpty()) + return; processDefaultForBeforeHeadMode(token); // Fall through. - case InHeadMode: + } + case InHeadMode: { ASSERT(insertionMode() == InHeadMode); - notImplemented(); + String leadingWhitespace = buffer.takeLeadingWhitespace(); + if (!leadingWhitespace.isEmpty()) + m_tree.insertTextNode(leadingWhitespace); + if (buffer.isEmpty()) + return; processDefaultForInHeadMode(token); // Fall through. - case AfterHeadMode: + } + case AfterHeadMode: { ASSERT(insertionMode() == AfterHeadMode); - notImplemented(); + String leadingWhitespace = buffer.takeLeadingWhitespace(); + if (!leadingWhitespace.isEmpty()) + m_tree.insertTextNode(leadingWhitespace); + if (buffer.isEmpty()) + return; processDefaultForAfterHeadMode(token); - // Fall through + // Fall through. + } case InBodyMode: - ASSERT(insertionMode() == InBodyMode); - notImplemented(); - insertTextNode(token); + case InCaptionMode: + case InCellMode: { + ASSERT(insertionMode() == InBodyMode || insertionMode() == InCaptionMode || insertionMode() == InCellMode); + m_tree.reconstructTheActiveFormattingElements(); + String characters = buffer.takeRemaining(); + m_tree.insertTextNode(characters); + if (m_framesetOk && hasNonWhitespace(characters)) + m_framesetOk = false; break; + } + case InTableMode: + case InTableBodyMode: + case InRowMode: { + ASSERT(insertionMode() == InTableMode || insertionMode() == InTableBodyMode || insertionMode() == InRowMode); + ASSERT(m_pendingTableCharacters.isEmpty()); + m_originalInsertionMode = m_insertionMode; + setInsertionMode(InTableTextMode); + // Fall through. + } + case InTableTextMode: { + buffer.giveRemainingTo(m_pendingTableCharacters); + break; + } + case InColumnGroupMode: { + ASSERT(insertionMode() == InColumnGroupMode); + String leadingWhitespace = buffer.takeLeadingWhitespace(); + if (!leadingWhitespace.isEmpty()) + m_tree.insertTextNode(leadingWhitespace); + if (buffer.isEmpty()) + return; + if (!processColgroupEndTagForInColumnGroup()) { + ASSERT(m_isParsingFragment); + return; + } + goto ReprocessBuffer; + } case AfterBodyMode: - case AfterAfterBodyMode: + case AfterAfterBodyMode: { ASSERT(insertionMode() == AfterBodyMode || insertionMode() == AfterAfterBodyMode); parseError(token); - m_insertionMode = InBodyMode; - processCharacter(token); + setInsertionMode(InBodyMode); + goto ReprocessBuffer; break; - case TextMode: - notImplemented(); - insertTextNode(token); + } + case TextMode: { + ASSERT(insertionMode() == TextMode); + m_tree.insertTextNode(buffer.takeRemaining()); break; - case InHeadNoscriptMode: + } + case InHeadNoscriptMode: { ASSERT(insertionMode() == InHeadNoscriptMode); + String leadingWhitespace = buffer.takeLeadingWhitespace(); + if (!leadingWhitespace.isEmpty()) + m_tree.insertTextNode(leadingWhitespace); + if (buffer.isEmpty()) + return; processDefaultForInHeadNoscriptMode(token); - processToken(token); + goto ReprocessBuffer; break; + } case InFramesetMode: - case AfterFramesetMode: - case AfterAfterFramesetMode: + case AfterFramesetMode: { ASSERT(insertionMode() == InFramesetMode || insertionMode() == AfterFramesetMode || insertionMode() == AfterAfterFramesetMode); - parseError(token); + String leadingWhitespace = buffer.takeRemainingWhitespace(); + if (!leadingWhitespace.isEmpty()) + m_tree.insertTextNode(leadingWhitespace); + // FIXME: We should generate a parse error if we skipped over any + // non-whitespace characters. + break; + } + case InSelectInTableMode: + case InSelectMode: { + ASSERT(insertionMode() == InSelectMode || insertionMode() == InSelectInTableMode); + m_tree.insertTextNode(buffer.takeRemaining()); break; - default: - notImplemented(); + } + case InForeignContentMode: { + ASSERT(insertionMode() == InForeignContentMode); + String characters = buffer.takeRemaining(); + m_tree.insertTextNode(characters); + if (m_framesetOk && hasNonWhitespace(characters)) + m_framesetOk = false; + break; + } + case AfterAfterFramesetMode: { + String leadingWhitespace = buffer.takeRemainingWhitespace(); + if (!leadingWhitespace.isEmpty()) { + m_tree.reconstructTheActiveFormattingElements(); + m_tree.insertTextNode(leadingWhitespace); + } + // FIXME: We should generate a parse error if we skipped over any + // non-whitespace characters. + break; + } } } void HTMLTreeBuilder::processEndOfFile(AtomicHTMLToken& token) { + ASSERT(token.type() == HTMLToken::EndOfFile); switch (insertionMode()) { case InitialMode: ASSERT(insertionMode() == InitialMode); @@ -1370,7 +2594,8 @@ void HTMLTreeBuilder::processEndOfFile(AtomicHTMLToken& token) processDefaultForAfterHeadMode(token); // Fall through case InBodyMode: - ASSERT(insertionMode() == InBodyMode); + case InCellMode: + ASSERT(insertionMode() == InBodyMode || insertionMode() == InCellMode); notImplemented(); break; case AfterBodyMode: @@ -1383,17 +2608,47 @@ void HTMLTreeBuilder::processEndOfFile(AtomicHTMLToken& token) processDefaultForInHeadNoscriptMode(token); processToken(token); break; - case InFramesetMode: - ASSERT(insertionMode() == InFramesetMode); - if (currentElement() != m_openElements.htmlElement()) - parseError(token); - break; case AfterFramesetMode: case AfterAfterFramesetMode: ASSERT(insertionMode() == AfterFramesetMode || insertionMode() == AfterAfterFramesetMode); break; - default: + case InFramesetMode: + case InTableMode: + case InTableBodyMode: + case InSelectInTableMode: + case InSelectMode: + ASSERT(insertionMode() == InSelectMode || insertionMode() == InSelectInTableMode || insertionMode() == InTableMode || insertionMode() == InFramesetMode || insertionMode() == InTableBodyMode); + if (m_tree.currentElement() != m_tree.openElements()->htmlElement()) + parseError(token); + break; + case InColumnGroupMode: + if (m_tree.currentElement() == m_tree.openElements()->htmlElement()) { + ASSERT(m_isParsingFragment); + return; + } + if (!processColgroupEndTagForInColumnGroup()) { + ASSERT(m_isParsingFragment); + return; + } + processEndOfFile(token); + break; + case InForeignContentMode: + parseError(token); + // FIXME: Following the spec would infinitely recurse on <svg><svg> + // http://www.w3.org/Bugs/Public/show_bug.cgi?id=10115 + m_tree.openElements()->popUntilElementWithNamespace(xhtmlNamespaceURI); + setInsertionMode(m_secondaryInsertionMode); + processEndOfFile(token); + break; + case InTableTextMode: + processDefaultForInTableTextMode(token); + processEndOfFile(token); + break; + case TextMode: + case InCaptionMode: + case InRowMode: notImplemented(); + break; } } @@ -1407,7 +2662,7 @@ void HTMLTreeBuilder::processDefaultForInitialMode(AtomicHTMLToken& token) void HTMLTreeBuilder::processDefaultForBeforeHTMLMode(AtomicHTMLToken&) { AtomicHTMLToken startHTML(HTMLToken::StartTag, htmlTag.localName()); - insertHTMLStartTagBeforeHTML(startHTML); + m_tree.insertHTMLHtmlStartTagBeforeHTML(startHTML); setInsertionMode(BeforeHeadMode); } @@ -1436,37 +2691,57 @@ void HTMLTreeBuilder::processDefaultForAfterHeadMode(AtomicHTMLToken&) m_framesetOk = true; } +void HTMLTreeBuilder::processDefaultForInTableTextMode(AtomicHTMLToken& token) +{ + String characters = String::adopt(m_pendingTableCharacters); + if (hasNonWhitespace(characters)) { + parseError(token); + HTMLConstructionSite::RedirectToFosterParentGuard redirecter(m_tree, requiresRedirectToFosterParent(m_tree.currentElement())); + m_tree.reconstructTheActiveFormattingElements(); + m_tree.insertTextNode(characters); + m_framesetOk = false; + setInsertionMode(m_originalInsertionMode); + return; + } + m_tree.insertTextNode(characters); + setInsertionMode(m_originalInsertionMode); +} + bool HTMLTreeBuilder::processStartTagForInHead(AtomicHTMLToken& token) { + ASSERT(token.type() == HTMLToken::StartTag); if (token.name() == htmlTag) { - insertHTMLStartTagInBody(token); + m_tree.insertHTMLHtmlStartTagInBody(token); return true; } // FIXME: Atomize "command". - if (token.name() == baseTag || token.name() == "command" || token.name() == linkTag || token.name() == metaTag) { - insertSelfClosingElement(token); + if (token.name() == baseTag + || token.name() == "command" + || token.name() == linkTag + || token.name() == metaTag) { + m_tree.insertSelfClosingHTMLElement(token); // Note: The custom processing for the <meta> tag is done in HTMLMetaElement::process(). return true; } if (token.name() == titleTag) { - insertGenericRCDATAElement(token); + processGenericRCDATAStartTag(token); return true; } if (token.name() == noscriptTag) { if (isScriptingFlagEnabled(m_document->frame())) { - insertGenericRawTextElement(token); + processGenericRawTextStartTag(token); return true; } - insertElement(token); + m_tree.insertHTMLElement(token); setInsertionMode(InHeadNoscriptMode); return true; } if (token.name() == noframesTag || token.name() == styleTag) { - insertGenericRawTextElement(token); + processGenericRawTextStartTag(token); return true; } if (token.name() == scriptTag) { - insertScriptElement(token); + processScriptStartTag(token); return true; } if (token.name() == headTag) { @@ -1476,176 +2751,31 @@ bool HTMLTreeBuilder::processStartTagForInHead(AtomicHTMLToken& token) return false; } -void HTMLTreeBuilder::insertDoctype(AtomicHTMLToken& token) -{ - ASSERT(token.type() == HTMLToken::DOCTYPE); - attach(m_document, DocumentType::create(m_document, token.name(), String::adopt(token.publicIdentifier()), String::adopt(token.systemIdentifier()))); - // FIXME: Move quirks mode detection from DocumentType element to here. - notImplemented(); - if (token.forceQuirks()) - m_document->setParseMode(Document::Compat); -} - -void HTMLTreeBuilder::insertComment(AtomicHTMLToken& token) -{ - ASSERT(token.type() == HTMLToken::Comment); - attach(currentElement(), Comment::create(m_document, token.comment())); -} - -void HTMLTreeBuilder::insertCommentOnDocument(AtomicHTMLToken& token) -{ - ASSERT(token.type() == HTMLToken::Comment); - attach(m_document, Comment::create(m_document, token.comment())); -} - -void HTMLTreeBuilder::insertCommentOnHTMLHtmlElement(AtomicHTMLToken& token) -{ - ASSERT(token.type() == HTMLToken::Comment); - attach(m_openElements.htmlElement(), Comment::create(m_document, token.comment())); -} - -PassRefPtr<Element> HTMLTreeBuilder::createElementAndAttachToCurrent(AtomicHTMLToken& token) +void HTMLTreeBuilder::processGenericRCDATAStartTag(AtomicHTMLToken& token) { ASSERT(token.type() == HTMLToken::StartTag); - return attach(currentElement(), createElement(token)); -} - -void HTMLTreeBuilder::insertHTMLHtmlElement(AtomicHTMLToken& token) -{ - m_openElements.pushHTMLHtmlElement(createElementAndAttachToCurrent(token)); -} - -void HTMLTreeBuilder::insertHTMLHeadElement(AtomicHTMLToken& token) -{ - m_headElement = createElementAndAttachToCurrent(token); - m_openElements.pushHTMLHeadElement(m_headElement); -} - -void HTMLTreeBuilder::insertHTMLBodyElement(AtomicHTMLToken& token) -{ - m_openElements.pushHTMLBodyElement(createElementAndAttachToCurrent(token)); -} - -void HTMLTreeBuilder::insertElement(AtomicHTMLToken& token) -{ - m_openElements.push(createElementAndAttachToCurrent(token)); -} - -void HTMLTreeBuilder::insertSelfClosingElement(AtomicHTMLToken& token) -{ - ASSERT(token.type() == HTMLToken::StartTag); - attach(currentElement(), createElement(token)); - // FIXME: Do we want to acknowledge the token's self-closing flag? - // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#acknowledge-self-closing-flag -} - -void HTMLTreeBuilder::insertFormattingElement(AtomicHTMLToken& token) -{ - // http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#the-stack-of-open-elements - // Possible active formatting elements include: - // a, b, big, code, em, font, i, nobr, s, small, strike, strong, tt, and u. - insertElement(token); - m_activeFormattingElements.append(currentElement()); -} - -void HTMLTreeBuilder::insertGenericRCDATAElement(AtomicHTMLToken& token) -{ - insertElement(token); + m_tree.insertHTMLElement(token); m_tokenizer->setState(HTMLTokenizer::RCDATAState); m_originalInsertionMode = m_insertionMode; - m_insertionMode = TextMode; + setInsertionMode(TextMode); } -void HTMLTreeBuilder::insertGenericRawTextElement(AtomicHTMLToken& token) +void HTMLTreeBuilder::processGenericRawTextStartTag(AtomicHTMLToken& token) { - insertElement(token); + ASSERT(token.type() == HTMLToken::StartTag); + m_tree.insertHTMLElement(token); m_tokenizer->setState(HTMLTokenizer::RAWTEXTState); m_originalInsertionMode = m_insertionMode; - m_insertionMode = TextMode; + setInsertionMode(TextMode); } -void HTMLTreeBuilder::insertScriptElement(AtomicHTMLToken& token) +void HTMLTreeBuilder::processScriptStartTag(AtomicHTMLToken& token) { - ASSERT_UNUSED(token, token.type() == HTMLToken::StartTag); - RefPtr<HTMLScriptElement> element = HTMLScriptElement::create(scriptTag, m_document, true); - element->setAttributeMap(token.attributes(), m_fragmentScriptingPermission); - m_openElements.push(attach(currentElement(), element.release())); + ASSERT(token.type() == HTMLToken::StartTag); + m_tree.insertScriptElement(token); m_tokenizer->setState(HTMLTokenizer::ScriptDataState); m_originalInsertionMode = m_insertionMode; - m_insertionMode = TextMode; -} - -void HTMLTreeBuilder::insertTextNode(AtomicHTMLToken& token) -{ - attach(currentElement(), Text::create(m_document, token.characters())); -} - -PassRefPtr<Element> HTMLTreeBuilder::createElement(AtomicHTMLToken& token) -{ - RefPtr<Element> element = HTMLElementFactory::createHTMLElement(QualifiedName(nullAtom, token.name(), xhtmlNamespaceURI), m_document, 0); - element->setAttributeMap(token.attributes(), m_fragmentScriptingPermission); - return element.release(); -} - -bool HTMLTreeBuilder::indexOfFirstUnopenFormattingElement(unsigned& firstUnopenElementIndex) const -{ - if (m_activeFormattingElements.isEmpty()) - return false; - unsigned index = m_activeFormattingElements.size(); - do { - --index; - const HTMLFormattingElementList::Entry& entry = m_activeFormattingElements[index]; - if (entry.isMarker() || m_openElements.contains(entry.element())) { - firstUnopenElementIndex = index; - return true; - } - } while (index); - return false; -} - -void HTMLTreeBuilder::reconstructTheActiveFormattingElements() -{ - unsigned firstUnopenElementIndex; - if (!indexOfFirstUnopenFormattingElement(firstUnopenElementIndex)) - return; - - unsigned unopenEntryIndex = firstUnopenElementIndex; - ASSERT(unopenEntryIndex < m_activeFormattingElements.size()); - for (; unopenEntryIndex < m_activeFormattingElements.size(); ++unopenEntryIndex) { - HTMLFormattingElementList::Entry& unopenedEntry = m_activeFormattingElements[unopenEntryIndex]; - // FIXME: We're supposed to save the original token in the entry. - AtomicHTMLToken fakeToken(HTMLToken::StartTag, unopenedEntry.element()->localName()); - insertElement(fakeToken); - unopenedEntry.replaceElement(currentElement()); - } -} - -namespace { - -bool hasImpliedEndTag(Element* element) -{ - return element->hasTagName(ddTag) - || element->hasTagName(dtTag) - || element->hasTagName(liTag) - || element->hasTagName(optionTag) - || element->hasTagName(optgroupTag) - || element->hasTagName(pTag) - || element->hasTagName(rpTag) - || element->hasTagName(rtTag); -} - -} - -void HTMLTreeBuilder::generateImpliedEndTagsWithExclusion(const AtomicString& tagName) -{ - while (hasImpliedEndTag(currentElement()) && !currentElement()->hasLocalName(tagName)) - m_openElements.pop(); -} - -void HTMLTreeBuilder::generateImpliedEndTags() -{ - while (hasImpliedEndTag(currentElement())) - m_openElements.pop(); + setInsertionMode(TextMode); } void HTMLTreeBuilder::finished() @@ -1657,9 +2787,6 @@ void HTMLTreeBuilder::finished() return; } - AtomicHTMLToken eofToken(HTMLToken::EndOfFile, nullAtom); - processToken(eofToken); - // Warning, this may delete the parser, so don't try to do anything else after this. if (!m_isParsingFragment) m_document->finishedParsing(); diff --git a/WebCore/html/HTMLTreeBuilder.h b/WebCore/html/HTMLTreeBuilder.h index 37e4279..74e3398 100644 --- a/WebCore/html/HTMLTreeBuilder.h +++ b/WebCore/html/HTMLTreeBuilder.h @@ -28,6 +28,7 @@ #include "Element.h" #include "FragmentScriptingPermission.h" +#include "HTMLConstructionSite.h" #include "HTMLElementStack.h" #include "HTMLFormattingElementList.h" #include "HTMLTokenizer.h" @@ -74,6 +75,7 @@ public: LegacyHTMLTreeBuilder* legacyTreeBuilder() const { return m_legacyTreeBuilder.get(); } private: + class FakeInsertionMode; // Represents HTML5 "insertion mode" // http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#insertion-mode enum InsertionMode { @@ -104,8 +106,8 @@ private: void passTokenToLegacyParser(HTMLToken&); - // Specialized functions for processing the different types of tokens. void processToken(AtomicHTMLToken&); + void processDoctypeToken(AtomicHTMLToken&); void processStartTag(AtomicHTMLToken&); void processEndTag(AtomicHTMLToken&); @@ -113,72 +115,57 @@ private: void processCharacter(AtomicHTMLToken&); void processEndOfFile(AtomicHTMLToken&); + bool processStartTagForInHead(AtomicHTMLToken&); + void processStartTagForInBody(AtomicHTMLToken&); + void processStartTagForInTable(AtomicHTMLToken&); + void processEndTagForInBody(AtomicHTMLToken&); + void processEndTagForInTable(AtomicHTMLToken&); + void processEndTagForInTableBody(AtomicHTMLToken&); + void processEndTagForInRow(AtomicHTMLToken&); + void processEndTagForInCell(AtomicHTMLToken&); + + void processIsindexStartTagForInBody(AtomicHTMLToken&); + bool processBodyEndTagForInBody(AtomicHTMLToken&); + bool processTableEndTagForInTable(); + bool processCaptionEndTagForInCaption(); + bool processColgroupEndTagForInColumnGroup(); + bool processTrEndTagForInRow(); + // FIXME: This function should be inlined into its one call site or it + // needs to assert which tokens it can be called with. + void processAnyOtherEndTagForInBody(AtomicHTMLToken&); + + void processFakeStartTag(const QualifiedName&, PassRefPtr<NamedNodeMap> attributes = 0); + void processFakeEndTag(const QualifiedName&); + void processFakeCharacters(const String&); + void processFakePEndTagIfPInScope(); + + void processGenericRCDATAStartTag(AtomicHTMLToken&); + void processGenericRawTextStartTag(AtomicHTMLToken&); + void processScriptStartTag(AtomicHTMLToken&); + // Default processing for the different insertion modes. + // FIXME: These functions need to be renamed to remove "process" from their names. void processDefaultForInitialMode(AtomicHTMLToken&); void processDefaultForBeforeHTMLMode(AtomicHTMLToken&); void processDefaultForBeforeHeadMode(AtomicHTMLToken&); void processDefaultForInHeadMode(AtomicHTMLToken&); void processDefaultForInHeadNoscriptMode(AtomicHTMLToken&); void processDefaultForAfterHeadMode(AtomicHTMLToken&); + void processDefaultForInTableTextMode(AtomicHTMLToken&); - bool processStartTagForInHead(AtomicHTMLToken&); - bool processBodyEndTagForInBody(AtomicHTMLToken&); - void processFakePEndTagIfPInScope(); + void processUsingSecondaryInsertionModeAndAdjustInsertionMode(AtomicHTMLToken&); + + PassRefPtr<NamedNodeMap> attributesForIsindexInput(AtomicHTMLToken&); HTMLElementStack::ElementRecord* furthestBlockForFormattingElement(Element*); - void findFosterParentFor(Element*); void reparentChildren(Element* oldParent, Element* newParent); void callTheAdoptionAgency(AtomicHTMLToken&); - template<typename ChildType> - PassRefPtr<ChildType> attach(Node* parent, PassRefPtr<ChildType> prpChild) - { - RefPtr<ChildType> child = prpChild; - parent->parserAddChild(child); - // It's slightly unfortunate that we need to hold a reference to child - // here to call attach(). We should investigate whether we can rely on - // |parent| to hold a ref at this point. In the common case (at least - // for elements), however, we'll get to use this ref in the stack of - // open elements. - child->attach(); - return child.release(); - } + void closeTheCell(); + + template <bool shouldClose(const Element*)> + void processCloseWhenNestedTag(AtomicHTMLToken&); - void insertDoctype(AtomicHTMLToken&); - void insertComment(AtomicHTMLToken&); - void insertCommentOnDocument(AtomicHTMLToken&); - void insertCommentOnHTMLHtmlElement(AtomicHTMLToken&); - void insertHTMLHtmlElement(AtomicHTMLToken&); - void insertHTMLHeadElement(AtomicHTMLToken&); - void insertHTMLBodyElement(AtomicHTMLToken&); - void insertElement(AtomicHTMLToken&); - void insertSelfClosingElement(AtomicHTMLToken&); - void insertFormattingElement(AtomicHTMLToken&); - void insertGenericRCDATAElement(AtomicHTMLToken&); - void insertGenericRawTextElement(AtomicHTMLToken&); - void insertScriptElement(AtomicHTMLToken&); - void insertTextNode(AtomicHTMLToken&); - - void insertHTMLStartTagBeforeHTML(AtomicHTMLToken&); - void insertHTMLStartTagInBody(AtomicHTMLToken&); - - PassRefPtr<Element> createElement(AtomicHTMLToken&); - PassRefPtr<Element> createElementAndAttachToCurrent(AtomicHTMLToken&); - - void mergeAttributesFromTokenIntoElement(AtomicHTMLToken&, Element*); - - bool indexOfFirstUnopenFormattingElement(unsigned& firstUnopenElementIndex) const; - void reconstructTheActiveFormattingElements(); - - void generateImpliedEndTags(); - void generateImpliedEndTagsWithExclusion(const AtomicString& tagName); - - Element* currentElement() { return m_openElements.top(); } - - RefPtr<Element> m_headElement; - RefPtr<Element> m_formElement; - HTMLElementStack m_openElements; - HTMLFormattingElementList m_activeFormattingElements; bool m_framesetOk; // FIXME: Implement error reporting. @@ -187,17 +174,43 @@ private: void handleScriptStartTag(); void handleScriptEndTag(Element*, int scriptStartLine); - void setInsertionMode(InsertionMode value) { m_insertionMode = value; } InsertionMode insertionMode() const { return m_insertionMode; } + void setInsertionMode(InsertionMode mode) + { + m_insertionMode = mode; + m_isFakeInsertionMode = false; + } + + bool isFakeInsertionMode() { return m_isFakeInsertionMode; } + void setFakeInsertionMode(InsertionMode mode) + { + m_insertionMode = mode; + m_isFakeInsertionMode = true; + } + + void setSecondaryInsertionMode(InsertionMode); + + void setInsertionModeAndEnd(InsertionMode, bool foreign); // Helper for resetInsertionModeAppropriately + void resetInsertionModeAppropriately(); static bool isScriptingFlagEnabled(Frame* frame); - Document* m_document; // This is only used by the m_legacyParser for now. + Document* m_document; + HTMLConstructionSite m_tree; + bool m_reportErrors; bool m_isPaused; + bool m_isFakeInsertionMode; + // FIXME: InsertionModes should be a separate object to prevent direct + // manipulation of these variables. For now, be careful to always use + // setInsertionMode and never set m_insertionMode directly. InsertionMode m_insertionMode; InsertionMode m_originalInsertionMode; + InsertionMode m_secondaryInsertionMode; + + // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#pending-table-character-tokens + Vector<UChar> m_pendingTableCharacters; // HTML5 spec requires that we be able to change the state of the tokenizer // from within parser actions. diff --git a/WebCore/html/HTMLVideoElement.cpp b/WebCore/html/HTMLVideoElement.cpp index cf7d64c..a6fdb5f 100644 --- a/WebCore/html/HTMLVideoElement.cpp +++ b/WebCore/html/HTMLVideoElement.cpp @@ -101,7 +101,7 @@ void HTMLVideoElement::parseMappedAttribute(Attribute* attr) const QualifiedName& attrName = attr->name(); if (attrName == posterAttr) { - m_posterURL = document()->completeURL(attr->value()); + m_posterURL = getNonEmptyURLAttribute(posterAttr); updatePosterImage(); if (m_shouldDisplayPosterImage) { #if !ENABLE(PLUGIN_PROXY_FOR_VIDEO) diff --git a/WebCore/html/HTMLVideoElement.idl b/WebCore/html/HTMLVideoElement.idl index 1f56db9..248d0f4 100644 --- a/WebCore/html/HTMLVideoElement.idl +++ b/WebCore/html/HTMLVideoElement.idl @@ -32,7 +32,7 @@ module html { attribute [Reflect] unsigned long height; readonly attribute unsigned long videoWidth; readonly attribute unsigned long videoHeight; - attribute [ReflectURL] DOMString poster; + attribute [Reflect,NonEmpty,URL] DOMString poster; readonly attribute boolean webkitSupportsFullscreen; readonly attribute boolean webkitDisplayingFullscreen; diff --git a/WebCore/html/TimeRanges.idl b/WebCore/html/TimeRanges.idl index 992b12a..c37c360 100644 --- a/WebCore/html/TimeRanges.idl +++ b/WebCore/html/TimeRanges.idl @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007 Apple Inc. All rights reserved. + * Copyright (C) 2007, 2010 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -25,12 +25,14 @@ module html { -interface [Conditional=VIDEO, OmitConstructor] TimeRanges { - readonly attribute unsigned long length; - float start(in unsigned long index) - raises (DOMException); - float end(in unsigned long index) - raises (DOMException); -}; + interface [ + Conditional=VIDEO + ] TimeRanges { + readonly attribute unsigned long length; + float start(in unsigned long index) + raises (DOMException); + float end(in unsigned long index) + raises (DOMException); + }; } diff --git a/WebCore/html/canvas/CanvasRenderingContext2D.cpp b/WebCore/html/canvas/CanvasRenderingContext2D.cpp index 2ac2ca3..b3d212a 100644 --- a/WebCore/html/canvas/CanvasRenderingContext2D.cpp +++ b/WebCore/html/canvas/CanvasRenderingContext2D.cpp @@ -614,6 +614,10 @@ void CanvasRenderingContext2D::arc(float x, float y, float r, float sa, float ea ec = INDEX_SIZE_ERR; return; } + + if (sa == ea) + return; + if (!state().m_invertibleCTM) return; m_path.addArc(FloatPoint(x, y), r, sa, ea, anticlockwise); @@ -763,9 +767,7 @@ void CanvasRenderingContext2D::fillRect(float x, float y, float width, float hei FloatRect rect(x, y, width, height); willDraw(rect); - c->save(); c->fillRect(rect); - c->restore(); } void CanvasRenderingContext2D::strokeRect(float x, float y, float width, float height) diff --git a/WebCore/html/canvas/WebGLBuffer.cpp b/WebCore/html/canvas/WebGLBuffer.cpp index 4c87958..e71a12b 100644 --- a/WebCore/html/canvas/WebGLBuffer.cpp +++ b/WebCore/html/canvas/WebGLBuffer.cpp @@ -54,14 +54,24 @@ void WebGLBuffer::_deleteObject(Platform3DObject object) bool WebGLBuffer::associateBufferData(int size) { - switch (m_target) { - case GraphicsContext3D::ELEMENT_ARRAY_BUFFER: - case GraphicsContext3D::ARRAY_BUFFER: + if (!m_target) + return false; + + if (m_target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER) { + m_byteLength = size; + clearCachedMaxIndices(); + m_elementArrayBuffer = ArrayBuffer::create(size, 1); + if (!m_elementArrayBuffer) { + m_byteLength = 0; + return false; + } + return true; + } else if (m_target == GraphicsContext3D::ARRAY_BUFFER) { m_byteLength = size; return true; - default: - return false; } + + return false; } bool WebGLBuffer::associateBufferData(ArrayBufferView* array) @@ -78,6 +88,10 @@ bool WebGLBuffer::associateBufferData(ArrayBufferView* array) // modifications without calling bufferData or bufferSubData // must never be able to change the validation results. m_elementArrayBuffer = ArrayBuffer::create(array->buffer().get()); + if (!m_elementArrayBuffer) { + m_byteLength = 0; + return false; + } return true; } @@ -107,6 +121,9 @@ bool WebGLBuffer::associateBufferSubData(long offset, ArrayBufferView* array) if (uoffset > m_byteLength || array->byteLength() > m_byteLength - uoffset) return false; + if (!m_elementArrayBuffer) + return false; + memcpy(static_cast<unsigned char*>(m_elementArrayBuffer->data()) + offset, array->baseAddress(), array->byteLength()); return true; } diff --git a/WebCore/html/canvas/WebGLRenderingContext.cpp b/WebCore/html/canvas/WebGLRenderingContext.cpp index c3dea58..a82a4ac4 100644 --- a/WebCore/html/canvas/WebGLRenderingContext.cpp +++ b/WebCore/html/canvas/WebGLRenderingContext.cpp @@ -349,6 +349,10 @@ void WebGLRenderingContext::blendFuncSeparate(unsigned long srcRGB, unsigned lon void WebGLRenderingContext::bufferData(unsigned long target, int size, unsigned long usage, ExceptionCode& ec) { UNUSED_PARAM(ec); + if (!isGLES2Compliant()) { + if (!validateBufferDataUsage(usage)) + return; + } if (target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER && m_boundElementArrayBuffer) { if (!m_boundElementArrayBuffer->associateBufferData(size)) { m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE); @@ -371,6 +375,10 @@ void WebGLRenderingContext::bufferData(unsigned long target, int size, unsigned void WebGLRenderingContext::bufferData(unsigned long target, ArrayBufferView* data, unsigned long usage, ExceptionCode& ec) { UNUSED_PARAM(ec); + if (!isGLES2Compliant()) { + if (!validateBufferDataUsage(usage)) + return; + } if (target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER && m_boundElementArrayBuffer) { if (!m_boundElementArrayBuffer->associateBufferData(data)) { m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE); @@ -428,6 +436,12 @@ unsigned long WebGLRenderingContext::checkFramebufferStatus(unsigned long target void WebGLRenderingContext::clear(unsigned long mask) { + if (!isGLES2Compliant()) { + if (mask & ~(GraphicsContext3D::COLOR_BUFFER_BIT | GraphicsContext3D::DEPTH_BUFFER_BIT | GraphicsContext3D::STENCIL_BUFFER_BIT)) { + m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE); + return; + } + } m_context->clear(mask); cleanupAfterGraphicsCall(true); } @@ -1557,6 +1571,10 @@ WebGLGetInfo WebGLRenderingContext::getUniform(WebGLProgram* program, const WebG UNUSED_PARAM(ec); if (!validateWebGLObject(program)) return WebGLGetInfo(); + if (!uniformLocation) { + m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE); + return WebGLGetInfo(); + } if (uniformLocation->program() != program) { m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION); return WebGLGetInfo(); @@ -3574,6 +3592,18 @@ bool WebGLRenderingContext::validateUniformMatrixParameters(const WebGLUniformLo return true; } +bool WebGLRenderingContext::validateBufferDataUsage(unsigned long usage) +{ + switch (usage) { + case GraphicsContext3D::STREAM_DRAW: + case GraphicsContext3D::STATIC_DRAW: + case GraphicsContext3D::DYNAMIC_DRAW: + return true; + } + m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM); + return false; +} + void WebGLRenderingContext::vertexAttribfImpl(unsigned long index, int expectedSize, float v0, float v1, float v2, float v3) { if (index >= m_maxVertexAttribs) { diff --git a/WebCore/html/canvas/WebGLRenderingContext.h b/WebCore/html/canvas/WebGLRenderingContext.h index be74001..d03d972 100644 --- a/WebCore/html/canvas/WebGLRenderingContext.h +++ b/WebCore/html/canvas/WebGLRenderingContext.h @@ -501,6 +501,9 @@ class WebKitCSSMatrix; bool validateUniformMatrixParameters(const WebGLUniformLocation* location, bool transpose, Float32Array* v, int mod); bool validateUniformMatrixParameters(const WebGLUniformLocation* location, bool transpose, void* v, int size, int mod); + // Helper function to validate usage for bufferData. + bool validateBufferDataUsage(unsigned long); + // Helper functions for vertexAttribNf{v}. void vertexAttribfImpl(unsigned long index, int expectedSize, float v0, float v1, float v2, float v3); void vertexAttribfvImpl(unsigned long index, Float32Array* v, int expectedSize); diff --git a/WebCore/inspector/CodeGeneratorInspector.pm b/WebCore/inspector/CodeGeneratorInspector.pm new file mode 100644 index 0000000..cadfaac --- /dev/null +++ b/WebCore/inspector/CodeGeneratorInspector.pm @@ -0,0 +1,298 @@ +# Copyright (c) 2010 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +package CodeGeneratorInspector; + +use strict; + +use File::stat; + +my %typeTransform; +$typeTransform{"InspectorClient"} = { + "forward" => "InspectorClient", + "header" => "InspectorClient.h", +}; +$typeTransform{"PassRefPtr"} = { + "forwardHeader" => "wtf/PassRefPtr.h", +}; +$typeTransform{"Object"} = { + "param" => "PassRefPtr<InspectorObject>", + "retVal" => "PassRefPtr<InspectorObject>", + "forward" => "InspectorObject", + "header" => "InspectorValues.h", + "push" => "push" +}; +$typeTransform{"Array"} = { + "param" => "PassRefPtr<InspectorArray>", + "retVal" => "PassRefPtr<InspectorArray>", + "forward" => "InspectorArray", + "header" => "InspectorValues.h", + "push" => "push" +}; +$typeTransform{"Value"} = { + "param" => "PassRefPtr<InspectorValue>", + "retVal" => "PassRefPtr<InspectorValue>", + "forward" => "InspectorValue", + "header" => "InspectorValues.h", + "push" => "push" +}; +$typeTransform{"String"} = { + "param" => "const String&", + "retVal" => "String", + "forward" => "String", + "header" => "PlatformString.h", + "push" => "pushString" +}; +$typeTransform{"long"} = { + "param" => "long", + "retVal" => "long", + "forward" => "", + "header" => "", + "push" => "pushNumber" +}; +$typeTransform{"int"} = { + "param" => "int", + "retVal" => "int", + "forward" => "", + "header" => "", + "push" => "pushNumber" +}; +$typeTransform{"unsigned long"} = { + "param" => "unsigned long", + "retVal" => "unsigned long", + "forward" => "", + "header" => "", + "push" => "pushNumber" +}; +$typeTransform{"boolean"} = { + "param" => "bool", + "retVal"=> "bool", + "forward" => "", + "header" => "", + "push" => "pushBool" +}; +$typeTransform{"void"} = { + "retVal" => "void", + "forward" => "", + "header" => "" +}; + +# Default License Templates + +my $licenseTemplate = << "EOF"; +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +EOF + +my $codeGenerator; +my $outputDir; +my $writeDependencies; +my $verbose; + +my $namespace; +my $fileName; +my %discoveredTypes; + +my @classDefinition; +my @functionDefinitions; + +sub typeSpec +{ + my $param = shift; + my $retValue = shift; + + my $type = $typeTransform{$param->type}->{$retValue ? "retVal" : "param"}; + $discoveredTypes{$param->type} = 1; + $type or die "invalid type specification \"" . $param->type ."\""; + return $type; +} + +# Default constructor +sub new +{ + my $object = shift; + my $reference = { }; + + $codeGenerator = shift; + $outputDir = shift; + shift; # $useLayerOnTop + shift; # $preprocessor + $writeDependencies = shift; + $verbose = shift; + + bless($reference, $object); + return $reference; +} + +# Params: 'idlDocument' struct +sub GenerateModule +{ + my $object = shift; + my $dataNode = shift; + + $namespace = $dataNode->module; +} + +# Params: 'idlDocument' struct +sub GenerateInterface +{ + my $object = shift; + my $interface = shift; + my $defines = shift; + + my $className = $interface->name; + $fileName = $className; + + $discoveredTypes{"String"} = 1; + $discoveredTypes{"InspectorClient"} = 1; + $discoveredTypes{"PassRefPtr"} = 1; + + push(@classDefinition, "class $className {"); + push(@classDefinition, "public:"); + push(@classDefinition, " $className(InspectorClient* inspectorClient) : m_inspectorClient(inspectorClient) { }"); + push(@classDefinition, ""); + push(@classDefinition, generateFunctionsDeclarations($interface, $className)); + push(@classDefinition, ""); + push(@classDefinition, "private:"); + push(@classDefinition, " void sendSimpleMessageToFrontend(const String&);"); + push(@classDefinition, " InspectorClient* m_inspectorClient;"); + push(@classDefinition, "};"); + + push(@functionDefinitions, "void ${className}::sendSimpleMessageToFrontend(const String& functionName)"); + push(@functionDefinitions, "{"); + push(@functionDefinitions, " RefPtr<InspectorArray> arguments = InspectorArray::create();"); + push(@functionDefinitions, " arguments->pushString(functionName);"); + push(@functionDefinitions, " m_inspectorClient->sendMessageToFrontend(arguments->toJSONString());"); + push(@functionDefinitions, "}"); +} + +sub generateFunctionsDeclarations +{ + my $interface = shift; + my $className = shift; + + my @functionDeclarations; + foreach my $function (@{$interface->functions}) { + my $functionName = $function->signature->name; + my $abstract = $function->signature->extendedAttributes->{"abstract"}; + my $arguments = ""; + foreach my $parameter (@{$function->parameters}) { + $parameter->name or die "empty argument name specified for function ${className}::$functionName and argument type " . $parameter->type; + $arguments = $arguments . ", " if ($arguments); + $arguments = $arguments . typeSpec($parameter) . " " . $parameter->name; + } + my $signature = " " . typeSpec($function->signature, 1) . " $functionName($arguments)"; + push(@functionDeclarations, $abstract ? "$signature = 0;" : "$signature;"); + push(@functionDefinitions, generateFunctionsImpl($className, $function, $arguments)) if !$abstract; + } + return @functionDeclarations; +} + +sub generateHeader +{ + my @headerContent = split("\r", $licenseTemplate); + push(@headerContent, "#ifndef ${fileName}_h"); + push(@headerContent, "#define ${fileName}_h"); + push(@headerContent, ""); + + my @forwardHeaders; + foreach my $type (keys %discoveredTypes) { + push(@forwardHeaders, "#include <" . $typeTransform{$type}->{"forwardHeader"} . ">") if !$typeTransform{$type}->{"forwardHeader"} eq ""; + } + push(@headerContent, sort @forwardHeaders); + push(@headerContent, ""); + push(@headerContent, "namespace $namespace {"); + push(@headerContent, ""); + + my @forwardDeclarations; + foreach my $type (keys %discoveredTypes) { + push(@forwardDeclarations, "class " . $typeTransform{$type}->{"forward"} . ";") if !$typeTransform{$type}->{"forward"} eq ""; + } + push(@headerContent, sort @forwardDeclarations); + + push(@headerContent, ""); + push(@headerContent, @classDefinition); + push(@headerContent, ""); + push(@headerContent, "} // namespace $namespace"); + push(@headerContent, ""); + push(@headerContent, "#endif // !defined(${fileName}_h)"); + push(@headerContent, ""); + return @headerContent; +} + +sub generateSource +{ + my @sourceContent = split("\r", $licenseTemplate); + push(@sourceContent, "\n#include \"config.h\""); + push(@sourceContent, "#include \"Remote$fileName.h\""); + push(@sourceContent, ""); + push(@sourceContent, "#if ENABLE(INSPECTOR)"); + push(@sourceContent, ""); + + my %headers; + foreach my $type (keys %discoveredTypes) { + $headers{"#include \"" . $typeTransform{$type}->{"header"} . "\""} = 1 if !$typeTransform{$type}->{"header"} eq ""; + } + push(@sourceContent, sort keys %headers); + push(@sourceContent, ""); + push(@sourceContent, "namespace $namespace {"); + push(@sourceContent, ""); + push(@sourceContent, @functionDefinitions); + push(@sourceContent, ""); + push(@sourceContent, "} // namespace $namespace"); + push(@sourceContent, ""); + push(@sourceContent, "#endif // ENABLE(INSPECTOR)"); + push(@sourceContent, ""); + return @sourceContent; +} + +sub generateFunctionsImpl +{ + my $className = shift; + my $function = shift; + my $arguments = shift; + + my @func; + + my $functionName = $function->signature->name; + + push(@func, typeSpec($function->signature, 1) . " " . $className . "::" . $functionName . "(" . $arguments . ")"); + push(@func, "{"); + + my $numParameters = @{$function->parameters}; + if ($numParameters > 0) { + push(@func, " RefPtr<InspectorArray> arguments = InspectorArray::create();"); + push(@func, " arguments->pushString(\"$functionName\");"); + foreach my $parameter (@{$function->parameters}) { + my $pushCall = $typeTransform{$parameter->type}->{"push"}; + push(@func, " arguments->$pushCall(" . $parameter->name . ");"); + } + push(@func, " m_inspectorClient->sendMessageToFrontend(arguments->toJSONString());"); + } else { + push(@func, " sendSimpleMessageToFrontend(\"$functionName\");"); + } + + push(@func, "}"); + push(@func, ""); + return @func; +} + +sub finish +{ + my $object = shift; + + open(my $SOURCE, ">$outputDir/Remote$fileName.cpp") || die "Couldn't open file $outputDir/Remote$fileName.cpp"; + open(my $HEADER, ">$outputDir/Remote$fileName.h") || die "Couldn't open file $outputDir/Remote$fileName.h"; + + print $SOURCE join("\n", generateSource()); + close($SOURCE); + undef($SOURCE); + + print $HEADER join("\n", generateHeader()); + close($HEADER); + undef($HEADER); +} + +1; diff --git a/WebCore/inspector/InspectorApplicationCacheAgent.cpp b/WebCore/inspector/InspectorApplicationCacheAgent.cpp new file mode 100644 index 0000000..88238be --- /dev/null +++ b/WebCore/inspector/InspectorApplicationCacheAgent.cpp @@ -0,0 +1,168 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * Copyright (C) 2010 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "InspectorApplicationCacheAgent.h" + +#if ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS) + +#include "ApplicationCache.h" +#include "ApplicationCacheResource.h" +#include "DocumentLoader.h" +#include "Frame.h" +#include "FrameLoader.h" +#include "InspectorController.h" +#include "InspectorFrontend.h" +#include "Page.h" +#include "ResourceResponse.h" +#include "ScriptArray.h" +#include "ScriptObject.h" + +namespace WebCore { + +InspectorApplicationCacheAgent::InspectorApplicationCacheAgent(InspectorController* inspectorController, InspectorFrontend* frontend) + : m_inspectorController(inspectorController) + , m_frontend(frontend) +{ +} + +void InspectorApplicationCacheAgent::didReceiveManifestResponse(unsigned long identifier, const ResourceResponse& response) +{ + m_inspectorController->didReceiveResponse(identifier, response); +} + +void InspectorApplicationCacheAgent::updateApplicationCacheStatus(ApplicationCacheHost::Status status) +{ + m_frontend->updateApplicationCacheStatus(status); +} + +void InspectorApplicationCacheAgent::updateNetworkState(bool isNowOnline) +{ + m_frontend->updateNetworkState(isNowOnline); +} + +void InspectorApplicationCacheAgent::fillResourceList(ApplicationCache* cache, ResourceInfoList* resources) +{ +#if !PLATFORM(CHROMIUM) + ASSERT(cache && cache->isComplete()); +#endif + ApplicationCache::ResourceMap::const_iterator end = cache->end(); + for (ApplicationCache::ResourceMap::const_iterator it = cache->begin(); it != end; ++it) { + RefPtr<ApplicationCacheResource> resource = it->second; + unsigned type = resource->type(); + bool isMaster = type & ApplicationCacheResource::Master; + bool isManifest = type & ApplicationCacheResource::Manifest; + bool isExplicit = type & ApplicationCacheResource::Explicit; + bool isForeign = type & ApplicationCacheResource::Foreign; + bool isFallback = type & ApplicationCacheResource::Fallback; +#if PLATFORM(CHROMIUM) + int64_t estimatedSizeInStorage = 0; +#else + int64_t estimatedSizeInStorage = resource->estimatedSizeInStorage(); +#endif + resources->append(InspectorApplicationCacheAgent::ResourceInfo(resource->url(), isMaster, isManifest, isFallback, isForeign, isExplicit, estimatedSizeInStorage)); + } +} + +void InspectorApplicationCacheAgent::getApplicationCaches(long callId) +{ + DocumentLoader* documentLoader = m_inspectorController->inspectedPage()->mainFrame()->loader()->documentLoader(); + if (!documentLoader) { + m_frontend->didGetApplicationCaches(callId, ScriptValue::undefined()); + return; + } + + ApplicationCacheHost* host = documentLoader->applicationCacheHost(); + ApplicationCache* cache = host->applicationCacheForInspector(); + if (!cache +#if !PLATFORM(CHROMIUM) + || !cache->isComplete() +#endif + ) { + m_frontend->didGetApplicationCaches(callId, ScriptValue::undefined()); + return; + } + + // FIXME: Add "Creation Time" and "Update Time" to Application Caches. + ApplicationCacheInfo info(cache->manifestResource()->url(), String(), String(), cache->estimatedSizeInStorage()); + ResourceInfoList resources; + fillResourceList(cache, &resources); + + m_frontend->didGetApplicationCaches(callId, buildObjectForApplicationCache(resources, info)); +} + +ScriptObject InspectorApplicationCacheAgent::buildObjectForApplicationCache(const ResourceInfoList& applicationCacheResources, const ApplicationCacheInfo& applicationCacheInfo) +{ + ScriptObject value = m_frontend->newScriptObject(); + value.set("size", applicationCacheInfo.m_size); + value.set("manifest", applicationCacheInfo.m_manifest.string()); + value.set("lastPathComponent", applicationCacheInfo.m_manifest.lastPathComponent()); + value.set("creationTime", applicationCacheInfo.m_creationTime); + value.set("updateTime", applicationCacheInfo.m_updateTime); + value.set("resources", buildArrayForApplicationCacheResources(applicationCacheResources)); + return value; +} + +ScriptArray InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources(const ResourceInfoList& applicationCacheResources) +{ + ScriptArray resources = m_frontend->newScriptArray(); + + ResourceInfoList::const_iterator end = applicationCacheResources.end(); + ResourceInfoList::const_iterator it = applicationCacheResources.begin(); + for (int i = 0; it != end; ++it, i++) + resources.set(i, buildObjectForApplicationCacheResource(*it)); + + return resources; +} + +ScriptObject InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource(const ResourceInfo& resourceInfo) +{ + ScriptObject value = m_frontend->newScriptObject(); + value.set("name", resourceInfo.m_resource.string()); + value.set("size", resourceInfo.m_size); + + String types; + if (resourceInfo.m_isMaster) + types.append("Master "); + + if (resourceInfo.m_isManifest) + types.append("Manifest "); + + if (resourceInfo.m_isFallback) + types.append("Fallback "); + + if (resourceInfo.m_isForeign) + types.append("Foreign "); + + if (resourceInfo.m_isExplicit) + types.append("Explicit "); + + value.set("type", types); + return value; +} + +} // namespace WebCore + +#endif // ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS) diff --git a/WebCore/inspector/InspectorApplicationCacheAgent.h b/WebCore/inspector/InspectorApplicationCacheAgent.h new file mode 100644 index 0000000..79763f4 --- /dev/null +++ b/WebCore/inspector/InspectorApplicationCacheAgent.h @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef InspectorApplicationCacheAgent_h +#define InspectorApplicationCacheAgent_h + +#if ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS) + +#include "ApplicationCacheHost.h" +#include "KURL.h" +#include "PlatformString.h" +#include <wtf/Noncopyable.h> + +namespace WebCore { + +class ApplicationCache; +class InspectorController; +class InspectorFrontend; +class ResourceResponse; +class ScriptArray; +class ScriptObject; + +class InspectorApplicationCacheAgent : public Noncopyable { +public: + struct ApplicationCacheInfo { + ApplicationCacheInfo(const KURL& manifest, const String& creationTime, const String& updateTime, long long size) + : m_manifest(manifest) + , m_creationTime(creationTime) + , m_updateTime(updateTime) + , m_size(size) + { + } + + KURL m_manifest; + String m_creationTime; + String m_updateTime; + long long m_size; + }; + + struct ResourceInfo { + ResourceInfo(const KURL& resource, bool isMaster, bool isManifest, bool isFallback, bool isForeign, bool isExplicit, long long size) + : m_resource(resource) + , m_isMaster(isMaster) + , m_isManifest(isManifest) + , m_isFallback(isFallback) + , m_isForeign(isForeign) + , m_isExplicit(isExplicit) + , m_size(size) + { + } + + KURL m_resource; + bool m_isMaster; + bool m_isManifest; + bool m_isFallback; + bool m_isForeign; + bool m_isExplicit; + long long m_size; + }; + + typedef Vector<ResourceInfo> ResourceInfoList; + + InspectorApplicationCacheAgent(InspectorController* inspectorController, InspectorFrontend* frontend); + ~InspectorApplicationCacheAgent() { } + + // Backend to Frontend + void didReceiveManifestResponse(unsigned long identifier, const ResourceResponse&); + void updateApplicationCacheStatus(ApplicationCacheHost::Status); + void updateNetworkState(bool isNowOnline); + + // From Frontend + void getApplicationCaches(long callId); + +private: + ScriptObject buildObjectForApplicationCache(const ResourceInfoList&, const ApplicationCacheInfo&); + ScriptArray buildArrayForApplicationCacheResources(const ResourceInfoList&); + ScriptObject buildObjectForApplicationCacheResource(const ResourceInfo&); + + void fillResourceList(ApplicationCache*, ResourceInfoList*); + + InspectorController* m_inspectorController; + InspectorFrontend* m_frontend; +}; + +} // namespace WebCore + +#endif // ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS) +#endif // InspectorApplicationCacheAgent_h diff --git a/WebCore/inspector/InspectorBackend.cpp b/WebCore/inspector/InspectorBackend.cpp index e8866c2..57ee19f 100644 --- a/WebCore/inspector/InspectorBackend.cpp +++ b/WebCore/inspector/InspectorBackend.cpp @@ -61,6 +61,10 @@ #include "ScriptDebugServer.h" #endif +#if ENABLE(OFFLINE_WEB_APPLICATIONS) +#include "InspectorApplicationCacheAgent.h" +#endif + #include "markup.h" #include <wtf/RefPtr.h> @@ -514,6 +518,14 @@ void InspectorBackend::hideDOMNodeHighlight() m_inspectorController->hideHighlight(); } +#if ENABLE(OFFLINE_WEB_APPLICATIONS) +void InspectorBackend::getApplicationCaches(long callId) +{ + if (InspectorApplicationCacheAgent* agent = inspectorApplicationCacheAgent()) + agent->getApplicationCaches(callId); +} +#endif + void InspectorBackend::getCookies(long callId) { if (!m_inspectorController) @@ -585,6 +597,15 @@ InspectorDOMAgent* InspectorBackend::inspectorDOMAgent() return m_inspectorController->domAgent(); } +#if ENABLE(OFFLINE_WEB_APPLICATIONS) +InspectorApplicationCacheAgent* InspectorBackend::inspectorApplicationCacheAgent() +{ + if (!m_inspectorController) + return 0; + return m_inspectorController->applicationCacheAgent(); +} +#endif + InspectorFrontend* InspectorBackend::inspectorFrontend() { if (!m_inspectorController) diff --git a/WebCore/inspector/InspectorBackend.h b/WebCore/inspector/InspectorBackend.h index 035abf6..47cfdc7 100644 --- a/WebCore/inspector/InspectorBackend.h +++ b/WebCore/inspector/InspectorBackend.h @@ -39,6 +39,7 @@ namespace WebCore { class CachedResource; class Database; +class InspectorApplicationCacheAgent; class InspectorDOMAgent; class InspectorFrontend; class Node; @@ -153,6 +154,10 @@ public: void getCookies(long callId); void deleteCookie(const String& cookieName, const String& domain); +#if ENABLE(OFFLINE_WEB_APPLICATIONS) + void getApplicationCaches(long callId); +#endif + // Generic code called from custom implementations. void releaseWrapperObjectGroup(long injectedScriptId, const String& objectGroup); void didEvaluateForTestInFrontend(long callId, const String& jsonResult); @@ -170,6 +175,9 @@ public: private: InspectorBackend(InspectorController* inspectorController); InspectorDOMAgent* inspectorDOMAgent(); +#if ENABLE(OFFLINE_WEB_APPLICATIONS) + InspectorApplicationCacheAgent* inspectorApplicationCacheAgent(); +#endif InspectorFrontend* inspectorFrontend(); Node* nodeForId(long nodeId); diff --git a/WebCore/inspector/InspectorBackend.idl b/WebCore/inspector/InspectorBackend.idl index b4a68cf..1fc8a16 100644 --- a/WebCore/inspector/InspectorBackend.idl +++ b/WebCore/inspector/InspectorBackend.idl @@ -128,6 +128,10 @@ module core { void getCookies(in long callId); void deleteCookie(in DOMString cookieName, in DOMString domain); +#if defined(ENABLE_OFFLINE_WEB_APPLICATIONS) + void getApplicationCaches(in long callId); +#endif + void releaseWrapperObjectGroup(in long injectedScriptId, in DOMString objectGroup); void didEvaluateForTestInFrontend(in long callId, in DOMString jsonResult); diff --git a/WebCore/inspector/InspectorCSSStore.cpp b/WebCore/inspector/InspectorCSSStore.cpp index 7bc947a..413fb8b 100644 --- a/WebCore/inspector/InspectorCSSStore.cpp +++ b/WebCore/inspector/InspectorCSSStore.cpp @@ -39,10 +39,9 @@ #include "CSSStyleSheet.h" #include "HTMLHeadElement.h" #include "InspectorController.h" -#include "InspectorFrontend.h" #include "InspectorResource.h" #include "PlatformString.h" -#include "ScriptObject.h" +#include "RemoteInspectorFrontend2.h" #include "StyleSheetList.h" namespace WebCore { @@ -96,13 +95,13 @@ CSSStyleSheet* InspectorCSSStore::inspectorStyleSheet(Document* ownerDocument, b if (!ec) ownerDocument->head()->appendChild(styleElement, ec); if (ec) { - m_inspectorController->inspectorFrontend()->didAddRule(callId, ScriptValue::undefined(), false); + m_inspectorController->inspectorFrontend2()->didAddRule(callId, InspectorValue::null(), false); return 0; } StyleSheetList* styleSheets = ownerDocument->styleSheets(); StyleSheet* styleSheet = styleSheets->item(styleSheets->length() - 1); if (!styleSheet->isCSSStyleSheet()) { - m_inspectorController->inspectorFrontend()->didAddRule(callId, ScriptValue::undefined(), false); + m_inspectorController->inspectorFrontend2()->didAddRule(callId, InspectorValue::null(), false); return 0; } CSSStyleSheet* inspectorStyleSheet = static_cast<CSSStyleSheet*>(styleSheet); @@ -125,7 +124,7 @@ HashMap<long, SourceRange> InspectorCSSStore::getRuleRangesForStyleSheet(CSSStyl RefPtr<CSSStyleSheet> newStyleSheet = CSSStyleSheet::create(styleSheet->ownerNode()); CSSParser p; CSSParser::StyleRuleRanges ruleRangeMap; - p.parseSheet(newStyleSheet.get(), resource->sourceString(), &ruleRangeMap); + p.parseSheet(newStyleSheet.get(), resource->sourceString(), 0, &ruleRangeMap); for (unsigned i = 0, length = newStyleSheet->length(); i < length; ++i) { CSSStyleRule* rule = asCSSStyleRule(newStyleSheet->item(i)); if (!rule) diff --git a/WebCore/inspector/InspectorController.cpp b/WebCore/inspector/InspectorController.cpp index 2256041..ed25696 100644 --- a/WebCore/inspector/InspectorController.cpp +++ b/WebCore/inspector/InspectorController.cpp @@ -68,6 +68,7 @@ #include "Page.h" #include "ProgressTracker.h" #include "Range.h" +#include "RemoteInspectorFrontend2.h" #include "RenderInline.h" #include "ResourceRequest.h" #include "ResourceResponse.h" @@ -95,6 +96,10 @@ #include "Database.h" #endif +#if ENABLE(OFFLINE_WEB_APPLICATIONS) +#include "InspectorApplicationCacheAgent.h" +#endif + #if ENABLE(DOM_STORAGE) #include "Storage.h" #include "StorageArea.h" @@ -216,7 +221,7 @@ InspectorController::~InspectorController() ASSERT(s_inspectorControllerCount); --s_inspectorControllerCount; - releaseDOMAgent(); + releaseFrontendLifetimeAgents(); m_inspectorBackend->disconnectController(); m_injectedScriptHost->disconnectController(); @@ -479,11 +484,12 @@ void InspectorController::setMonitoringXHR(bool enabled) void InspectorController::connectFrontend(const ScriptObject& webInspector) { m_openingFrontend = false; + releaseFrontendLifetimeAgents(); m_frontend = new InspectorFrontend(webInspector, m_client); - releaseDOMAgent(); - m_domAgent = InspectorDOMAgent::create(m_cssStore.get(), m_frontend.get()); + m_frontend2 = new InspectorFrontend2(m_client); + m_domAgent = InspectorDOMAgent::create(m_cssStore.get(), m_frontend2.get()); if (m_timelineAgent) - m_timelineAgent->resetFrontendProxyObject(m_frontend.get()); + m_timelineAgent->resetFrontendProxyObject(m_frontend2.get()); // Initialize Web Inspector title. m_frontend->inspectedURLChanged(m_inspectedPage->mainFrame()->loader()->url().string()); @@ -513,6 +519,10 @@ void InspectorController::connectFrontend(const ScriptObject& webInspector) if (m_nodeToFocus) focusNode(); showPanel(m_showAfterVisible); + +#if ENABLE(OFFLINE_WEB_APPLICATIONS) + m_applicationCacheAgent = new InspectorApplicationCacheAgent(this, m_frontend.get()); +#endif } void InspectorController::show() @@ -582,17 +592,21 @@ void InspectorController::disconnectFrontend() stopUserInitiatedProfiling(); #endif - releaseDOMAgent(); + releaseFrontendLifetimeAgents(); m_timelineAgent.clear(); } -void InspectorController::releaseDOMAgent() +void InspectorController::releaseFrontendLifetimeAgents() { // m_domAgent is RefPtr. Remove DOM listeners first to ensure that there are // no references to the DOM agent from the DOM tree. if (m_domAgent) m_domAgent->reset(); m_domAgent.clear(); + +#if ENABLE(OFFLINE_WEB_APPLICATIONS) + m_applicationCacheAgent.clear(); +#endif } void InspectorController::populateScriptObjects() @@ -933,7 +947,7 @@ bool InspectorController::isMainResourceLoader(DocumentLoader* loader, const KUR return loader->frame() == m_inspectedPage->mainFrame() && requestUrl == loader->requestURL(); } -void InspectorController::willSendRequest(unsigned long identifier, const ResourceRequest& request, const ResourceResponse& redirectResponse) +void InspectorController::willSendRequest(unsigned long identifier, ResourceRequest& request, const ResourceResponse& redirectResponse) { if (!enabled()) return; @@ -946,11 +960,12 @@ void InspectorController::willSendRequest(unsigned long identifier, const Resour if (!resource) return; + request.setReportLoadTiming(true); + if (!redirectResponse.isNull()) { // Redirect may have empty URL and we'd like to not crash with invalid HashMap entry. // See http/tests/misc/will-send-request-returns-null-on-redirect.html if (!request.url().isEmpty()) { - resource->markResponseReceivedTime(); resource->endTiming(); resource->updateResponse(redirectResponse); @@ -981,7 +996,6 @@ void InspectorController::didReceiveResponse(unsigned long identifier, const Res if (RefPtr<InspectorResource> resource = getTrackedResource(identifier)) { resource->updateResponse(response); - resource->markResponseReceivedTime(); if (resource != m_mainResource && m_frontend) resource->updateScriptObject(m_frontend.get()); @@ -1149,7 +1163,7 @@ void InspectorController::startTimelineProfiler() if (m_timelineAgent) return; - m_timelineAgent = new InspectorTimelineAgent(m_frontend.get()); + m_timelineAgent = new InspectorTimelineAgent(m_frontend2.get()); if (m_frontend) m_frontend->timelineProfilerWasStarted(); m_client->timelineProfilerWasStarted(); @@ -1342,6 +1356,16 @@ ScriptObject InspectorController::buildObjectForCookie(const Cookie& cookie) return value; } +void InspectorController::deleteCookie(const String& cookieName, const String& domain) +{ + ResourcesMap::iterator resourcesEnd = m_resources.end(); + for (ResourcesMap::iterator it = m_resources.begin(); it != resourcesEnd; ++it) { + Document* document = it->second->frame()->document(); + if (document->url().host() == domain) + WebCore::deleteCookie(document, it->second->requestURL(), cookieName); + } +} + #if ENABLE(DOM_STORAGE) void InspectorController::didUseDOMStorage(StorageArea* storageArea, bool isLocalStorage, Frame* frame) { @@ -2104,16 +2128,6 @@ InspectorController::SpecialPanels InspectorController::specialPanelForJSName(co return ElementsPanel; } -void InspectorController::deleteCookie(const String& cookieName, const String& domain) -{ - ResourcesMap::iterator resourcesEnd = m_resources.end(); - for (ResourcesMap::iterator it = m_resources.begin(); it != resourcesEnd; ++it) { - Document* document = it->second->frame()->document(); - if (document->url().host() == domain) - WebCore::deleteCookie(document, it->second->requestURL(), cookieName); - } -} - InjectedScript InspectorController::injectedScriptForNodeId(long id) { diff --git a/WebCore/inspector/InspectorController.h b/WebCore/inspector/InspectorController.h index 4c94d6d..1f416a0 100644 --- a/WebCore/inspector/InspectorController.h +++ b/WebCore/inspector/InspectorController.h @@ -41,7 +41,6 @@ #include "ScriptValue.h" #include "StringHash.h" #include "Timer.h" - #include <wtf/HashMap.h> #include <wtf/HashSet.h> #include <wtf/ListHashSet.h> @@ -55,6 +54,7 @@ namespace WebCore { class CachedResource; +class ConsoleMessage; class Database; class Document; class DocumentLoader; @@ -66,10 +66,15 @@ class InjectedScriptHost; class InspectorBackend; class InspectorClient; class InspectorCSSStore; +class InspectorDOMStorageResource; +class InspectorDatabaseResource; class InspectorFrontend; +class InspectorFrontend2; class InspectorFrontendClient; +class InspectorResource; class InspectorTimelineAgent; class InspectorValue; +class InspectorWorkerResource; class KURL; class Node; class Page; @@ -82,11 +87,9 @@ class SharedBuffer; class Storage; class StorageArea; -class ConsoleMessage; -class InspectorDatabaseResource; -class InspectorDOMStorageResource; -class InspectorResource; -class InspectorWorkerResource; +#if ENABLE(OFFLINE_WEB_APPLICATIONS) +class InspectorApplicationCacheAgent; +#endif class InspectorController #if ENABLE(JAVASCRIPT_DEBUGGER) @@ -161,11 +164,10 @@ public: void didCommitLoad(DocumentLoader*); void frameDetachedFromParent(Frame*); - void didLoadResourceFromMemoryCache(DocumentLoader*, const CachedResource*); void identifierForInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest&); - void willSendRequest(unsigned long identifier, const ResourceRequest&, const ResourceResponse& redirectResponse); + void willSendRequest(unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse); void didReceiveResponse(unsigned long identifier, const ResourceResponse&); void didReceiveContentLength(unsigned long identifier, int lengthReceived); void didFinishLoading(unsigned long identifier); @@ -183,6 +185,13 @@ public: void stopTimelineProfiler(); InspectorTimelineAgent* timelineAgent() { return m_timelineAgent.get(); } + void getCookies(long callId); + void deleteCookie(const String& cookieName, const String& domain); + +#if ENABLE(OFFLINE_WEB_APPLICATIONS) + InspectorApplicationCacheAgent* applicationCacheAgent() { return m_applicationCacheAgent.get(); } +#endif + void mainResourceFiredLoadEvent(DocumentLoader*, const KURL&); void mainResourceFiredDOMContentEvent(DocumentLoader*, const KURL&); @@ -196,7 +205,6 @@ public: void didCreateWorker(intptr_t, const String& url, bool isSharedWorker); void didDestroyWorker(intptr_t); #endif - void getCookies(long callId); #if ENABLE(DATABASE) void didOpenDatabase(Database*, const String& domain, const String& name, const String& version); @@ -212,6 +220,7 @@ public: const ResourcesMap& resources() const { return m_resources; } InspectorResource* resourceForURL(const String& url); InspectorFrontend* inspectorFrontend() { return m_frontend.get(); } + InspectorFrontend2* inspectorFrontend2() { return m_frontend2.get(); } void drawNodeHighlight(GraphicsContext&) const; @@ -243,9 +252,7 @@ public: bool profilerEnabled() const { return enabled() && m_profilerEnabled; } void takeHeapSnapshot(); -#endif -#if ENABLE(JAVASCRIPT_DEBUGGER) void enableDebugger(); void disableDebugger(bool always = false); bool debuggerEnabled() const { return m_debuggerEnabled; } @@ -284,9 +291,7 @@ private: void setMonitoringXHR(bool enabled); void storeLastActivePanel(const String& panelName); InspectorDOMAgent* domAgent() { return m_domAgent.get(); } - void releaseDOMAgent(); - - void deleteCookie(const String& cookieName, const String& domain); + void releaseFrontendLifetimeAgents(); #if ENABLE(JAVASCRIPT_DEBUGGER) void setBreakpoint(long callId, const String& sourceID, unsigned lineNumber, bool enabled, const String& condition); @@ -340,9 +345,15 @@ private: OwnPtr<InspectorFrontendClient> m_inspectorFrontendClient; bool m_openingFrontend; OwnPtr<InspectorFrontend> m_frontend; + OwnPtr<InspectorFrontend2> m_frontend2; RefPtr<InspectorDOMAgent> m_domAgent; OwnPtr<InspectorCSSStore> m_cssStore; OwnPtr<InspectorTimelineAgent> m_timelineAgent; + +#if ENABLE(OFFLINE_WEB_APPLICATIONS) + OwnPtr<InspectorApplicationCacheAgent> m_applicationCacheAgent; +#endif + RefPtr<Node> m_nodeToFocus; RefPtr<InspectorResource> m_mainResource; ResourcesMap m_resources; diff --git a/WebCore/inspector/InspectorDOMAgent.cpp b/WebCore/inspector/InspectorDOMAgent.cpp index a2f2e15..46bc938 100644 --- a/WebCore/inspector/InspectorDOMAgent.cpp +++ b/WebCore/inspector/InspectorDOMAgent.cpp @@ -55,15 +55,14 @@ #include "FrameTree.h" #include "HTMLElement.h" #include "HTMLFrameOwnerElement.h" -#include "InspectorFrontend.h" #include "MutationEvent.h" #include "Node.h" #include "NodeList.h" #include "PlatformString.h" +#include "RemoteInspectorFrontend2.h" #include "RenderStyle.h" #include "RenderStyleConstants.h" #include "ScriptEventListener.h" -#include "ScriptObject.h" #include "StyleSheetList.h" #include "Text.h" @@ -196,7 +195,7 @@ public: } -InspectorDOMAgent::InspectorDOMAgent(InspectorCSSStore* cssStore, InspectorFrontend* frontend) +InspectorDOMAgent::InspectorDOMAgent(InspectorCSSStore* cssStore, InspectorFrontend2* frontend) : EventListener(InspectorDOMAgentType) , m_cssStore(cssStore) , m_frontend(frontend) @@ -234,7 +233,7 @@ void InspectorDOMAgent::setDocument(Document* doc) if (doc->documentElement()) pushDocumentToFrontend(); } else - m_frontend->setDocument(ScriptObject()); + m_frontend->setDocument(InspectorValue::null()); } void InspectorDOMAgent::releaseDanglingNodes() @@ -284,10 +283,10 @@ void InspectorDOMAgent::handleEvent(ScriptExecutionContext*, Event* event) // Re-add frame owner element together with its new children. long parentId = m_documentNodeToIdMap.get(innerParentNode(node)); m_frontend->childNodeRemoved(parentId, frameOwnerId); - ScriptObject value = buildObjectForNode(node, 0, &m_documentNodeToIdMap); + RefPtr<InspectorObject> value = buildObjectForNode(node, 0, &m_documentNodeToIdMap); Node* previousSibling = innerPreviousSibling(node); long prevId = previousSibling ? m_documentNodeToIdMap.get(previousSibling) : 0; - m_frontend->childNodeInserted(parentId, prevId, value); + m_frontend->childNodeInserted(parentId, prevId, value.release()); // Invalidate children requested flag for the element. m_childrenRequested.remove(m_childrenRequested.find(frameOwnerId)); } @@ -350,9 +349,9 @@ void InspectorDOMAgent::pushChildNodesToFrontend(long nodeId) return; NodeToIdMap* nodeMap = m_idToNodesMap.get(nodeId); - ScriptArray children = buildArrayForContainerChildren(node, 1, nodeMap); + RefPtr<InspectorArray> children = buildArrayForContainerChildren(node, 1, nodeMap); m_childrenRequested.add(nodeId); - m_frontend->setChildNodes(nodeId, children); + m_frontend->setChildNodes(nodeId, children.release()); } long InspectorDOMAgent::pushNodeByPathToFrontend(const String& path) @@ -587,13 +586,12 @@ void InspectorDOMAgent::setTextNodeValue(long callId, long nodeId, const String& void InspectorDOMAgent::getEventListenersForNode(long callId, long nodeId) { Node* node = nodeForId(nodeId); - ScriptArray listenersArray = m_frontend->newScriptArray(); - unsigned counter = 0; + RefPtr<InspectorArray> listenersArray = InspectorArray::create(); EventTargetData* d; // Quick break if a null node or no listeners at all if (!node || !(d = node->eventTargetData())) { - m_frontend->didGetEventListenersForNode(callId, nodeId, listenersArray); + m_frontend->didGetEventListenersForNode(callId, nodeId, listenersArray.release()); return; } @@ -607,7 +605,7 @@ void InspectorDOMAgent::getEventListenersForNode(long callId, long nodeId) // Quick break if no useful listeners size_t eventTypesLength = eventTypes.size(); if (eventTypesLength == 0) { - m_frontend->didGetEventListenersForNode(callId, nodeId, listenersArray); + m_frontend->didGetEventListenersForNode(callId, nodeId, listenersArray.release()); return; } @@ -640,7 +638,7 @@ void InspectorDOMAgent::getEventListenersForNode(long callId, long nodeId) for (size_t j = 0; j < vector.size(); ++j) { const RegisteredEventListener& listener = vector[j]; if (listener.useCapture) - listenersArray.set(counter++, buildObjectForEventListener(listener, info.eventType, info.node)); + listenersArray->push(buildObjectForEventListener(listener, info.eventType, info.node)); } } @@ -651,11 +649,11 @@ void InspectorDOMAgent::getEventListenersForNode(long callId, long nodeId) for (size_t j = 0; j < vector.size(); ++j) { const RegisteredEventListener& listener = vector[j]; if (!listener.useCapture) - listenersArray.set(counter++, buildObjectForEventListener(listener, info.eventType, info.node)); + listenersArray->push(buildObjectForEventListener(listener, info.eventType, info.node)); } } - m_frontend->didGetEventListenersForNode(callId, nodeId, listenersArray); + m_frontend->didGetEventListenersForNode(callId, nodeId, listenersArray.release()); } void InspectorDOMAgent::addInspectedNode(long nodeId) @@ -769,9 +767,9 @@ String InspectorDOMAgent::documentURLString(Document* document) const return document->url().string(); } -ScriptObject InspectorDOMAgent::buildObjectForNode(Node* node, int depth, NodeToIdMap* nodesMap) +PassRefPtr<InspectorObject> InspectorDOMAgent::buildObjectForNode(Node* node, int depth, NodeToIdMap* nodesMap) { - ScriptObject value = m_frontend->newScriptObject(); + RefPtr<InspectorObject> value = InspectorObject::create(); long id = bind(node, nodesMap); String nodeName; @@ -796,95 +794,92 @@ ScriptObject InspectorDOMAgent::buildObjectForNode(Node* node, int depth, NodeTo break; } - value.set("id", id); - value.set("nodeType", node->nodeType()); - value.set("nodeName", nodeName); - value.set("localName", localName); - value.set("nodeValue", nodeValue); + value->setNumber("id", id); + value->setNumber("nodeType", node->nodeType()); + value->setString("nodeName", nodeName); + value->setString("localName", localName); + value->setString("nodeValue", nodeValue); if (node->nodeType() == Node::ELEMENT_NODE || node->nodeType() == Node::DOCUMENT_NODE || node->nodeType() == Node::DOCUMENT_FRAGMENT_NODE) { int nodeCount = innerChildNodeCount(node); - value.set("childNodeCount", nodeCount); - ScriptArray children = buildArrayForContainerChildren(node, depth, nodesMap); - if (children.length() > 0) - value.set("children", children); + value->setNumber("childNodeCount", nodeCount); + RefPtr<InspectorArray> children = buildArrayForContainerChildren(node, depth, nodesMap); + if (children->length() > 0) + value->set("children", children.release()); if (node->nodeType() == Node::ELEMENT_NODE) { Element* element = static_cast<Element*>(node); - value.set("attributes", buildArrayForElementAttributes(element)); + value->set("attributes", buildArrayForElementAttributes(element)); if (node->isFrameOwnerElement()) { HTMLFrameOwnerElement* frameOwner = static_cast<HTMLFrameOwnerElement*>(node); - value.set("documentURL", documentURLString(frameOwner->contentDocument())); + value->setString("documentURL", documentURLString(frameOwner->contentDocument())); } } else if (node->nodeType() == Node::DOCUMENT_NODE) { Document* document = static_cast<Document*>(node); - value.set("documentURL", documentURLString(document)); + value->setString("documentURL", documentURLString(document)); } } else if (node->nodeType() == Node::DOCUMENT_TYPE_NODE) { DocumentType* docType = static_cast<DocumentType*>(node); - value.set("publicId", docType->publicId()); - value.set("systemId", docType->systemId()); - value.set("internalSubset", docType->internalSubset()); + value->setString("publicId", docType->publicId()); + value->setString("systemId", docType->systemId()); + value->setString("internalSubset", docType->internalSubset()); } - return value; + return value.release(); } -ScriptArray InspectorDOMAgent::buildArrayForElementAttributes(Element* element) +PassRefPtr<InspectorArray> InspectorDOMAgent::buildArrayForElementAttributes(Element* element) { - ScriptArray attributesValue = m_frontend->newScriptArray(); + RefPtr<InspectorArray> attributesValue = InspectorArray::create(); // Go through all attributes and serialize them. const NamedNodeMap* attrMap = element->attributes(true); if (!attrMap) - return attributesValue; + return attributesValue.release(); unsigned numAttrs = attrMap->length(); - int index = 0; for (unsigned i = 0; i < numAttrs; ++i) { // Add attribute pair const Attribute *attribute = attrMap->attributeItem(i); - attributesValue.set(index++, attribute->name().toString()); - attributesValue.set(index++, attribute->value()); + attributesValue->pushString(attribute->name().toString()); + attributesValue->pushString(attribute->value()); } - return attributesValue; + return attributesValue.release(); } -ScriptArray InspectorDOMAgent::buildArrayForContainerChildren(Node* container, int depth, NodeToIdMap* nodesMap) +PassRefPtr<InspectorArray> InspectorDOMAgent::buildArrayForContainerChildren(Node* container, int depth, NodeToIdMap* nodesMap) { - ScriptArray children = m_frontend->newScriptArray(); + RefPtr<InspectorArray> children = InspectorArray::create(); if (depth == 0) { - int index = 0; // Special case the_only text child. if (innerChildNodeCount(container) == 1) { Node *child = innerFirstChild(container); if (child->nodeType() == Node::TEXT_NODE) - children.set(index++, buildObjectForNode(child, 0, nodesMap)); + children->push(buildObjectForNode(child, 0, nodesMap)); } - return children; + return children.release(); } else if (depth > 0) { depth--; } - int index = 0; for (Node *child = innerFirstChild(container); child; child = innerNextSibling(child)) - children.set(index++, buildObjectForNode(child, depth, nodesMap)); - return children; + children->push(buildObjectForNode(child, depth, nodesMap)); + return children.release(); } -ScriptObject InspectorDOMAgent::buildObjectForEventListener(const RegisteredEventListener& registeredEventListener, const AtomicString& eventType, Node* node) +PassRefPtr<InspectorObject> InspectorDOMAgent::buildObjectForEventListener(const RegisteredEventListener& registeredEventListener, const AtomicString& eventType, Node* node) { RefPtr<EventListener> eventListener = registeredEventListener.listener; - ScriptObject value = m_frontend->newScriptObject(); - value.set("type", eventType); - value.set("useCapture", registeredEventListener.useCapture); - value.set("isAttribute", eventListener->isAttribute()); - value.set("nodeId", pushNodePathToFrontend(node)); - value.set("listenerBody", eventListenerHandlerBody(node->document(), m_frontend->scriptState(), eventListener.get())); + RefPtr<InspectorObject> value = InspectorObject::create(); + value->setString("type", eventType); + value->setBool("useCapture", registeredEventListener.useCapture); + value->setBool("isAttribute", eventListener->isAttribute()); + value->setNumber("nodeId", pushNodePathToFrontend(node)); + value->setString("listenerBody", eventListenerHandlerBody(node->document(), eventListener.get())); String sourceName; int lineNumber; - if (eventListenerHandlerLocation(node->document(), m_frontend->scriptState(), eventListener.get(), sourceName, lineNumber)) { - value.set("sourceName", sourceName); - value.set("lineNumber", lineNumber); + if (eventListenerHandlerLocation(node->document(), eventListener.get(), sourceName, lineNumber)) { + value->setString("sourceName", sourceName); + value->setNumber("lineNumber", lineNumber); } - return value; + return value.release(); } Node* InspectorDOMAgent::innerFirstChild(Node* node) @@ -980,8 +975,8 @@ void InspectorDOMAgent::didInsertDOMNode(Node* node) // Children have been requested -> return value of a new child. Node* prevSibling = innerPreviousSibling(node); long prevId = prevSibling ? m_documentNodeToIdMap.get(prevSibling) : 0; - ScriptObject value = buildObjectForNode(node, 0, &m_documentNodeToIdMap); - m_frontend->childNodeInserted(parentId, prevId, value); + RefPtr<InspectorObject> value = buildObjectForNode(node, 0, &m_documentNodeToIdMap); + m_frontend->childNodeInserted(parentId, prevId, value.release()); } } @@ -1019,62 +1014,61 @@ void InspectorDOMAgent::getStyles(long callId, long nodeId, bool authorOnly) { Node* node = nodeForId(nodeId); if (!node || node->nodeType() != Node::ELEMENT_NODE) { - m_frontend->didGetStyles(callId, ScriptValue::undefined()); + m_frontend->didGetStyles(callId, InspectorValue::null()); return; } DOMWindow* defaultView = node->ownerDocument()->defaultView(); if (!defaultView) { - m_frontend->didGetStyles(callId, ScriptValue::undefined()); + m_frontend->didGetStyles(callId, InspectorValue::null()); return; } Element* element = static_cast<Element*>(node); RefPtr<CSSComputedStyleDeclaration> computedStyleInfo = computedStyle(node, true); // Support the viewing of :visited information in computed style. - ScriptObject result = m_frontend->newScriptObject(); + RefPtr<InspectorObject> result = InspectorObject::create(); if (element->style()) - result.set("inlineStyle", buildObjectForStyle(element->style(), true)); - result.set("computedStyle", buildObjectForStyle(computedStyleInfo.get(), false)); + result->set("inlineStyle", buildObjectForStyle(element->style(), true)); + result->set("computedStyle", buildObjectForStyle(computedStyleInfo.get(), false)); CSSStyleSelector* selector = element->ownerDocument()->styleSelector(); RefPtr<CSSRuleList> matchedRules = selector->styleRulesForElement(element, authorOnly); - result.set("matchedCSSRules", buildArrayForCSSRules(node->ownerDocument(), matchedRules.get())); + result->set("matchedCSSRules", buildArrayForCSSRules(node->ownerDocument(), matchedRules.get())); - result.set("styleAttributes", buildObjectForAttributeStyles(element)); - result.set("pseudoElements", buildArrayForPseudoElements(element, authorOnly)); + result->set("styleAttributes", buildObjectForAttributeStyles(element)); + result->set("pseudoElements", buildArrayForPseudoElements(element, authorOnly)); - ScriptObject currentStyle = result; + RefPtr<InspectorObject> currentStyle = result; Element* parentElement = element->parentElement(); while (parentElement) { - ScriptObject parentStyle = m_frontend->newScriptObject(); - currentStyle.set("parent", parentStyle); + RefPtr<InspectorObject> parentStyle = InspectorObject::create(); + currentStyle->set("parent", parentStyle); if (parentElement->style() && parentElement->style()->length()) - parentStyle.set("inlineStyle", buildObjectForStyle(parentElement->style(), true)); + parentStyle->set("inlineStyle", buildObjectForStyle(parentElement->style(), true)); CSSStyleSelector* parentSelector = parentElement->ownerDocument()->styleSelector(); RefPtr<CSSRuleList> parentMatchedRules = parentSelector->styleRulesForElement(parentElement, authorOnly); - parentStyle.set("matchedCSSRules", buildArrayForCSSRules(parentElement->ownerDocument(), parentMatchedRules.get())); + parentStyle->set("matchedCSSRules", buildArrayForCSSRules(parentElement->ownerDocument(), parentMatchedRules.get())); parentElement = parentElement->parentElement(); currentStyle = parentStyle; } - m_frontend->didGetStyles(callId, result); + m_frontend->didGetStyles(callId, result.release()); } void InspectorDOMAgent::getAllStyles(long callId) { - ScriptArray result = m_frontend->newScriptArray(); - unsigned counter = 0; + RefPtr<InspectorArray> result = InspectorArray::create(); for (ListHashSet<RefPtr<Document> >::iterator it = m_documents.begin(); it != m_documents.end(); ++it) { StyleSheetList* list = (*it)->styleSheets(); for (unsigned i = 0; i < list->length(); ++i) { StyleSheet* styleSheet = list->item(i); if (styleSheet->isCSSStyleSheet()) - result.set(counter++, buildObjectForStyleSheet((*it).get(), static_cast<CSSStyleSheet*>(styleSheet))); + result->push(buildObjectForStyleSheet((*it).get(), static_cast<CSSStyleSheet*>(styleSheet))); } } - m_frontend->didGetAllStyles(callId, result); + m_frontend->didGetAllStyles(callId, result.release()); } void InspectorDOMAgent::getStyleSheet(long callId, long styleSheetId) @@ -1083,7 +1077,7 @@ void InspectorDOMAgent::getStyleSheet(long callId, long styleSheetId) if (styleSheet && styleSheet->doc()) m_frontend->didGetStyleSheet(callId, buildObjectForStyleSheet(styleSheet->doc(), styleSheet)); else - m_frontend->didGetStyleSheet(callId, ScriptObject::undefined()); + m_frontend->didGetStyleSheet(callId, InspectorObject::create()); } void InspectorDOMAgent::getRuleRangesForStyleSheetId(long callId, long styleSheetId) @@ -1092,30 +1086,30 @@ void InspectorDOMAgent::getRuleRangesForStyleSheetId(long callId, long styleShee if (styleSheet && styleSheet->doc()) { HashMap<long, SourceRange> ruleRanges = cssStore()->getRuleRangesForStyleSheet(styleSheet); if (!ruleRanges.size()) { - m_frontend->didGetStyleSheet(callId, ScriptObject::undefined()); + m_frontend->didGetStyleSheet(callId, InspectorObject::create()); return; } - ScriptObject result = m_frontend->newScriptObject(); + RefPtr<InspectorObject> result = InspectorObject::create(); for (HashMap<long, SourceRange>::iterator it = ruleRanges.begin(); it != ruleRanges.end(); ++it) { if (it->second.second) { - ScriptObject ruleRange = m_frontend->newScriptObject(); - result.set(String::number(it->first).utf8().data(), ruleRange); - ScriptObject bodyRange = m_frontend->newScriptObject(); - ruleRange.set("bodyRange", bodyRange); - bodyRange.set("start", it->second.first); - bodyRange.set("end", it->second.second); + RefPtr<InspectorObject> ruleRange = InspectorObject::create(); + result->set(String::number(it->first).utf8().data(), ruleRange); + RefPtr<InspectorObject> bodyRange = InspectorObject::create(); + ruleRange->set("bodyRange", bodyRange); + bodyRange->setNumber("start", it->second.first); + bodyRange->setNumber("end", it->second.second); } } m_frontend->didGetStyleSheet(callId, result); } else - m_frontend->didGetStyleSheet(callId, ScriptObject::undefined()); + m_frontend->didGetStyleSheet(callId, InspectorValue::null()); } void InspectorDOMAgent::getInlineStyle(long callId, long nodeId) { Node* node = nodeForId(nodeId); if (!node || node->nodeType() != Node::ELEMENT_NODE) { - m_frontend->didGetInlineStyle(callId, ScriptValue::undefined()); + m_frontend->didGetInlineStyle(callId, InspectorValue::null()); return; } Element* element = static_cast<Element*>(node); @@ -1126,13 +1120,13 @@ void InspectorDOMAgent::getComputedStyle(long callId, long nodeId) { Node* node = nodeForId(nodeId); if (!node || node->nodeType() != Node::ELEMENT_NODE) { - m_frontend->didGetComputedStyle(callId, ScriptValue::undefined()); + m_frontend->didGetComputedStyle(callId, InspectorValue::null()); return; } DOMWindow* defaultView = node->ownerDocument()->defaultView(); if (!defaultView) { - m_frontend->didGetComputedStyle(callId, ScriptValue::undefined()); + m_frontend->didGetComputedStyle(callId, InspectorValue::null()); return; } @@ -1141,56 +1135,54 @@ void InspectorDOMAgent::getComputedStyle(long callId, long nodeId) m_frontend->didGetComputedStyle(callId, buildObjectForStyle(computedStyle.get(), false)); } -ScriptObject InspectorDOMAgent::buildObjectForAttributeStyles(Element* element) +PassRefPtr<InspectorObject> InspectorDOMAgent::buildObjectForAttributeStyles(Element* element) { - ScriptObject styleAttributes = m_frontend->newScriptObject(); + RefPtr<InspectorObject> styleAttributes = InspectorObject::create(); NamedNodeMap* attributes = element->attributes(); for (unsigned i = 0; attributes && i < attributes->length(); ++i) { Attribute* attribute = attributes->attributeItem(i); if (attribute->style()) { String attributeName = attribute->localName(); - styleAttributes.set(attributeName.utf8().data(), buildObjectForStyle(attribute->style(), true)); + styleAttributes->set(attributeName.utf8().data(), buildObjectForStyle(attribute->style(), true)); } } return styleAttributes; } -ScriptArray InspectorDOMAgent::buildArrayForCSSRules(Document* ownerDocument, CSSRuleList* matchedRules) +PassRefPtr<InspectorArray> InspectorDOMAgent::buildArrayForCSSRules(Document* ownerDocument, CSSRuleList* matchedRules) { - ScriptArray matchedCSSRules = m_frontend->newScriptArray(); - unsigned counter = 0; + RefPtr<InspectorArray> matchedCSSRules = InspectorArray::create(); for (unsigned i = 0; matchedRules && i < matchedRules->length(); ++i) { CSSRule* rule = matchedRules->item(i); if (rule->type() == CSSRule::STYLE_RULE) - matchedCSSRules.set(counter++, buildObjectForRule(ownerDocument, static_cast<CSSStyleRule*>(rule))); + matchedCSSRules->push(buildObjectForRule(ownerDocument, static_cast<CSSStyleRule*>(rule))); } - return matchedCSSRules; + return matchedCSSRules.release(); } -ScriptArray InspectorDOMAgent::buildArrayForPseudoElements(Element* element, bool authorOnly) +PassRefPtr<InspectorArray> InspectorDOMAgent::buildArrayForPseudoElements(Element* element, bool authorOnly) { - ScriptArray result = m_frontend->newScriptArray(); + RefPtr<InspectorArray> result = InspectorArray::create(); CSSStyleSelector* selector = element->ownerDocument()->styleSelector(); RefPtr<RenderStyle> renderStyle = element->styleForRenderer(); - unsigned counter = 0; for (PseudoId pseudoId = FIRST_PUBLIC_PSEUDOID; pseudoId < AFTER_LAST_INTERNAL_PSEUDOID; pseudoId = static_cast<PseudoId>(pseudoId + 1)) { RefPtr<CSSRuleList> matchedRules = selector->pseudoStyleRulesForElement(element, pseudoId, authorOnly); if (matchedRules && matchedRules->length()) { - ScriptObject pseudoStyles = m_frontend->newScriptObject(); - pseudoStyles.set("pseudoId", static_cast<int>(pseudoId)); - pseudoStyles.set("rules", buildArrayForCSSRules(element->ownerDocument(), matchedRules.get())); - result.set(counter++, pseudoStyles); + RefPtr<InspectorObject> pseudoStyles = InspectorObject::create(); + pseudoStyles->setNumber("pseudoId", static_cast<int>(pseudoId)); + pseudoStyles->set("rules", buildArrayForCSSRules(element->ownerDocument(), matchedRules.get())); + result->push(pseudoStyles.release()); } } - return result; + return result.release(); } void InspectorDOMAgent::applyStyleText(long callId, long styleId, const String& styleText, const String& propertyName) { CSSStyleDeclaration* style = cssStore()->styleForId(styleId); if (!style) { - m_frontend->didApplyStyleText(callId, false, ScriptValue::undefined(), m_frontend->newScriptArray()); + m_frontend->didApplyStyleText(callId, false, InspectorValue::null(), InspectorArray::create()); return; } @@ -1220,21 +1212,21 @@ void InspectorDOMAgent::applyStyleText(long callId, long styleId, const String& style->removeProperty(propertyName, ec); if (ec) { - m_frontend->didApplyStyleText(callId, false, ScriptValue::undefined(), m_frontend->newScriptArray()); + m_frontend->didApplyStyleText(callId, false, InspectorValue::null(), InspectorArray::create()); return; } } // Notify caller that the property was successfully deleted. if (!styleTextLength) { - ScriptArray changedProperties = m_frontend->newScriptArray(); - changedProperties.set(0, propertyName); - m_frontend->didApplyStyleText(callId, true, ScriptValue::undefined(), changedProperties); + RefPtr<InspectorArray> changedProperties = InspectorArray::create(); + changedProperties->pushString(propertyName); + m_frontend->didApplyStyleText(callId, true, InspectorValue::null(), changedProperties.release()); return; } if (!tempStyle->length()) { - m_frontend->didApplyStyleText(callId, false, ScriptValue::undefined(), m_frontend->newScriptArray()); + m_frontend->didApplyStyleText(callId, false, InspectorValue::null(), InspectorArray::create()); return; } @@ -1302,7 +1294,7 @@ void InspectorDOMAgent::toggleStyleEnabled(long callId, long styleId, const Stri { CSSStyleDeclaration* style = cssStore()->styleForId(styleId); if (!style) { - m_frontend->didToggleStyleEnabled(callId, ScriptValue::undefined()); + m_frontend->didToggleStyleEnabled(callId, InspectorValue::null()); return; } @@ -1321,7 +1313,7 @@ void InspectorDOMAgent::toggleStyleEnabled(long callId, long styleId, const Stri disabledStyle->remove(propertyName); } if (ec) { - m_frontend->didToggleStyleEnabled(callId, ScriptValue::undefined()); + m_frontend->didToggleStyleEnabled(callId, InspectorValue::null()); return; } m_frontend->didToggleStyleEnabled(callId, buildObjectForStyle(style, true)); @@ -1331,7 +1323,7 @@ void InspectorDOMAgent::setRuleSelector(long callId, long ruleId, const String& { CSSStyleRule* rule = cssStore()->ruleForId(ruleId); if (!rule) { - m_frontend->didSetRuleSelector(callId, ScriptValue::undefined(), false); + m_frontend->didSetRuleSelector(callId, InspectorValue::null(), false); return; } @@ -1341,7 +1333,7 @@ void InspectorDOMAgent::setRuleSelector(long callId, long ruleId, const String& ExceptionCode ec = 0; styleSheet->addRule(selector, rule->style()->cssText(), ec); if (ec) { - m_frontend->didSetRuleSelector(callId, ScriptValue::undefined(), false); + m_frontend->didSetRuleSelector(callId, InspectorValue::null(), false); return; } @@ -1354,7 +1346,7 @@ void InspectorDOMAgent::setRuleSelector(long callId, long ruleId, const String& } if (ec) { - m_frontend->didSetRuleSelector(callId, ScriptValue::undefined(), false); + m_frontend->didSetRuleSelector(callId, InspectorValue::null(), false); return; } @@ -1365,7 +1357,7 @@ void InspectorDOMAgent::addRule(long callId, const String& selector, long select { Node* node = nodeForId(selectedNodeId); if (!node) { - m_frontend->didAddRule(callId, ScriptValue::undefined(), false); + m_frontend->didAddRule(callId, InspectorValue::null(), false); return; } @@ -1376,7 +1368,7 @@ void InspectorDOMAgent::addRule(long callId, const String& selector, long select ExceptionCode ec = 0; styleSheet->addRule(selector, "", ec); if (ec) { - m_frontend->didAddRule(callId, ScriptValue::undefined(), false); + m_frontend->didAddRule(callId, InspectorValue::null(), false); return; } @@ -1384,115 +1376,114 @@ void InspectorDOMAgent::addRule(long callId, const String& selector, long select m_frontend->didAddRule(callId, buildObjectForRule(node->ownerDocument(), newRule), ruleAffectsNode(newRule, node)); } -ScriptObject InspectorDOMAgent::buildObjectForStyle(CSSStyleDeclaration* style, bool bind) +PassRefPtr<InspectorObject> InspectorDOMAgent::buildObjectForStyle(CSSStyleDeclaration* style, bool bind) { - ScriptObject result = m_frontend->newScriptObject(); + RefPtr<InspectorObject> result = InspectorObject::create(); if (bind) { long styleId = cssStore()->bindStyle(style); - result.set("id", styleId); + result->setNumber("id", styleId); CSSStyleSheet* parentStyleSheet = getParentStyleSheet(style); if (parentStyleSheet) - result.set("parentStyleSheetId", cssStore()->bindStyleSheet(parentStyleSheet)); + result->setNumber("parentStyleSheetId", cssStore()->bindStyleSheet(parentStyleSheet)); DisabledStyleDeclaration* disabledStyle = cssStore()->disabledStyleForId(styleId, false); if (disabledStyle) - result.set("disabled", buildArrayForDisabledStyleProperties(disabledStyle)); + result->set("disabled", buildArrayForDisabledStyleProperties(disabledStyle)); } - result.set("width", style->getPropertyValue("width")); - result.set("height", style->getPropertyValue("height")); - populateObjectWithStyleProperties(style, result); - return result; + result->setString("width", style->getPropertyValue("width")); + result->setString("height", style->getPropertyValue("height")); + populateObjectWithStyleProperties(style, result.get()); + return result.release(); } -void InspectorDOMAgent::populateObjectWithStyleProperties(CSSStyleDeclaration* style, ScriptObject& result) +void InspectorDOMAgent::populateObjectWithStyleProperties(CSSStyleDeclaration* style, InspectorObject* result) { - ScriptArray properties = m_frontend->newScriptArray(); - ScriptObject shorthandValues = m_frontend->newScriptObject(); - result.set("properties", properties); - result.set("shorthandValues", shorthandValues); + RefPtr<InspectorArray> properties = InspectorArray::create(); + RefPtr<InspectorObject> shorthandValues = InspectorObject::create(); HashSet<String> foundShorthands; for (unsigned i = 0; i < style->length(); ++i) { - ScriptObject property = m_frontend->newScriptObject(); + RefPtr<InspectorObject> property = InspectorObject::create(); String name = style->item(i); - property.set("name", name); - property.set("priority", style->getPropertyPriority(name)); - property.set("implicit", style->isPropertyImplicit(name)); + property->setString("name", name); + property->setString("priority", style->getPropertyPriority(name)); + property->setBool("implicit", style->isPropertyImplicit(name)); String shorthand = style->getPropertyShorthand(name); - property.set("shorthand", shorthand); + property->setString("shorthand", shorthand); if (!shorthand.isEmpty() && !foundShorthands.contains(shorthand)) { foundShorthands.add(shorthand); - shorthandValues.set(shorthand, shorthandValue(style, shorthand)); + shorthandValues->setString(shorthand, shorthandValue(style, shorthand)); } - property.set("value", style->getPropertyValue(name)); - properties.set(i, property); + property->setString("value", style->getPropertyValue(name)); + properties->push(property.release()); } + result->set("properties", properties); + result->set("shorthandValues", shorthandValues); } -ScriptArray InspectorDOMAgent::buildArrayForDisabledStyleProperties(DisabledStyleDeclaration* declaration) +PassRefPtr<InspectorArray> InspectorDOMAgent::buildArrayForDisabledStyleProperties(DisabledStyleDeclaration* declaration) { - int counter = 0; - ScriptArray properties = m_frontend->newScriptArray(); + RefPtr<InspectorArray> properties = InspectorArray::create(); for (DisabledStyleDeclaration::iterator it = declaration->begin(); it != declaration->end(); ++it) { - ScriptObject property = m_frontend->newScriptObject(); - property.set("name", it->first); - property.set("value", it->second.first); - property.set("priority", it->second.second); - properties.set(counter++, property); + RefPtr<InspectorObject> property = InspectorObject::create(); + property->setString("name", it->first); + property->setString("value", it->second.first); + property->setString("priority", it->second.second); + properties->push(property.release()); } - return properties; + return properties.release(); } -ScriptObject InspectorDOMAgent::buildObjectForStyleSheet(Document* ownerDocument, CSSStyleSheet* styleSheet) +PassRefPtr<InspectorObject> InspectorDOMAgent::buildObjectForStyleSheet(Document* ownerDocument, CSSStyleSheet* styleSheet) { - ScriptObject result = m_frontend->newScriptObject(); + RefPtr<InspectorObject> result = InspectorObject::create(); long id = cssStore()->bindStyleSheet(styleSheet); - result.set("id", id); - result.set("disabled", styleSheet->disabled()); - result.set("href", styleSheet->href()); - result.set("title", styleSheet->title()); - result.set("documentElementId", m_documentNodeToIdMap.get(styleSheet->doc())); - ScriptArray cssRules = m_frontend->newScriptArray(); - result.set("cssRules", cssRules); + result->setNumber("id", id); + result->setBool("disabled", styleSheet->disabled()); + result->setString("href", styleSheet->href()); + result->setString("title", styleSheet->title()); + result->setNumber("documentElementId", m_documentNodeToIdMap.get(styleSheet->doc())); + RefPtr<InspectorArray> cssRules = InspectorArray::create(); PassRefPtr<CSSRuleList> cssRuleList = CSSRuleList::create(styleSheet, true); - if (!cssRuleList) - return result; - unsigned counter = 0; - for (unsigned i = 0; i < cssRuleList->length(); ++i) { - CSSRule* rule = cssRuleList->item(i); - if (rule->isStyleRule()) - cssRules.set(counter++, buildObjectForRule(ownerDocument, static_cast<CSSStyleRule*>(rule))); + if (cssRuleList) { + for (unsigned i = 0; i < cssRuleList->length(); ++i) { + CSSRule* rule = cssRuleList->item(i); + if (rule->isStyleRule()) + cssRules->push(buildObjectForRule(ownerDocument, static_cast<CSSStyleRule*>(rule))); + } } - return result; + result->set("cssRules", cssRules.release()); + return result.release(); } -ScriptObject InspectorDOMAgent::buildObjectForRule(Document* ownerDocument, CSSStyleRule* rule) +PassRefPtr<InspectorObject> InspectorDOMAgent::buildObjectForRule(Document* ownerDocument, CSSStyleRule* rule) { CSSStyleSheet* parentStyleSheet = rule->parentStyleSheet(); - ScriptObject result = m_frontend->newScriptObject(); - result.set("selectorText", rule->selectorText()); - result.set("cssText", rule->cssText()); - result.set("sourceLine", rule->sourceLine()); + RefPtr<InspectorObject> result = InspectorObject::create(); + result->setString("selectorText", rule->selectorText()); + result->setString("cssText", rule->cssText()); + result->setNumber("sourceLine", rule->sourceLine()); + result->setString("documentURL", documentURLString(ownerDocument)); if (parentStyleSheet) { - ScriptObject parentStyleSheetValue = m_frontend->newScriptObject(); - result.set("parentStyleSheet", parentStyleSheetValue); - parentStyleSheetValue.set("href", parentStyleSheet->href()); - parentStyleSheetValue.set("id", cssStore()->bindStyleSheet(parentStyleSheet)); + RefPtr<InspectorObject> parentStyleSheetValue = InspectorObject::create(); + parentStyleSheetValue->setString("href", parentStyleSheet->href()); + parentStyleSheetValue->setNumber("id", cssStore()->bindStyleSheet(parentStyleSheet)); + result->set("parentStyleSheet", parentStyleSheetValue.release()); } bool isUserAgent = parentStyleSheet && !parentStyleSheet->ownerNode() && parentStyleSheet->href().isEmpty(); bool isUser = parentStyleSheet && parentStyleSheet->ownerNode() && parentStyleSheet->ownerNode()->nodeName() == "#document"; - result.set("isUserAgent", isUserAgent); - result.set("isUser", isUser); - result.set("isViaInspector", rule->parentStyleSheet() == cssStore()->inspectorStyleSheet(ownerDocument, false, -1)); + result->setBool("isUserAgent", isUserAgent); + result->setBool("isUser", isUser); + result->setBool("isViaInspector", rule->parentStyleSheet() == cssStore()->inspectorStyleSheet(ownerDocument, false, -1)); // Bind editable scripts only. bool bind = !isUserAgent && !isUser; - result.set("style", buildObjectForStyle(rule->style(), bind)); + result->set("style", buildObjectForStyle(rule->style(), bind)); if (bind) - result.set("id", cssStore()->bindRule(rule)); - return result; + result->setNumber("id", cssStore()->bindRule(rule)); + return result.release(); } Vector<String> InspectorDOMAgent::longhandProperties(CSSStyleDeclaration* style, const String& shorthandProperty) @@ -1593,12 +1584,12 @@ Node* InspectorDOMAgent::nodeForPath(const String& path) return node; } -ScriptArray InspectorDOMAgent::toArray(const Vector<String>& data) +PassRefPtr<InspectorArray> InspectorDOMAgent::toArray(const Vector<String>& data) { - ScriptArray result = m_frontend->newScriptArray(); + RefPtr<InspectorArray> result = InspectorArray::create(); for (unsigned i = 0; i < data.size(); ++i) - result.set(i, data[i]); - return result; + result->pushString(data[i]); + return result.release(); } CSSStyleSheet* InspectorDOMAgent::getParentStyleSheet(CSSStyleDeclaration* style) @@ -1634,15 +1625,14 @@ void InspectorDOMAgent::onMatchJobsTimer(Timer<InspectorDOMAgent>*) void InspectorDOMAgent::reportNodesAsSearchResults(ListHashSet<Node*>& resultCollector) { - ScriptArray nodeIds = m_frontend->newScriptArray(); - int index = 0; + RefPtr<InspectorArray> nodeIds = InspectorArray::create(); for (ListHashSet<Node*>::iterator it = resultCollector.begin(); it != resultCollector.end(); ++it) { if (m_searchResults.contains(*it)) continue; m_searchResults.add(*it); - nodeIds.set(index++, static_cast<long long>(pushNodePathToFrontend(*it))); + nodeIds->pushNumber(static_cast<long long>(pushNodePathToFrontend(*it))); } - m_frontend->addNodesToSearchResult(nodeIds); + m_frontend->addNodesToSearchResult(nodeIds.release()); } } // namespace WebCore diff --git a/WebCore/inspector/InspectorDOMAgent.h b/WebCore/inspector/InspectorDOMAgent.h index 70d5b94..c00c133 100644 --- a/WebCore/inspector/InspectorDOMAgent.h +++ b/WebCore/inspector/InspectorDOMAgent.h @@ -35,9 +35,8 @@ #include "EventListener.h" #include "EventTarget.h" #include "InspectorCSSStore.h" +#include "InspectorValues.h" #include "NodeList.h" -#include "ScriptArray.h" -#include "ScriptObject.h" #include "ScriptState.h" #include "Timer.h" @@ -57,7 +56,7 @@ namespace WebCore { class CSSStyleSheet; class Element; class Event; - class InspectorFrontend; + class InspectorFrontend2; class MatchJob; class NameNodeMap; class Node; @@ -78,7 +77,7 @@ namespace WebCore { class InspectorDOMAgent : public EventListener { public: - static PassRefPtr<InspectorDOMAgent> create(InspectorCSSStore* cssStore, InspectorFrontend* frontend) + static PassRefPtr<InspectorDOMAgent> create(InspectorCSSStore* cssStore, InspectorFrontend2* frontend) { return adoptRef(new InspectorDOMAgent(cssStore, frontend)); } @@ -90,7 +89,7 @@ namespace WebCore { : 0; } - InspectorDOMAgent(InspectorCSSStore* cssStore, InspectorFrontend* frontend); + InspectorDOMAgent(InspectorCSSStore* cssStore, InspectorFrontend2* frontend); ~InspectorDOMAgent(); void reset(); @@ -153,14 +152,14 @@ namespace WebCore { bool pushDocumentToFrontend(); - ScriptObject buildObjectForAttributeStyles(Element* element); - ScriptArray buildArrayForCSSRules(Document* ownerDocument, CSSRuleList*); - ScriptArray buildArrayForPseudoElements(Element* element, bool authorOnly); + PassRefPtr<InspectorObject> buildObjectForAttributeStyles(Element* element); + PassRefPtr<InspectorArray> buildArrayForCSSRules(Document* ownerDocument, CSSRuleList*); + PassRefPtr<InspectorArray> buildArrayForPseudoElements(Element* element, bool authorOnly); - ScriptObject buildObjectForNode(Node* node, int depth, NodeToIdMap* nodesMap); - ScriptArray buildArrayForElementAttributes(Element* element); - ScriptArray buildArrayForContainerChildren(Node* container, int depth, NodeToIdMap* nodesMap); - ScriptObject buildObjectForEventListener(const RegisteredEventListener& registeredEventListener, const AtomicString& eventType, Node* node); + PassRefPtr<InspectorObject> buildObjectForNode(Node* node, int depth, NodeToIdMap* nodesMap); + PassRefPtr<InspectorArray> buildArrayForElementAttributes(Element* element); + PassRefPtr<InspectorArray> buildArrayForContainerChildren(Node* container, int depth, NodeToIdMap* nodesMap); + PassRefPtr<InspectorObject> buildObjectForEventListener(const RegisteredEventListener& registeredEventListener, const AtomicString& eventType, Node* node); // We represent embedded doms as a part of the same hierarchy. Hence we treat children of frame owners differently. // We also skip whitespace text nodes conditionally. Following methods encapsulate these specifics. @@ -178,22 +177,22 @@ namespace WebCore { void onMatchJobsTimer(Timer<InspectorDOMAgent>*); void reportNodesAsSearchResults(ListHashSet<Node*>& resultCollector); - ScriptObject buildObjectForStyle(CSSStyleDeclaration*, bool bind); - void populateObjectWithStyleProperties(CSSStyleDeclaration*, ScriptObject& result); - ScriptArray buildArrayForDisabledStyleProperties(DisabledStyleDeclaration*); - ScriptObject buildObjectForRule(Document* ownerDocument, CSSStyleRule*); - ScriptObject buildObjectForStyleSheet(Document* ownerDocument, CSSStyleSheet*); + PassRefPtr<InspectorObject> buildObjectForStyle(CSSStyleDeclaration*, bool bind); + void populateObjectWithStyleProperties(CSSStyleDeclaration*, InspectorObject* result); + PassRefPtr<InspectorArray> buildArrayForDisabledStyleProperties(DisabledStyleDeclaration*); + PassRefPtr<InspectorObject> buildObjectForRule(Document* ownerDocument, CSSStyleRule*); + PassRefPtr<InspectorObject> buildObjectForStyleSheet(Document* ownerDocument, CSSStyleSheet*); Vector<String> longhandProperties(CSSStyleDeclaration*, const String& shorthandProperty); String shorthandValue(CSSStyleDeclaration*, const String& shorthandProperty); String shorthandPriority(CSSStyleDeclaration*, const String& shorthandProperty); bool ruleAffectsNode(CSSStyleRule*, Node*); Node* nodeForPath(const String& path); - ScriptArray toArray(const Vector<String>& data); + PassRefPtr<InspectorArray> toArray(const Vector<String>& data); void discardBindings(); InspectorCSSStore* m_cssStore; - InspectorFrontend* m_frontend; + InspectorFrontend2* m_frontend; NodeToIdMap m_documentNodeToIdMap; // Owns node mappings for dangling nodes. Vector<NodeToIdMap*> m_danglingNodeToIdMaps; diff --git a/WebCore/inspector/InspectorFrontend.cpp b/WebCore/inspector/InspectorFrontend.cpp index fee4630..f9a29b6 100644 --- a/WebCore/inspector/InspectorFrontend.cpp +++ b/WebCore/inspector/InspectorFrontend.cpp @@ -297,14 +297,6 @@ void InspectorFrontend::timelineProfilerWasStopped() callSimpleFunction("timelineProfilerWasStopped"); } -void InspectorFrontend::addRecordToTimeline(const ScriptObject& record) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("addRecordToTimeline"); - function.appendArgument(record); - function.call(); -} - #if ENABLE(JAVASCRIPT_DEBUGGER) void InspectorFrontend::attachDebuggerWhenShown() { @@ -450,104 +442,6 @@ void InspectorFrontend::didGetProfile(long callId, const ScriptValue& profile) } #endif -void InspectorFrontend::setDocument(const ScriptObject& root) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("setDocument"); - function.appendArgument(root); - function.call(); -} - -void InspectorFrontend::setDetachedRoot(const ScriptObject& root) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("setDetachedRoot"); - function.appendArgument(root); - function.call(); -} - -void InspectorFrontend::setChildNodes(long parentId, const ScriptArray& nodes) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("setChildNodes"); - function.appendArgument(parentId); - function.appendArgument(nodes); - function.call(); -} - -void InspectorFrontend::childNodeCountUpdated(long id, int newValue) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("childNodeCountUpdated"); - function.appendArgument(id); - function.appendArgument(newValue); - function.call(); -} - -void InspectorFrontend::childNodeInserted(long parentId, long prevId, const ScriptObject& node) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("childNodeInserted"); - function.appendArgument(parentId); - function.appendArgument(prevId); - function.appendArgument(node); - function.call(); -} - -void InspectorFrontend::childNodeRemoved(long parentId, long id) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("childNodeRemoved"); - function.appendArgument(parentId); - function.appendArgument(id); - function.call(); -} - -void InspectorFrontend::attributesUpdated(long id, const ScriptArray& attributes) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("attributesUpdated"); - function.appendArgument(id); - function.appendArgument(attributes); - function.call(); -} - -void InspectorFrontend::didRemoveNode(long callId, long nodeId) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("didRemoveNode"); - function.appendArgument(callId); - function.appendArgument(nodeId); - function.call(); -} - -void InspectorFrontend::didChangeTagName(long callId, long nodeId) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("didChangeTagName"); - function.appendArgument(callId); - function.appendArgument(nodeId); - function.call(); -} - -void InspectorFrontend::didGetOuterHTML(long callId, const String& outerHTML) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("didGetOuterHTML"); - function.appendArgument(callId); - function.appendArgument(outerHTML); - function.call(); -} - -void InspectorFrontend::didSetOuterHTML(long callId, long nodeId) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("didSetOuterHTML"); - function.appendArgument(callId); - function.appendArgument(nodeId); - function.call(); -} - void InspectorFrontend::didPushNodeByPathToFrontend(long callId, long nodeId) { ScriptFunctionCall function(m_webInspector, "dispatch"); @@ -557,136 +451,6 @@ void InspectorFrontend::didPushNodeByPathToFrontend(long callId, long nodeId) function.call(); } -void InspectorFrontend::didGetChildNodes(long callId) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("didGetChildNodes"); - function.appendArgument(callId); - function.call(); -} - -void InspectorFrontend::didApplyDomChange(long callId, bool success) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("didApplyDomChange"); - function.appendArgument(callId); - function.appendArgument(success); - function.call(); -} - -void InspectorFrontend::didGetEventListenersForNode(long callId, long nodeId, const ScriptArray& listenersArray) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("didGetEventListenersForNode"); - function.appendArgument(callId); - function.appendArgument(nodeId); - function.appendArgument(listenersArray); - function.call(); -} - -void InspectorFrontend::didGetStyles(long callId, const ScriptValue& styles) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("didGetStyles"); - function.appendArgument(callId); - function.appendArgument(styles); - function.call(); -} - -void InspectorFrontend::didGetAllStyles(long callId, const ScriptArray& styles) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("didGetAllStyles"); - function.appendArgument(callId); - function.appendArgument(styles); - function.call(); -} - -void InspectorFrontend::didGetStyleSheet(long callId, const ScriptValue& styleSheet) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("didGetStyleSheet"); - function.appendArgument(callId); - function.appendArgument(styleSheet); - function.call(); -} - -void InspectorFrontend::didGetComputedStyle(long callId, const ScriptValue& style) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("didGetComputedStyle"); - function.appendArgument(callId); - function.appendArgument(style); - function.call(); -} - -void InspectorFrontend::didGetInlineStyle(long callId, const ScriptValue& style) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("didGetInlineStyle"); - function.appendArgument(callId); - function.appendArgument(style); - function.call(); -} - -void InspectorFrontend::didApplyStyleText(long callId, bool success, const ScriptValue& style, const ScriptArray& changedProperties) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("didApplyStyleText"); - function.appendArgument(callId); - function.appendArgument(success); - function.appendArgument(style); - function.appendArgument(changedProperties); - function.call(); -} - -void InspectorFrontend::didSetStyleText(long callId, bool success) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("didSetStyleText"); - function.appendArgument(callId); - function.appendArgument(success); - function.call(); -} - -void InspectorFrontend::didSetStyleProperty(long callId, bool success) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("didSetStyleProperty"); - function.appendArgument(callId); - function.appendArgument(success); - function.call(); -} - -void InspectorFrontend::didToggleStyleEnabled(long callId, const ScriptValue& style) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("didToggleStyleEnabled"); - function.appendArgument(callId); - function.appendArgument(style); - function.call(); -} - -void InspectorFrontend::didSetRuleSelector(long callId, const ScriptValue& rule, bool selectorAffectsNode) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("didSetRuleSelector"); - function.appendArgument(callId); - function.appendArgument(rule); - function.appendArgument(selectorAffectsNode); - function.call(); -} - -void InspectorFrontend::didAddRule(long callId, const ScriptValue& rule, bool selectorAffectsNode) -{ - ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("didAddRule"); - function.appendArgument(callId); - function.appendArgument(rule); - function.appendArgument(selectorAffectsNode); - function.call(); -} - #if ENABLE(WORKERS) void InspectorFrontend::didCreateWorker(const InspectorWorkerResource& worker) { @@ -809,21 +573,40 @@ void InspectorFrontend::didRemoveDOMStorageItem(long callId, bool success) void InspectorFrontend::updateDOMStorage(long storageId) { - ScriptFunctionCall function(m_webInspector, "dispatch"); + ScriptFunctionCall function(m_webInspector, "dispatch"); function.appendArgument("updateDOMStorage"); function.appendArgument(storageId); function.call(); } #endif -void InspectorFrontend::addNodesToSearchResult(const ScriptArray& nodeIds) +#if ENABLE(OFFLINE_WEB_APPLICATIONS) +void InspectorFrontend::didGetApplicationCaches(long callId, const ScriptValue& applicationCaches) +{ + ScriptFunctionCall function(m_webInspector, "dispatch"); + function.appendArgument("didGetApplicationCaches"); + function.appendArgument(callId); + function.appendArgument(applicationCaches); + function.call(); +} + +void InspectorFrontend::updateApplicationCacheStatus(int status) { ScriptFunctionCall function(m_webInspector, "dispatch"); - function.appendArgument("addNodesToSearchResult"); - function.appendArgument(nodeIds); + function.appendArgument("updateApplicationCacheStatus"); + function.appendArgument(status); function.call(); } +void InspectorFrontend::updateNetworkState(bool isNowOnline) +{ + ScriptFunctionCall function(m_webInspector, "dispatch"); + function.appendArgument("updateNetworkState"); + function.appendArgument(isNowOnline); + function.call(); +} +#endif + void InspectorFrontend::contextMenuItemSelected(int itemId) { ScriptFunctionCall function(m_webInspector, "dispatch"); diff --git a/WebCore/inspector/InspectorFrontend.h b/WebCore/inspector/InspectorFrontend.h index e02b661..e32f40c 100644 --- a/WebCore/inspector/InspectorFrontend.h +++ b/WebCore/inspector/InspectorFrontend.h @@ -135,37 +135,16 @@ namespace WebCore { void updateDOMStorage(long storageId); #endif - void setDocument(const ScriptObject& root); - void setDetachedRoot(const ScriptObject& root); - void setChildNodes(long parentId, const ScriptArray& nodes); - void childNodeCountUpdated(long id, int newValue); - void childNodeInserted(long parentId, long prevId, const ScriptObject& node); - void childNodeRemoved(long parentId, long id); - void attributesUpdated(long id, const ScriptArray& attributes); - void didGetChildNodes(long callId); - void didApplyDomChange(long callId, bool success); - void didGetEventListenersForNode(long callId, long nodeId, const ScriptArray& listenersArray); - void didRemoveNode(long callId, long nodeId); - void didChangeTagName(long callId, long nodeId); - void didGetOuterHTML(long callId, const String& outerHTML); - void didSetOuterHTML(long callId, long nodeId); - void didPushNodeByPathToFrontend(long callId, long nodeId); +#if ENABLE(OFFLINE_WEB_APPLICATIONS) + void updateApplicationCacheStatus(int status); + void updateNetworkState(bool isNowOnline); + void didGetApplicationCaches(long callId, const ScriptValue& applicationCaches); +#endif - void didGetStyles(long callId, const ScriptValue& styles); - void didGetAllStyles(long callId, const ScriptArray& styles); - void didGetInlineStyle(long callId, const ScriptValue& style); - void didGetStyleSheet(long callId, const ScriptValue& styleSheet); - void didGetComputedStyle(long callId, const ScriptValue& style); - void didApplyStyleText(long callId, bool success, const ScriptValue& style, const ScriptArray& changedProperties); - void didSetStyleText(long callId, bool success); - void didSetStyleProperty(long callId, bool success); - void didToggleStyleEnabled(long callId, const ScriptValue& style); - void didSetRuleSelector(long callId, const ScriptValue& rule, bool selectorAffectsNode); - void didAddRule(long callId, const ScriptValue& rule, bool selectorAffectsNode); + void didPushNodeByPathToFrontend(long callId, long nodeId); void timelineProfilerWasStarted(); void timelineProfilerWasStopped(); - void addRecordToTimeline(const ScriptObject&); #if ENABLE(WORKERS) void didCreateWorker(const InspectorWorkerResource&); @@ -175,14 +154,13 @@ namespace WebCore { void didGetCookies(long callId, const ScriptArray& cookies, const String& cookiesString); void didDispatchOnInjectedScript(long callId, SerializedScriptValue* result, bool isException); - void addNodesToSearchResult(const ScriptArray& nodeIds); - void contextMenuItemSelected(int itemId); void contextMenuCleared(); ScriptState* scriptState() const { return m_webInspector.scriptState(); } void evaluateForTestInFrontend(long callId, const String& script); + private: void callSimpleFunction(const String& functionName); ScriptObject m_webInspector; diff --git a/WebCore/inspector/InspectorFrontend2.idl b/WebCore/inspector/InspectorFrontend2.idl new file mode 100644 index 0000000..b96d715 --- /dev/null +++ b/WebCore/inspector/InspectorFrontend2.idl @@ -0,0 +1,39 @@ +// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +module WebCore { + + interface [Conditional=INSPECTOR, JS] InspectorFrontend2 { + // TimelineAgent + void addRecordToTimeline(in Object record); + + // DOMAgent + void addNodesToSearchResult(in Array nodeIds); + void attributesUpdated(in long id, in Array attributes); + void childNodeCountUpdated(in long id, in int newValue); + void childNodeInserted(in long parentId, in long prevId, in Object node); + void childNodeRemoved(in long parentId, in long id); + void didAddRule(in long callId, in Value rule, in boolean selectorAffectsNode); + void didApplyDomChange(in long callId, in boolean success); + void didApplyStyleText(in long callId, in boolean success, in Value style, in Array changedProperties); + void didChangeTagName(in long callId, in long nodeId); + void didGetAllStyles(in long callId, in Array styles); + void didGetChildNodes(in long callId); + void didGetComputedStyle(in long callId, in Value style); + void didGetEventListenersForNode(in long callId, in long nodeId, in Array listenersArray); + void didGetInlineStyle(in long callId, in Value style); + void didGetOuterHTML(in long callId, in String outerHTML); + void didGetStyleSheet(in long callId, in Value styleSheet); + void didGetStyles(in long callId, in Value styles); + void didRemoveNode(in long callId, in long nodeId); + void didSetOuterHTML(in long callId, in long nodeId); + void didSetRuleSelector(in long callId, in Value rule, in boolean selectorAffectsNode); + void didSetStyleProperty(in long callId, in boolean success); + void didSetStyleText(in long callId, in boolean success); + void didToggleStyleEnabled(in long callId, in Value style); + void setChildNodes(in long parentId, in Array nodes); + void setDetachedRoot(in Object root); + void setDocument(in Value root); + }; +} diff --git a/WebCore/inspector/InspectorResource.cpp b/WebCore/inspector/InspectorResource.cpp index f0e391d..91a57e0 100644 --- a/WebCore/inspector/InspectorResource.cpp +++ b/WebCore/inspector/InspectorResource.cpp @@ -39,6 +39,7 @@ #include "DocumentLoader.h" #include "Frame.h" #include "InspectorFrontend.h" +#include "ResourceLoadTiming.h" #include "ResourceRequest.h" #include "ResourceResponse.h" #include "TextEncoding.h" @@ -62,6 +63,7 @@ InspectorResource::InspectorResource(unsigned long identifier, DocumentLoader* l , m_endTime(-1.0) , m_loadEventTime(-1.0) , m_domContentEventTime(-1.0) + , m_connectionID(0) , m_isMainResource(false) { } @@ -128,6 +130,16 @@ void InspectorResource::updateResponse(const ResourceResponse& response) m_responseStatusText = response.httpStatusText(); m_suggestedFilename = response.suggestedFilename(); + m_connectionID = response.connectionID(); + m_loadTiming = response.resourceLoadTiming(); + m_cached = response.wasCached(); + + if (!m_cached && m_loadTiming && m_loadTiming->requestTime) + m_responseReceivedTime = m_loadTiming->requestTime + m_loadTiming->receiveHeadersEnd / 1000.0; + else + m_responseReceivedTime = currentTime(); + + m_changes.set(TimingChange); m_changes.set(ResponseChange); m_changes.set(TypeChange); } @@ -140,7 +152,6 @@ static void populateHeadersObject(ScriptObject* object, const HTTPHeaderMap& hea } } - void InspectorResource::updateScriptObject(InspectorFrontend* frontend) { if (m_changes.hasChange(NoChange)) @@ -160,7 +171,6 @@ void InspectorResource::updateScriptObject(InspectorFrontend* frontend) jsonObject.set("requestMethod", m_requestMethod); jsonObject.set("requestFormData", m_requestFormData); jsonObject.set("didRequestChange", true); - jsonObject.set("cached", m_cached); } if (m_changes.hasChange(ResponseChange)) { @@ -172,6 +182,10 @@ void InspectorResource::updateScriptObject(InspectorFrontend* frontend) ScriptObject responseHeaders = frontend->newScriptObject(); populateHeadersObject(&responseHeaders, m_responseHeaderFields); jsonObject.set("responseHeaders", responseHeaders); + jsonObject.set("connectionID", m_connectionID); + jsonObject.set("cached", m_cached); + if (m_loadTiming && !m_cached) + jsonObject.set("timing", buildObjectForTiming(frontend, m_loadTiming.get())); jsonObject.set("didResponseChange", true); } @@ -335,12 +349,6 @@ void InspectorResource::startTiming() m_changes.set(TimingChange); } -void InspectorResource::markResponseReceivedTime() -{ - m_responseReceivedTime = currentTime(); - m_changes.set(TimingChange); -} - void InspectorResource::endTiming() { m_endTime = currentTime(); @@ -379,6 +387,19 @@ void InspectorResource::addLength(int lengthReceived) m_changes.set(TimingChange); } +ScriptObject InspectorResource::buildObjectForTiming(InspectorFrontend* frontend, ResourceLoadTiming* timing) +{ + ScriptObject jsonObject = frontend->newScriptObject(); + jsonObject.set("requestTime", timing->requestTime); + jsonObject.set("proxyDuration", timing->proxyStart == -1 ? -1 : (timing->proxyEnd - timing->proxyStart) / 1000.0); + jsonObject.set("dnsDuration", timing->dnsStart == -1 ? -1 : (timing->dnsEnd - timing->dnsStart) / 1000.0); + jsonObject.set("connectDuration", timing->connectStart == -1 ? -1 : (timing->connectEnd - timing->connectStart) / 1000.0); + jsonObject.set("sendDuration", (timing->sendEnd - timing->sendStart) / 1000.0); + jsonObject.set("waitDuration", (timing->receiveHeadersEnd - timing->sendEnd) / 1000.0); + jsonObject.set("sslDuration", (timing->sslEnd - timing->sslStart) / 1000.0); + return jsonObject; +} + } // namespace WebCore #endif // ENABLE(INSPECTOR) diff --git a/WebCore/inspector/InspectorResource.h b/WebCore/inspector/InspectorResource.h index 9b91889..ed9ec37 100644 --- a/WebCore/inspector/InspectorResource.h +++ b/WebCore/inspector/InspectorResource.h @@ -49,9 +49,9 @@ namespace WebCore { class DocumentLoader; class InspectorFrontend; class Frame; - class ResourceResponse; - + class ResourceLoadTiming; class ResourceRequest; + class ResourceResponse; class InspectorResource : public RefCounted<InspectorResource> { public: @@ -102,7 +102,6 @@ namespace WebCore { String requestFormData() const { return m_requestFormData; } void startTiming(); - void markResponseReceivedTime(); void markLoadEventTime(); void markDOMContentEventTime(); void endTiming(); @@ -152,6 +151,8 @@ namespace WebCore { Type cachedResourceType() const; CachedResource* cachedResource() const; + ScriptObject buildObjectForTiming(InspectorFrontend*, ResourceLoadTiming*); + unsigned long m_identifier; RefPtr<DocumentLoader> m_loader; RefPtr<Frame> m_frame; @@ -172,6 +173,8 @@ namespace WebCore { double m_endTime; double m_loadEventTime; double m_domContentEventTime; + unsigned m_connectionID; + RefPtr<ResourceLoadTiming> m_loadTiming; ScriptString m_overrideContent; Type m_overrideContentType; Changes m_changes; diff --git a/WebCore/inspector/InspectorTimelineAgent.cpp b/WebCore/inspector/InspectorTimelineAgent.cpp index ab53319..31513d1 100644 --- a/WebCore/inspector/InspectorTimelineAgent.cpp +++ b/WebCore/inspector/InspectorTimelineAgent.cpp @@ -34,8 +34,8 @@ #if ENABLE(INSPECTOR) #include "Event.h" -#include "InspectorFrontend.h" #include "IntRect.h" +#include "RemoteInspectorFrontend2.h" #include "ResourceRequest.h" #include "ResourceResponse.h" #include "TimelineRecordFactory.h" @@ -46,7 +46,7 @@ namespace WebCore { int InspectorTimelineAgent::s_instanceCount = 0; -InspectorTimelineAgent::InspectorTimelineAgent(InspectorFrontend* frontend) +InspectorTimelineAgent::InspectorTimelineAgent(InspectorFrontend2* frontend) : m_frontend(frontend) { ++s_instanceCount; @@ -62,10 +62,10 @@ void InspectorTimelineAgent::pushGCEventRecords() GCEvents events = m_gcEvents; m_gcEvents.clear(); for (GCEvents::iterator i = events.begin(); i != events.end(); ++i) { - ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, i->startTime); - record.set("data", TimelineRecordFactory::createGCEventData(m_frontend, i->collectedBytes)); - record.set("endTime", i->endTime); - addRecordToTimeline(record, GCEventTimelineRecordType); + RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(i->startTime); + record->set("data", TimelineRecordFactory::createGCEventData(i->collectedBytes)); + record->setNumber("endTime", i->endTime); + addRecordToTimeline(record.release(), GCEventTimelineRecordType); } } @@ -83,7 +83,7 @@ InspectorTimelineAgent::~InspectorTimelineAgent() void InspectorTimelineAgent::willCallFunction(const String& scriptName, int scriptLine) { - pushCurrentRecord(TimelineRecordFactory::createFunctionCallData(m_frontend, scriptName, scriptLine), FunctionCallTimelineRecordType); + pushCurrentRecord(TimelineRecordFactory::createFunctionCallData(scriptName, scriptLine), FunctionCallTimelineRecordType); } void InspectorTimelineAgent::didCallFunction() @@ -93,7 +93,7 @@ void InspectorTimelineAgent::didCallFunction() void InspectorTimelineAgent::willDispatchEvent(const Event& event) { - pushCurrentRecord(TimelineRecordFactory::createEventDispatchData(m_frontend, event), + pushCurrentRecord(TimelineRecordFactory::createEventDispatchData(event), EventDispatchTimelineRecordType); } @@ -104,7 +104,7 @@ void InspectorTimelineAgent::didDispatchEvent() void InspectorTimelineAgent::willLayout() { - pushCurrentRecord(m_frontend->newScriptObject(), LayoutTimelineRecordType); + pushCurrentRecord(InspectorObject::create(), LayoutTimelineRecordType); } void InspectorTimelineAgent::didLayout() @@ -114,7 +114,7 @@ void InspectorTimelineAgent::didLayout() void InspectorTimelineAgent::willRecalculateStyle() { - pushCurrentRecord(m_frontend->newScriptObject(), RecalculateStylesTimelineRecordType); + pushCurrentRecord(InspectorObject::create(), RecalculateStylesTimelineRecordType); } void InspectorTimelineAgent::didRecalculateStyle() @@ -124,7 +124,7 @@ void InspectorTimelineAgent::didRecalculateStyle() void InspectorTimelineAgent::willPaint(const IntRect& rect) { - pushCurrentRecord(TimelineRecordFactory::createPaintData(m_frontend, rect), PaintTimelineRecordType); + pushCurrentRecord(TimelineRecordFactory::createPaintData(rect), PaintTimelineRecordType); } void InspectorTimelineAgent::didPaint() @@ -134,14 +134,14 @@ void InspectorTimelineAgent::didPaint() void InspectorTimelineAgent::willWriteHTML(unsigned int length, unsigned int startLine) { - pushCurrentRecord(TimelineRecordFactory::createParseHTMLData(m_frontend, length, startLine), ParseHTMLTimelineRecordType); + pushCurrentRecord(TimelineRecordFactory::createParseHTMLData(length, startLine), ParseHTMLTimelineRecordType); } void InspectorTimelineAgent::didWriteHTML(unsigned int endLine) { if (!m_recordStack.isEmpty()) { TimelineRecordEntry entry = m_recordStack.last(); - entry.data.set("endLine", endLine); + entry.data->setNumber("endLine", endLine); didCompleteCurrentRecord(ParseHTMLTimelineRecordType); } } @@ -149,22 +149,22 @@ void InspectorTimelineAgent::didWriteHTML(unsigned int endLine) void InspectorTimelineAgent::didInstallTimer(int timerId, int timeout, bool singleShot) { pushGCEventRecords(); - ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, WTF::currentTimeMS()); - record.set("data", TimelineRecordFactory::createTimerInstallData(m_frontend, timerId, timeout, singleShot)); - addRecordToTimeline(record, TimerInstallTimelineRecordType); + RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS()); + record->set("data", TimelineRecordFactory::createTimerInstallData(timerId, timeout, singleShot)); + addRecordToTimeline(record.release(), TimerInstallTimelineRecordType); } void InspectorTimelineAgent::didRemoveTimer(int timerId) { pushGCEventRecords(); - ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, WTF::currentTimeMS()); - record.set("data", TimelineRecordFactory::createGenericTimerData(m_frontend, timerId)); - addRecordToTimeline(record, TimerRemoveTimelineRecordType); + RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS()); + record->set("data", TimelineRecordFactory::createGenericTimerData(timerId)); + addRecordToTimeline(record.release(), TimerRemoveTimelineRecordType); } void InspectorTimelineAgent::willFireTimer(int timerId) { - pushCurrentRecord(TimelineRecordFactory::createGenericTimerData(m_frontend, timerId), TimerFireTimelineRecordType); + pushCurrentRecord(TimelineRecordFactory::createGenericTimerData(timerId), TimerFireTimelineRecordType); } void InspectorTimelineAgent::didFireTimer() @@ -174,7 +174,7 @@ void InspectorTimelineAgent::didFireTimer() void InspectorTimelineAgent::willChangeXHRReadyState(const String& url, int readyState) { - pushCurrentRecord(TimelineRecordFactory::createXHRReadyStateChangeData(m_frontend, url, readyState), XHRReadyStateChangeRecordType); + pushCurrentRecord(TimelineRecordFactory::createXHRReadyStateChangeData(url, readyState), XHRReadyStateChangeRecordType); } void InspectorTimelineAgent::didChangeXHRReadyState() @@ -184,7 +184,7 @@ void InspectorTimelineAgent::didChangeXHRReadyState() void InspectorTimelineAgent::willLoadXHR(const String& url) { - pushCurrentRecord(TimelineRecordFactory::createXHRLoadData(m_frontend, url), XHRLoadRecordType); + pushCurrentRecord(TimelineRecordFactory::createXHRLoadData(url), XHRLoadRecordType); } void InspectorTimelineAgent::didLoadXHR() @@ -194,7 +194,7 @@ void InspectorTimelineAgent::didLoadXHR() void InspectorTimelineAgent::willEvaluateScript(const String& url, int lineNumber) { - pushCurrentRecord(TimelineRecordFactory::createEvaluateScriptData(m_frontend, url, lineNumber), EvaluateScriptTimelineRecordType); + pushCurrentRecord(TimelineRecordFactory::createEvaluateScriptData(url, lineNumber), EvaluateScriptTimelineRecordType); } void InspectorTimelineAgent::didEvaluateScript() @@ -205,26 +205,26 @@ void InspectorTimelineAgent::didEvaluateScript() void InspectorTimelineAgent::didScheduleResourceRequest(const String& url) { pushGCEventRecords(); - ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, WTF::currentTimeMS()); - record.set("data", TimelineRecordFactory::createScheduleResourceRequestData(m_frontend, url)); - record.set("type", ScheduleResourceRequestTimelineRecordType); - addRecordToTimeline(record, ScheduleResourceRequestTimelineRecordType); + RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS()); + record->set("data", TimelineRecordFactory::createScheduleResourceRequestData(url)); + record->setNumber("type", ScheduleResourceRequestTimelineRecordType); + addRecordToTimeline(record.release(), ScheduleResourceRequestTimelineRecordType); } void InspectorTimelineAgent::willSendResourceRequest(unsigned long identifier, bool isMainResource, const ResourceRequest& request) { pushGCEventRecords(); - ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, WTF::currentTimeMS()); - record.set("data", TimelineRecordFactory::createResourceSendRequestData(m_frontend, identifier, isMainResource, request)); - record.set("type", ResourceSendRequestTimelineRecordType); - setHeapSizeStatistic(record); - m_frontend->addRecordToTimeline(record); + RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS()); + record->set("data", TimelineRecordFactory::createResourceSendRequestData(identifier, isMainResource, request)); + record->setNumber("type", ResourceSendRequestTimelineRecordType); + setHeapSizeStatistic(record.get()); + m_frontend->addRecordToTimeline(record.release()); } void InspectorTimelineAgent::willReceiveResourceData(unsigned long identifier) { - pushCurrentRecord(TimelineRecordFactory::createReceiveResourceData(m_frontend, identifier), ReceiveResourceDataTimelineRecordType); + pushCurrentRecord(TimelineRecordFactory::createReceiveResourceData(identifier), ReceiveResourceDataTimelineRecordType); } void InspectorTimelineAgent::didReceiveResourceData() @@ -234,7 +234,7 @@ void InspectorTimelineAgent::didReceiveResourceData() void InspectorTimelineAgent::willReceiveResourceResponse(unsigned long identifier, const ResourceResponse& response) { - pushCurrentRecord(TimelineRecordFactory::createResourceReceiveResponseData(m_frontend, identifier, response), ResourceReceiveResponseTimelineRecordType); + pushCurrentRecord(TimelineRecordFactory::createResourceReceiveResponseData(identifier, response), ResourceReceiveResponseTimelineRecordType); } void InspectorTimelineAgent::didReceiveResourceResponse() @@ -245,33 +245,33 @@ void InspectorTimelineAgent::didReceiveResourceResponse() void InspectorTimelineAgent::didFinishLoadingResource(unsigned long identifier, bool didFail) { pushGCEventRecords(); - ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, WTF::currentTimeMS()); - record.set("data", TimelineRecordFactory::createResourceFinishData(m_frontend, identifier, didFail)); - record.set("type", ResourceFinishTimelineRecordType); - setHeapSizeStatistic(record); - m_frontend->addRecordToTimeline(record); + RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS()); + record->set("data", TimelineRecordFactory::createResourceFinishData(identifier, didFail)); + record->setNumber("type", ResourceFinishTimelineRecordType); + setHeapSizeStatistic(record.get()); + m_frontend->addRecordToTimeline(record.release()); } void InspectorTimelineAgent::didMarkTimeline(const String& message) { pushGCEventRecords(); - ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, WTF::currentTimeMS()); - record.set("data", TimelineRecordFactory::createMarkTimelineData(m_frontend, message)); - addRecordToTimeline(record, MarkTimelineRecordType); + RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS()); + record->set("data", TimelineRecordFactory::createMarkTimelineData(message)); + addRecordToTimeline(record.release(), MarkTimelineRecordType); } void InspectorTimelineAgent::didMarkDOMContentEvent() { pushGCEventRecords(); - ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, WTF::currentTimeMS()); - addRecordToTimeline(record, MarkDOMContentEventType); + RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS()); + addRecordToTimeline(record.release(), MarkDOMContentEventType); } void InspectorTimelineAgent::didMarkLoadEvent() { pushGCEventRecords(); - ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, WTF::currentTimeMS()); - addRecordToTimeline(record, MarkLoadEventType); + RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS()); + addRecordToTimeline(record.release(), MarkLoadEventType); } void InspectorTimelineAgent::reset() @@ -279,32 +279,33 @@ void InspectorTimelineAgent::reset() m_recordStack.clear(); } -void InspectorTimelineAgent::resetFrontendProxyObject(InspectorFrontend* frontend) +void InspectorTimelineAgent::resetFrontendProxyObject(InspectorFrontend2* frontend) { ASSERT(frontend); reset(); m_frontend = frontend; } -void InspectorTimelineAgent::addRecordToTimeline(ScriptObject record, TimelineRecordType type) +void InspectorTimelineAgent::addRecordToTimeline(PassRefPtr<InspectorObject> prpRecord, TimelineRecordType type) { - record.set("type", type); - setHeapSizeStatistic(record); + RefPtr<InspectorObject> record(prpRecord); + record->setNumber("type", type); + setHeapSizeStatistic(record.get()); if (m_recordStack.isEmpty()) - m_frontend->addRecordToTimeline(record); + m_frontend->addRecordToTimeline(record.release()); else { TimelineRecordEntry parent = m_recordStack.last(); - parent.children.set(parent.children.length(), record); + parent.children->push(record.release()); } } -void InspectorTimelineAgent::setHeapSizeStatistic(ScriptObject record) +void InspectorTimelineAgent::setHeapSizeStatistic(InspectorObject* record) { size_t usedHeapSize = 0; size_t totalHeapSize = 0; ScriptGCEvent::getHeapSize(usedHeapSize, totalHeapSize); - record.set("usedHeapSize", usedHeapSize); - record.set("totalHeapSize", totalHeapSize); + record->setNumber("usedHeapSize", usedHeapSize); + record->setNumber("totalHeapSize", totalHeapSize); } void InspectorTimelineAgent::didCompleteCurrentRecord(TimelineRecordType type) @@ -316,18 +317,18 @@ void InspectorTimelineAgent::didCompleteCurrentRecord(TimelineRecordType type) TimelineRecordEntry entry = m_recordStack.last(); m_recordStack.removeLast(); ASSERT(entry.type == type); - entry.record.set("data", entry.data); - entry.record.set("children", entry.children); - entry.record.set("endTime", WTF::currentTimeMS()); + entry.record->set("data", entry.data); + entry.record->set("children", entry.children); + entry.record->setNumber("endTime", WTF::currentTimeMS()); addRecordToTimeline(entry.record, type); } } -void InspectorTimelineAgent::pushCurrentRecord(ScriptObject data, TimelineRecordType type) +void InspectorTimelineAgent::pushCurrentRecord(PassRefPtr<InspectorObject> data, TimelineRecordType type) { pushGCEventRecords(); - ScriptObject record = TimelineRecordFactory::createGenericRecord(m_frontend, WTF::currentTimeMS()); - m_recordStack.append(TimelineRecordEntry(record, data, m_frontend->newScriptArray(), type)); + RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS()); + m_recordStack.append(TimelineRecordEntry(record.release(), data, InspectorArray::create(), type)); } } // namespace WebCore diff --git a/WebCore/inspector/InspectorTimelineAgent.h b/WebCore/inspector/InspectorTimelineAgent.h index fe334be..9a5cb98 100644 --- a/WebCore/inspector/InspectorTimelineAgent.h +++ b/WebCore/inspector/InspectorTimelineAgent.h @@ -34,16 +34,15 @@ #if ENABLE(INSPECTOR) #include "Document.h" +#include "InspectorValues.h" #include "ScriptExecutionContext.h" #include "ScriptGCEvent.h" #include "ScriptGCEventListener.h" -#include "ScriptObject.h" -#include "ScriptArray.h" #include <wtf/Vector.h> namespace WebCore { class Event; -class InspectorFrontend; +class InspectorFrontend2; class IntRect; class ResourceRequest; class ResourceResponse; @@ -75,11 +74,11 @@ enum TimelineRecordType { class InspectorTimelineAgent : ScriptGCEventListener, public Noncopyable { public: - InspectorTimelineAgent(InspectorFrontend* frontend); + InspectorTimelineAgent(InspectorFrontend2* frontend); ~InspectorTimelineAgent(); void reset(); - void resetFrontendProxyObject(InspectorFrontend*); + void resetFrontendProxyObject(InspectorFrontend2*); // Methods called from WebCore. void willCallFunction(const String& scriptName, int scriptLine); @@ -134,26 +133,26 @@ public: private: struct TimelineRecordEntry { - TimelineRecordEntry(ScriptObject record, ScriptObject data, ScriptArray children, TimelineRecordType type) + TimelineRecordEntry(PassRefPtr<InspectorObject> record, PassRefPtr<InspectorObject> data, PassRefPtr<InspectorArray> children, TimelineRecordType type) : record(record), data(data), children(children), type(type) { } - ScriptObject record; - ScriptObject data; - ScriptArray children; + RefPtr<InspectorObject> record; + RefPtr<InspectorObject> data; + RefPtr<InspectorArray> children; TimelineRecordType type; }; - void pushCurrentRecord(ScriptObject, TimelineRecordType); - void setHeapSizeStatistic(ScriptObject record); + void pushCurrentRecord(PassRefPtr<InspectorObject>, TimelineRecordType); + void setHeapSizeStatistic(InspectorObject* record); void didCompleteCurrentRecord(TimelineRecordType); - void addRecordToTimeline(ScriptObject, TimelineRecordType); + void addRecordToTimeline(PassRefPtr<InspectorObject>, TimelineRecordType); void pushGCEventRecords(); - InspectorFrontend* m_frontend; + InspectorFrontend2* m_frontend; Vector<TimelineRecordEntry> m_recordStack; static int s_instanceCount; diff --git a/WebCore/inspector/TimelineRecordFactory.cpp b/WebCore/inspector/TimelineRecordFactory.cpp index bdb5f3d..8b4a97f 100644 --- a/WebCore/inspector/TimelineRecordFactory.cpp +++ b/WebCore/inspector/TimelineRecordFactory.cpp @@ -35,152 +35,152 @@ #include "Event.h" #include "InspectorFrontend.h" +#include "InspectorValues.h" #include "IntRect.h" #include "ResourceRequest.h" #include "ResourceResponse.h" #include "ScriptArray.h" #include "ScriptCallStack.h" -#include "ScriptObject.h" namespace WebCore { -ScriptObject TimelineRecordFactory::createGenericRecord(InspectorFrontend* frontend, double startTime) +PassRefPtr<InspectorObject> TimelineRecordFactory::createGenericRecord(double startTime) { - ScriptObject record = frontend->newScriptObject(); - record.set("startTime", startTime); + RefPtr<InspectorObject> record = InspectorObject::create(); + record->setNumber("startTime", startTime); - ScriptArray stackTrace; - if (ScriptCallStack::stackTrace(5, frontend->scriptState(), stackTrace)) - record.set("stackTrace", stackTrace); - return record; + RefPtr<InspectorArray> stackTrace = InspectorArray::create(); + if (ScriptCallStack::stackTrace(5, stackTrace)) + record->set("stackTrace", stackTrace); + return record.release(); } -ScriptObject TimelineRecordFactory::createGCEventData(InspectorFrontend* frontend, const size_t usedHeapSizeDelta) +PassRefPtr<InspectorObject> TimelineRecordFactory::createGCEventData(const size_t usedHeapSizeDelta) { - ScriptObject data = frontend->newScriptObject(); - data.set("usedHeapSizeDelta", usedHeapSizeDelta); - return data; + RefPtr<InspectorObject> data = InspectorObject::create(); + data->setNumber("usedHeapSizeDelta", usedHeapSizeDelta); + return data.release(); } -ScriptObject TimelineRecordFactory::createFunctionCallData(InspectorFrontend* frontend, const String& scriptName, int scriptLine) +PassRefPtr<InspectorObject> TimelineRecordFactory::createFunctionCallData(const String& scriptName, int scriptLine) { - ScriptObject data = frontend->newScriptObject(); - data.set("scriptName", scriptName); - data.set("scriptLine", scriptLine); - return data; + RefPtr<InspectorObject> data = InspectorObject::create(); + data->setString("scriptName", scriptName); + data->setNumber("scriptLine", scriptLine); + return data.release(); } -ScriptObject TimelineRecordFactory::createEventDispatchData(InspectorFrontend* frontend, const Event& event) +PassRefPtr<InspectorObject> TimelineRecordFactory::createEventDispatchData(const Event& event) { - ScriptObject data = frontend->newScriptObject(); - data.set("type", event.type().string()); - return data; + RefPtr<InspectorObject> data = InspectorObject::create(); + data->setString("type", event.type().string()); + return data.release(); } -ScriptObject TimelineRecordFactory::createGenericTimerData(InspectorFrontend* frontend, int timerId) +PassRefPtr<InspectorObject> TimelineRecordFactory::createGenericTimerData(int timerId) { - ScriptObject data = frontend->newScriptObject(); - data.set("timerId", timerId); - return data; + RefPtr<InspectorObject> data = InspectorObject::create(); + data->setNumber("timerId", timerId); + return data.release(); } -ScriptObject TimelineRecordFactory::createTimerInstallData(InspectorFrontend* frontend, int timerId, int timeout, bool singleShot) +PassRefPtr<InspectorObject> TimelineRecordFactory::createTimerInstallData(int timerId, int timeout, bool singleShot) { - ScriptObject data = frontend->newScriptObject(); - data.set("timerId", timerId); - data.set("timeout", timeout); - data.set("singleShot", singleShot); - return data; + RefPtr<InspectorObject> data = InspectorObject::create(); + data->setNumber("timerId", timerId); + data->setNumber("timeout", timeout); + data->setBool("singleShot", singleShot); + return data.release(); } -ScriptObject TimelineRecordFactory::createXHRReadyStateChangeData(InspectorFrontend* frontend, const String& url, int readyState) +PassRefPtr<InspectorObject> TimelineRecordFactory::createXHRReadyStateChangeData(const String& url, int readyState) { - ScriptObject data = frontend->newScriptObject(); - data.set("url", url); - data.set("readyState", readyState); - return data; + RefPtr<InspectorObject> data = InspectorObject::create(); + data->setString("url", url); + data->setNumber("readyState", readyState); + return data.release(); } -ScriptObject TimelineRecordFactory::createXHRLoadData(InspectorFrontend* frontend, const String& url) +PassRefPtr<InspectorObject> TimelineRecordFactory::createXHRLoadData(const String& url) { - ScriptObject data = frontend->newScriptObject(); - data.set("url", url); - return data; + RefPtr<InspectorObject> data = InspectorObject::create(); + data->setString("url", url); + return data.release(); } -ScriptObject TimelineRecordFactory::createEvaluateScriptData(InspectorFrontend* frontend, const String& url, double lineNumber) +PassRefPtr<InspectorObject> TimelineRecordFactory::createEvaluateScriptData(const String& url, double lineNumber) { - ScriptObject data = frontend->newScriptObject(); - data.set("url", url); - data.set("lineNumber", lineNumber); - return data; + RefPtr<InspectorObject> data = InspectorObject::create(); + data->setString("url", url); + data->setNumber("lineNumber", lineNumber); + return data.release(); } -ScriptObject TimelineRecordFactory::createMarkTimelineData(InspectorFrontend* frontend, const String& message) +PassRefPtr<InspectorObject> TimelineRecordFactory::createMarkTimelineData(const String& message) { - ScriptObject data = frontend->newScriptObject(); - data.set("message", message); - return data; + RefPtr<InspectorObject> data = InspectorObject::create(); + data->setString("message", message); + return data.release(); } -ScriptObject TimelineRecordFactory::createScheduleResourceRequestData(InspectorFrontend* frontend, const String& url) +PassRefPtr<InspectorObject> TimelineRecordFactory::createScheduleResourceRequestData(const String& url) { - ScriptObject data = frontend->newScriptObject(); - data.set("url", url); - return data; + RefPtr<InspectorObject> data = InspectorObject::create(); + data->setString("url", url); + return data.release(); } -ScriptObject TimelineRecordFactory::createResourceSendRequestData(InspectorFrontend* frontend, unsigned long identifier, bool isMainResource, const ResourceRequest& request) +PassRefPtr<InspectorObject> TimelineRecordFactory::createResourceSendRequestData(unsigned long identifier, bool isMainResource, const ResourceRequest& request) { - ScriptObject data = frontend->newScriptObject(); - data.set("identifier", identifier); - data.set("url", request.url().string()); - data.set("requestMethod", request.httpMethod()); - data.set("isMainResource", isMainResource); - return data; + RefPtr<InspectorObject> data = InspectorObject::create(); + data->setNumber("identifier", identifier); + data->setString("url", request.url().string()); + data->setString("requestMethod", request.httpMethod()); + data->setBool("isMainResource", isMainResource); + return data.release(); } -ScriptObject TimelineRecordFactory::createResourceReceiveResponseData(InspectorFrontend* frontend, unsigned long identifier, const ResourceResponse& response) +PassRefPtr<InspectorObject> TimelineRecordFactory::createResourceReceiveResponseData(unsigned long identifier, const ResourceResponse& response) { - ScriptObject data = frontend->newScriptObject(); - data.set("identifier", identifier); - data.set("statusCode", response.httpStatusCode()); - data.set("mimeType", response.mimeType()); - data.set("expectedContentLength", response.expectedContentLength()); - return data; + RefPtr<InspectorObject> data = InspectorObject::create(); + data->setNumber("identifier", identifier); + data->setNumber("statusCode", response.httpStatusCode()); + data->setString("mimeType", response.mimeType()); + data->setNumber("expectedContentLength", response.expectedContentLength()); + return data.release(); } -ScriptObject TimelineRecordFactory::createResourceFinishData(InspectorFrontend* frontend, unsigned long identifier, bool didFail) +PassRefPtr<InspectorObject> TimelineRecordFactory::createResourceFinishData(unsigned long identifier, bool didFail) { - ScriptObject data = frontend->newScriptObject(); - data.set("identifier", identifier); - data.set("didFail", didFail); - return data; + RefPtr<InspectorObject> data = InspectorObject::create(); + data->setNumber("identifier", identifier); + data->setBool("didFail", didFail); + return data.release(); } -ScriptObject TimelineRecordFactory::createReceiveResourceData(InspectorFrontend* frontend, unsigned long identifier) +PassRefPtr<InspectorObject> TimelineRecordFactory::createReceiveResourceData(unsigned long identifier) { - ScriptObject data = frontend->newScriptObject(); - data.set("identifier", identifier); - return data; + RefPtr<InspectorObject> data = InspectorObject::create(); + data->setNumber("identifier", identifier); + return data.release(); } -ScriptObject TimelineRecordFactory::createPaintData(InspectorFrontend* frontend, const IntRect& rect) +PassRefPtr<InspectorObject> TimelineRecordFactory::createPaintData(const IntRect& rect) { - ScriptObject data = frontend->newScriptObject(); - data.set("x", rect.x()); - data.set("y", rect.y()); - data.set("width", rect.width()); - data.set("height", rect.height()); - return data; + RefPtr<InspectorObject> data = InspectorObject::create(); + data->setNumber("x", rect.x()); + data->setNumber("y", rect.y()); + data->setNumber("width", rect.width()); + data->setNumber("height", rect.height()); + return data.release(); } -ScriptObject TimelineRecordFactory::createParseHTMLData(InspectorFrontend* frontend, unsigned int length, unsigned int startLine) +PassRefPtr<InspectorObject> TimelineRecordFactory::createParseHTMLData(unsigned int length, unsigned int startLine) { - ScriptObject data = frontend->newScriptObject(); - data.set("length", length); - data.set("startLine", startLine); - return data; + RefPtr<InspectorObject> data = InspectorObject::create(); + data->setNumber("length", length); + data->setNumber("startLine", startLine); + return data.release(); } } // namespace WebCore diff --git a/WebCore/inspector/TimelineRecordFactory.h b/WebCore/inspector/TimelineRecordFactory.h index f905ecc..52dda25 100644 --- a/WebCore/inspector/TimelineRecordFactory.h +++ b/WebCore/inspector/TimelineRecordFactory.h @@ -37,47 +37,47 @@ namespace WebCore { class Event; class InspectorFrontend; + class InspectorObject; class IntRect; class ResourceRequest; class ResourceResponse; - class ScriptObject; class TimelineRecordFactory { public: - static ScriptObject createGenericRecord(InspectorFrontend*, double startTime); + static PassRefPtr<InspectorObject> createGenericRecord(double startTime); - static ScriptObject createGCEventData(InspectorFrontend* frontend, const size_t usedHeapSizeDelta); + static PassRefPtr<InspectorObject> createGCEventData(const size_t usedHeapSizeDelta); - static ScriptObject createFunctionCallData(InspectorFrontend*, const String& scriptName, int scriptLine); + static PassRefPtr<InspectorObject> createFunctionCallData(const String& scriptName, int scriptLine); - static ScriptObject createEventDispatchData(InspectorFrontend*, const Event&); + static PassRefPtr<InspectorObject> createEventDispatchData(const Event&); - static ScriptObject createGenericTimerData(InspectorFrontend*, int timerId); + static PassRefPtr<InspectorObject> createGenericTimerData(int timerId); - static ScriptObject createTimerInstallData(InspectorFrontend*, int timerId, int timeout, bool singleShot); + static PassRefPtr<InspectorObject> createTimerInstallData(int timerId, int timeout, bool singleShot); - static ScriptObject createXHRReadyStateChangeData(InspectorFrontend*, const String& url, int readyState); + static PassRefPtr<InspectorObject> createXHRReadyStateChangeData(const String& url, int readyState); - static ScriptObject createXHRLoadData(InspectorFrontend*, const String& url); + static PassRefPtr<InspectorObject> createXHRLoadData(const String& url); - static ScriptObject createEvaluateScriptData(InspectorFrontend*, const String&, double lineNumber); + static PassRefPtr<InspectorObject> createEvaluateScriptData(const String&, double lineNumber); - static ScriptObject createMarkTimelineData(InspectorFrontend*, const String&); + static PassRefPtr<InspectorObject> createMarkTimelineData(const String&); - static ScriptObject createResourceSendRequestData(InspectorFrontend*, unsigned long identifier, + static PassRefPtr<InspectorObject> createResourceSendRequestData(unsigned long identifier, bool isMainResource, const ResourceRequest&); - static ScriptObject createScheduleResourceRequestData(InspectorFrontend*, const String&); + static PassRefPtr<InspectorObject> createScheduleResourceRequestData(const String&); - static ScriptObject createResourceReceiveResponseData(InspectorFrontend*, unsigned long identifier, const ResourceResponse&); + static PassRefPtr<InspectorObject> createResourceReceiveResponseData(unsigned long identifier, const ResourceResponse&); - static ScriptObject createReceiveResourceData(InspectorFrontend*, unsigned long identifier); + static PassRefPtr<InspectorObject> createReceiveResourceData(unsigned long identifier); - static ScriptObject createResourceFinishData(InspectorFrontend*, unsigned long identifier, bool didFail); + static PassRefPtr<InspectorObject> createResourceFinishData(unsigned long identifier, bool didFail); - static ScriptObject createPaintData(InspectorFrontend*, const IntRect&); + static PassRefPtr<InspectorObject> createPaintData(const IntRect&); - static ScriptObject createParseHTMLData(InspectorFrontend*, unsigned int length, unsigned int startLine); + static PassRefPtr<InspectorObject> createParseHTMLData(unsigned int length, unsigned int startLine); private: TimelineRecordFactory() { } diff --git a/WebCore/inspector/front-end/AbstractTimelinePanel.js b/WebCore/inspector/front-end/AbstractTimelinePanel.js index eb9ea88..1b5f6ce 100644 --- a/WebCore/inspector/front-end/AbstractTimelinePanel.js +++ b/WebCore/inspector/front-end/AbstractTimelinePanel.js @@ -28,9 +28,9 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -WebInspector.AbstractTimelinePanel = function() +WebInspector.AbstractTimelinePanel = function(name) { - WebInspector.Panel.call(this); + WebInspector.Panel.call(this, name); this._items = []; this._staleItems = []; } diff --git a/WebCore/inspector/front-end/ApplicationCacheItemsView.js b/WebCore/inspector/front-end/ApplicationCacheItemsView.js new file mode 100644 index 0000000..029f83b --- /dev/null +++ b/WebCore/inspector/front-end/ApplicationCacheItemsView.js @@ -0,0 +1,259 @@ +/* + * Copyright (C) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +WebInspector.ApplicationCacheItemsView = function(treeElement, appcacheDomain) +{ + WebInspector.View.call(this); + + this.element.addStyleClass("storage-view"); + this.element.addStyleClass("table"); + + // FIXME: Delete Button semantics are not yet defined. + // FIXME: Needs better tooltip. (Localized) + this.deleteButton = new WebInspector.StatusBarButton(WebInspector.UIString("Delete"), "delete-storage-status-bar-item"); + this.deleteButton.visible = false; + this.deleteButton.addEventListener("click", this._deleteButtonClicked.bind(this), false); + + // FIXME: Refresh Button semantics are not yet defined. + // FIXME: Needs better tooltip. (Localized) + this.refreshButton = new WebInspector.StatusBarButton(WebInspector.UIString("Refresh"), "refresh-storage-status-bar-item"); + this.refreshButton.addEventListener("click", this._refreshButtonClicked.bind(this), false); + + this.connectivityIcon = document.createElement("img"); + this.connectivityIcon.className = "storage-application-cache-connectivity-icon"; + this.connectivityIcon.src = ""; + this.connectivityMessage = document.createElement("span"); + this.connectivityMessage.className = "storage-application-cache-connectivity"; + this.connectivityMessage.textContent = ""; + + this.divider = document.createElement("span"); + this.divider.className = "status-bar-item status-bar-divider"; + + this.statusIcon = document.createElement("img"); + this.statusIcon.className = "storage-application-cache-status-icon"; + this.statusIcon.src = ""; + this.statusMessage = document.createElement("span"); + this.statusMessage.className = "storage-application-cache-status"; + this.statusMessage.textContent = ""; + + this._treeElement = treeElement; + this._appcacheDomain = appcacheDomain; + + this._emptyMsgElement = document.createElement("div"); + this._emptyMsgElement.className = "storage-table-empty"; + this._emptyMsgElement.textContent = WebInspector.UIString("No Application Cache information available."); + this.element.appendChild(this._emptyMsgElement); + + this.updateStatus(applicationCache.UNCACHED); +} + +WebInspector.ApplicationCacheItemsView.prototype = { + get statusBarItems() + { + return [ + this.refreshButton.element, this.deleteButton.element, + this.connectivityIcon, this.connectivityMessage, this.divider, + this.statusIcon, this.statusMessage + ]; + }, + + show: function(parentElement) + { + WebInspector.View.prototype.show.call(this, parentElement); + this.updateNetworkState(navigator.onLine); + this._update(); + }, + + hide: function() + { + WebInspector.View.prototype.hide.call(this); + this.deleteButton.visible = false; + }, + + updateStatus: function(status) + { + var statusInformation = {}; + statusInformation[applicationCache.UNCACHED] = { src: "Images/warningOrangeDot.png", text: "UNCACHED" }; + statusInformation[applicationCache.IDLE] = { src: "Images/warningOrangeDot.png", text: "IDLE" }; + statusInformation[applicationCache.CHECKING] = { src: "Images/successGreenDot.png", text: "CHECKING" }; + statusInformation[applicationCache.DOWNLOADING] = { src: "Images/successGreenDot.png", text: "DOWNLOADING" }; + statusInformation[applicationCache.UPDATEREADY] = { src: "Images/successGreenDot.png", text: "UPDATEREADY" }; + statusInformation[applicationCache.OBSOLETE] = { src: "Images/errorRedDot.png", text: "OBSOLETE" }; + + var info = statusInformation[status]; + if (!info) { + console.error("Unknown Application Cache Status was Not Handled: %d", status); + return; + } + + this.statusIcon.src = info.src; + this.statusMessage.textContent = info.text; + }, + + updateNetworkState: function(isNowOnline) + { + if (isNowOnline) { + this.connectivityIcon.src = "Images/successGreenDot.png"; + this.connectivityMessage.textContent = WebInspector.UIString("Online"); + } else { + this.connectivityIcon.src = "Images/errorRedDot.png"; + this.connectivityMessage.textContent = WebInspector.UIString("Offline"); + } + }, + + _update: function() + { + WebInspector.ApplicationCache.getApplicationCachesAsync(this._updateCallback.bind(this)); + }, + + _updateCallback: function(applicationCaches) + { + // FIXME: applicationCaches is just one cache. + // FIXME: are these variables needed anywhere else? + this._manifest = applicationCaches.manifest; + this._creationTime = applicationCaches.creationTime; + this._updateTime = applicationCaches.updateTime; + this._size = applicationCaches.size; + this._resources = applicationCaches.resources; + var lastPathComponent = applicationCaches.lastPathComponent; + + if (!this._manifest) { + this._emptyMsgElement.removeStyleClass("hidden"); + this.deleteButton.visible = false; + if (this._dataGrid) + this._dataGrid.element.addStyleClass("hidden"); + return; + } + + if (!this._dataGrid) + this._createDataGrid(); + + this._populateDataGrid(); + this._dataGrid.autoSizeColumns(20, 80); + this._dataGrid.element.removeStyleClass("hidden"); + this._emptyMsgElement.addStyleClass("hidden"); + this.deleteButton.visible = true; + + var totalSizeString = Number.bytesToString(this._size, WebInspector.UIString); + this._treeElement.subtitle = WebInspector.UIString("%s (%s)", lastPathComponent, totalSizeString); + + // FIXME: For Chrome, put creationTime and updateTime somewhere. + // NOTE: localizedString has not yet been added. + // WebInspector.UIString("(%s) Created: %s Updated: %s", this._size, this._creationTime, this._updateTime); + }, + + _createDataGrid: function() + { + var columns = { 0: {}, 1: {}, 2: {} }; + columns[0].title = WebInspector.UIString("Resource"); + columns[0].sort = "ascending"; + columns[0].sortable = true; + columns[1].title = WebInspector.UIString("Type"); + columns[1].sortable = true; + columns[2].title = WebInspector.UIString("Size"); + columns[2].aligned = "right"; + columns[2].sortable = true; + this._dataGrid = new WebInspector.DataGrid(columns); + this.element.appendChild(this._dataGrid.element); + this._dataGrid.addEventListener("sorting changed", this._populateDataGrid, this); + this._dataGrid.updateWidths(); + }, + + _populateDataGrid: function() + { + var selectedResource = this._dataGrid.selectedNode ? this._dataGrid.selectedNode.resource : null; + var sortDirection = this._dataGrid.sortOrder === "ascending" ? 1 : -1; + + function numberCompare(field, resource1, resource2) + { + return sortDirection * (resource1[field] - resource2[field]); + } + function localeCompare(field, resource1, resource2) + { + return sortDirection * (resource1[field] + "").localeCompare(resource2[field] + "") + } + + var comparator; + switch (parseInt(this._dataGrid.sortColumnIdentifier)) { + case 0: comparator = localeCompare.bind(this, "name"); break; + case 1: comparator = localeCompare.bind(this, "type"); break; + case 2: comparator = numberCompare.bind(this, "size"); break; + default: localeCompare.bind(this, "resource"); // FIXME: comparator = ? + } + + this._resources.sort(comparator); + this._dataGrid.removeChildren(); + + var nodeToSelect; + for (var i = 0; i < this._resources.length; ++i) { + var data = {}; + var resource = this._resources[i]; + data[0] = resource.name; + data[1] = resource.type; + data[2] = Number.bytesToString(resource.size, WebInspector.UIString); + var node = new WebInspector.DataGridNode(data); + node.resource = resource; + node.selectable = true; + this._dataGrid.appendChild(node); + if (resource === selectedResource) { + nodeToSelect = node; + nodeToSelect.selected = true; + } + } + + if (!nodeToSelect) + this._dataGrid.children[0].selected = true; + }, + + resize: function() + { + if (this._dataGrid) + this._dataGrid.updateWidths(); + }, + + _deleteButtonClicked: function(event) + { + if (!this._dataGrid || !this._dataGrid.selectedNode) + return; + + // FIXME: Delete Button semantics are not yet defined. (Delete a single, or all?) + this._deleteCallback(this._dataGrid.selectedNode); + }, + + _deleteCallback: function(node) + { + // FIXME: Should we delete a single (selected) resource or all resources? + // InspectorBackend.deleteCachedResource(...) + // this._update(); + }, + + _refreshButtonClicked: function(event) + { + // FIXME: Is this a refresh button or a re-fetch manifest button? + // this._update(); + } +} + +WebInspector.ApplicationCacheItemsView.prototype.__proto__ = WebInspector.View.prototype; diff --git a/WebCore/inspector/front-end/AuditsPanel.js b/WebCore/inspector/front-end/AuditsPanel.js index 481df80..bc7f3b3 100644 --- a/WebCore/inspector/front-end/AuditsPanel.js +++ b/WebCore/inspector/front-end/AuditsPanel.js @@ -30,7 +30,7 @@ WebInspector.AuditsPanel = function() { - WebInspector.Panel.call(this); + WebInspector.Panel.call(this, "audits"); this._constructCategories(); @@ -47,8 +47,6 @@ WebInspector.AuditsPanel = function() this.sidebarTree.appendChild(this.auditResultsTreeElement); this.auditResultsTreeElement.expand(); - this.element.addStyleClass("audits"); - this.clearResultsButton = new WebInspector.StatusBarButton(WebInspector.UIString("Clear audit results."), "clear-status-bar-item"); this.clearResultsButton.addEventListener("click", this._clearButtonClicked.bind(this), false); @@ -60,8 +58,6 @@ WebInspector.AuditsPanel = function() } WebInspector.AuditsPanel.prototype = { - toolbarItemClass: "audits", - get toolbarItemLabel() { return WebInspector.UIString("Audits"); diff --git a/WebCore/inspector/front-end/CallStackSidebarPane.js b/WebCore/inspector/front-end/CallStackSidebarPane.js index fc96d74..60eee34 100644 --- a/WebCore/inspector/front-end/CallStackSidebarPane.js +++ b/WebCore/inspector/front-end/CallStackSidebarPane.js @@ -61,7 +61,10 @@ WebInspector.CallStackSidebarPane.prototype = { } scriptOrResource = sourceIDMap[callFrame.sourceID]; - subtitle = WebInspector.displayNameForURL(scriptOrResource.sourceURL || scriptOrResource.url); + if (scriptOrResource) + subtitle = WebInspector.displayNameForURL(scriptOrResource.sourceURL || scriptOrResource.url); + else + subtitle = WebInspector.UIString("(internal script)"); if (callFrame.line > 0) { if (subtitle) diff --git a/WebCore/inspector/front-end/ConsolePanel.js b/WebCore/inspector/front-end/ConsolePanel.js index 6dbc558..5a0c2e7 100644 --- a/WebCore/inspector/front-end/ConsolePanel.js +++ b/WebCore/inspector/front-end/ConsolePanel.js @@ -28,12 +28,10 @@ WebInspector.ConsolePanel = function() { - WebInspector.Panel.call(this); + WebInspector.Panel.call(this, "console"); } WebInspector.ConsolePanel.prototype = { - toolbarItemClass: "console", - get toolbarItemLabel() { return WebInspector.UIString("Console"); diff --git a/WebCore/inspector/front-end/DOMAgent.js b/WebCore/inspector/front-end/DOMAgent.js index ee85d1c..07b16b1 100644 --- a/WebCore/inspector/front-end/DOMAgent.js +++ b/WebCore/inspector/front-end/DOMAgent.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 Google Inc. All rights reserved. + * Copyright (C) 2009, 2010 Google Inc. All rights reserved. * Copyright (C) 2009 Joseph Pecoraro * * Redistribution and use in source and binary forms, with or without @@ -86,7 +86,8 @@ WebInspector.DOMNode.prototype = { return this.attributes.length > 0; }, - hasChildNodes: function() { + hasChildNodes: function() + { return this._childNodeCount > 0; }, @@ -350,7 +351,8 @@ WebInspector.DOMAgent.prototype = { this.document._fireDomEvent("DOMAttrModified", event); }, - nodeForId: function(nodeId) { + nodeForId: function(nodeId) + { return this._idToDOMNode[nodeId]; }, @@ -420,16 +422,33 @@ WebInspector.DOMAgent.prototype = { } } +WebInspector.ApplicationCache = {} + +WebInspector.ApplicationCache.getApplicationCachesAsync = function(callback) +{ + function mycallback(applicationCaches) + { + // FIXME: Currently, this list only returns a single application cache. + if (applicationCaches) + callback(applicationCaches); + } + + var callId = WebInspector.Callback.wrap(mycallback); + InspectorBackend.getApplicationCaches(callId); +} + WebInspector.Cookies = {} WebInspector.Cookies.getCookiesAsync = function(callback) { - function mycallback(cookies, cookiesString) { + function mycallback(cookies, cookiesString) + { if (cookiesString) callback(WebInspector.Cookies.buildCookiesFromString(cookiesString), false); else callback(cookies, true); } + var callId = WebInspector.Callback.wrap(mycallback); InspectorBackend.getCookies(callId); } @@ -543,6 +562,7 @@ WebInspector.CSSStyleDeclaration.parseRule = function(payload) rule.isUser = payload.isUser; rule.isViaInspector = payload.isViaInspector; rule.sourceLine = payload.sourceLine; + rule.documentURL = payload.documentURL; if (payload.parentStyleSheet) rule.parentStyleSheet = { href: payload.parentStyleSheet.href }; @@ -661,6 +681,7 @@ WebInspector.childNodeRemoved = function() this.domAgent._childNodeRemoved.apply(this.domAgent, arguments); } +WebInspector.didGetApplicationCaches = WebInspector.Callback.processCallback; WebInspector.didGetCookies = WebInspector.Callback.processCallback; WebInspector.didGetChildNodes = WebInspector.Callback.processCallback; WebInspector.didPerformSearch = WebInspector.Callback.processCallback; diff --git a/WebCore/inspector/front-end/ElementsPanel.js b/WebCore/inspector/front-end/ElementsPanel.js index e176112..cd7cbd2 100644 --- a/WebCore/inspector/front-end/ElementsPanel.js +++ b/WebCore/inspector/front-end/ElementsPanel.js @@ -30,9 +30,7 @@ WebInspector.ElementsPanel = function() { - WebInspector.Panel.call(this); - - this.element.addStyleClass("elements"); + WebInspector.Panel.call(this, "elements"); this.contentElement = document.createElement("div"); this.contentElement.id = "elements-content"; @@ -114,8 +112,6 @@ WebInspector.ElementsPanel = function() } WebInspector.ElementsPanel.prototype = { - toolbarItemClass: "elements", - get toolbarItemLabel() { return WebInspector.UIString("Elements"); @@ -1121,20 +1117,23 @@ WebInspector.ElementsPanel.prototype = { rightSidebarResizerDragEnd: function(event) { WebInspector.elementDragEnd(event); + this.saveSidebarWidth(); }, rightSidebarResizerDrag: function(event) { var x = event.pageX; var newWidth = Number.constrain(window.innerWidth - x, Preferences.minElementsSidebarWidth, window.innerWidth * 0.66); + this.setSidebarWidth(newWidth); + event.preventDefault(); + }, + setSidebarWidth: function(newWidth) + { this.sidebarElement.style.width = newWidth + "px"; this.contentElement.style.right = newWidth + "px"; this.sidebarResizeElement.style.right = (newWidth - 3) + "px"; - this.treeOutline.updateSelection(); - - event.preventDefault(); }, _nodeSearchButtonClicked: function(event) diff --git a/WebCore/inspector/front-end/Images/applicationCache.png b/WebCore/inspector/front-end/Images/applicationCache.png Binary files differnew file mode 100644 index 0000000..50bad87 --- /dev/null +++ b/WebCore/inspector/front-end/Images/applicationCache.png diff --git a/WebCore/inspector/front-end/Panel.js b/WebCore/inspector/front-end/Panel.js index 9fd0a60..2fa0d34 100644 --- a/WebCore/inspector/front-end/Panel.js +++ b/WebCore/inspector/front-end/Panel.js @@ -26,11 +26,15 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -WebInspector.Panel = function() +WebInspector.Panel = function(name) { WebInspector.View.call(this); this.element.addStyleClass("panel"); + this.element.addStyleClass(name); + this._panelName = name; + + WebInspector.applicationSettings.installSetting(this._sidebarWidthSettingName(), this._panelName + "-sidebar-width", undefined); } // Should by in sync with style declarations. @@ -52,8 +56,7 @@ WebInspector.Panel.prototype = { this._toolbarItem.className = "toolbar-item toggleable"; this._toolbarItem.panel = this; - if ("toolbarItemClass" in this) - this._toolbarItem.addStyleClass(this.toolbarItemClass); + this._toolbarItem.addStyleClass(this._panelName); var iconElement = document.createElement("div"); iconElement.className = "toolbar-icon"; @@ -86,7 +89,7 @@ WebInspector.Panel.prototype = { WebInspector.currentFocusElement = this.defaultFocusedElement; - this.updateSidebarWidth(); + this.restoreSidebarWidth(); this._restoreScrollPositions(); }, @@ -291,7 +294,7 @@ WebInspector.Panel.prototype = { createSidebar: function(parentElement, resizerParentElement) { - if (this.hasSidebar) + if (this.sidebarElement) return; if (!parentElement) @@ -300,8 +303,6 @@ WebInspector.Panel.prototype = { if (!resizerParentElement) resizerParentElement = parentElement; - this.hasSidebar = true; - this.sidebarElement = document.createElement("div"); this.sidebarElement.className = "sidebar"; parentElement.appendChild(this.sidebarElement); @@ -319,6 +320,11 @@ WebInspector.Panel.prototype = { this.sidebarTree.panel = this; }, + _sidebarWidthSettingName: function() + { + return this._panelName + "SidebarWidth"; + }, + _startSidebarDragging: function(event) { WebInspector.elementDragStart(this.sidebarResizeElement, this._sidebarDragging.bind(this), this._endSidebarDragging.bind(this), event, "col-resize"); @@ -334,11 +340,12 @@ WebInspector.Panel.prototype = { _endSidebarDragging: function(event) { WebInspector.elementDragEnd(event); + this.saveSidebarWidth(); }, updateSidebarWidth: function(width) { - if (!this.hasSidebar) + if (!this.sidebarElement) return; if (this.sidebarElement.offsetWidth <= 0) { @@ -367,6 +374,19 @@ WebInspector.Panel.prototype = { this.sidebarResizeElement.style.left = (width - 3) + "px"; }, + restoreSidebarWidth: function() + { + var sidebarWidth = WebInspector.applicationSettings[this._sidebarWidthSettingName()]; + this.updateSidebarWidth(sidebarWidth); + }, + + saveSidebarWidth: function() + { + if (!this.sidebarElement) + return; + WebInspector.applicationSettings[this._sidebarWidthSettingName()] = this.sidebarElement.offsetWidth; + }, + updateMainViewWidth: function(width) { // Should be implemented by ancestors. diff --git a/WebCore/inspector/front-end/ProfilesPanel.js b/WebCore/inspector/front-end/ProfilesPanel.js index b5122af..911b1da 100644 --- a/WebCore/inspector/front-end/ProfilesPanel.js +++ b/WebCore/inspector/front-end/ProfilesPanel.js @@ -90,11 +90,10 @@ WebInspector.ProfileType.prototype = { WebInspector.ProfilesPanel = function() { - WebInspector.Panel.call(this); + WebInspector.Panel.call(this, "profiles"); this.createSidebar(); - this.element.addStyleClass("profiles"); this._profileTypesByIdMap = {}; this._profileTypeButtonsByIdMap = {}; @@ -128,8 +127,6 @@ WebInspector.ProfilesPanel = function() } WebInspector.ProfilesPanel.prototype = { - toolbarItemClass: "profiles", - get toolbarItemLabel() { return WebInspector.UIString("Profiles"); diff --git a/WebCore/inspector/front-end/ResourcesPanel.js b/WebCore/inspector/front-end/ResourcesPanel.js index ef6aa26..8af1505 100644 --- a/WebCore/inspector/front-end/ResourcesPanel.js +++ b/WebCore/inspector/front-end/ResourcesPanel.js @@ -29,9 +29,7 @@ WebInspector.ResourcesPanel = function() { - WebInspector.AbstractTimelinePanel.call(this); - - this.element.addStyleClass("resources"); + WebInspector.AbstractTimelinePanel.call(this, "resources"); this._createPanelEnabler(); @@ -43,6 +41,7 @@ WebInspector.ResourcesPanel = function() this.createInterface(); this._createStatusbarButtons(); + this._popoverHelper = new WebInspector.PopoverHelper(this.element, this._getPopoverAnchor.bind(this), this._showPopover.bind(this), true); this.reset(); this.filter(this.filterAllElement, false); @@ -51,8 +50,6 @@ WebInspector.ResourcesPanel = function() } WebInspector.ResourcesPanel.prototype = { - toolbarItemClass: "resources", - get toolbarItemLabel() { return WebInspector.UIString("Resources"); @@ -319,6 +316,7 @@ WebInspector.ResourcesPanel.prototype = { { this._resourceTrackingEnabled = true; this.reset(); + this.restoreSidebarWidth(); }, resourceTrackingWasDisabled: function() @@ -329,6 +327,7 @@ WebInspector.ResourcesPanel.prototype = { reset: function() { + this._popoverHelper.hidePopup(); this.closeVisibleResource(); delete this.currentQuery; @@ -477,6 +476,8 @@ WebInspector.ResourcesPanel.prototype = { if (!resource) return; + this._popoverHelper.hidePopup(); + this.containerElement.addStyleClass("viewing-resource"); if (this.visibleResource && this.visibleResource._resourcesView) @@ -735,6 +736,52 @@ WebInspector.ResourcesPanel.prototype = { elementsToRestoreScrollPositionsFor: function() { return [ this.containerElement ]; + }, + + _getPopoverAnchor: function(element) + { + var anchor = element.enclosingNodeOrSelfWithClass("resources-graph-bar") || element.enclosingNodeOrSelfWithClass("resources-graph-label"); + if (!anchor) + return null; + var resource = anchor.parentElement.resource; + return resource && resource.timing ? anchor : null; + }, + + _showPopover: function(anchor) + { + var tableElement = document.createElement("table"); + var resource = anchor.parentElement.resource; + var data = [WebInspector.UIString("Blocking"), resource.timing.requestTime === 0 ? "?" : Number.secondsToString(Math.max(resource.timing.requestTime - resource.startTime, 0)), + WebInspector.UIString("Proxy"), resource.timing.proxyDuration == -1 ? WebInspector.UIString("(none)") : Number.secondsToString(resource.timing.proxyDuration), + WebInspector.UIString("DNS Lookup"), resource.timing.dnsDuration == -1 ? WebInspector.UIString("(reused)") : Number.secondsToString(resource.timing.dnsDuration), + WebInspector.UIString("Connecting"), resource.timing.connectDuration == -1 ? WebInspector.UIString("(reused)") : Number.secondsToString(resource.timing.connectDuration), + WebInspector.UIString("Sending"), Number.secondsToString(resource.timing.sendDuration), + WebInspector.UIString("Waiting"), Number.secondsToString(resource.timing.waitDuration), + WebInspector.UIString("Receiving"), Number.secondsToString(resource.endTime - resource.responseReceivedTime)]; + + for (var i = 0; i < data.length; i += 2) { + var tr = document.createElement("tr"); + tableElement.appendChild(tr); + + var td = document.createElement("td"); + td.textContent = data[i]; + tr.appendChild(td); + + td = document.createElement("td"); + td.align = "right"; + td.textContent = data[i + 1]; + tr.appendChild(td); + } + + var popover = new WebInspector.Popover(tableElement); + popover.show(anchor); + return popover; + }, + + hide: function() + { + WebInspector.Panel.prototype.hide.call(this); + this._popoverHelper.hidePopup(); } } @@ -858,6 +905,9 @@ WebInspector.ResourceTimeCalculator.prototype = { else var leftLabel = rightLabel; + if (resource.timing) + return {left: leftLabel, right: rightLabel}; + if (hasLatency && rightLabel) { var total = this.formatValue(resource.duration); var tooltip = WebInspector.UIString("%s latency, %s download (%s total)", leftLabel, rightLabel, total); @@ -868,7 +918,6 @@ WebInspector.ResourceTimeCalculator.prototype = { if (resource.cached) tooltip = WebInspector.UIString("%s (from cache)", tooltip); - return {left: leftLabel, right: rightLabel, tooltip: tooltip}; }, @@ -1208,6 +1257,7 @@ WebInspector.ResourceGraph = function(resource) this._barAreaElement = document.createElement("div"); this._barAreaElement.className = "resources-graph-bar-area hidden"; + this._barAreaElement.resource = resource; this._graphElement.appendChild(this._barAreaElement); this._barLeftElement = document.createElement("div"); diff --git a/WebCore/inspector/front-end/ScriptsPanel.js b/WebCore/inspector/front-end/ScriptsPanel.js index 5563b93..3c4a0be 100644 --- a/WebCore/inspector/front-end/ScriptsPanel.js +++ b/WebCore/inspector/front-end/ScriptsPanel.js @@ -25,9 +25,7 @@ WebInspector.ScriptsPanel = function() { - WebInspector.Panel.call(this); - - this.element.addStyleClass("scripts"); + WebInspector.Panel.call(this, "scripts"); this.topStatusBar = document.createElement("div"); this.topStatusBar.className = "status-bar"; @@ -184,8 +182,6 @@ WebInspector.ScriptsPanel.PauseOnExceptionsState = { }; WebInspector.ScriptsPanel.prototype = { - toolbarItemClass: "scripts", - get toolbarItemLabel() { return WebInspector.UIString("Scripts"); @@ -794,15 +790,20 @@ WebInspector.ScriptsPanel.prototype = { _endSidebarResizeDrag: function(event) { WebInspector.elementDragEnd(event); - delete this._dragOffset; + this.saveSidebarWidth(); }, _sidebarResizeDrag: function(event) { var x = event.pageX + this._dragOffset; var newWidth = Number.constrain(window.innerWidth - x, Preferences.minScriptsSidebarWidth, window.innerWidth * 0.66); + this.setSidebarWidth(newWidth); + event.preventDefault(); + }, + setSidebarWidth: function(newWidth) + { this.sidebarElement.style.width = newWidth + "px"; this.sidebarButtonsElement.style.width = newWidth + "px"; this.viewsContainerElement.style.right = newWidth + "px"; @@ -810,7 +811,6 @@ WebInspector.ScriptsPanel.prototype = { this.sidebarResizeElement.style.right = (newWidth - 3) + "px"; this.resize(); - event.preventDefault(); }, updatePauseOnExceptionsState: function(pauseOnExceptionsState) diff --git a/WebCore/inspector/front-end/Settings.js b/WebCore/inspector/front-end/Settings.js index c7fc5a9..11f456c 100644 --- a/WebCore/inspector/front-end/Settings.js +++ b/WebCore/inspector/front-end/Settings.js @@ -48,15 +48,16 @@ var Preferences = { WebInspector.populateApplicationSettings = function(settingsString) { WebInspector.applicationSettings._load(settingsString); - WebInspector.applicationSettings._installSetting("eventListenersFilter", "event-listeners-filter", "all"); - WebInspector.applicationSettings._installSetting("colorFormat", "color-format", "hex"); - WebInspector.applicationSettings._installSetting("resourcesLargeRows", "resources-large-rows", true); - WebInspector.applicationSettings._installSetting("watchExpressions", "watch-expressions", []); - WebInspector.applicationSettings._installSetting("lastViewedScriptFile", "last-viewed-script-file"); - WebInspector.applicationSettings._installSetting("showInheritedComputedStyleProperties", "show-inherited-computed-style-properties", false); - WebInspector.applicationSettings._installSetting("showUserAgentStyles", "show-user-agent-styles", true); - WebInspector.applicationSettings._installSetting("resourceViewTab", "resource-view-tab", "content"); - WebInspector.applicationSettings._installSetting("consoleHistory", "console-history", []); + WebInspector.applicationSettings.installSetting("eventListenersFilter", "event-listeners-filter", "all"); + WebInspector.applicationSettings.installSetting("colorFormat", "color-format", "hex"); + WebInspector.applicationSettings.installSetting("resourcesLargeRows", "resources-large-rows", true); + WebInspector.applicationSettings.installSetting("watchExpressions", "watch-expressions", []); + WebInspector.applicationSettings.installSetting("lastViewedScriptFile", "last-viewed-script-file"); + WebInspector.applicationSettings.installSetting("showInheritedComputedStyleProperties", "show-inherited-computed-style-properties", false); + WebInspector.applicationSettings.installSetting("showUserAgentStyles", "show-user-agent-styles", true); + WebInspector.applicationSettings.installSetting("resourceViewTab", "resource-view-tab", "content"); + WebInspector.applicationSettings.installSetting("consoleHistory", "console-history", []); + WebInspector.applicationSettings.dispatchEventToListeners("loaded"); } @@ -69,6 +70,7 @@ WebInspector.populateSessionSettings = function(settingsString) WebInspector.Settings = function(sessionScope) { this._sessionScope = sessionScope; + this._defaultValues = {}; } WebInspector.Settings.prototype = { @@ -88,18 +90,18 @@ WebInspector.Settings.prototype = { } }, - _installSetting: function(name, propertyName, defaultValue) + installSetting: function(name, propertyName, defaultValue) { this.__defineGetter__(name, this._get.bind(this, propertyName)); this.__defineSetter__(name, this._set.bind(this, propertyName)); - if (!(propertyName in this._store)) { - this._store[propertyName] = defaultValue; - } + this._defaultValues[propertyName] = defaultValue; }, _get: function(propertyName) { - return this._store[propertyName]; + if (propertyName in this._store) + return this._store[propertyName]; + return this._defaultValues[propertyName]; }, _set: function(propertyName, newValue) diff --git a/WebCore/inspector/front-end/SourceCSSTokenizer.js b/WebCore/inspector/front-end/SourceCSSTokenizer.js index f7d7d51..1d8a784 100644 --- a/WebCore/inspector/front-end/SourceCSSTokenizer.js +++ b/WebCore/inspector/front-end/SourceCSSTokenizer.js @@ -81,13 +81,13 @@ WebInspector.SourceCSSTokenizer = function() "-webkit-column-gap", "-webkit-column-rule", "-webkit-column-rule-color", "-webkit-column-rule-style", "-webkit-column-rule-width", "-webkit-column-width", "-webkit-columns", "-webkit-font-size-delta", "-webkit-font-smoothing", "-webkit-highlight", "-webkit-line-break", "-webkit-line-clamp", - "-webkit-margin-bottom-collapse", "-webkit-margin-collapse", "-webkit-margin-start", "-webkit-margin-top-collapse", + "-webkit-margin-bottom-collapse", "-webkit-margin-collapse", "-webkit-margin-end", "-webkit-margin-start", "-webkit-margin-top-collapse", "-webkit-marquee", "-webkit-marquee-direction", "-webkit-marquee-increment", "-webkit-marquee-repetition", "-webkit-marquee-speed", "-webkit-marquee-style", "-webkit-mask", "-webkit-mask-attachment", "-webkit-mask-box-image", "-webkit-mask-clip", "-webkit-mask-composite", "-webkit-mask-image", "-webkit-mask-origin", "-webkit-mask-position", "-webkit-mask-position-x", "-webkit-mask-position-y", "-webkit-mask-repeat", "-webkit-mask-repeat-x", "-webkit-mask-repeat-y", "-webkit-mask-size", - "-webkit-match-nearest-mail-blockquote-color", "-webkit-nbsp-mode", "-webkit-padding-start", + "-webkit-match-nearest-mail-blockquote-color", "-webkit-nbsp-mode", "-webkit-padding-end", "-webkit-padding-start", "-webkit-perspective", "-webkit-perspective-origin", "-webkit-perspective-origin-x", "-webkit-perspective-origin-y", "-webkit-rtl-ordering", "-webkit-text-decorations-in-effect", "-webkit-text-fill-color", "-webkit-text-security", "-webkit-text-size-adjust", "-webkit-text-stroke", "-webkit-text-stroke-color", "-webkit-text-stroke-width", diff --git a/WebCore/inspector/front-end/StoragePanel.js b/WebCore/inspector/front-end/StoragePanel.js index fef7802..2733907 100644 --- a/WebCore/inspector/front-end/StoragePanel.js +++ b/WebCore/inspector/front-end/StoragePanel.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. + * Copyright (C) 2007, 2008, 2010 Apple Inc. All rights reserved. * Copyright (C) 2009 Joseph Pecoraro * * Redistribution and use in source and binary forms, with or without @@ -29,7 +29,7 @@ WebInspector.StoragePanel = function(database) { - WebInspector.Panel.call(this); + WebInspector.Panel.call(this, "storage"); this.createSidebar(); @@ -49,6 +49,10 @@ WebInspector.StoragePanel = function(database) this.sidebarTree.appendChild(this.cookieListTreeElement); this.cookieListTreeElement.expand(); + this.applicationCacheListTreeElement = new WebInspector.SidebarSectionTreeElement(WebInspector.UIString("APPLICATION CACHE"), {}, true); + this.sidebarTree.appendChild(this.applicationCacheListTreeElement); + this.applicationCacheListTreeElement.expand(); + this.storageViews = document.createElement("div"); this.storageViews.id = "storage-views"; this.element.appendChild(this.storageViews); @@ -60,8 +64,6 @@ WebInspector.StoragePanel = function(database) } WebInspector.StoragePanel.prototype = { - toolbarItemClass: "storage", - get toolbarItemLabel() { return WebInspector.UIString("Storage"); @@ -99,12 +101,16 @@ WebInspector.StoragePanel.prototype = { this._cookieViews = {}; + this._applicationCacheView = null; + delete this._cachedApplicationCacheViewStatus; + this.databasesListTreeElement.removeChildren(); this.localStorageListTreeElement.removeChildren(); this.sessionStorageListTreeElement.removeChildren(); this.cookieListTreeElement.removeChildren(); + this.applicationCacheListTreeElement.removeChildren(); - this.storageViews.removeChildren(); + this.storageViews.removeChildren(); this.storageViewStatusBarItemsContainer.removeChildren(); @@ -138,6 +144,12 @@ WebInspector.StoragePanel.prototype = { this.sessionStorageListTreeElement.appendChild(domStorageTreeElement); }, + addApplicationCache: function(domain) + { + var applicationCacheTreeElement = new WebInspector.ApplicationCacheSidebarTreeElement(domain); + this.applicationCacheListTreeElement.appendChild(applicationCacheTreeElement); + }, + selectDatabase: function(databaseId) { var database; @@ -185,14 +197,7 @@ WebInspector.StoragePanel.prototype = { } } - view.show(this.storageViews); - - this.visibleView = view; - - this.storageViewStatusBarItemsContainer.removeChildren(); - var statusBarItems = view.statusBarItems || []; - for (var i = 0; i < statusBarItems.length; ++i) - this.storageViewStatusBarItemsContainer.appendChild(statusBarItems[i].element); + this._genericViewSetup(view); }, showDOMStorage: function(domStorage) @@ -210,14 +215,7 @@ WebInspector.StoragePanel.prototype = { domStorage._domStorageView = view; } - view.show(this.storageViews); - - this.visibleView = view; - - this.storageViewStatusBarItemsContainer.removeChildren(); - var statusBarItems = view.statusBarItems; - for (var i = 0; i < statusBarItems.length; ++i) - this.storageViewStatusBarItemsContainer.appendChild(statusBarItems[i]); + this._genericViewSetup(view); }, showCookies: function(treeElement, cookieDomain) @@ -231,12 +229,33 @@ WebInspector.StoragePanel.prototype = { this._cookieViews[cookieDomain] = view; } - view.show(this.storageViews); + this._genericViewSetup(view); + }, + + showApplicationCache: function(treeElement, appcacheDomain) + { + if (this.visibleView) + this.visibleView.hide(); + + var view = this._applicationCacheView; + if (!view) { + view = new WebInspector.ApplicationCacheItemsView(treeElement, appcacheDomain); + this._applicationCacheView = view; + } + this._genericViewSetup(view); + + if ("_cachedApplicationCacheViewStatus" in this) + this._applicationCacheView.updateStatus(this._cachedApplicationCacheViewStatus); + }, + + _genericViewSetup: function(view) + { + view.show(this.storageViews); this.visibleView = view; this.storageViewStatusBarItemsContainer.removeChildren(); - var statusBarItems = view.statusBarItems; + var statusBarItems = view.statusBarItems || []; for (var i = 0; i < statusBarItems.length; ++i) this.storageViewStatusBarItemsContainer.appendChild(statusBarItems[i]); }, @@ -364,6 +383,25 @@ WebInspector.StoragePanel.prototype = { domStorage._domStorageView.update(); }, + updateApplicationCacheStatus: function(status) + { + this._cachedApplicationCacheViewStatus = status; + if (this._applicationCacheView && this._applicationCacheView === this.visibleView) + this._applicationCacheView.updateStatus(status); + }, + + updateNetworkState: function(isNowOnline) + { + if (this._applicationCacheView && this._applicationCacheView === this.visibleView) + this._applicationCacheView.updateNetworkState(isNowOnline); + }, + + updateManifest: function(manifest) + { + if (this._applicationCacheView && this._applicationCacheView === this.visibleView) + this._applicationCacheView.updateManifest(manifest); + }, + _domStorageForId: function(storageId) { if (!this._domStorage) @@ -540,3 +578,43 @@ WebInspector.CookieSidebarTreeElement.prototype = { } WebInspector.CookieSidebarTreeElement.prototype.__proto__ = WebInspector.SidebarTreeElement.prototype; + +WebInspector.ApplicationCacheSidebarTreeElement = function(appcacheDomain) +{ + WebInspector.SidebarTreeElement.call(this, "application-cache-sidebar-tree-item", appcacheDomain, "", null, false); + this._appcacheDomain = appcacheDomain; + this._subtitle = ""; + this._mainTitle = this._appcacheDomain; + this.refreshTitles(); +} + +WebInspector.ApplicationCacheSidebarTreeElement.prototype = { + onselect: function() + { + WebInspector.panels.storage.showApplicationCache(this, this._appcacheDomain); + }, + + get mainTitle() + { + return this._mainTitle; + }, + + set mainTitle(x) + { + this._mainTitle = x; + this.refreshTitles(); + }, + + get subtitle() + { + return this._subtitle; + }, + + set subtitle(x) + { + this._subtitle = x; + this.refreshTitles(); + } +} + +WebInspector.ApplicationCacheSidebarTreeElement.prototype.__proto__ = WebInspector.SidebarTreeElement.prototype; diff --git a/WebCore/inspector/front-end/StylesSidebarPane.js b/WebCore/inspector/front-end/StylesSidebarPane.js index 649b9d0..5f5a5ad 100644 --- a/WebCore/inspector/front-end/StylesSidebarPane.js +++ b/WebCore/inspector/front-end/StylesSidebarPane.js @@ -649,20 +649,24 @@ WebInspector.StylePropertiesSection = function(styleRule, subtitle, computedStyl this.headerElement.addStyleClass("hidden"); } else { if (!subtitle) { - if (this.styleRule.parentStyleSheet && this.styleRule.parentStyleSheet.href) { - var url = this.styleRule.parentStyleSheet.href; - var link = WebInspector.linkifyResourceAsNode(url, "resources", this.rule.sourceLine + 1); + function linkifyUncopyable(url, line) + { + var link = WebInspector.linkifyResourceAsNode(url, "resources", line + 1); link.setAttribute("data-uncopyable", link.textContent); link.textContent = ""; - this.subtitleElement.appendChild(link); - } else if (isUserAgent) + return link; + } + + if (this.styleRule.parentStyleSheet && this.styleRule.parentStyleSheet.href) + this.subtitleElement.appendChild(linkifyUncopyable(this.styleRule.parentStyleSheet.href, this.rule.sourceLine)); + else if (isUserAgent) subtitle = WebInspector.UIString("user agent stylesheet"); else if (isUser) subtitle = WebInspector.UIString("user stylesheet"); else if (isViaInspector) subtitle = WebInspector.UIString("via inspector"); else - subtitle = WebInspector.UIString("inline stylesheet"); + this.subtitleElement.appendChild(linkifyUncopyable(this.rule.documentURL, this.rule.sourceLine)); } if (isInherited) this.element.addStyleClass("show-inherited"); // This one is related to inherited rules, not compted style. diff --git a/WebCore/inspector/front-end/TimelinePanel.js b/WebCore/inspector/front-end/TimelinePanel.js index 29efd79..1f12625 100644 --- a/WebCore/inspector/front-end/TimelinePanel.js +++ b/WebCore/inspector/front-end/TimelinePanel.js @@ -30,8 +30,7 @@ WebInspector.TimelinePanel = function() { - WebInspector.Panel.call(this); - this.element.addStyleClass("timeline"); + WebInspector.Panel.call(this, "timeline"); this.element.appendChild(this._createTopPane()); this.element.tabIndex = 0; @@ -106,8 +105,6 @@ WebInspector.TimelinePanel.rowHeight = 18; WebInspector.TimelinePanel.shortRecordThreshold = 0.015; WebInspector.TimelinePanel.prototype = { - toolbarItemClass: "timeline", - _createTopPane: function() { var topPaneElement = document.createElement("div"); topPaneElement.id = "timeline-overview-panel"; diff --git a/WebCore/inspector/front-end/WebKit.qrc b/WebCore/inspector/front-end/WebKit.qrc index add50e1..42ad915 100644 --- a/WebCore/inspector/front-end/WebKit.qrc +++ b/WebCore/inspector/front-end/WebKit.qrc @@ -2,6 +2,7 @@ <qresource prefix="/webkit/inspector"> <file>inspector.html</file> <file>AbstractTimelinePanel.js</file> + <file>ApplicationCacheItemsView.js</file> <file>AuditCategories.js</file> <file>AuditLauncherView.js</file> <file>AuditResultView.js</file> @@ -103,6 +104,7 @@ <file>inspectorSyntaxHighlight.css</file> <file>popover.css</file> <file>textViewer.css</file> + <file>Images/applicationCache.png</file> <file>Images/auditsIcon.png</file> <file>Images/back.png</file> <file>Images/breakpointBorder.png</file> diff --git a/WebCore/inspector/front-end/inspector.css b/WebCore/inspector/front-end/inspector.css index b92672a..d8e29e8 100644 --- a/WebCore/inspector/front-end/inspector.css +++ b/WebCore/inspector/front-end/inspector.css @@ -1826,6 +1826,10 @@ body.inactive .sidebar { content: url(Images/cookie.png); } +.application-cache-sidebar-tree-item .icon { + content: url(Images/applicationCache.png); +} + #storage-views { position: absolute; top: 0; @@ -3702,7 +3706,7 @@ body.inactive .sidebar-tree-item.selected .bubble.search-matches { background-color: rgb(66, 129, 235) !important; } -.timeline-records-counter { +.timeline-records-counter, .storage-application-cache-status, .storage-application-cache-connectivity { font-size: 11px; text-shadow: white 0 1px 0; } @@ -3718,6 +3722,22 @@ body.inactive .sidebar-tree-item.selected .bubble.search-matches { margin-top: -2px; } +.storage-application-cache-status-icon, .storage-application-cache-connectivity-icon { + margin-bottom: -3px; + margin-left: 5px; + vertical-align: middle; +} + +.status-bar-divider { + margin-left: 7px; + border-right: 1px solid #CCC; +} + +.storage-application-cache-status, .storage-application-cache-connectivity { + position: relative; + top: 4px; +} + /* Profiler Style */ #profile-views { diff --git a/WebCore/inspector/front-end/inspector.html b/WebCore/inspector/front-end/inspector.html index 8a8b7d5..c829195 100644 --- a/WebCore/inspector/front-end/inspector.html +++ b/WebCore/inspector/front-end/inspector.html @@ -64,6 +64,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. <script type="text/javascript" src="DOMStorageItemsView.js"></script> <script type="text/javascript" src="DataGrid.js"></script> <script type="text/javascript" src="CookieItemsView.js"></script> + <script type="text/javascript" src="ApplicationCacheItemsView.js"></script> <script type="text/javascript" src="Script.js"></script> <script type="text/javascript" src="BreakpointManager.js"></script> <script type="text/javascript" src="SidebarPane.js"></script> diff --git a/WebCore/inspector/front-end/inspector.js b/WebCore/inspector/front-end/inspector.js index 3bb4180..89d1ae0 100644 --- a/WebCore/inspector/front-end/inspector.js +++ b/WebCore/inspector/front-end/inspector.js @@ -53,6 +53,7 @@ var WebInspector = { resources: {}, resourceURLMap: {}, cookieDomains: {}, + applicationCacheDomains: {}, missingLocalizedStrings: {}, pendingDispatches: 0, @@ -566,6 +567,11 @@ WebInspector.dispatch = function() { // This is important to LayoutTests. function delayDispatch() { + if (!(methodName in WebInspector)) { + console.error("Attempted to dispatch unimplemented WebInspector method: %s", methodName); + return; + } + WebInspector[methodName].apply(WebInspector, parameters); WebInspector.pendingDispatches--; } @@ -575,8 +581,7 @@ WebInspector.dispatch = function() { WebInspector.dispatchMessageFromBackend = function(arguments) { - var methodName = arguments.shift(); - WebInspector[methodName].apply(this, arguments); + WebInspector.dispatch.apply(this, arguments); } @@ -716,11 +721,12 @@ WebInspector._registerShortcuts = function() WebInspector.documentKeyDown = function(event) { + var isInputElement = event.target.nodeName === "INPUT"; var isInEditMode = event.target.enclosingNodeOrSelfWithClass("text-prompt") || WebInspector.isEditingAnyField(); const helpKey = WebInspector.isMac() ? "U+003F" : "U+00BF"; // "?" for both platforms if (event.keyIdentifier === "F1" || - (event.keyIdentifier === helpKey && event.shiftKey && (!isInEditMode || event.metaKey))) { + (event.keyIdentifier === helpKey && event.shiftKey && (!isInEditMode && !isInputElement || event.metaKey))) { WebInspector.shortcutsHelp.show(); event.stopPropagation(); event.preventDefault(); @@ -1163,6 +1169,7 @@ WebInspector.updateResource = function(identifier, payload) if (match) { var protocol = match[1].toLowerCase(); this._addCookieDomain(match[2]); + this._addAppCacheDomain(match[2]); } } @@ -1174,6 +1181,8 @@ WebInspector.updateResource = function(identifier, payload) resource.statusText = payload.statusText; resource.suggestedFilename = payload.suggestedFilename; resource.responseHeaders = payload.responseHeaders; + resource.connectionID = payload.connectionID; + resource.timing = payload.timing; } if (payload.didTypeChange) { @@ -1258,6 +1267,18 @@ WebInspector._addCookieDomain = function(domain) this.panels.storage.addCookieDomain(domain); } +WebInspector._addAppCacheDomain = function(domain) +{ + // Eliminate duplicate domains from the list. + if (domain in this.applicationCacheDomains) + return; + this.applicationCacheDomains[domain] = true; + + if (!this.panels.storage) + return; + this.panels.storage.addApplicationCache(domain); +} + WebInspector.addDOMStorage = function(payload) { if (!this.panels.storage) @@ -1271,11 +1292,19 @@ WebInspector.addDOMStorage = function(payload) WebInspector.updateDOMStorage = function(storageId) { - if (!this.panels.storage) - return; this.panels.storage.updateDOMStorage(storageId); } +WebInspector.updateApplicationCacheStatus = function(status) +{ + this.panels.storage.updateApplicationCacheStatus(status); +} + +WebInspector.updateNetworkState = function(isNowOnline) +{ + this.panels.storage.updateNetworkState(isNowOnline); +} + WebInspector.resourceTrackingWasEnabled = function() { this.panels.resources.resourceTrackingWasEnabled(); @@ -1286,7 +1315,6 @@ WebInspector.resourceTrackingWasDisabled = function() this.panels.resources.resourceTrackingWasDisabled(); } - WebInspector.searchingForNodeWasEnabled = function() { this.panels.elements.searchingForNodeWasEnabled(); @@ -1388,6 +1416,7 @@ WebInspector.reset = function() this.resources = {}; this.resourceURLMap = {}; this.cookieDomains = {}; + this.applicationCacheDomains = {}; this.hoveredDOMNode = null; delete this.mainResource; diff --git a/WebCore/loader/CachedResource.cpp b/WebCore/loader/CachedResource.cpp index 75037ba..bde5da5 100644 --- a/WebCore/loader/CachedResource.cpp +++ b/WebCore/loader/CachedResource.cpp @@ -485,9 +485,9 @@ bool CachedResource::makePurgeable(bool purgeable) return false; if (m_data->hasPurgeableBuffer()) { - m_purgeableData.set(m_data->releasePurgeableBuffer()); + m_purgeableData = m_data->releasePurgeableBuffer(); } else { - m_purgeableData.set(PurgeableBuffer::create(m_data->data(), m_data->size())); + m_purgeableData = PurgeableBuffer::create(m_data->data(), m_data->size()); if (!m_purgeableData) return false; } diff --git a/WebCore/loader/CrossOriginAccessControl.cpp b/WebCore/loader/CrossOriginAccessControl.cpp index 01596e2..f019f28 100644 --- a/WebCore/loader/CrossOriginAccessControl.cpp +++ b/WebCore/loader/CrossOriginAccessControl.cpp @@ -92,7 +92,7 @@ bool isOnAccessControlResponseHeaderWhitelist(const String& name) return allowedCrossOriginResponseHeaders->contains(name); } -bool passesAccessControlCheck(const ResourceResponse& response, bool includeCredentials, SecurityOrigin* securityOrigin) +bool passesAccessControlCheck(const ResourceResponse& response, bool includeCredentials, SecurityOrigin* securityOrigin, String& errorDescription) { // A wildcard Access-Control-Allow-Origin can not be used if credentials are to be sent, // even with Access-Control-Allow-Credentials set to true. @@ -100,17 +100,25 @@ bool passesAccessControlCheck(const ResourceResponse& response, bool includeCred if (accessControlOriginString == "*" && !includeCredentials) return true; - if (securityOrigin->isUnique()) + if (securityOrigin->isUnique()) { + errorDescription = "Cannot make any requests from " + securityOrigin->toString() + "."; return false; + } + // FIXME: Access-Control-Allow-Origin can contain a list of origins. RefPtr<SecurityOrigin> accessControlOrigin = SecurityOrigin::createFromString(accessControlOriginString); - if (!accessControlOrigin->isSameSchemeHostPort(securityOrigin)) + if (!accessControlOrigin->isSameSchemeHostPort(securityOrigin)) { + errorDescription = (accessControlOriginString == "*") ? "Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true." + : "Origin " + securityOrigin->toString() + " is not allowed by Access-Control-Allow-Origin."; return false; + } if (includeCredentials) { const String& accessControlCredentialsString = response.httpHeaderField("Access-Control-Allow-Credentials"); - if (accessControlCredentialsString != "true") + if (accessControlCredentialsString != "true") { + errorDescription = "Credentials flag is true, but Access-Control-Allow-Credentials is not \"true\"."; return false; + } } return true; diff --git a/WebCore/loader/CrossOriginAccessControl.h b/WebCore/loader/CrossOriginAccessControl.h index 267646f..4a904d6 100644 --- a/WebCore/loader/CrossOriginAccessControl.h +++ b/WebCore/loader/CrossOriginAccessControl.h @@ -36,6 +36,6 @@ namespace WebCore { bool isOnAccessControlSimpleRequestHeaderWhitelist(const String& name, const String& value); bool isOnAccessControlResponseHeaderWhitelist(const String&); - bool passesAccessControlCheck(const ResourceResponse&, bool includeCredentials, SecurityOrigin*); + bool passesAccessControlCheck(const ResourceResponse&, bool includeCredentials, SecurityOrigin*, String& errorDescription); } // namespace WebCore diff --git a/WebCore/loader/CrossOriginPreflightResultCache.cpp b/WebCore/loader/CrossOriginPreflightResultCache.cpp index cea66b1..f0211af 100644 --- a/WebCore/loader/CrossOriginPreflightResultCache.cpp +++ b/WebCore/loader/CrossOriginPreflightResultCache.cpp @@ -35,6 +35,8 @@ namespace WebCore { +using namespace std; + // These values are at the discretion of the user agent. static const unsigned defaultPreflightCacheTimeoutSeconds = 5; static const unsigned maxPreflightCacheTimeoutSeconds = 600; // Should be short enough to minimize the risk of using a poisoned cache after switching to a secure network. @@ -87,15 +89,19 @@ static bool parseAccessControlAllowList(const String& string, HashSet<String, Ha return true; } -bool CrossOriginPreflightResultCacheItem::parse(const ResourceResponse& response) +bool CrossOriginPreflightResultCacheItem::parse(const ResourceResponse& response, String& errorDescription) { m_methods.clear(); - if (!parseAccessControlAllowList(response.httpHeaderField("Access-Control-Allow-Methods"), m_methods)) + if (!parseAccessControlAllowList(response.httpHeaderField("Access-Control-Allow-Methods"), m_methods)) { + errorDescription = "Cannot parse Access-Control-Allow-Methods response header field."; return false; + } m_headers.clear(); - if (!parseAccessControlAllowList(response.httpHeaderField("Access-Control-Allow-Headers"), m_headers)) + if (!parseAccessControlAllowList(response.httpHeaderField("Access-Control-Allow-Headers"), m_headers)) { + errorDescription = "Cannot parse Access-Control-Allow-Headers response header field."; return false; + } unsigned expiryDelta; if (parseAccessControlMaxAge(response.httpHeaderField("Access-Control-Max-Age"), expiryDelta)) { @@ -108,30 +114,37 @@ bool CrossOriginPreflightResultCacheItem::parse(const ResourceResponse& response return true; } -bool CrossOriginPreflightResultCacheItem::allowsCrossOriginMethod(const String& method) const +bool CrossOriginPreflightResultCacheItem::allowsCrossOriginMethod(const String& method, String& errorDescription) const { - return m_methods.contains(method) || isOnAccessControlSimpleRequestMethodWhitelist(method); + if (m_methods.contains(method) || isOnAccessControlSimpleRequestMethodWhitelist(method)) + return true; + + errorDescription = "Method " + method + " is not allowed by Access-Control-Allow-Methods."; + return false; } -bool CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders(const HTTPHeaderMap& requestHeaders) const +bool CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders(const HTTPHeaderMap& requestHeaders, String& errorDescription) const { HTTPHeaderMap::const_iterator end = requestHeaders.end(); for (HTTPHeaderMap::const_iterator it = requestHeaders.begin(); it != end; ++it) { - if (!m_headers.contains(it->first) && !isOnAccessControlSimpleRequestHeaderWhitelist(it->first, it->second)) + if (!m_headers.contains(it->first) && !isOnAccessControlSimpleRequestHeaderWhitelist(it->first, it->second)) { + errorDescription = "Request header field " + it->first + " is not allowed by Access-Control-Allow-Headers."; return false; + } } return true; } bool CrossOriginPreflightResultCacheItem::allowsRequest(bool includeCredentials, const String& method, const HTTPHeaderMap& requestHeaders) const { + String ignoredExplanation; if (m_absoluteExpiryTime < currentTime()) return false; if (includeCredentials && !m_credentials) return false; - if (!allowsCrossOriginMethod(method)) + if (!allowsCrossOriginMethod(method, ignoredExplanation)) return false; - if (!allowsCrossOriginHeaders(requestHeaders)) + if (!allowsCrossOriginHeaders(requestHeaders, ignoredExplanation)) return false; return true; } @@ -143,10 +156,15 @@ CrossOriginPreflightResultCache& CrossOriginPreflightResultCache::shared() return cache; } -void CrossOriginPreflightResultCache::appendEntry(const String& origin, const KURL& url, CrossOriginPreflightResultCacheItem* preflightResult) +void CrossOriginPreflightResultCache::appendEntry(const String& origin, const KURL& url, PassOwnPtr<CrossOriginPreflightResultCacheItem> preflightResult) { ASSERT(isMainThread()); - m_preflightHashMap.set(std::make_pair(origin, url), preflightResult); + CrossOriginPreflightResultCacheItem* resultPtr = preflightResult.leakPtr(); + pair<CrossOriginPreflightResultHashMap::iterator, bool> addResult = m_preflightHashMap.add(make_pair(origin, url), resultPtr); + if (!addResult.second) { + // FIXME: We need to delete the old value before replacing with the new one. + addResult.first->second = resultPtr; + } } bool CrossOriginPreflightResultCache::canSkipPreflight(const String& origin, const KURL& url, bool includeCredentials, const String& method, const HTTPHeaderMap& requestHeaders) diff --git a/WebCore/loader/CrossOriginPreflightResultCache.h b/WebCore/loader/CrossOriginPreflightResultCache.h index 8e5b239..0f3e356 100644 --- a/WebCore/loader/CrossOriginPreflightResultCache.h +++ b/WebCore/loader/CrossOriginPreflightResultCache.h @@ -31,6 +31,7 @@ #include "StringHash.h" #include <wtf/HashMap.h> #include <wtf/HashSet.h> +#include <wtf/PassOwnPtr.h> namespace WebCore { @@ -45,9 +46,9 @@ namespace WebCore { { } - bool parse(const ResourceResponse&); - bool allowsCrossOriginMethod(const String&) const; - bool allowsCrossOriginHeaders(const HTTPHeaderMap&) const; + bool parse(const ResourceResponse&, String& errorDescription); + bool allowsCrossOriginMethod(const String&, String& errorDescription) const; + bool allowsCrossOriginHeaders(const HTTPHeaderMap&, String& errorDescription) const; bool allowsRequest(bool includeCredentials, const String& method, const HTTPHeaderMap& requestHeaders) const; private: @@ -66,7 +67,7 @@ namespace WebCore { public: static CrossOriginPreflightResultCache& shared(); - void appendEntry(const String& origin, const KURL&, CrossOriginPreflightResultCacheItem*); + void appendEntry(const String& origin, const KURL&, PassOwnPtr<CrossOriginPreflightResultCacheItem>); bool canSkipPreflight(const String& origin, const KURL&, bool includeCredentials, const String& method, const HTTPHeaderMap& requestHeaders); void empty(); diff --git a/WebCore/loader/DocumentThreadableLoader.cpp b/WebCore/loader/DocumentThreadableLoader.cpp index ee926b1..4a7a88b 100644 --- a/WebCore/loader/DocumentThreadableLoader.cpp +++ b/WebCore/loader/DocumentThreadableLoader.cpp @@ -75,7 +75,7 @@ DocumentThreadableLoader::DocumentThreadableLoader(Document* document, Threadabl } if (m_options.crossOriginRequestPolicy == DenyCrossOriginRequests) { - m_client->didFail(ResourceError()); + m_client->didFail(ResourceError(errorDomainWebKitInternal, 0, request.url().string(), "Cross origin requests are not supported.")); return; } @@ -88,7 +88,7 @@ DocumentThreadableLoader::DocumentThreadableLoader(Document* document, Threadabl if (!m_options.forcePreflight && isSimpleCrossOriginAccessRequest(crossOriginRequest->httpMethod(), crossOriginRequest->httpHeaderFields())) makeSimpleCrossOriginAccessRequest(*crossOriginRequest); else { - m_actualRequest.set(crossOriginRequest.release()); + m_actualRequest = crossOriginRequest.release(); if (CrossOriginPreflightResultCache::shared().canSkipPreflight(document->securityOrigin()->toString(), m_actualRequest->url(), m_options.allowCredentials, m_actualRequest->httpMethod(), m_actualRequest->httpHeaderFields())) preflightSuccess(); @@ -103,7 +103,7 @@ void DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest(const Resource // Cross-origin requests are only defined for HTTP. We would catch this when checking response headers later, but there is no reason to send a request that's guaranteed to be denied. if (!request.url().protocolInHTTPFamily()) { - m_client->didFail(ResourceError()); + m_client->didFail(ResourceError(errorDomainWebKitInternal, 0, request.url().string(), "Cross origin requests are only supported for HTTP.")); return; } @@ -186,25 +186,26 @@ void DocumentThreadableLoader::didReceiveResponse(SubresourceLoader* loader, con ASSERT(m_client); ASSERT_UNUSED(loader, loader == m_loader); + String accessControlErrorDescription; if (m_actualRequest) { - if (!passesAccessControlCheck(response, m_options.allowCredentials, m_document->securityOrigin())) { - preflightFailure(); + if (!passesAccessControlCheck(response, m_options.allowCredentials, m_document->securityOrigin(), accessControlErrorDescription)) { + preflightFailure(response.url(), accessControlErrorDescription); return; } OwnPtr<CrossOriginPreflightResultCacheItem> preflightResult(new CrossOriginPreflightResultCacheItem(m_options.allowCredentials)); - if (!preflightResult->parse(response) - || !preflightResult->allowsCrossOriginMethod(m_actualRequest->httpMethod()) - || !preflightResult->allowsCrossOriginHeaders(m_actualRequest->httpHeaderFields())) { - preflightFailure(); + if (!preflightResult->parse(response, accessControlErrorDescription) + || !preflightResult->allowsCrossOriginMethod(m_actualRequest->httpMethod(), accessControlErrorDescription) + || !preflightResult->allowsCrossOriginHeaders(m_actualRequest->httpHeaderFields(), accessControlErrorDescription)) { + preflightFailure(response.url(), accessControlErrorDescription); return; } CrossOriginPreflightResultCache::shared().appendEntry(m_document->securityOrigin()->toString(), m_actualRequest->url(), preflightResult.release()); } else { if (!m_sameOriginRequest && m_options.crossOriginRequestPolicy == UseAccessControl) { - if (!passesAccessControlCheck(response, m_options.allowCredentials, m_document->securityOrigin())) { - m_client->didFail(ResourceError()); + if (!passesAccessControlCheck(response, m_options.allowCredentials, m_document->securityOrigin(), accessControlErrorDescription)) { + m_client->didFail(ResourceError(errorDomainWebKitInternal, 0, response.url().string(), accessControlErrorDescription)); return; } } @@ -290,10 +291,10 @@ void DocumentThreadableLoader::preflightSuccess() loadRequest(*actualRequest, SkipSecurityCheck); } -void DocumentThreadableLoader::preflightFailure() +void DocumentThreadableLoader::preflightFailure(const String& url, const String& errorDescription) { m_actualRequest = 0; // Prevent didFinishLoading() from bypassing access check. - m_client->didFail(ResourceError()); + m_client->didFail(ResourceError(errorDomainWebKitInternal, 0, url, errorDescription)); } void DocumentThreadableLoader::loadRequest(const ResourceRequest& request, SecurityCheckPolicy securityCheck) diff --git a/WebCore/loader/DocumentThreadableLoader.h b/WebCore/loader/DocumentThreadableLoader.h index 48d1551..9800b9a 100644 --- a/WebCore/loader/DocumentThreadableLoader.h +++ b/WebCore/loader/DocumentThreadableLoader.h @@ -43,6 +43,7 @@ namespace WebCore { class Document; class KURL; class ResourceRequest; + class String; class ThreadableLoaderClient; class DocumentThreadableLoader : public RefCounted<DocumentThreadableLoader>, public ThreadableLoader, private SubresourceLoaderClient { @@ -84,7 +85,7 @@ namespace WebCore { void makeSimpleCrossOriginAccessRequest(const ResourceRequest& request); void makeCrossOriginAccessRequestWithPreflight(const ResourceRequest& request); void preflightSuccess(); - void preflightFailure(); + void preflightFailure(const String& url, const String& errorDescription); void loadRequest(const ResourceRequest&, SecurityCheckPolicy); bool isAllowedRedirect(const KURL&); diff --git a/WebCore/loader/FrameLoader.cpp b/WebCore/loader/FrameLoader.cpp index bdf7298..7b7487f 100644 --- a/WebCore/loader/FrameLoader.cpp +++ b/WebCore/loader/FrameLoader.cpp @@ -462,6 +462,7 @@ void FrameLoader::stopLoading(UnloadEventPolicy unloadEventPolicy, DatabasePolic m_frame->domWindow()->dispatchEvent(PageTransitionEvent::create(eventNames().pagehideEvent, m_frame->document()->inPageCache()), m_frame->document()); if (!m_frame->document()->inPageCache()) m_frame->domWindow()->dispatchEvent(Event::create(eventNames().unloadEvent, false, false), m_frame->domWindow()->document()); + m_frameLoadTimeline.unloadEventEnd = currentTime(); } m_pageDismissalEventBeingDispatched = false; if (m_frame->document()) @@ -826,7 +827,7 @@ void FrameLoader::startIconLoader() // This is either a reload or the icon database said "yes, load the icon", so kick off the load! if (!m_iconLoader) - m_iconLoader.set(IconLoader::create(m_frame).release()); + m_iconLoader = IconLoader::create(m_frame); m_iconLoader->startLoading(); } @@ -1530,6 +1531,9 @@ void FrameLoader::loadWithDocumentLoader(DocumentLoader* loader, FrameLoadType t if (m_pageDismissalEventBeingDispatched) return; + m_frameLoadTimeline = FrameLoadTimeline(); + m_frameLoadTimeline.navigationStart = currentTime(); + policyChecker()->setLoadType(type); RefPtr<FormState> formState = prpFormState; bool isFormSubmission = formState; @@ -2644,6 +2648,9 @@ String FrameLoader::userAgent(const KURL& url) const void FrameLoader::handledOnloadEvents() { m_client->dispatchDidHandleOnloadEvents(); + + m_loadType = FrameLoadTypeStandard; + #if ENABLE(OFFLINE_WEB_APPLICATIONS) if (documentLoader()) documentLoader()->applicationCacheHost()->stopDeferringEvents(); @@ -2716,6 +2723,13 @@ void FrameLoader::addExtraFieldsToRequest(ResourceRequest& request, FrameLoadTyp applyUserAgent(request); + // If we inherit cache policy from a main resource, we use the DocumentLoader's + // original request cache policy for two reasons: + // 1. For POST requests, we mutate the cache policy for the main resource, + // but we do not want this to apply to subresources + // 2. Delegates that modify the cache policy using willSendRequest: should + // not affect any other resources. Such changes need to be done + // per request. if (loadType == FrameLoadTypeReload) { request.setCachePolicy(ReloadIgnoringCacheData); request.setHTTPHeaderField("Cache-Control", "max-age=0"); @@ -2723,8 +2737,12 @@ void FrameLoader::addExtraFieldsToRequest(ResourceRequest& request, FrameLoadTyp request.setCachePolicy(ReloadIgnoringCacheData); request.setHTTPHeaderField("Cache-Control", "no-cache"); request.setHTTPHeaderField("Pragma", "no-cache"); - } else if (isBackForwardLoadType(loadType) && !request.url().protocolIs("https")) + } else if (request.isConditional()) + request.setCachePolicy(ReloadIgnoringCacheData); + else if (isBackForwardLoadType(loadType) && !request.url().protocolIs("https")) request.setCachePolicy(ReturnCacheDataElseLoad); + else if (!mainResource && documentLoader()->isLoadingInAPISense()) + request.setCachePolicy(documentLoader()->originalRequest().cachePolicy()); if (mainResource) request.setHTTPAccept(defaultAcceptHeader); @@ -2823,17 +2841,6 @@ unsigned long FrameLoader::loadResourceSynchronously(const ResourceRequest& requ ResourceRequest initialRequest = request; initialRequest.setTimeoutInterval(10); - // Use the original request's cache policy for two reasons: - // 1. For POST requests, we mutate the cache policy for the main resource, - // but we do not want this to apply to subresources - // 2. Delegates that modify the cache policy using willSendRequest: should - // not affect any other resources. Such changes need to be done - // per request. - if (initialRequest.isConditional()) - initialRequest.setCachePolicy(ReloadIgnoringCacheData); - else - initialRequest.setCachePolicy(originalRequest().cachePolicy()); - if (!referrer.isEmpty()) initialRequest.setHTTPReferrer(referrer); addHTTPOriginIfNeeded(initialRequest, outgoingOrigin()); @@ -2841,6 +2848,8 @@ unsigned long FrameLoader::loadResourceSynchronously(const ResourceRequest& requ if (Page* page = m_frame->page()) initialRequest.setFirstPartyForCookies(page->mainFrame()->loader()->documentLoader()->request().url()); initialRequest.setHTTPUserAgent(client()->userAgent(request.url())); + + addExtraFieldsToSubresourceRequest(initialRequest); unsigned long identifier = 0; ResourceRequest newRequest(initialRequest); diff --git a/WebCore/loader/FrameLoader.h b/WebCore/loader/FrameLoader.h index e157850..491e6ef 100644 --- a/WebCore/loader/FrameLoader.h +++ b/WebCore/loader/FrameLoader.h @@ -197,6 +197,8 @@ public: void didChangeIcons(DocumentLoader*); FrameLoadType loadType() const; + FrameLoadTimeline* frameLoadTimeline() { return &m_frameLoadTimeline; } + CachePolicy subresourceCachePolicy() const; void didFirstLayout(); @@ -448,6 +450,7 @@ private: FrameState m_state; FrameLoadType m_loadType; + FrameLoadTimeline m_frameLoadTimeline; // Document loaders for the three phases of frame loading. Note that while // a new request is being loaded, the old document loader may still be referenced. diff --git a/WebCore/loader/FrameLoaderTypes.h b/WebCore/loader/FrameLoaderTypes.h index 016de19..b1388a5 100644 --- a/WebCore/loader/FrameLoaderTypes.h +++ b/WebCore/loader/FrameLoaderTypes.h @@ -60,6 +60,21 @@ namespace WebCore { FrameLoadTypeBackWMLDeckNotAccessible }; + struct FrameLoadTimeline { + FrameLoadTimeline() + : navigationStart(0) + , unloadEventEnd(0) + , loadEventStart(0) + , loadEventEnd(0) + { + } + + double navigationStart; + double unloadEventEnd; + double loadEventStart; + double loadEventEnd; + }; + enum NavigationType { NavigationTypeLinkClicked, NavigationTypeFormSubmitted, diff --git a/WebCore/loader/ImageLoader.cpp b/WebCore/loader/ImageLoader.cpp index a95d35a..d169d3e 100644 --- a/WebCore/loader/ImageLoader.cpp +++ b/WebCore/loader/ImageLoader.cpp @@ -27,6 +27,8 @@ #include "DocLoader.h" #include "Document.h" #include "Element.h" +#include "HTMLNames.h" +#include "HTMLObjectElement.h" #include "RenderImage.h" #if !ASSERT_DISABLED @@ -255,6 +257,9 @@ void ImageLoader::dispatchPendingBeforeLoadEvent() m_image = 0; } loadEventSender().cancelEvent(this); + + if (m_element->hasTagName(HTMLNames::objectTag)) + static_cast<HTMLObjectElement*>(m_element)->renderFallbackContent(); } void ImageLoader::dispatchPendingLoadEvent() diff --git a/WebCore/loader/SubresourceLoader.cpp b/WebCore/loader/SubresourceLoader.cpp index 9c2959b..7aef353 100644 --- a/WebCore/loader/SubresourceLoader.cpp +++ b/WebCore/loader/SubresourceLoader.cpp @@ -84,17 +84,6 @@ PassRefPtr<SubresourceLoader> SubresourceLoader::create(Frame* frame, Subresourc newRequest.setHTTPReferrer(fl->outgoingReferrer()); FrameLoader::addHTTPOriginIfNeeded(newRequest, fl->outgoingOrigin()); - // Use the original request's cache policy for two reasons: - // 1. For POST requests, we mutate the cache policy for the main resource, - // but we do not want this to apply to subresources - // 2. Delegates that modify the cache policy using willSendRequest: should - // not affect any other resources. Such changes need to be done - // per request. - if (newRequest.isConditional()) - newRequest.setCachePolicy(ReloadIgnoringCacheData); - else - newRequest.setCachePolicy(fl->originalRequest().cachePolicy()); - fl->addExtraFieldsToSubresourceRequest(newRequest); RefPtr<SubresourceLoader> subloader(adoptRef(new SubresourceLoader(frame, client, sendResourceLoadCallbacks, shouldContentSniff))); diff --git a/WebCore/loader/TextResourceDecoder.cpp b/WebCore/loader/TextResourceDecoder.cpp index e4fd855..6d43d77 100644 --- a/WebCore/loader/TextResourceDecoder.cpp +++ b/WebCore/loader/TextResourceDecoder.cpp @@ -812,7 +812,7 @@ String TextResourceDecoder::decode(const char* data, size_t len) ASSERT(m_encoding.isValid()); if (!m_codec) - m_codec.set(newTextCodec(m_encoding).release()); + m_codec = newTextCodec(m_encoding); if (m_buffer.isEmpty()) return m_codec->decode(data + lengthOfBOM, len - lengthOfBOM, false, m_contentType == XML, m_sawError); @@ -842,7 +842,7 @@ String TextResourceDecoder::flush() } if (!m_codec) - m_codec.set(newTextCodec(m_encoding).release()); + m_codec = newTextCodec(m_encoding); String result = m_codec->decode(m_buffer.data(), m_buffer.size(), true, m_contentType == XML && !m_useLenientXMLDecoding, m_sawError); m_buffer.clear(); diff --git a/WebCore/loader/appcache/ApplicationCacheGroup.cpp b/WebCore/loader/appcache/ApplicationCacheGroup.cpp index 526043b..3d1199d 100644 --- a/WebCore/loader/appcache/ApplicationCacheGroup.cpp +++ b/WebCore/loader/appcache/ApplicationCacheGroup.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008, 2009 Apple Inc. All Rights Reserved. + * Copyright (C) 2008, 2009, 2010 Apple Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -45,12 +45,20 @@ #include "Settings.h" #include <wtf/HashMap.h> +#if ENABLE(INSPECTOR) +#include "InspectorApplicationCacheAgent.h" +#include "InspectorController.h" +#include "ProgressTracker.h" +#endif + namespace WebCore { ApplicationCacheGroup::ApplicationCacheGroup(const KURL& manifestURL, bool isCopy) : m_manifestURL(manifestURL) , m_updateStatus(Idle) , m_downloadingPendingMasterResourceLoadersCount(0) + , m_progressTotal(0) + , m_progressDone(0) , m_frame(0) , m_storageID(0) , m_isObsolete(false) @@ -368,12 +376,30 @@ void ApplicationCacheGroup::cacheDestroyed(ApplicationCache* cache) } } +#if ENABLE(INSPECTOR) +static void inspectorUpdateApplicationCacheStatus(Frame* frame) +{ + if (!frame) + return; + + if (Page *page = frame->page()) { + if (InspectorApplicationCacheAgent* applicationCacheAgent = page->inspectorController()->applicationCacheAgent()) { + ApplicationCacheHost::Status status = frame->loader()->documentLoader()->applicationCacheHost()->status(); + applicationCacheAgent->updateApplicationCacheStatus(status); + } + } +} +#endif + void ApplicationCacheGroup::setNewestCache(PassRefPtr<ApplicationCache> newestCache) { m_newestCache = newestCache; m_caches.add(m_newestCache.get()); m_newestCache->setGroup(this); +#if ENABLE(INSPECTOR) + inspectorUpdateApplicationCacheStatus(m_frame); +#endif } void ApplicationCacheGroup::makeObsolete() @@ -384,6 +410,9 @@ void ApplicationCacheGroup::makeObsolete() m_isObsolete = true; cacheStorage().cacheGroupMadeObsolete(this); ASSERT(!m_storageID); +#if ENABLE(INSPECTOR) + inspectorUpdateApplicationCacheStatus(m_frame); +#endif } void ApplicationCacheGroup::update(Frame* frame, ApplicationCacheUpdateOption updateOption) @@ -410,7 +439,7 @@ void ApplicationCacheGroup::update(Frame* frame, ApplicationCacheUpdateOption up ASSERT(!m_frame); m_frame = frame; - m_updateStatus = Checking; + setUpdateStatus(Checking); postListenerTask(ApplicationCacheHost::CHECKING_EVENT, m_associatedDocumentLoaders); if (!m_newestCache) { @@ -442,12 +471,43 @@ PassRefPtr<ResourceHandle> ApplicationCacheGroup::createResourceHandle(const KUR request.setHTTPHeaderField("If-None-Match", eTag); } } - - return ResourceHandle::create(request, this, m_frame, false, true); + + RefPtr<ResourceHandle> handle = ResourceHandle::create(request, this, m_frame, false, true); +#if ENABLE(INSPECTOR) + // Because willSendRequest only gets called during redirects, we initialize + // the identifier and the first willSendRequest here. + m_currentResourceIdentifier = m_frame->page()->progress()->createUniqueIdentifier(); + if (Page* page = m_frame->page()) { + InspectorController* inspectorController = page->inspectorController(); + inspectorController->identifierForInitialRequest(m_currentResourceIdentifier, m_frame->loader()->documentLoader(), handle->request()); + ResourceResponse redirectResponse = ResourceResponse(); + inspectorController->willSendRequest(m_currentResourceIdentifier, request, redirectResponse); + } +#endif + return handle; +} + +#if ENABLE(INSPECTOR) +void ApplicationCacheGroup::willSendRequest(ResourceHandle*, ResourceRequest& request, const ResourceResponse& redirectResponse) +{ + // This only gets called by ResourceHandleMac if there is a redirect. + if (Page* page = m_frame->page()) + page->inspectorController()->willSendRequest(m_currentResourceIdentifier, request, redirectResponse); } +#endif void ApplicationCacheGroup::didReceiveResponse(ResourceHandle* handle, const ResourceResponse& response) { +#if ENABLE(INSPECTOR) + if (Page* page = m_frame->page()) { + if (handle == m_manifestHandle) { + if (InspectorApplicationCacheAgent* applicationCacheAgent = page->inspectorController()->applicationCacheAgent()) + applicationCacheAgent->didReceiveManifestResponse(m_currentResourceIdentifier, response); + } else + page->inspectorController()->didReceiveResponse(m_currentResourceIdentifier, response); + } +#endif + if (handle == m_manifestHandle) { didReceiveManifestResponse(response); return; @@ -512,8 +572,15 @@ void ApplicationCacheGroup::didReceiveResponse(ResourceHandle* handle, const Res m_currentResource = ApplicationCacheResource::create(url, response, type); } -void ApplicationCacheGroup::didReceiveData(ResourceHandle* handle, const char* data, int length, int) +void ApplicationCacheGroup::didReceiveData(ResourceHandle* handle, const char* data, int length, int lengthReceived) { +#if ENABLE(INSPECTOR) + if (Page* page = m_frame->page()) + page->inspectorController()->didReceiveContentLength(m_currentResourceIdentifier, lengthReceived); +#else + UNUSED_PARAM(lengthReceived); +#endif + if (handle == m_manifestHandle) { didReceiveManifestData(data, length); return; @@ -527,6 +594,11 @@ void ApplicationCacheGroup::didReceiveData(ResourceHandle* handle, const char* d void ApplicationCacheGroup::didFinishLoading(ResourceHandle* handle) { +#if ENABLE(INSPECTOR) + if (Page* page = m_frame->page()) + page->inspectorController()->didFinishLoading(m_currentResourceIdentifier); +#endif + if (handle == m_manifestHandle) { didFinishLoadingManifest(); return; @@ -546,8 +618,15 @@ void ApplicationCacheGroup::didFinishLoading(ResourceHandle* handle) startLoadingEntry(); } -void ApplicationCacheGroup::didFail(ResourceHandle* handle, const ResourceError&) +void ApplicationCacheGroup::didFail(ResourceHandle* handle, const ResourceError& error) { +#if ENABLE(INSPECTOR) + if (Page* page = m_frame->page()) + page->inspectorController()->didFailLoading(m_currentResourceIdentifier, error); +#else + UNUSED_PARAM(error); +#endif + if (handle == m_manifestHandle) { cacheUpdateFailed(); return; @@ -648,7 +727,7 @@ void ApplicationCacheGroup::didFinishLoadingManifest() associateDocumentLoaderWithCache(*iter, m_cacheBeingUpdated.get()); // We have the manifest, now download the resources. - m_updateStatus = Downloading; + setUpdateStatus(Downloading); postListenerTask(ApplicationCacheHost::DOWNLOADING_EVENT, m_associatedDocumentLoaders); @@ -674,7 +753,10 @@ void ApplicationCacheGroup::didFinishLoadingManifest() m_cacheBeingUpdated->setOnlineWhitelist(manifest.onlineWhitelistedURLs); m_cacheBeingUpdated->setFallbackURLs(manifest.fallbackURLs); m_cacheBeingUpdated->setAllowsAllNetworkRequests(manifest.allowAllNetworkRequests); - + + m_progressTotal = m_pendingEntries.size(); + m_progressDone = 0; + startLoadingEntry(); } @@ -719,7 +801,7 @@ void ApplicationCacheGroup::manifestNotFound() } m_downloadingPendingMasterResourceLoadersCount = 0; - m_updateStatus = Idle; + setUpdateStatus(Idle); m_frame = 0; if (m_caches.isEmpty()) { @@ -782,7 +864,12 @@ void ApplicationCacheGroup::checkIfLoadIsComplete() // New cache stored, now remove the old cache. if (oldNewestCache) cacheStorage().remove(oldNewestCache.get()); - // Fire the success events. + + // Fire the final progress event. + ASSERT(m_progressDone == m_progressTotal); + postListenerTask(ApplicationCacheHost::PROGRESS_EVENT, m_progressTotal, m_progressDone, m_associatedDocumentLoaders); + + // Fire the success event. postListenerTask(isUpgradeAttempt ? ApplicationCacheHost::UPDATEREADY_EVENT : ApplicationCacheHost::CACHED_EVENT, m_associatedDocumentLoaders); } else { if (cacheStorage().isMaximumSizeReached() && !m_calledReachedMaxAppCacheSize) { @@ -832,7 +919,7 @@ void ApplicationCacheGroup::checkIfLoadIsComplete() // Empty cache group's list of pending master entries. m_pendingMasterResourceLoaders.clear(); m_completionType = None; - m_updateStatus = Idle; + setUpdateStatus(Idle); m_frame = 0; m_calledReachedMaxAppCacheSize = false; } @@ -849,7 +936,8 @@ void ApplicationCacheGroup::startLoadingEntry() EntryMap::const_iterator it = m_pendingEntries.begin(); - postListenerTask(ApplicationCacheHost::PROGRESS_EVENT, m_associatedDocumentLoaders); + postListenerTask(ApplicationCacheHost::PROGRESS_EVENT, m_progressTotal, m_progressDone, m_associatedDocumentLoaders); + m_progressDone++; ASSERT(!m_currentHandle); @@ -948,9 +1036,9 @@ void ApplicationCacheGroup::scheduleReachedMaxAppCacheSizeCallback() class CallCacheListenerTask : public ScriptExecutionContext::Task { public: - static PassOwnPtr<CallCacheListenerTask> create(PassRefPtr<DocumentLoader> loader, ApplicationCacheHost::EventID eventID) + static PassOwnPtr<CallCacheListenerTask> create(PassRefPtr<DocumentLoader> loader, ApplicationCacheHost::EventID eventID, int progressTotal, int progressDone) { - return new CallCacheListenerTask(loader, eventID); + return adoptPtr(new CallCacheListenerTask(loader, eventID, progressTotal, progressDone)); } virtual void performTask(ScriptExecutionContext* context) @@ -963,28 +1051,32 @@ public: ASSERT(frame->loader()->documentLoader() == m_documentLoader.get()); - m_documentLoader->applicationCacheHost()->notifyDOMApplicationCache(m_eventID); + m_documentLoader->applicationCacheHost()->notifyDOMApplicationCache(m_eventID, m_progressTotal, m_progressDone); } private: - CallCacheListenerTask(PassRefPtr<DocumentLoader> loader, ApplicationCacheHost::EventID eventID) + CallCacheListenerTask(PassRefPtr<DocumentLoader> loader, ApplicationCacheHost::EventID eventID, int progressTotal, int progressDone) : m_documentLoader(loader) , m_eventID(eventID) + , m_progressTotal(progressTotal) + , m_progressDone(progressDone) { } RefPtr<DocumentLoader> m_documentLoader; ApplicationCacheHost::EventID m_eventID; + int m_progressTotal; + int m_progressDone; }; -void ApplicationCacheGroup::postListenerTask(ApplicationCacheHost::EventID eventID, const HashSet<DocumentLoader*>& loaderSet) +void ApplicationCacheGroup::postListenerTask(ApplicationCacheHost::EventID eventID, int progressTotal, int progressDone, const HashSet<DocumentLoader*>& loaderSet) { HashSet<DocumentLoader*>::const_iterator loaderSetEnd = loaderSet.end(); for (HashSet<DocumentLoader*>::const_iterator iter = loaderSet.begin(); iter != loaderSetEnd; ++iter) - postListenerTask(eventID, *iter); + postListenerTask(eventID, progressTotal, progressDone, *iter); } -void ApplicationCacheGroup::postListenerTask(ApplicationCacheHost::EventID eventID, DocumentLoader* loader) +void ApplicationCacheGroup::postListenerTask(ApplicationCacheHost::EventID eventID, int progressTotal, int progressDone, DocumentLoader* loader) { Frame* frame = loader->frame(); if (!frame) @@ -992,7 +1084,15 @@ void ApplicationCacheGroup::postListenerTask(ApplicationCacheHost::EventID event ASSERT(frame->loader()->documentLoader() == loader); - frame->document()->postTask(CallCacheListenerTask::create(loader, eventID)); + frame->document()->postTask(CallCacheListenerTask::create(loader, eventID, progressTotal, progressDone)); +} + +void ApplicationCacheGroup::setUpdateStatus(UpdateStatus status) +{ + m_updateStatus = status; +#if ENABLE(INSPECTOR) + inspectorUpdateApplicationCacheStatus(m_frame); +#endif } void ApplicationCacheGroup::clearStorageID() diff --git a/WebCore/loader/appcache/ApplicationCacheGroup.h b/WebCore/loader/appcache/ApplicationCacheGroup.h index 8df52cc..9b8a6ab 100644 --- a/WebCore/loader/appcache/ApplicationCacheGroup.h +++ b/WebCore/loader/appcache/ApplicationCacheGroup.h @@ -67,12 +67,13 @@ public: const KURL& manifestURL() const { return m_manifestURL; } UpdateStatus updateStatus() const { return m_updateStatus; } + void setUpdateStatus(UpdateStatus status); void setStorageID(unsigned storageID) { m_storageID = storageID; } unsigned storageID() const { return m_storageID; } void clearStorageID(); - void update(Frame*, ApplicationCacheUpdateOption); // FIXME: Frame should not bee needed when updating witout browsing context. + void update(Frame*, ApplicationCacheUpdateOption); // FIXME: Frame should not be needed when updating without browsing context. void cacheDestroyed(ApplicationCache*); bool cacheIsBeingUpdated(const ApplicationCache* cache) const { return cache == m_cacheBeingUpdated; } @@ -91,8 +92,11 @@ public: bool isCopy() const { return m_isCopy; } private: - static void postListenerTask(ApplicationCacheHost::EventID, const HashSet<DocumentLoader*>&); - static void postListenerTask(ApplicationCacheHost::EventID, DocumentLoader*); + static void postListenerTask(ApplicationCacheHost::EventID id, const HashSet<DocumentLoader*>& set) { postListenerTask(id, 0, 0, set); } + static void postListenerTask(ApplicationCacheHost::EventID id, DocumentLoader* loader) { postListenerTask(id, 0, 0, loader); } + static void postListenerTask(ApplicationCacheHost::EventID, int progressTotal, int progressDone, const HashSet<DocumentLoader*>&); + static void postListenerTask(ApplicationCacheHost::EventID, int progressTotal, int progressDone, DocumentLoader*); + void scheduleReachedMaxAppCacheSizeCallback(); PassRefPtr<ResourceHandle> createResourceHandle(const KURL&, ApplicationCacheResource* newestCachedResource); @@ -101,8 +105,11 @@ private: // the existing client callback cannot be used, so assume that any client that enables application cache also wants it to use credential storage. virtual bool shouldUseCredentialStorage(ResourceHandle*) { return true; } +#if ENABLE(INSPECTOR) + virtual void willSendRequest(ResourceHandle*, ResourceRequest&, const ResourceResponse&); +#endif virtual void didReceiveResponse(ResourceHandle*, const ResourceResponse&); - virtual void didReceiveData(ResourceHandle*, const char*, int, int lengthReceived); + virtual void didReceiveData(ResourceHandle*, const char*, int length, int lengthReceived); virtual void didFinishLoading(ResourceHandle*); virtual void didFail(ResourceHandle*, const ResourceError&); @@ -147,6 +154,10 @@ private: // The URLs and types of pending cache entries. typedef HashMap<String, unsigned> EntryMap; EntryMap m_pendingEntries; + + // The total number of items to be processed to update the cache group and the number that have been done. + int m_progressTotal; + int m_progressDone; // Frame used for fetching resources when updating. // FIXME: An update started by a particular frame should not stop if it is destroyed, but there are other frames associated with the same cache group. @@ -175,7 +186,11 @@ private: RefPtr<ResourceHandle> m_currentHandle; RefPtr<ApplicationCacheResource> m_currentResource; - + +#if ENABLE(INSPECTOR) + unsigned long m_currentResourceIdentifier; +#endif + RefPtr<ApplicationCacheResource> m_manifestResource; RefPtr<ResourceHandle> m_manifestHandle; diff --git a/WebCore/loader/appcache/ApplicationCacheHost.cpp b/WebCore/loader/appcache/ApplicationCacheHost.cpp index fc98746..f63de55 100644 --- a/WebCore/loader/appcache/ApplicationCacheHost.cpp +++ b/WebCore/loader/appcache/ApplicationCacheHost.cpp @@ -37,6 +37,7 @@ #include "FrameLoader.h" #include "FrameLoaderClient.h" #include "MainResourceLoader.h" +#include "ProgressEvent.h" #include "ResourceLoader.h" #include "ResourceRequest.h" #include "Settings.h" @@ -228,35 +229,42 @@ void ApplicationCacheHost::setDOMApplicationCache(DOMApplicationCache* domApplic m_domApplicationCache = domApplicationCache; } -void ApplicationCacheHost::notifyDOMApplicationCache(EventID id) +void ApplicationCacheHost::notifyDOMApplicationCache(EventID id, int total, int done) { if (m_defersEvents) { - // Events are deferred until document.onload has fired. - m_deferredEvents.append(id); + // Event dispatching is deferred until document.onload has fired. + m_deferredEvents.append(DeferredEvent(id, total, done)); return; } - if (m_domApplicationCache) { - ExceptionCode ec = 0; - m_domApplicationCache->dispatchEvent(Event::create(DOMApplicationCache::toEventType(id), false, false), ec); - ASSERT(!ec); - } + dispatchDOMEvent(id, total, done); } void ApplicationCacheHost::stopDeferringEvents() { RefPtr<DocumentLoader> protect(documentLoader()); for (unsigned i = 0; i < m_deferredEvents.size(); ++i) { - EventID id = m_deferredEvents[i]; - if (m_domApplicationCache) { - ExceptionCode ec = 0; - m_domApplicationCache->dispatchEvent(Event::create(DOMApplicationCache::toEventType(id), false, false), ec); - ASSERT(!ec); - } + const DeferredEvent& deferred = m_deferredEvents[i]; + dispatchDOMEvent(deferred.eventID, deferred.progressTotal, deferred.progressDone); } m_deferredEvents.clear(); m_defersEvents = false; } +void ApplicationCacheHost::dispatchDOMEvent(EventID id, int total, int done) +{ + if (m_domApplicationCache) { + const AtomicString& eventType = DOMApplicationCache::toEventType(id); + ExceptionCode ec = 0; + RefPtr<Event> event; + if (id == PROGRESS_EVENT) + event = ProgressEvent::create(eventType, true, done, total); + else + event = Event::create(eventType, false, false); + m_domApplicationCache->dispatchEvent(event, ec); + ASSERT(!ec); + } +} + void ApplicationCacheHost::setCandidateApplicationCacheGroup(ApplicationCacheGroup* group) { ASSERT(!m_applicationCache); diff --git a/WebCore/loader/appcache/ApplicationCacheHost.h b/WebCore/loader/appcache/ApplicationCacheHost.h index 52d4d40..a5b55e9 100644 --- a/WebCore/loader/appcache/ApplicationCacheHost.h +++ b/WebCore/loader/appcache/ApplicationCacheHost.h @@ -40,7 +40,7 @@ #include <wtf/Vector.h> namespace WebCore { - + class ApplicationCache; class DOMApplicationCache; class DocumentLoader; class KURL; @@ -52,7 +52,6 @@ namespace WebCore { #if PLATFORM(CHROMIUM) class ApplicationCacheHostInternal; #else - class ApplicationCache; class ApplicationCacheGroup; class ApplicationCacheResource; class ApplicationCacheStorage; @@ -108,23 +107,35 @@ namespace WebCore { bool update(); bool swapCache(); - void setDOMApplicationCache(DOMApplicationCache* domApplicationCache); - void notifyDOMApplicationCache(EventID id); + void setDOMApplicationCache(DOMApplicationCache*); + void notifyDOMApplicationCache(EventID, int progressTotal, int progressDone); void stopDeferringEvents(); // Also raises the events that have been queued up. + ApplicationCache* applicationCacheForInspector() const { return applicationCache(); } + private: bool isApplicationCacheEnabled(); - DocumentLoader* documentLoader() { return m_documentLoader; } + DocumentLoader* documentLoader() const { return m_documentLoader; } + + struct DeferredEvent { + EventID eventID; + int progressTotal; + int progressDone; + DeferredEvent(EventID id, int total, int done) : eventID(id), progressTotal(total), progressDone(done) { } + }; DOMApplicationCache* m_domApplicationCache; DocumentLoader* m_documentLoader; bool m_defersEvents; // Events are deferred until after document onload. - Vector<EventID> m_deferredEvents; + Vector<DeferredEvent> m_deferredEvents; + + void dispatchDOMEvent(EventID, int progressTotal, int progressDone); #if PLATFORM(CHROMIUM) friend class ApplicationCacheHostInternal; OwnPtr<ApplicationCacheHostInternal> m_internal; + ApplicationCache* applicationCache() const { return 0; } // FIXME: Implement for Chromium Web Inspector Support. #else friend class ApplicationCacheGroup; friend class ApplicationCacheStorage; diff --git a/WebCore/loader/appcache/ApplicationCacheStorage.cpp b/WebCore/loader/appcache/ApplicationCacheStorage.cpp index 59232a5..9a11307 100644 --- a/WebCore/loader/appcache/ApplicationCacheStorage.cpp +++ b/WebCore/loader/appcache/ApplicationCacheStorage.cpp @@ -999,7 +999,7 @@ bool ApplicationCacheStorage::storeCopyOfCache(const String& cacheDirectory, App } // Now create a new cache group. - OwnPtr<ApplicationCacheGroup> groupCopy(new ApplicationCacheGroup(cache->group()->manifestURL(), true)); + OwnPtr<ApplicationCacheGroup> groupCopy(adoptPtr(new ApplicationCacheGroup(cache->group()->manifestURL(), true))); groupCopy->setNewestCache(cacheCopy); diff --git a/WebCore/make-export-file-generator b/WebCore/make-export-file-generator new file mode 100755 index 0000000..7ee14c9 --- /dev/null +++ b/WebCore/make-export-file-generator @@ -0,0 +1,57 @@ +#!/usr/bin/env ruby + +# Copyright (C) 2010 Apple Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +# THE POSSIBILITY OF SUCH DAMAGE. + +input_file = ARGV[0] +output_file = ARGV[1] + +require 'erb' + +def line_for_output line + return line.chomp if line =~ /#/ + " printf(\"#{line.chomp}\\n\");" +end + +TEMPLATE = <<-EOF +#include "config.h" +#include <stdio.h> + +int main(int, char**) +{ +<%- input.each_line do |line| -%> +<%= line_for_output line %> +<%- end -%> + + return 0; +} +EOF + +File.open(output_file, "w") do |output| + File.open(input_file) do |input| + renderer = ERB.new(TEMPLATE, 0, "-") + output << renderer.result(binding) + end +end + +STDERR.puts "Wrote output to #{output_file}" diff --git a/WebCore/mathml/MathMLElement.cpp b/WebCore/mathml/MathMLElement.cpp index b93ff9f..30d02da 100644 --- a/WebCore/mathml/MathMLElement.cpp +++ b/WebCore/mathml/MathMLElement.cpp @@ -1,6 +1,7 @@ /* * Copyright (C) 2009 Alex Milowski (alex@milowski.com). All rights reserved. * Copyright (C) 2010 Apple Inc. All rights reserved. + * Copyright (C) 2010 François Sausset (sausset@gmail.com). All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -46,6 +47,30 @@ PassRefPtr<MathMLElement> MathMLElement::create(const QualifiedName& tagName, Do { return adoptRef(new MathMLElement(tagName, document)); } + +bool MathMLElement::mapToEntry(const QualifiedName& attrName, MappedAttributeEntry& result) const +{ + if (attrName == MathMLNames::mathcolorAttr || attrName == MathMLNames::mathbackgroundAttr) { + result = eMathML; + return false; + } + return StyledElement::mapToEntry(attrName, result); +} + +void MathMLElement::parseMappedAttribute(Attribute* attr) +{ + if (attr->name() == MathMLNames::mathbackgroundAttr) + addCSSProperty(attr, CSSPropertyBackgroundColor, attr->value()); + else if (attr->name() == MathMLNames::mathcolorAttr) + addCSSProperty(attr, CSSPropertyColor, attr->value()); + else if (attr->name() == MathMLNames::mathsizeAttr) { + // The following three values of mathsize are handled in WebCore/css/mathml.css + if (attr->value() != "normal" && attr->value() != "small" && attr->value() != "big") + addCSSProperty(attr, CSSPropertyFontSize, attr->value()); + } + else + StyledElement::parseMappedAttribute(attr); +} } diff --git a/WebCore/mathml/MathMLElement.h b/WebCore/mathml/MathMLElement.h index 46cd7fd..7678f26 100644 --- a/WebCore/mathml/MathMLElement.h +++ b/WebCore/mathml/MathMLElement.h @@ -1,6 +1,7 @@ /* * Copyright (C) 2009 Alex Milowski (alex@milowski.com). All rights reserved. * Copyright (C) 2010 Apple Inc. All rights reserved. + * Copyright (C) 2010 François Sausset (sausset@gmail.com). All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -41,6 +42,8 @@ protected: private: virtual bool isMathMLElement() const { return true; } + virtual bool mapToEntry(const QualifiedName&, MappedAttributeEntry&) const; + virtual void parseMappedAttribute(Attribute*); }; } diff --git a/WebCore/mathml/RenderMathMLFraction.cpp b/WebCore/mathml/RenderMathMLFraction.cpp index 811c230..cd0681d 100644 --- a/WebCore/mathml/RenderMathMLFraction.cpp +++ b/WebCore/mathml/RenderMathMLFraction.cpp @@ -168,7 +168,7 @@ void RenderMathMLFraction::paint(PaintInfo& info, int tx, int ty) info.context->setStrokeThickness(static_cast<float>(m_lineThickness)); info.context->setStrokeStyle(SolidStroke); - info.context->setStrokeColor(Color(0, 0, 0), sRGBColorSpace); + info.context->setStrokeColor(style()->visitedDependentColor(CSSPropertyColor), sRGBColorSpace); info.context->drawLine(IntPoint(tx, ty), IntPoint(tx + offsetWidth(), ty)); diff --git a/WebCore/mathml/RenderMathMLSquareRoot.cpp b/WebCore/mathml/RenderMathMLSquareRoot.cpp index 6802176..be62f57 100644 --- a/WebCore/mathml/RenderMathMLSquareRoot.cpp +++ b/WebCore/mathml/RenderMathMLSquareRoot.cpp @@ -117,7 +117,7 @@ void RenderMathMLSquareRoot::paint(PaintInfo& info, int tx, int ty) info.context->setStrokeThickness(gRadicalLineThickness * style()->fontSize()); info.context->setStrokeStyle(SolidStroke); - info.context->setStrokeColor(style()->visitedDependentColor(CSSPropertyColor), sRGBColorSpace); + info.context->setStrokeColor(style()->visitedDependentColor(CSSPropertyColor), DeviceColorSpace); info.context->setLineJoin(MiterJoin); info.context->setMiterLimit(style()->fontSize()); diff --git a/WebCore/mathml/mathattrs.in b/WebCore/mathml/mathattrs.in index df2329a..55a25ed 100644 --- a/WebCore/mathml/mathattrs.in +++ b/WebCore/mathml/mathattrs.in @@ -6,6 +6,8 @@ attrsNullNamespace close denomalign linethickness +mathbackground +mathcolor mathsize numalign open diff --git a/WebCore/mathml/mathtags.in b/WebCore/mathml/mathtags.in index e9cc4ad..5bb369a 100644 --- a/WebCore/mathml/mathtags.in +++ b/WebCore/mathml/mathtags.in @@ -18,3 +18,10 @@ mo interfaceName=MathMLTextElement mtext interfaceName=MathMLTextElement msub interfaceName=MathMLElement msup interfaceName=MathMLElement + +#if 0 // Curently only for MathMLNames used by HTMLTreeBuilder. +ms +mglyph +malignmark +annotation-xml +#endif diff --git a/WebCore/notifications/Notification.cpp b/WebCore/notifications/Notification.cpp index 3684245..c1edab4 100644 --- a/WebCore/notifications/Notification.cpp +++ b/WebCore/notifications/Notification.cpp @@ -52,7 +52,7 @@ Notification::Notification(const KURL& url, ScriptExecutionContext* context, Exc , m_presenter(provider) { ASSERT(m_presenter); - if (m_presenter->checkPermission(context->url()) != NotificationPresenter::PermissionAllowed) { + if (m_presenter->checkPermission(context) != NotificationPresenter::PermissionAllowed) { ec = SECURITY_ERR; return; } @@ -73,7 +73,7 @@ Notification::Notification(const NotificationContents& contents, ScriptExecution , m_presenter(provider) { ASSERT(m_presenter); - if (m_presenter->checkPermission(context->url()) != NotificationPresenter::PermissionAllowed) { + if (m_presenter->checkPermission(context) != NotificationPresenter::PermissionAllowed) { ec = SECURITY_ERR; return; } diff --git a/WebCore/notifications/NotificationCenter.cpp b/WebCore/notifications/NotificationCenter.cpp index 8089d87..f9672ad 100644 --- a/WebCore/notifications/NotificationCenter.cpp +++ b/WebCore/notifications/NotificationCenter.cpp @@ -49,14 +49,20 @@ int NotificationCenter::checkPermission() { if (!presenter()) return NotificationPresenter::PermissionDenied; - return m_notificationPresenter->checkPermission(m_scriptExecutionContext->url()); + return m_notificationPresenter->checkPermission(m_scriptExecutionContext); } void NotificationCenter::requestPermission(PassRefPtr<VoidCallback> callback) { if (!presenter()) return; - m_notificationPresenter->requestPermission(m_scriptExecutionContext->securityOrigin(), callback); + m_notificationPresenter->requestPermission(m_scriptExecutionContext, callback); +} + +void NotificationCenter::disconnectFrame() +{ + m_notificationPresenter->cancelRequestsForPermission(m_scriptExecutionContext); + m_notificationPresenter = 0; } } // namespace WebCore diff --git a/WebCore/notifications/NotificationCenter.h b/WebCore/notifications/NotificationCenter.h index ce20630..349e8a4 100644 --- a/WebCore/notifications/NotificationCenter.h +++ b/WebCore/notifications/NotificationCenter.h @@ -77,7 +77,7 @@ namespace WebCore { int checkPermission(); void requestPermission(PassRefPtr<VoidCallback> callback); - void disconnectFrame() { m_notificationPresenter = 0; } + void disconnectFrame(); private: NotificationCenter(ScriptExecutionContext*, NotificationPresenter*); diff --git a/WebCore/notifications/NotificationPresenter.h b/WebCore/notifications/NotificationPresenter.h index 193eb2b..e3e7ee2 100644 --- a/WebCore/notifications/NotificationPresenter.h +++ b/WebCore/notifications/NotificationPresenter.h @@ -41,7 +41,7 @@ namespace WebCore { class Document; class Notification; class KURL; - class SecurityOrigin; + class ScriptExecutionContext; class String; class NotificationPresenter { @@ -67,12 +67,15 @@ namespace WebCore { virtual void notificationObjectDestroyed(Notification*) = 0; // Requests user permission to show desktop notifications from a particular - // origin. The callback parameter should be run when the user has + // script context. The callback parameter should be run when the user has // made a decision. - virtual void requestPermission(SecurityOrigin*, PassRefPtr<VoidCallback>) = 0; + virtual void requestPermission(ScriptExecutionContext*, PassRefPtr<VoidCallback>) = 0; + + // Cancel all outstanding requests for the ScriptExecutionContext + virtual void cancelRequestsForPermission(ScriptExecutionContext*) = 0; // Checks the current level of permission. - virtual Permission checkPermission(const KURL&) = 0; + virtual Permission checkPermission(ScriptExecutionContext*) = 0; }; } // namespace WebCore diff --git a/WebCore/page/Chrome.cpp b/WebCore/page/Chrome.cpp index 0124211..f2e1d9d 100644 --- a/WebCore/page/Chrome.cpp +++ b/WebCore/page/Chrome.cpp @@ -318,16 +318,6 @@ bool Chrome::shouldInterruptJavaScript() return m_client->shouldInterruptJavaScript(); } -void Chrome::registerProtocolHandler(const String& scheme, const String& baseURL, const String& url, const String& title) -{ - m_client->registerProtocolHandler(scheme, baseURL, url, title); -} - -void Chrome::registerContentHandler(const String& mimeType, const String& baseURL, const String& url, const String& title) -{ - m_client->registerContentHandler(mimeType, baseURL, url, title); -} - IntRect Chrome::windowResizerRect() const { return m_client->windowResizerRect(); diff --git a/WebCore/page/Chrome.h b/WebCore/page/Chrome.h index 88035a5..27bde83 100644 --- a/WebCore/page/Chrome.h +++ b/WebCore/page/Chrome.h @@ -121,9 +121,6 @@ namespace WebCore { void setStatusbarText(Frame*, const String&); bool shouldInterruptJavaScript(); - void registerProtocolHandler(const String& scheme, const String& baseURL, const String& url, const String& title); - void registerContentHandler(const String& mimeType, const String& baseURL, const String& url, const String& title); - IntRect windowResizerRect() const; void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags); diff --git a/WebCore/page/ChromeClient.h b/WebCore/page/ChromeClient.h index 64b9f26..8101c52 100644 --- a/WebCore/page/ChromeClient.h +++ b/WebCore/page/ChromeClient.h @@ -125,9 +125,6 @@ namespace WebCore { virtual bool shouldInterruptJavaScript() = 0; virtual bool tabsToLinks() const = 0; - virtual void registerProtocolHandler(const String&, const String&, const String&, const String&) { } - virtual void registerContentHandler(const String&, const String&, const String&, const String&) { } - virtual IntRect windowResizerRect() const = 0; // Methods used by HostWindow. @@ -143,6 +140,7 @@ namespace WebCore { // End methods used by HostWindow. virtual void scrollbarsModeDidChange() const = 0; + virtual bool shouldMissingPluginMessageBeButton() const { return false; } virtual void missingPluginButtonClicked(Element*) const { } virtual void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags) = 0; diff --git a/WebCore/page/DOMTimer.cpp b/WebCore/page/DOMTimer.cpp index eb7f84e..f9178c9 100644 --- a/WebCore/page/DOMTimer.cpp +++ b/WebCore/page/DOMTimer.cpp @@ -136,17 +136,18 @@ void DOMTimer::fired() } // Delete timer before executing the action for one-shot timers. - ScheduledAction* action = m_action.release(); + OwnPtr<ScheduledAction> action = m_action.release(); // No access to member variables after this point. delete this; action->execute(context); + #if ENABLE(INSPECTOR) if (InspectorTimelineAgent* timelineAgent = InspectorTimelineAgent::retrieve(context)) timelineAgent->didFireTimer(); #endif - delete action; + timerNestingLevel = 0; } diff --git a/WebCore/page/DOMWindow.cpp b/WebCore/page/DOMWindow.cpp index 6ecde3c..18eef41 100644 --- a/WebCore/page/DOMWindow.cpp +++ b/WebCore/page/DOMWindow.cpp @@ -78,8 +78,9 @@ #include "SuddenTermination.h" #include "WebKitPoint.h" #include <algorithm> -#include <wtf/text/CString.h> +#include <wtf/CurrentTime.h> #include <wtf/MathExtras.h> +#include <wtf/text/CString.h> using std::min; using std::max; @@ -1444,7 +1445,11 @@ bool DOMWindow::removeEventListener(const AtomicString& eventType, EventListener void DOMWindow::dispatchLoadEvent() { + if (m_frame) + m_frame->loader()->frameLoadTimeline()->loadEventStart = currentTime(); dispatchEvent(Event::create(eventNames().loadEvent, false, false), document()); + if (m_frame) + m_frame->loader()->frameLoadTimeline()->loadEventEnd = currentTime(); // For load events, send a separate load event to the enclosing frame only. // This is a DOM extension and is independent of bubbling/capturing rules of diff --git a/WebCore/page/DOMWindow.idl b/WebCore/page/DOMWindow.idl index 20eab8b..f3cf9fe 100644 --- a/WebCore/page/DOMWindow.idl +++ b/WebCore/page/DOMWindow.idl @@ -305,6 +305,7 @@ module window { attribute [Conditional=TOUCH_EVENTS,EnabledAtRuntime] EventListener ontouchend; attribute [Conditional=TOUCH_EVENTS,EnabledAtRuntime] EventListener ontouchcancel; + attribute [Conditional=DEVICE_ORIENTATION] DeviceOrientationEventConstructor DeviceOrientationEvent; attribute [Conditional=DEVICE_ORIENTATION] EventListener ondeviceorientation; // EventTarget interface @@ -552,11 +553,11 @@ module window { attribute [JSCCustomGetter,EnabledAtRuntime] WebSocketConstructor WebSocket; // Usable with the new operator #endif - attribute PluginConstructor Plugin; - attribute PluginArrayConstructor PluginArray; + attribute DOMPluginConstructor Plugin; + attribute DOMPluginArrayConstructor PluginArray; - attribute MimeTypeConstructor MimeType; - attribute MimeTypeArrayConstructor MimeTypeArray; + attribute DOMMimeTypeConstructor MimeType; + attribute DOMMimeTypeArrayConstructor MimeTypeArray; attribute ClientRectConstructor ClientRect; attribute ClientRectListConstructor ClientRectList; @@ -571,6 +572,7 @@ module window { attribute [Conditional=VIDEO, EnabledAtRuntime] HTMLMediaElementConstructor HTMLMediaElement; attribute [Conditional=VIDEO, EnabledAtRuntime] HTMLVideoElementConstructor HTMLVideoElement; attribute [Conditional=VIDEO, EnabledAtRuntime] MediaErrorConstructor MediaError; + attribute [Conditional=VIDEO, EnabledAtRuntime] TimeRangesConstructor TimeRanges; #if defined(ENABLE_XPATH) && ENABLE_XPATH attribute XPathEvaluatorConstructor XPathEvaluator; diff --git a/WebCore/page/EventHandler.cpp b/WebCore/page/EventHandler.cpp index 9fde92f..08b8257 100644 --- a/WebCore/page/EventHandler.cpp +++ b/WebCore/page/EventHandler.cpp @@ -266,7 +266,7 @@ void EventHandler::selectClosestWordFromMouseEvent(const MouseEventWithHitTestRe } if (m_frame->shouldChangeSelection(newSelection)) - m_frame->selection()->setSelection(newSelection, granularity); + m_frame->selection()->setSelection(newSelection, granularity, MakeNonDirectionalSelection); } } @@ -291,7 +291,7 @@ void EventHandler::selectClosestWordOrLinkFromMouseEvent(const MouseEventWithHit } if (m_frame->shouldChangeSelection(newSelection)) - m_frame->selection()->setSelection(newSelection, granularity); + m_frame->selection()->setSelection(newSelection, granularity, MakeNonDirectionalSelection); } } @@ -336,7 +336,7 @@ bool EventHandler::handleMousePressEventTripleClick(const MouseEventWithHitTestR } if (m_frame->shouldChangeSelection(newSelection)) - m_frame->selection()->setSelection(newSelection, granularity); + m_frame->selection()->setSelection(newSelection, granularity, MakeNonDirectionalSelection); return true; } @@ -403,7 +403,7 @@ bool EventHandler::handleMousePressEventSingleClick(const MouseEventWithHitTestR newSelection = VisibleSelection(visiblePos); if (m_frame->shouldChangeSelection(newSelection)) - m_frame->selection()->setSelection(newSelection, granularity); + m_frame->selection()->setSelection(newSelection, granularity, MakeNonDirectionalSelection); return true; } @@ -640,7 +640,7 @@ void EventHandler::updateSelectionForMouseDrag(Node* targetNode, const IntPoint& if (m_frame->shouldChangeSelection(newSelection)) { m_frame->selection()->setIsDirectional(false); - m_frame->selection()->setSelection(newSelection, m_frame->selectionGranularity()); + m_frame->selection()->setSelection(newSelection, m_frame->selectionGranularity(), MakeNonDirectionalSelection); } } #endif // ENABLE(DRAG_SUPPORT) @@ -2052,7 +2052,7 @@ bool EventHandler::sendContextMenuEventForKey() static const int kContextMenuMargin = 1; -#if OS(WINDOWS) +#if OS(WINDOWS) && !OS(WINCE) int rightAligned = ::GetSystemMetrics(SM_MENUDROPALIGNMENT); #else int rightAligned = 0; @@ -2800,7 +2800,7 @@ void EventHandler::sendResizeEvent() void EventHandler::sendScrollEvent() { setFrameWasScrolledByUser(); - if (m_frame->view()) + if (m_frame->view() && m_frame->document()) m_frame->document()->dispatchEvent(Event::create(eventNames().scrollEvent, true, false)); } diff --git a/WebCore/page/EventSource.cpp b/WebCore/page/EventSource.cpp index 9ccccd7..01af087 100644 --- a/WebCore/page/EventSource.cpp +++ b/WebCore/page/EventSource.cpp @@ -1,6 +1,7 @@ /* * Copyright (C) 2009 Ericsson AB * All rights reserved. + * Copyright (C) 2010 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -53,30 +54,45 @@ namespace WebCore { const unsigned long long EventSource::defaultReconnectDelay = 3000; -EventSource::EventSource(const String& url, ScriptExecutionContext* context, ExceptionCode& ec) +inline EventSource::EventSource(const KURL& url, ScriptExecutionContext* context) : ActiveDOMObject(context, this) + , m_url(url) , m_state(CONNECTING) + , m_decoder(TextResourceDecoder::create("text/plain", "UTF-8")) , m_reconnectTimer(this, &EventSource::reconnectTimerFired) , m_discardTrailingNewline(false) , m_failSilently(false) , m_requestInFlight(false) , m_reconnectDelay(defaultReconnectDelay) + , m_origin(context->securityOrigin()->toString()) { - if (url.isEmpty() || !(m_url = context->completeURL(url)).isValid()) { +} + +PassRefPtr<EventSource> EventSource::create(const String& url, ScriptExecutionContext* context, ExceptionCode& ec) +{ + if (url.isEmpty()) { ec = SYNTAX_ERR; - return; + return 0; } - // FIXME: should support cross-origin requests - if (!scriptExecutionContext()->securityOrigin()->canRequest(m_url)) { + + KURL fullURL = context->completeURL(url); + if (!fullURL.isValid()) { + ec = SYNTAX_ERR; + return 0; + } + + // FIXME: Should support at least some cross-origin requests. + if (!context->securityOrigin()->canRequest(fullURL)) { ec = SECURITY_ERR; - return; + return 0; } - m_origin = scriptExecutionContext()->securityOrigin()->toString(); - m_decoder = TextResourceDecoder::create("text/plain", "UTF-8"); + RefPtr<EventSource> source = adoptRef(new EventSource(fullURL, context)); - setPendingActivity(this); - connect(); + source->setPendingActivity(source.get()); + source->connect(); + + return source.release(); } EventSource::~EventSource() diff --git a/WebCore/page/EventSource.h b/WebCore/page/EventSource.h index d0d45cb..ffed592 100644 --- a/WebCore/page/EventSource.h +++ b/WebCore/page/EventSource.h @@ -1,6 +1,7 @@ /* * Copyright (C) 2009 Ericsson AB * All rights reserved. + * Copyright (C) 2010 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -35,15 +36,10 @@ #if ENABLE(EVENTSOURCE) #include "ActiveDOMObject.h" -#include "AtomicStringHash.h" -#include "EventNames.h" #include "EventTarget.h" #include "KURL.h" #include "ThreadableLoaderClient.h" #include "Timer.h" - -#include <wtf/HashMap.h> -#include <wtf/PassRefPtr.h> #include <wtf/RefPtr.h> #include <wtf/Vector.h> @@ -56,7 +52,7 @@ namespace WebCore { class EventSource : public RefCounted<EventSource>, public EventTarget, private ThreadableLoaderClient, public ActiveDOMObject { public: - static PassRefPtr<EventSource> create(const String& url, ScriptExecutionContext* context, ExceptionCode& ec) { return adoptRef(new EventSource(url, context, ec)); } + static PassRefPtr<EventSource> create(const String& url, ScriptExecutionContext*, ExceptionCode&); virtual ~EventSource(); static const unsigned long long defaultReconnectDelay; @@ -86,17 +82,17 @@ namespace WebCore { virtual void stop(); private: - EventSource(const String& url, ScriptExecutionContext* context, ExceptionCode& ec); + EventSource(const KURL&, ScriptExecutionContext*); virtual void refEventTarget() { ref(); } virtual void derefEventTarget() { deref(); } virtual EventTargetData* eventTargetData(); virtual EventTargetData* ensureEventTargetData(); - virtual void didReceiveResponse(const ResourceResponse& response); + virtual void didReceiveResponse(const ResourceResponse&); virtual void didReceiveData(const char* data, int length); virtual void didFinishLoading(unsigned long); - virtual void didFail(const ResourceError& error); + virtual void didFail(const ResourceError&); virtual void didFailRedirectCheck(); void connect(); diff --git a/WebCore/page/Frame.cpp b/WebCore/page/Frame.cpp index 5ae666e..46917fd 100644 --- a/WebCore/page/Frame.cpp +++ b/WebCore/page/Frame.cpp @@ -95,15 +95,13 @@ #include "runtime_root.h" #endif -#if ENABLE(MATHML) #include "MathMLNames.h" -#endif +#include "SVGNames.h" +#include "XLinkNames.h" #if ENABLE(SVG) #include "SVGDocument.h" #include "SVGDocumentExtensions.h" -#include "SVGNames.h" -#include "XLinkNames.h" #endif #if ENABLE(TILED_BACKING_STORE) @@ -161,23 +159,16 @@ inline Frame::Frame(Page* page, HTMLFrameOwnerElement* ownerElement, FrameLoader HTMLNames::init(); QualifiedName::init(); MediaFeatureNames::init(); - -#if ENABLE(SVG) SVGNames::init(); XLinkNames::init(); -#endif + MathMLNames::init(); + XMLNSNames::init(); + XMLNames::init(); #if ENABLE(WML) WMLNames::init(); #endif -#if ENABLE(MATHML) - MathMLNames::init(); -#endif - - XMLNSNames::init(); - XMLNames::init(); - if (!ownerElement) { #if ENABLE(TILED_BACKING_STORE) // Top level frame only for now. @@ -695,6 +686,9 @@ void Frame::injectUserScriptsForWorld(DOMWrapperWorld* world, const UserScriptVe unsigned count = userScripts.size(); for (unsigned i = 0; i < count; ++i) { UserScript* script = userScripts[i].get(); + if (script->injectedFrames() == InjectInTopFrameOnly && ownerElement()) + continue; + if (script->injectionTime() == injectionTime && UserContentURLPattern::matchesPatterns(doc->url(), script->whitelist(), script->blacklist())) m_script.evaluateInWorld(ScriptSourceCode(script->source(), script->url()), world); } @@ -1603,13 +1597,15 @@ IntRect Frame::tiledBackingStoreVisibleRect() String Frame::layerTreeAsText() const { #if USE(ACCELERATED_COMPOSITING) + document()->updateLayout(); + if (!contentRenderer()) return String(); GraphicsLayer* rootLayer = contentRenderer()->compositor()->rootPlatformLayer(); if (!rootLayer) return String(); - + return rootLayer->layerTreeAsText(); #else return String(); diff --git a/WebCore/page/FrameView.cpp b/WebCore/page/FrameView.cpp index f43fae5..defb34a 100644 --- a/WebCore/page/FrameView.cpp +++ b/WebCore/page/FrameView.cpp @@ -284,11 +284,11 @@ void FrameView::detachCustomScrollbars() return; Scrollbar* horizontalBar = horizontalScrollbar(); - if (horizontalBar && horizontalBar->isCustomScrollbar() && !toRenderScrollbar(horizontalBar)->owningRenderer()->isRenderPart()) + if (horizontalBar && horizontalBar->isCustomScrollbar()) setHasHorizontalScrollbar(false); Scrollbar* verticalBar = verticalScrollbar(); - if (verticalBar && verticalBar->isCustomScrollbar() && !toRenderScrollbar(verticalBar)->owningRenderer()->isRenderPart()) + if (verticalBar && verticalBar->isCustomScrollbar()) setHasVerticalScrollbar(false); if (m_scrollCorner) { @@ -486,10 +486,6 @@ void FrameView::updateCompositingLayers() // This call will make sure the cached hasAcceleratedCompositing is updated from the pref view->compositor()->cacheAcceleratedCompositingFlags(); - - if (!view->usesCompositing()) - return; - view->compositor()->updateCompositingLayers(CompositingUpdateAfterLayoutOrStyleChange); } @@ -516,7 +512,7 @@ void FrameView::enterCompositingMode() { #if USE(ACCELERATED_COMPOSITING) if (RenderView* view = m_frame->contentRenderer()) - return view->compositor()->enableCompositingMode(); + view->compositor()->enableCompositingMode(); #endif } @@ -1148,8 +1144,7 @@ void FrameView::repaintFixedElementsAfterScrolling() root->updateWidgetPositions(); root->layer()->updateRepaintRectsAfterScroll(); #if USE(ACCELERATED_COMPOSITING) - if (root->usesCompositing()) - root->compositor()->updateCompositingLayers(CompositingUpdateOnScroll); + root->compositor()->updateCompositingLayers(CompositingUpdateOnScroll); #endif } } @@ -1708,7 +1703,7 @@ IntRect FrameView::windowClipRect(bool clipToContents) const // Set our clip rect to be our contents. IntRect clipRect = contentsToWindow(visibleContentRect(!clipToContents)); - if (!m_frame || !m_frame->document()->ownerElement()) + if (!m_frame || !m_frame->document() || !m_frame->document()->ownerElement()) return clipRect; // Take our owner element and get the clip rect from the enclosing layer. diff --git a/WebCore/page/Navigation.cpp b/WebCore/page/Navigation.cpp index 828f87e..efda924 100644 --- a/WebCore/page/Navigation.cpp +++ b/WebCore/page/Navigation.cpp @@ -33,7 +33,9 @@ #if ENABLE(WEB_TIMING) +#include "DocumentLoader.h" #include "Frame.h" +#include "FrameLoaderTypes.h" namespace WebCore { @@ -55,9 +57,21 @@ void Navigation::disconnectFrame() unsigned short Navigation::type() const { if (!m_frame) - return 0; + return Navigate; - return 0; // FIXME + DocumentLoader* documentLoader = m_frame->loader()->documentLoader(); + if (!documentLoader) + return Navigate; + + WebCore::NavigationType navigationType = documentLoader->triggeringAction().type(); + switch (navigationType) { + case NavigationTypeReload: + return Reload; + case NavigationTypeBackForward: + return BackForward; + default: + return Navigate; + } } unsigned short Navigation::redirectCount() const diff --git a/WebCore/page/Navigation.h b/WebCore/page/Navigation.h index 5e0f7e6..85c7b55 100644 --- a/WebCore/page/Navigation.h +++ b/WebCore/page/Navigation.h @@ -51,6 +51,13 @@ public: unsigned short redirectCount() const; private: + // Keep in sync with what's in the .idl file. + enum NavigationType { + Navigate = 0, + Reload = 1, + BackForward = 2, + }; + Navigation(Frame*); Frame* m_frame; diff --git a/WebCore/page/Navigation.idl b/WebCore/page/Navigation.idl index 3ec20ad..b0227f3 100644 --- a/WebCore/page/Navigation.idl +++ b/WebCore/page/Navigation.idl @@ -32,13 +32,9 @@ module window { // See: http://dev.w3.org/2006/webapi/WebTiming/ interface [Conditional=WEB_TIMING, OmitConstructor] Navigation { - const unsigned short NAVIGATION_OTHER = 0; - const unsigned short NAVIGATION_LINK = 1; - const unsigned short NAVIGATION_FORWARD_BACK = 2; - const unsigned short NAVIGATION_BROWSER = 3; - const unsigned short NAVIGATION_NEW_WINDOW = 4; - const unsigned short NAVIGATION_RELOAD = 5; - const unsigned short NAVIGATION_FRAME = 6; + const unsigned short NAVIGATE = 0; + const unsigned short RELOAD = 1; + const unsigned short BACK_FORWARD = 2; readonly attribute unsigned short type; readonly attribute unsigned short redirectCount; diff --git a/WebCore/page/Navigator.cpp b/WebCore/page/Navigator.cpp index bb07911..5390fc9 100644 --- a/WebCore/page/Navigator.cpp +++ b/WebCore/page/Navigator.cpp @@ -25,18 +25,16 @@ #include "Chrome.h" #include "CookieJar.h" -#include "ExceptionCode.h" +#include "DOMMimeTypeArray.h" +#include "DOMPluginArray.h" #include "Frame.h" #include "FrameLoader.h" #include "FrameLoaderClient.h" #include "Geolocation.h" -#include "KURL.h" #include "Language.h" -#include "MimeTypeArray.h" #include "Page.h" #include "PageGroup.h" #include "PlatformString.h" -#include "PluginArray.h" #include "PluginData.h" #include "ScriptController.h" #include "Settings.h" @@ -122,17 +120,17 @@ String Navigator::userAgent() const return m_frame->loader()->userAgent(m_frame->document()->url()); } -PluginArray* Navigator::plugins() const +DOMPluginArray* Navigator::plugins() const { if (!m_plugins) - m_plugins = PluginArray::create(m_frame); + m_plugins = DOMPluginArray::create(m_frame); return m_plugins.get(); } -MimeTypeArray* Navigator::mimeTypes() const +DOMMimeTypeArray* Navigator::mimeTypes() const { if (!m_mimeTypes) - m_mimeTypes = MimeTypeArray::create(m_frame); + m_mimeTypes = DOMMimeTypeArray::create(m_frame); return m_mimeTypes.get(); } @@ -211,93 +209,4 @@ void Navigator::getStorageUpdates() } #endif -static bool verifyCustomHandlerURL(const String& baseURL, const String& url, ExceptionCode& ec) -{ - // The specification requires that it is a SYNTAX_ERR if the the "%s" token is not present. - static const char token[] = "%s"; - int index = url.find(token); - if (-1 == index) { - ec = SYNTAX_ERR; - return false; - } - - // It is also a SYNTAX_ERR if the custom handler URL, as created by removing - // the "%s" token and prepending the base url, does not resolve. - String newURL = url; - newURL.remove(index, sizeof(token) / sizeof(token[0])); - - KURL base(ParsedURLString, baseURL); - KURL kurl(base, newURL); - - if (kurl.isEmpty() || !kurl.isValid()) { - ec = SYNTAX_ERR; - return false; - } - - return true; -} - -static bool verifyProtocolHandlerScheme(const String& scheme, ExceptionCode& ec) -{ - // It is a SECURITY_ERR for these schemes to be handled by a custom handler. - if (equalIgnoringCase(scheme, "http") || equalIgnoringCase(scheme, "https") || equalIgnoringCase(scheme, "file")) { - ec = SECURITY_ERR; - return false; - } - return true; -} - -void Navigator::registerProtocolHandler(const String& scheme, const String& url, const String& title, ExceptionCode& ec) -{ - if (!verifyProtocolHandlerScheme(scheme, ec)) - return; - - if (!m_frame) - return; - - Document* document = m_frame->document(); - if (!document) - return; - - String baseURL = document->baseURL().baseAsString(); - - if (!verifyCustomHandlerURL(baseURL, url, ec)) - return; - - if (Page* page = m_frame->page()) - page->chrome()->registerProtocolHandler(scheme, baseURL, url, m_frame->displayStringModifiedByEncoding(title)); -} - -static bool verifyProtocolHandlerMimeType(const String& type, ExceptionCode& ec) -{ - // It is a SECURITY_ERR for these mime types to be assigned to a custom - // handler. - if (equalIgnoringCase(type, "text/html") || equalIgnoringCase(type, "text/css") || equalIgnoringCase(type, "application/x-javascript")) { - ec = SECURITY_ERR; - return false; - } - return true; -} - -void Navigator::registerContentHandler(const String& mimeType, const String& url, const String& title, ExceptionCode& ec) -{ - if (!verifyProtocolHandlerMimeType(mimeType, ec)) - return; - - if (!m_frame) - return; - - Document* document = m_frame->document(); - if (!document) - return; - - String baseURL = document->baseURL().baseAsString(); - - if (!verifyCustomHandlerURL(baseURL, url, ec)) - return; - - if (Page* page = m_frame->page()) - page->chrome()->registerContentHandler(mimeType, baseURL, url, m_frame->displayStringModifiedByEncoding(title)); -} - } // namespace WebCore diff --git a/WebCore/page/Navigator.h b/WebCore/page/Navigator.h index c6acfd5..3380c9c 100644 --- a/WebCore/page/Navigator.h +++ b/WebCore/page/Navigator.h @@ -28,18 +28,21 @@ namespace WebCore { + class DOMMimeTypeArray; + class DOMPluginArray; class Frame; class Geolocation; - class MimeTypeArray; class PluginData; +<<<<<<< HEAD class PluginArray; #if PLATFORM(ANDROID) class ApplicationInstalledCallback; class Connection; #endif - - typedef int ExceptionCode; +======= + class String; +>>>>>>> webkit.org at r63173 class Navigator : public NavigatorBase, public RefCounted<Navigator> { public: @@ -51,8 +54,8 @@ namespace WebCore { String appVersion() const; String language() const; - PluginArray* plugins() const; - MimeTypeArray* mimeTypes() const; + DOMPluginArray* plugins() const; + DOMMimeTypeArray* mimeTypes() const; bool cookieEnabled() const; bool javaEnabled() const; @@ -76,14 +79,11 @@ namespace WebCore { void getStorageUpdates(); #endif - void registerProtocolHandler(const String& scheme, const String& url, const String& title, ExceptionCode& ec); - void registerContentHandler(const String& mimeType, const String& url, const String& title, ExceptionCode& ec); - private: Navigator(Frame*); Frame* m_frame; - mutable RefPtr<PluginArray> m_plugins; - mutable RefPtr<MimeTypeArray> m_mimeTypes; + mutable RefPtr<DOMPluginArray> m_plugins; + mutable RefPtr<DOMMimeTypeArray> m_mimeTypes; mutable RefPtr<Geolocation> m_geolocation; #if PLATFORM(ANDROID) mutable RefPtr<Connection> m_connection; diff --git a/WebCore/page/Navigator.idl b/WebCore/page/Navigator.idl index 8eae9d6..5699d86 100644 --- a/WebCore/page/Navigator.idl +++ b/WebCore/page/Navigator.idl @@ -29,8 +29,8 @@ module window { readonly attribute DOMString language; readonly attribute DOMString userAgent; readonly attribute DOMString platform; - readonly attribute PluginArray plugins; - readonly attribute MimeTypeArray mimeTypes; + readonly attribute DOMPluginArray plugins; + readonly attribute DOMMimeTypeArray mimeTypes; readonly attribute DOMString product; readonly attribute DOMString productSub; readonly attribute DOMString vendor; @@ -57,11 +57,6 @@ module window { #if defined(ENABLE_DOM_STORAGE) && ENABLE_DOM_STORAGE void getStorageUpdates(); #endif - - void registerProtocolHandler(in DOMString scheme, in DOMString url, in DOMString title) - raises(DomException); - void registerContentHandler(in DOMString mimeType, in DOMString url, in DOMString title) - raises(DomException); }; } diff --git a/WebCore/page/Page.cpp b/WebCore/page/Page.cpp index d5074aa..5d023f5 100644 --- a/WebCore/page/Page.cpp +++ b/WebCore/page/Page.cpp @@ -6,7 +6,6 @@ * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. - * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU @@ -21,6 +20,7 @@ #include "config.h" #include "Page.h" +#include "BackForwardController.h" #include "BackForwardList.h" #include "Base64.h" #include "CSSStyleSelector.h" @@ -29,7 +29,7 @@ #include "ContextMenuClient.h" #include "ContextMenuController.h" #include "DOMWindow.h" -#include "DeviceOrientation.h" +#include "DeviceOrientationController.h" #include "DragController.h" #include "EditorClient.h" #include "Event.h" @@ -85,8 +85,13 @@ #include "GeolocationController.h" #endif +<<<<<<< HEAD #if PLATFORM(ANDROID) && ENABLE(APPLICATION_INSTALLED) #include "PackageNotifier.h" +======= +#if ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS) +#include "InspectorApplicationCacheAgent.h" +>>>>>>> webkit.org at r63173 #endif namespace WebCore { @@ -101,11 +106,19 @@ static void networkStateChanged() { Vector<RefPtr<Frame> > frames; +#if ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS) + bool isNowOnline = networkStateNotifier().onLine(); +#endif + // Get all the frames of all the pages in all the page groups HashSet<Page*>::iterator end = allPages->end(); for (HashSet<Page*>::iterator it = allPages->begin(); it != end; ++it) { for (Frame* frame = (*it)->mainFrame(); frame; frame = frame->tree()->traverseNext()) frames.append(frame); +#if ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS) + if (InspectorApplicationCacheAgent* applicationCacheAgent = (*it)->inspectorController()->applicationCacheAgent()) + applicationCacheAgent->updateNetworkState(isNowOnline); +#endif } AtomicString eventName = networkStateNotifier().onLine() ? eventNames().onlineEvent : eventNames().offlineEvent; @@ -113,6 +126,7 @@ static void networkStateChanged() frames[i]->document()->dispatchWindowEvent(Event::create(eventName, false, false)); } +<<<<<<< HEAD #if PLATFORM(ANDROID) && ENABLE(APPLICATION_INSTALLED) static void onPackageResultAvailable() { @@ -125,6 +139,9 @@ static void onPackageResultAvailable() #endif Page::Page(ChromeClient* chromeClient, ContextMenuClient* contextMenuClient, EditorClient* editorClient, DragClient* dragClient, InspectorClient* inspectorClient, PluginHalterClient* pluginHalterClient, GeolocationControllerClient* geolocationControllerClient, DeviceOrientationClient* deviceOrientationClient) +======= +Page::Page(ChromeClient* chromeClient, ContextMenuClient* contextMenuClient, EditorClient* editorClient, DragClient* dragClient, InspectorClient* inspectorClient, PluginHalterClient* pluginHalterClient, GeolocationControllerClient* geolocationControllerClient, DeviceOrientationClient* deviceOrientationClient, BackForwardControllerClient* backForwardControllerClient) +>>>>>>> webkit.org at r63173 : m_chrome(new Chrome(this, chromeClient)) , m_dragCaretController(new SelectionController(0, true)) #if ENABLE(DRAG_SUPPORT) @@ -141,11 +158,11 @@ Page::Page(ChromeClient* chromeClient, ContextMenuClient* contextMenuClient, Edi , m_geolocationController(new GeolocationController(this, geolocationControllerClient)) #endif #if ENABLE(DEVICE_ORIENTATION) - , m_deviceOrientation(new DeviceOrientation(this, deviceOrientationClient)) + , m_deviceOrientationController(new DeviceOrientationController(this, deviceOrientationClient)) #endif , m_settings(new Settings(this)) , m_progress(new ProgressTracker) - , m_backForwardList(BackForwardList::create(this)) + , m_backForwardController(new BackForwardController(this, backForwardControllerClient)) , m_theme(RenderTheme::themeForPage(this)) , m_editorClient(editorClient) , m_frameCount(0) @@ -221,7 +238,7 @@ Page::~Page() m_inspectorController->inspectedPageDestroyed(); #endif - m_backForwardList->close(); + backForwardList()->close(); #ifndef NDEBUG pageCounter.decrement(); @@ -249,14 +266,14 @@ void Page::setOpenedByDOM() m_openedByDOM = true; } -BackForwardList* Page::backForwardList() +BackForwardList* Page::backForwardList() const { - return m_backForwardList.get(); + return m_backForwardController->list(); } bool Page::goBack() { - HistoryItem* item = m_backForwardList->backItem(); + HistoryItem* item = backForwardList()->backItem(); if (item) { goToItem(item, FrameLoadTypeBack); @@ -267,7 +284,7 @@ bool Page::goBack() bool Page::goForward() { - HistoryItem* item = m_backForwardList->forwardItem(); + HistoryItem* item = backForwardList()->forwardItem(); if (item) { goToItem(item, FrameLoadTypeForward); @@ -280,9 +297,9 @@ bool Page::canGoBackOrForward(int distance) const { if (distance == 0) return true; - if (distance > 0 && distance <= m_backForwardList->forwardListCount()) + if (distance > 0 && distance <= backForwardList()->forwardListCount()) return true; - if (distance < 0 && -distance <= m_backForwardList->backListCount()) + if (distance < 0 && -distance <= backForwardList()->backListCount()) return true; return false; } @@ -292,16 +309,16 @@ void Page::goBackOrForward(int distance) if (distance == 0) return; - HistoryItem* item = m_backForwardList->itemAtIndex(distance); + HistoryItem* item = backForwardList()->itemAtIndex(distance); if (!item) { if (distance > 0) { - int forwardListCount = m_backForwardList->forwardListCount(); + int forwardListCount = backForwardList()->forwardListCount(); if (forwardListCount > 0) - item = m_backForwardList->itemAtIndex(forwardListCount); + item = backForwardList()->itemAtIndex(forwardListCount); } else { - int backListCount = m_backForwardList->backListCount(); + int backListCount = backForwardList()->backListCount(); if (backListCount > 0) - item = m_backForwardList->itemAtIndex(-backListCount); + item = backForwardList()->itemAtIndex(-backListCount); } } @@ -335,7 +352,7 @@ void Page::goToItem(HistoryItem* item, FrameLoadType type) int Page::getHistoryLength() { - return m_backForwardList->backListCount() + 1 + m_backForwardList->forwardListCount(); + return backForwardList()->backListCount() + 1 + backForwardList()->forwardListCount(); } void Page::setGlobalHistoryItem(HistoryItem* item) diff --git a/WebCore/page/Page.h b/WebCore/page/Page.h index b931092..56a25eb 100644 --- a/WebCore/page/Page.h +++ b/WebCore/page/Page.h @@ -37,13 +37,15 @@ namespace JSC { namespace WebCore { + class BackForwardController; + class BackForwardControllerClient; class BackForwardList; class Chrome; class ChromeClient; class ContextMenuClient; class ContextMenuController; - class DeviceOrientation; class DeviceOrientationClient; + class DeviceOrientationController; class Document; class DragClient; class DragController; @@ -87,7 +89,7 @@ namespace WebCore { public: static void setNeedsReapplyStyles(); - Page(ChromeClient*, ContextMenuClient*, EditorClient*, DragClient*, InspectorClient*, PluginHalterClient*, GeolocationControllerClient*, DeviceOrientationClient*); + Page(ChromeClient*, ContextMenuClient*, EditorClient*, DragClient*, InspectorClient*, PluginHalterClient*, GeolocationControllerClient*, DeviceOrientationClient*, BackForwardControllerClient*); ~Page(); RenderTheme* theme() const { return m_theme.get(); }; @@ -106,7 +108,7 @@ namespace WebCore { bool openedByDOM() const; void setOpenedByDOM(); - BackForwardList* backForwardList(); + BackForwardList* backForwardList() const; // FIXME: The following three methods don't fall under the responsibilities of the Page object // They seem to fit a hypothetical Page-controller object that would be akin to the @@ -148,7 +150,7 @@ namespace WebCore { GeolocationController* geolocationController() const { return m_geolocationController.get(); } #endif #if ENABLE(DEVICE_ORIENTATION) - DeviceOrientation* deviceOrientation() const { return m_deviceOrientation.get(); } + DeviceOrientationController* deviceOrientationController() const { return m_deviceOrientationController.get(); } #endif Settings* settings() const { return m_settings.get(); } ProgressTracker* progress() const { return m_progress.get(); } @@ -265,12 +267,12 @@ namespace WebCore { OwnPtr<GeolocationController> m_geolocationController; #endif #if ENABLE(DEVICE_ORIENTATION) - OwnPtr<DeviceOrientation> m_deviceOrientation; + OwnPtr<DeviceOrientationController> m_deviceOrientationController; #endif OwnPtr<Settings> m_settings; OwnPtr<ProgressTracker> m_progress; - RefPtr<BackForwardList> m_backForwardList; + OwnPtr<BackForwardController> m_backForwardController; RefPtr<Frame> m_mainFrame; RefPtr<HistoryItem> m_globalHistoryItem; diff --git a/WebCore/page/PageGroup.cpp b/WebCore/page/PageGroup.cpp index f6c746d..b45b9ea 100644 --- a/WebCore/page/PageGroup.cpp +++ b/WebCore/page/PageGroup.cpp @@ -213,12 +213,13 @@ IndexedDatabase* PageGroup::indexedDatabase() } #endif -void PageGroup::addUserScriptToWorld(DOMWrapperWorld* world, const String& source, const KURL& url, PassOwnPtr<Vector<String> > whitelist, - PassOwnPtr<Vector<String> > blacklist, UserScriptInjectionTime injectionTime) +void PageGroup::addUserScriptToWorld(DOMWrapperWorld* world, const String& source, const KURL& url, + PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist, + UserScriptInjectionTime injectionTime, UserContentInjectedFrames injectedFrames) { ASSERT_ARG(world, world); - OwnPtr<UserScript> userScript(new UserScript(source, url, whitelist, blacklist, injectionTime)); + OwnPtr<UserScript> userScript(new UserScript(source, url, whitelist, blacklist, injectionTime, injectedFrames)); if (!m_userScripts) m_userScripts.set(new UserScriptMap); UserScriptVector*& scriptsInWorld = m_userScripts->add(world, 0).first->second; @@ -227,19 +228,20 @@ void PageGroup::addUserScriptToWorld(DOMWrapperWorld* world, const String& sourc scriptsInWorld->append(userScript.release()); } -void PageGroup::addUserStyleSheetToWorld(DOMWrapperWorld* world, const String& source, const KURL& url, PassOwnPtr<Vector<String> > whitelist, - PassOwnPtr<Vector<String> > blacklist) +void PageGroup::addUserStyleSheetToWorld(DOMWrapperWorld* world, const String& source, const KURL& url, + PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist, + UserContentInjectedFrames injectedFrames) { ASSERT_ARG(world, world); - OwnPtr<UserStyleSheet> userStyleSheet(new UserStyleSheet(source, url, whitelist, blacklist)); + OwnPtr<UserStyleSheet> userStyleSheet(new UserStyleSheet(source, url, whitelist, blacklist, injectedFrames)); if (!m_userStyleSheets) m_userStyleSheets.set(new UserStyleSheetMap); UserStyleSheetVector*& styleSheetsInWorld = m_userStyleSheets->add(world, 0).first->second; if (!styleSheetsInWorld) styleSheetsInWorld = new UserStyleSheetVector; styleSheetsInWorld->append(userStyleSheet.release()); - + // Clear our cached sheets and have them just reparse. HashSet<Page*>::const_iterator end = m_pages.end(); for (HashSet<Page*>::const_iterator it = m_pages.begin(); it != end; ++it) { diff --git a/WebCore/page/PageGroup.h b/WebCore/page/PageGroup.h index a409494..545df78 100644 --- a/WebCore/page/PageGroup.h +++ b/WebCore/page/PageGroup.h @@ -74,20 +74,21 @@ namespace WebCore { IndexedDatabase* indexedDatabase(); #endif - void addUserScriptToWorld(DOMWrapperWorld*, const String& source, const KURL&, + void addUserScriptToWorld(DOMWrapperWorld*, const String& source, const KURL&, PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist, - UserScriptInjectionTime); + UserScriptInjectionTime, UserContentInjectedFrames); void addUserStyleSheetToWorld(DOMWrapperWorld*, const String& source, const KURL&, - PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist); - + PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist, + UserContentInjectedFrames); + void removeUserScriptFromWorld(DOMWrapperWorld*, const KURL&); void removeUserStyleSheetFromWorld(DOMWrapperWorld*, const KURL&); - + void removeUserScriptsFromWorld(DOMWrapperWorld*); void removeUserStyleSheetsFromWorld(DOMWrapperWorld*); - + void removeAllUserContent(); - + const UserScriptMap* userScripts() const { return m_userScripts.get(); } const UserStyleSheetMap* userStyleSheets() const { return m_userStyleSheets.get(); } diff --git a/WebCore/page/Timing.cpp b/WebCore/page/Timing.cpp index dcd0fb7..af00441 100644 --- a/WebCore/page/Timing.cpp +++ b/WebCore/page/Timing.cpp @@ -52,12 +52,36 @@ void Timing::disconnectFrame() m_frame = 0; } -unsigned long Timing::navigationStart() const +unsigned long long Timing::navigationStart() const { if (!m_frame) return 0; - return 0; // FIXME + return static_cast<unsigned long long>(m_frame->loader()->frameLoadTimeline()->navigationStart * 1000); +} + +unsigned long long Timing::unloadEventEnd() const +{ + if (!m_frame) + return 0; + + return static_cast<unsigned long long>(m_frame->loader()->frameLoadTimeline()->unloadEventEnd * 1000); +} + +unsigned long long Timing::loadEventStart() const +{ + if (!m_frame) + return 0; + + return static_cast<unsigned long long>(m_frame->loader()->frameLoadTimeline()->loadEventStart * 1000); +} + +unsigned long long Timing::loadEventEnd() const +{ + if (!m_frame) + return 0; + + return static_cast<unsigned long long>(m_frame->loader()->frameLoadTimeline()->loadEventEnd * 1000); } } // namespace WebCore diff --git a/WebCore/page/Timing.h b/WebCore/page/Timing.h index 7b66d66..47ce478 100644 --- a/WebCore/page/Timing.h +++ b/WebCore/page/Timing.h @@ -47,7 +47,10 @@ public: Frame* frame() const; void disconnectFrame(); - unsigned long navigationStart() const; + unsigned long long navigationStart() const; + unsigned long long unloadEventEnd() const; + unsigned long long loadEventStart() const; + unsigned long long loadEventEnd() const; private: Timing(Frame*); diff --git a/WebCore/page/Timing.idl b/WebCore/page/Timing.idl index 01b72bc..dbe996e 100644 --- a/WebCore/page/Timing.idl +++ b/WebCore/page/Timing.idl @@ -32,8 +32,22 @@ module window { // See: http://dev.w3.org/2006/webapi/WebTiming/ interface [Conditional=WEB_TIMING, OmitConstructor] Timing { - readonly attribute unsigned long navigationStart; // FIXME: Implement remainder of interface. + readonly attribute unsigned long long navigationStart; + // readonly attribute unsigned long long fetchStart; + readonly attribute unsigned long long unloadEventEnd; + // readonly attribute unsigned long long redirectStart; + // readonly attribute unsigned long long redirectEnd; + // readonly attribute unsigned long long domainLookupStart; + // readonly attribute unsigned long long domainLookupEnd; + // readonly attribute unsigned long long connectStart; + // readonly attribute unsigned long long connectEnd; + // readonly attribute unsigned long long requestStart; + // readonly attribute unsigned long long requestEnd; + // readonly attribute unsigned long long responseStart; + // readonly attribute unsigned long long responseEnd; + readonly attribute unsigned long long loadEventStart; + readonly attribute unsigned long long loadEventEnd; }; } diff --git a/WebCore/page/UserContentTypes.h b/WebCore/page/UserContentTypes.h new file mode 100644 index 0000000..d012b8c --- /dev/null +++ b/WebCore/page/UserContentTypes.h @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2009 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef UserContentTypes_h +#define UserContentTypes_h + +#include <wtf/HashMap.h> +#include <wtf/Vector.h> + +namespace WebCore { + +enum UserContentInjectedFrames { InjectInAllFrames, InjectInTopFrameOnly }; + +} // namespace WebCore + +#endif // UserContentTypes_h diff --git a/WebCore/page/UserScript.h b/WebCore/page/UserScript.h index 8b3703f..0652439 100644 --- a/WebCore/page/UserScript.h +++ b/WebCore/page/UserScript.h @@ -27,6 +27,7 @@ #define UserScript_h #include "KURL.h" +#include "UserContentTypes.h" #include "UserScriptTypes.h" #include <wtf/OwnPtr.h> #include <wtf/PassOwnPtr.h> @@ -38,12 +39,13 @@ class UserScript : public Noncopyable { public: UserScript(const String& source, const KURL& url, PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist, - UserScriptInjectionTime injectionTime) + UserScriptInjectionTime injectionTime, UserContentInjectedFrames injectedFrames) : m_source(source) , m_url(url) , m_whitelist(whitelist) , m_blacklist(blacklist) , m_injectionTime(injectionTime) + , m_injectedFrames(injectedFrames) { } @@ -52,15 +54,17 @@ public: const Vector<String>* whitelist() const { return m_whitelist.get(); } const Vector<String>* blacklist() const { return m_blacklist.get(); } UserScriptInjectionTime injectionTime() const { return m_injectionTime; } - + UserContentInjectedFrames injectedFrames() const { return m_injectedFrames; } + private: String m_source; KURL m_url; OwnPtr<Vector<String> > m_whitelist; OwnPtr<Vector<String> > m_blacklist; UserScriptInjectionTime m_injectionTime; + UserContentInjectedFrames m_injectedFrames; }; } // namespace WebCore - + #endif // UserScript_h diff --git a/WebCore/page/UserStyleSheet.h b/WebCore/page/UserStyleSheet.h index 610778f..4c6d708 100644 --- a/WebCore/page/UserStyleSheet.h +++ b/WebCore/page/UserStyleSheet.h @@ -27,6 +27,7 @@ #define UserStyleSheet_h #include "KURL.h" +#include "UserContentTypes.h" #include "UserStyleSheetTypes.h" #include <wtf/OwnPtr.h> #include <wtf/PassOwnPtr.h> @@ -37,11 +38,13 @@ namespace WebCore { class UserStyleSheet : public Noncopyable { public: UserStyleSheet(const String& source, const KURL& url, - PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist) + PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist, + UserContentInjectedFrames injectedFrames) : m_source(source) , m_url(url) , m_whitelist(whitelist) , m_blacklist(blacklist) + , m_injectedFrames(injectedFrames) { } @@ -49,12 +52,14 @@ public: const KURL& url() const { return m_url; } const Vector<String>* whitelist() const { return m_whitelist.get(); } const Vector<String>* blacklist() const { return m_blacklist.get(); } + UserContentInjectedFrames injectedFrames() const { return m_injectedFrames; } private: String m_source; KURL m_url; OwnPtr<Vector<String> > m_whitelist; OwnPtr<Vector<String> > m_blacklist; + UserContentInjectedFrames m_injectedFrames; }; } // namespace WebCore diff --git a/WebCore/page/win/EventHandlerWin.cpp b/WebCore/page/win/EventHandlerWin.cpp index 5511209..e1d5be9 100644 --- a/WebCore/page/win/EventHandlerWin.cpp +++ b/WebCore/page/win/EventHandlerWin.cpp @@ -27,7 +27,6 @@ #include "config.h" #include "EventHandler.h" -#include "ClipboardWin.h" #include "Cursor.h" #include "FloatPoint.h" #include "FocusController.h" @@ -44,6 +43,12 @@ #include "WCDataObject.h" #include "NotImplemented.h" +#if OS(WINCE) +#include "Clipboard.h" +#else +#include "ClipboardWin.h" +#endif + namespace WebCore { const double EventHandler::TextDragDelay = 0.0; diff --git a/WebCore/page/wince/FrameWince.cpp b/WebCore/page/wince/FrameWince.cpp index 5ecb579..c806b98 100644 --- a/WebCore/page/wince/FrameWince.cpp +++ b/WebCore/page/wince/FrameWince.cpp @@ -28,28 +28,18 @@ #include "Frame.h" #include "Document.h" -#include "EditorClient.h" #include "FloatRect.h" -#include "FrameLoader.h" -#include "FrameLoadRequest.h" #include "FrameView.h" #include "GraphicsContext.h" #include "HTMLIFrameElement.h" #include "HTMLNames.h" #include "HTMLTableCellElement.h" #include "KeyboardEvent.h" -#include "NP_jsobject.h" -#include "npruntime_impl.h" #include "Page.h" -#include "Plugin.h" -#include "RegularExpression.h" #include "RenderFrame.h" -#include "RenderTableCell.h" +#include "RenderLayer.h" #include "RenderView.h" #include "ResourceHandle.h" -#include "runtime_root.h" -#include "Settings.h" -#include "TextResourceDecoder.h" #include <windows.h> @@ -85,7 +75,7 @@ void computePageRectsForFrame(Frame* frame, const IntRect& printRect, float head float ratio = (float)printRect.height() / (float)printRect.width(); - float pageWidth = (float) root->overflowWidth(); + float pageWidth = (float) root->rightLayoutOverflow(); float pageHeight = pageWidth * ratio; outPageHeight = (int) pageHeight; // this is the height of the page adjusted by margins pageHeight -= (headerHeight + footerHeight); @@ -129,8 +119,8 @@ HBITMAP imageFromSelection(Frame* frame, bool forceBlackText) FrameView* view = frame->view(); if (view->parent()) { ir.setLocation(view->parent()->convertChildToSelf(view, ir.location())); - w = ir.width() * view->scale() + 0.5; - h = ir.height() * view->scale() + 0.5; + w = ir.width() * view->zoomFactor() + 0.5; + h = ir.height() * view->zoomFactor() + 0.5; } else { ir = view->contentsToWindow(ir); w = ir.width(); diff --git a/WebCore/platform/CrossThreadCopier.h b/WebCore/platform/CrossThreadCopier.h index e35a6b3..80805c4 100644 --- a/WebCore/platform/CrossThreadCopier.h +++ b/WebCore/platform/CrossThreadCopier.h @@ -81,9 +81,9 @@ namespace WebCore { template<typename T> struct CrossThreadCopierBase<false, false, PassOwnPtr<T> > { typedef PassOwnPtr<T> Type; - static Type copy(const PassOwnPtr<T>& ownPtr) + static Type copy(Type ownPtr) { - return PassOwnPtr<T>(static_cast<T*>(ownPtr.release())); + return ownPtr; } }; diff --git a/WebCore/platform/PlatformKeyboardEvent.h b/WebCore/platform/PlatformKeyboardEvent.h index 824587e..6ec4879 100644 --- a/WebCore/platform/PlatformKeyboardEvent.h +++ b/WebCore/platform/PlatformKeyboardEvent.h @@ -249,6 +249,12 @@ namespace WebCore { QKeyEvent* m_qtEvent; #endif }; + +#if PLATFORM(QT) +// Used by WebKit2. +String keyIdentifierForQtKeyCode(int keyCode); +int windowsKeyCodeForKeyEvent(unsigned int keycode, bool isKeypad = false); +#endif } // namespace WebCore diff --git a/WebCore/platform/PurgeableBuffer.h b/WebCore/platform/PurgeableBuffer.h index 94e58da..3caf482 100644 --- a/WebCore/platform/PurgeableBuffer.h +++ b/WebCore/platform/PurgeableBuffer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008 Apple Inc. All Rights Reserved. + * Copyright (C) 2008, 2010 Apple Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -27,14 +27,15 @@ #define PurgeableBuffer_h #include <wtf/Noncopyable.h> +#include <wtf/PassOwnPtr.h> #include <wtf/Vector.h> namespace WebCore { class PurgeableBuffer : public Noncopyable { public: - static PurgeableBuffer* create(const char* data, size_t); - static PurgeableBuffer* create(const Vector<char>& v) { return create(v.data(), v.size()); } + static PassOwnPtr<PurgeableBuffer> create(const char* data, size_t); + static PassOwnPtr<PurgeableBuffer> create(const Vector<char>& vector) { return create(vector.data(), vector.size()); } ~PurgeableBuffer(); @@ -63,7 +64,7 @@ namespace WebCore { }; #if !OS(DARWIN) || defined(BUILDING_ON_TIGER) || PLATFORM(QT) || PLATFORM(GTK) - inline PurgeableBuffer* PurgeableBuffer::create(const char*, size_t) { return 0; } + inline PassOwnPtr<PurgeableBuffer> PurgeableBuffer::create(const char*, size_t) { return PassOwnPtr<PurgeableBuffer>(); } inline PurgeableBuffer::~PurgeableBuffer() { } inline const char* PurgeableBuffer::data() const { return 0; } inline void PurgeableBuffer::setPurgePriority(PurgePriority) { } diff --git a/WebCore/platform/SharedBuffer.cpp b/WebCore/platform/SharedBuffer.cpp index 4a46c2c..6cf1131 100644 --- a/WebCore/platform/SharedBuffer.cpp +++ b/WebCore/platform/SharedBuffer.cpp @@ -28,6 +28,7 @@ #include "SharedBuffer.h" #include "PurgeableBuffer.h" +#include <wtf/PassOwnPtr.h> using namespace std; @@ -86,11 +87,11 @@ PassRefPtr<SharedBuffer> SharedBuffer::adoptVector(Vector<char>& vector) return buffer.release(); } -PassRefPtr<SharedBuffer> SharedBuffer::adoptPurgeableBuffer(PurgeableBuffer* purgeableBuffer) +PassRefPtr<SharedBuffer> SharedBuffer::adoptPurgeableBuffer(PassOwnPtr<PurgeableBuffer> purgeableBuffer) { ASSERT(!purgeableBuffer->isPurgeable()); RefPtr<SharedBuffer> buffer = create(); - buffer->m_purgeableBuffer.set(purgeableBuffer); + buffer->m_purgeableBuffer = purgeableBuffer; return buffer.release(); } @@ -184,7 +185,7 @@ PassRefPtr<SharedBuffer> SharedBuffer::copy() const return clone; } -PurgeableBuffer* SharedBuffer::releasePurgeableBuffer() +PassOwnPtr<PurgeableBuffer> SharedBuffer::releasePurgeableBuffer() { ASSERT(hasOneRef()); return m_purgeableBuffer.release(); diff --git a/WebCore/platform/SharedBuffer.h b/WebCore/platform/SharedBuffer.h index c2db21e..73afadf 100644 --- a/WebCore/platform/SharedBuffer.h +++ b/WebCore/platform/SharedBuffer.h @@ -61,7 +61,7 @@ public: // The buffer must be in non-purgeable state before adopted to a SharedBuffer. // It will stay that way until released. - static PassRefPtr<SharedBuffer> adoptPurgeableBuffer(PurgeableBuffer* buffer); + static PassRefPtr<SharedBuffer> adoptPurgeableBuffer(PassOwnPtr<PurgeableBuffer>); #if PLATFORM(ANDROID) virtual @@ -106,7 +106,7 @@ public: bool hasPurgeableBuffer() const { return m_purgeableBuffer.get(); } // Ensure this buffer has no other clients before calling this. - PurgeableBuffer* releasePurgeableBuffer(); + PassOwnPtr<PurgeableBuffer> releasePurgeableBuffer(); // Return the number of consecutive bytes after "position". "data" // points to the first byte. diff --git a/WebCore/platform/ThemeTypes.h b/WebCore/platform/ThemeTypes.h index 271bd83..d82aa73 100644 --- a/WebCore/platform/ThemeTypes.h +++ b/WebCore/platform/ThemeTypes.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008 Apple Inc. All Rights Reserved. + * Copyright (C) 2008, 2009, 2010 Apple Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -51,7 +51,7 @@ enum ControlPart { MediaFullscreenButtonPart, MediaMuteButtonPart, MediaPlayButtonPart, MediaSeekBackButtonPart, MediaSeekForwardButtonPart, MediaRewindButtonPart, MediaReturnToRealtimeButtonPart, MediaToggleClosedCaptionsButtonPart, MediaSliderPart, MediaSliderThumbPart, MediaVolumeSliderContainerPart, MediaVolumeSliderPart, MediaVolumeSliderThumbPart, - MediaControlsBackgroundPart, MediaCurrentTimePart, MediaTimeRemainingPart, + MediaVolumeSliderMuteButtonPart, MediaControlsBackgroundPart, MediaCurrentTimePart, MediaTimeRemainingPart, MenulistPart, MenulistButtonPart, MenulistTextPart, MenulistTextFieldPart, MeterPart, OuterSpinButtonPart, ProgressBarPart, ProgressBarValuePart, SliderHorizontalPart, SliderVerticalPart, SliderThumbHorizontalPart, SliderThumbVerticalPart, CaretPart, SearchFieldPart, SearchFieldDecorationPart, diff --git a/WebCore/platform/chromium/GLES2Context.h b/WebCore/platform/chromium/GLES2Context.h index 93a343c..b72329a 100644 --- a/WebCore/platform/chromium/GLES2Context.h +++ b/WebCore/platform/chromium/GLES2Context.h @@ -38,20 +38,32 @@ namespace WebCore { class GLES2ContextInternal; +class IntSize; class Page; class GLES2Context : public Noncopyable { public: - // If a Page is specified then the resulting GL ES context draws directly - // to the window associated with the Page, otherwise an off-screen GL ES context is - // created. - static PassOwnPtr<GLES2Context> create(Page*); + // Creates a GL ES context that draws directly to the window associated with + // the Page. + static PassOwnPtr<GLES2Context> createOnscreen(Page*); + + // Creates a GL ES context that renders offscreen, optionally as a child + // of the given parent if specified. + static PassOwnPtr<GLES2Context> createOffscreen(GLES2Context* parent); + ~GLES2Context(); bool makeCurrent(); bool destroy(); bool swapBuffers(); + // Only valid for offscreen contexts. + void resizeOffscreenContent(const IntSize&); + + // Returns the ID of the texture used for offscreen rendering in the context of the parent. + // This texture is accessible by the GPU page compositor. + unsigned getOffscreenContentParentTextureId(); + private: friend class GLES2ContextInternal; OwnPtr<GLES2ContextInternal> m_internal; diff --git a/WebCore/platform/graphics/Color.cpp b/WebCore/platform/graphics/Color.cpp index 2f2a357..80c8286 100644 --- a/WebCore/platform/graphics/Color.cpp +++ b/WebCore/platform/graphics/Color.cpp @@ -126,9 +126,8 @@ RGBA32 makeRGBAFromCMYKA(float c, float m, float y, float k, float a) } // originally moved here from the CSS parser -bool Color::parseHexColor(const String& name, RGBA32& rgb) +bool Color::parseHexColor(const UChar* name, unsigned length, RGBA32& rgb) { - unsigned length = name.length(); if (length != 3 && length != 6) return false; unsigned value = 0; @@ -150,6 +149,11 @@ bool Color::parseHexColor(const String& name, RGBA32& rgb) return true; } +bool Color::parseHexColor(const String& name, RGBA32& rgb) +{ + return parseHexColor(name.characters(), name.length(), rgb); +} + int differenceSquared(const Color& c1, const Color& c2) { int dR = c1.red() - c2.red(); @@ -160,8 +164,8 @@ int differenceSquared(const Color& c1, const Color& c2) Color::Color(const String& name) { - if (name.startsWith("#")) - m_valid = parseHexColor(name.substring(1), m_color); + if (name[0] == '#') + m_valid = parseHexColor(name.characters() + 1, name.length() - 1, m_color); else setNamedColor(name); } diff --git a/WebCore/platform/graphics/Color.h b/WebCore/platform/graphics/Color.h index a6412d6..089d061 100644 --- a/WebCore/platform/graphics/Color.h +++ b/WebCore/platform/graphics/Color.h @@ -27,6 +27,7 @@ #define Color_h #include <wtf/FastAllocBase.h> +#include <wtf/unicode/Unicode.h> #if PLATFORM(CG) typedef struct CGColor* CGColorRef; @@ -53,8 +54,8 @@ struct rgb_color; namespace WebCore { -class String; class Color; +class String; typedef unsigned RGBA32; // RGBA quadruplet @@ -135,6 +136,7 @@ public: #endif static bool parseHexColor(const String& name, RGBA32& rgb); + static bool parseHexColor(const UChar* name, unsigned length, RGBA32& rgb); static const RGBA32 black = 0xFF000000; static const RGBA32 white = 0xFFFFFFFF; diff --git a/WebCore/platform/graphics/GlyphMetricsMap.h b/WebCore/platform/graphics/GlyphMetricsMap.h index 82e234b..fa85bcc 100644 --- a/WebCore/platform/graphics/GlyphMetricsMap.h +++ b/WebCore/platform/graphics/GlyphMetricsMap.h @@ -113,7 +113,7 @@ template<class T> typename GlyphMetricsMap<T>::GlyphMetricsPage* GlyphMetricsMap if ((page = m_pages->get(pageNumber))) return page; } else - m_pages.set(new HashMap<int, GlyphMetricsPage*>); + m_pages = adoptPtr(new HashMap<int, GlyphMetricsPage*>); page = new GlyphMetricsPage; m_pages->set(pageNumber, page); } diff --git a/WebCore/platform/graphics/GraphicsLayer.h b/WebCore/platform/graphics/GraphicsLayer.h index b5797fd..8fcebce 100644 --- a/WebCore/platform/graphics/GraphicsLayer.h +++ b/WebCore/platform/graphics/GraphicsLayer.h @@ -94,10 +94,9 @@ class AnimationValue : public Noncopyable { public: AnimationValue(float keyTime, const TimingFunction* timingFunction = 0) : m_keyTime(keyTime) - , m_timingFunction(0) { if (timingFunction) - m_timingFunction.set(new TimingFunction(*timingFunction)); + m_timingFunction = adoptPtr(new TimingFunction(*timingFunction)); } virtual ~AnimationValue() { } @@ -132,7 +131,7 @@ public: : AnimationValue(keyTime, timingFunction) { if (value) - m_value.set(new TransformOperations(*value)); + m_value = adoptPtr(new TransformOperations(*value)); } const TransformOperations* value() const { return m_value.get(); } diff --git a/WebCore/platform/graphics/MediaPlayer.cpp b/WebCore/platform/graphics/MediaPlayer.cpp index 4eb4c6b..3915713 100644 --- a/WebCore/platform/graphics/MediaPlayer.cpp +++ b/WebCore/platform/graphics/MediaPlayer.cpp @@ -53,11 +53,10 @@ #include "MediaPlayerPrivateQuickTimeVisualContext.h" #include "MediaPlayerPrivateQuicktimeWin.h" #elif PLATFORM(QT) -// QtMultimedia support is disabled currently. -#if 1 || (QT_VERSION < 0x040700) -#include "MediaPlayerPrivatePhonon.h" -#else +#if USE(QT_MULTIMEDIA) #include "MediaPlayerPrivateQt.h" +#else +#include "MediaPlayerPrivatePhonon.h" #endif #elif PLATFORM(CHROMIUM) #include "MediaPlayerPrivateChromium.h" diff --git a/WebCore/platform/graphics/MediaPlayer.h b/WebCore/platform/graphics/MediaPlayer.h index f825b57..87f8fb4 100644 --- a/WebCore/platform/graphics/MediaPlayer.h +++ b/WebCore/platform/graphics/MediaPlayer.h @@ -144,7 +144,7 @@ public: static PassOwnPtr<MediaPlayer> create(MediaPlayerClient* client) { - return new MediaPlayer(client); + return adoptPtr(new MediaPlayer(client)); } virtual ~MediaPlayer(); diff --git a/WebCore/platform/graphics/SimpleFontData.h b/WebCore/platform/graphics/SimpleFontData.h index bc897be..ba959e4 100644 --- a/WebCore/platform/graphics/SimpleFontData.h +++ b/WebCore/platform/graphics/SimpleFontData.h @@ -31,6 +31,7 @@ #include "GlyphPageTreeNode.h" #include "TypesettingFeatures.h" #include <wtf/OwnPtr.h> +#include <wtf/PassOwnPtr.h> #if USE(ATSUI) typedef struct OpaqueATSUStyle* ATSUStyle; @@ -264,7 +265,7 @@ ALWAYS_INLINE FloatRect SimpleFontData::boundsForGlyph(Glyph glyph) const bounds = platformBoundsForGlyph(glyph); if (!m_glyphToBoundsMap) - m_glyphToBoundsMap.set(new GlyphMetricsMap<FloatRect>()); + m_glyphToBoundsMap = adoptPtr(new GlyphMetricsMap<FloatRect>); m_glyphToBoundsMap->setMetricsForGlyph(glyph, bounds); return bounds; } diff --git a/WebCore/platform/graphics/cairo/DrawErrorUnderline.h b/WebCore/platform/graphics/cairo/DrawErrorUnderline.h index 9776853..1e0a846 100644 --- a/WebCore/platform/graphics/cairo/DrawErrorUnderline.h +++ b/WebCore/platform/graphics/cairo/DrawErrorUnderline.h @@ -53,7 +53,7 @@ static inline void drawErrorUnderline(cairo_t* cr, double x, double y, double wi double halfSquare = 0.5 * square; double unitWidth = (heightSquares - 1.0) * square; - int widthUnits = static_cast<int>(0.5 * (width + unitWidth) / unitWidth); + int widthUnits = static_cast<int>((width + 0.5 * unitWidth) / unitWidth); x += 0.5 * (width - widthUnits * unitWidth); width = widthUnits * unitWidth; diff --git a/WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp b/WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp index e8324a3..6ed8905 100644 --- a/WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp +++ b/WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp @@ -563,8 +563,10 @@ void GraphicsContext::fillRect(const FloatRect& rect) return; cairo_t* cr = m_data->cr; + cairo_save(cr); cairo_rectangle(cr, rect.x(), rect.y(), rect.width(), rect.height()); fillPath(); + cairo_restore(cr); } static void drawBorderlessRectShadow(GraphicsContext* context, const FloatRect& rect, const Color& rectColor) @@ -899,7 +901,7 @@ void GraphicsContext::createPlatformShadow(PassOwnPtr<ImageBuffer> buffer, const // create filter RefPtr<Filter> filter = ImageBufferFilter::create(); - filter->setSourceImage(buffer.release()); + filter->setSourceImage(buffer); RefPtr<FilterEffect> source = SourceGraphic::create(); source->setScaledSubRegion(FloatRect(FloatPoint(), shadowRect.size())); source->setIsAlphaImage(true); diff --git a/WebCore/platform/graphics/chromium/FontLinux.cpp b/WebCore/platform/graphics/chromium/FontLinux.cpp index a2098a4..1953dd8 100644 --- a/WebCore/platform/graphics/chromium/FontLinux.cpp +++ b/WebCore/platform/graphics/chromium/FontLinux.cpp @@ -49,6 +49,7 @@ #include <unicode/uchar.h> #include <wtf/OwnArrayPtr.h> #include <wtf/OwnPtr.h> +#include <wtf/unicode/Unicode.h> namespace WebCore { @@ -180,10 +181,20 @@ public: m_item.face = 0; m_item.font = allocHarfbuzzFont(); - m_item.string = m_run.characters(); - m_item.stringLength = m_run.length(); m_item.item.bidiLevel = m_run.rtl(); + int length = m_run.length(); + m_item.stringLength = length; + + if (!m_item.item.bidiLevel) + m_item.string = m_run.characters(); + else { + // Assume mirrored character is in the same Unicode multilingual plane as the original one. + UChar* string = new UChar[length]; + mirrorCharacters(string, m_run.characters(), length); + m_item.string = string; + } + reset(); } @@ -192,6 +203,8 @@ public: fastFree(m_item.font); deleteGlyphArrays(); delete[] m_item.log_clusters; + if (m_item.item.bidiLevel) + delete[] m_item.string; } void reset() @@ -455,6 +468,22 @@ private: m_offsetX += m_pixelWidth; } + void mirrorCharacters(UChar* destination, const UChar* source, int length) const + { + int position = 0; + bool error = false; + // Iterate characters in source and mirror character if needed. + while (position < length) { + UChar32 character; + int nextPosition = position; + U16_NEXT(source, nextPosition, length, character); + character = u_charMirror(character); + U16_APPEND(destination, position, length, character, error); + ASSERT(!error); + position = nextPosition; + } + } + const Font* const m_font; HB_ShaperItem m_item; uint16_t* m_glyphs16; // A vector of 16-bit glyph ids. diff --git a/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp b/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp index 59da9ae..9ac506c 100644 --- a/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp +++ b/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp @@ -647,7 +647,7 @@ bool LayerRendererChromium::makeContextCurrent() bool LayerRendererChromium::initGL() { - m_gles2Context = GLES2Context::create(m_page); + m_gles2Context = GLES2Context::createOnscreen(m_page); if (!m_gles2Context) return false; diff --git a/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp b/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp index 29ac356..7869c45 100644 --- a/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp +++ b/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp @@ -764,7 +764,7 @@ float MediaPlayerPrivateGStreamer::maxTimeSeekable() const if (isinf(duration())) return 0.0f; - return maxTimeLoaded(); + return duration(); } float MediaPlayerPrivateGStreamer::maxTimeLoaded() const @@ -920,10 +920,13 @@ void MediaPlayerPrivateGStreamer::updateStates() gst_element_state_get_name(pending)); // Change in progress - if (!m_isStreaming) + if (!m_isStreaming && !m_buffering) return; - // Resume playback if a seek was performed in a live pipeline. + // Resume playback if a seek was performed in a live pipeline + // or during progressive download. That second use-case + // happens when the seek is performed to a region of the media + // that hasn't been downloaded yet. if (m_seeking) { shouldUpdateAfterSeek = true; m_seeking = false; diff --git a/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp b/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp index c55f7bf..d3b5f1b 100644 --- a/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp +++ b/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp @@ -330,6 +330,7 @@ static void webKitWebSrcStop(WebKitWebSrc* src, bool seeking) if (priv->frame) priv->frame.release(); + GST_OBJECT_LOCK(src); if (priv->needDataID) g_source_remove(priv->needDataID); priv->needDataID = 0; @@ -343,6 +344,7 @@ static void webKitWebSrcStop(WebKitWebSrc* src, bool seeking) priv->seekID = 0; priv->paused = FALSE; + GST_OBJECT_UNLOCK(src); g_free(priv->iradioName); priv->iradioName = 0; @@ -542,8 +544,10 @@ static gboolean webKitWebSrcNeedDataMainCb(WebKitWebSrc* src) // Ports not using libsoup need to call the unpause/schedule API of their // underlying network implementation here. + GST_OBJECT_LOCK(src); priv->paused = FALSE; priv->needDataID = 0; + GST_OBJECT_UNLOCK(src); return FALSE; } @@ -553,10 +557,15 @@ static void webKitWebSrcNeedDataCb(GstAppSrc* appsrc, guint length, gpointer use WebKitWebSrcPrivate* priv = src->priv; GST_DEBUG_OBJECT(src, "Need more data: %u", length); - if (priv->needDataID || !priv->paused) + + GST_OBJECT_LOCK(src); + if (priv->needDataID || !priv->paused) { + GST_OBJECT_UNLOCK(src); return; + } priv->needDataID = g_timeout_add_full(G_PRIORITY_DEFAULT, 0, (GSourceFunc) webKitWebSrcNeedDataMainCb, gst_object_ref(src), (GDestroyNotify) gst_object_unref); + GST_OBJECT_UNLOCK(src); } static gboolean webKitWebSrcEnoughDataMainCb(WebKitWebSrc* src) @@ -570,8 +579,11 @@ static gboolean webKitWebSrcEnoughDataMainCb(WebKitWebSrc* src) // Ports not using libsoup need to call the pause/unschedule API of their // underlying network implementation here. + GST_OBJECT_LOCK(src); priv->paused = TRUE; priv->enoughDataID = 0; + GST_OBJECT_UNLOCK(src); + return FALSE; } @@ -581,10 +593,15 @@ static void webKitWebSrcEnoughDataCb(GstAppSrc* appsrc, gpointer userData) WebKitWebSrcPrivate* priv = src->priv; GST_DEBUG_OBJECT(src, "Have enough data"); - if (priv->enoughDataID || priv->paused) + + GST_OBJECT_LOCK(src); + if (priv->enoughDataID || priv->paused) { + GST_OBJECT_UNLOCK(src); return; + } priv->enoughDataID = g_timeout_add_full(G_PRIORITY_DEFAULT, 0, (GSourceFunc) webKitWebSrcEnoughDataMainCb, gst_object_ref(src), (GDestroyNotify) gst_object_unref); + GST_OBJECT_UNLOCK(src); } static gboolean webKitWebSrcSeekMainCb(WebKitWebSrc* src) @@ -611,9 +628,12 @@ static gboolean webKitWebSrcSeekDataCb(GstAppSrc* appsrc, guint64 offset, gpoint GST_DEBUG_OBJECT(src, "Doing range-request seek"); priv->requestedOffset = offset; + + GST_OBJECT_LOCK(src); if (priv->seekID) g_source_remove(priv->seekID); priv->seekID = g_timeout_add_full(G_PRIORITY_DEFAULT, 0, (GSourceFunc) webKitWebSrcSeekMainCb, gst_object_ref(src), (GDestroyNotify) gst_object_unref); + GST_OBJECT_UNLOCK(src); return TRUE; } @@ -743,8 +763,12 @@ void StreamingClient::didReceiveData(ResourceHandle* handle, const char* data, i void StreamingClient::didFinishLoading(ResourceHandle*) { + WebKitWebSrcPrivate* priv = m_src->priv; + GST_DEBUG_OBJECT(m_src, "Have EOS"); - gst_app_src_end_of_stream(m_src->priv->appsrc); + + if (!priv->seekID) + gst_app_src_end_of_stream(m_src->priv->appsrc); } void StreamingClient::didFail(ResourceHandle*, const ResourceError& error) diff --git a/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp b/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp index 9f20b68..fba3d4b 100644 --- a/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp +++ b/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp @@ -124,8 +124,10 @@ void ComplexTextController::collectComplexTextRunsForCharactersCoreText(const UC if (!m_mayUseNaturalWritingDirection || m_run.directionalOverride()) { static const void* optionKeys[] = { kCTTypesetterOptionForcedEmbeddingLevel }; - static const void* ltrOptionValues[] = { kCFBooleanFalse }; - static const void* rtlOptionValues[] = { kCFBooleanTrue }; + const short ltrForcedEmbeddingLevelValue = 0; + const short rtlForcedEmbeddingLevelValue = 1; + static const void* ltrOptionValues[] = { CFNumberCreate(kCFAllocatorDefault, kCFNumberShortType, <rForcedEmbeddingLevelValue) }; + static const void* rtlOptionValues[] = { CFNumberCreate(kCFAllocatorDefault, kCFNumberShortType, &rtlForcedEmbeddingLevelValue) }; static CFDictionaryRef ltrTypesetterOptions = CFDictionaryCreate(kCFAllocatorDefault, optionKeys, ltrOptionValues, sizeof(optionKeys) / sizeof(*optionKeys), &kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); static CFDictionaryRef rtlTypesetterOptions = CFDictionaryCreate(kCFAllocatorDefault, optionKeys, rtlOptionValues, sizeof(optionKeys) / sizeof(*optionKeys), &kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); typesetter.adoptCF(CTTypesetterCreateWithAttributedStringAndOptions(attributedString.get(), m_run.ltr() ? ltrTypesetterOptions : rtlTypesetterOptions)); diff --git a/WebCore/platform/graphics/mac/GraphicsLayerCA.mm b/WebCore/platform/graphics/mac/GraphicsLayerCA.mm index 852bdb0..43b3f3e 100644 --- a/WebCore/platform/graphics/mac/GraphicsLayerCA.mm +++ b/WebCore/platform/graphics/mac/GraphicsLayerCA.mm @@ -1820,9 +1820,13 @@ bool GraphicsLayerCA::createTransformAnimationsFromKeyframes(const KeyframeValue TransformOperation::OperationType transformOp = isMatrixAnimation ? TransformOperation::MATRIX_3D : functionList[animationIndex]; CAPropertyAnimation* caAnimation; +#if defined(BUILDING_ON_LEOPARD) || defined(BUILDING_ON_SNOW_LEOPARD) // CA applies animations in reverse order (<rdar://problem/7095638>) so we need the last one we add (per property) // to be non-additive. bool additive = animationIndex < (numAnimations - 1); +#else + bool additive = animationIndex > 0; +#endif if (isKeyframe) { CAKeyframeAnimation* keyframeAnim = createKeyframeAnimation(animation, valueList.property(), additive); validMatrices = setTransformAnimationKeyframes(valueList, animation, keyframeAnim, animationIndex, transformOp, isMatrixAnimation, boxSize); diff --git a/WebCore/platform/graphics/qt/GraphicsContextQt.cpp b/WebCore/platform/graphics/qt/GraphicsContextQt.cpp index 9d23340..913a764 100644 --- a/WebCore/platform/graphics/qt/GraphicsContextQt.cpp +++ b/WebCore/platform/graphics/qt/GraphicsContextQt.cpp @@ -260,6 +260,7 @@ GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate(QPainter* p) antiAliasingForRectsAndLines = painter->testRenderHint(QPainter::Antialiasing); // FIXME: Maybe only enable in SVG mode? painter->setRenderHint(QPainter::Antialiasing, true); + painter->setRenderHint(QPainter::SmoothPixmapTransform, true); } else antiAliasingForRectsAndLines = false; } @@ -1394,13 +1395,13 @@ void GraphicsContext::setImageInterpolationQuality(InterpolationQuality quality) m_data->imageInterpolationQuality = quality; switch (quality) { - case InterpolationDefault: case InterpolationNone: case InterpolationLow: // use nearest-neigbor m_data->p()->setRenderHint(QPainter::SmoothPixmapTransform, false); break; + case InterpolationDefault: case InterpolationMedium: case InterpolationHigh: default: diff --git a/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp b/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp index 226f1fb..89badcc 100644 --- a/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp +++ b/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp @@ -28,6 +28,7 @@ #include "TranslateTransformOperation.h" #include "UnitBezier.h" #include <QtCore/qabstractanimation.h> +#include <QtCore/qdatetime.h> #include <QtCore/qdebug.h> #include <QtCore/qmetaobject.h> #include <QtCore/qset.h> @@ -45,6 +46,8 @@ #define QT_DEBUG_RECACHE 0 #define QT_DEBUG_CACHEDUMP 0 +#define QT_DEBUG_FPS 0 + namespace WebCore { #ifndef QT_NO_GRAPHICSEFFECT @@ -1184,6 +1187,15 @@ void GraphicsLayerQt::syncCompositingState() } /* \reimp (GraphicsLayer.h) +*/ +void GraphicsLayerQt::syncCompositingStateForThisLayerOnly() +{ + // We can't call flushChanges recursively here + m_impl->flushChanges(false); + GraphicsLayer::syncCompositingStateForThisLayerOnly(); +} + +/* \reimp (GraphicsLayer.h) */ NativeLayer GraphicsLayerQt::nativeLayer() const { @@ -1323,6 +1335,22 @@ protected: // This is the part that differs between animated properties. virtual void applyFrame(const T& fromValue, const T& toValue, qreal progress) = 0; + virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) + { +#if QT_DEBUG_FPS + if (newState == Running && oldState == Stopped) { + qDebug("Animation Started!"); + m_fps.frames = 0; + m_fps.duration.start(); + } else if (newState == Stopped && oldState == Running) { + const int duration = m_fps.duration.elapsed(); + qDebug("Animation Ended! %dms [%f FPS]", duration, + (1000 / (((float)duration) / m_fps.frames))); + } +#endif + AnimationQtBase::updateState(newState, oldState); + } + virtual void updateCurrentTime(int currentTime) { if (!m_layer) @@ -1362,9 +1390,18 @@ protected: progress = (!progress || progress == 1 || it.key() == it2.key()) ? progress : applyTimingFunction(timingFunc, (progress - it.key()) / (it2.key() - it.key()), duration()); applyFrame(fromValue, toValue, progress); +#if QT_DEBUG_FPS + ++m_fps.frames; +#endif } QMap<qreal, KeyframeValueQt<T> > m_keyframeValues; +#if QT_DEBUG_FPS + struct { + QTime duration; + int frames; + } m_fps; +#endif }; class TransformAnimationQt : public AnimationQt<TransformOperations> { @@ -1416,7 +1453,7 @@ public: virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) { - AnimationQtBase::updateState(newState, oldState); + AnimationQt<TransformOperations>::updateState(newState, oldState); if (!m_layer) return; @@ -1467,7 +1504,7 @@ public: virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) { - QAbstractAnimation::updateState(newState, oldState); + AnimationQt<qreal>::updateState(newState, oldState); if (m_layer) m_layer.data()->m_opacityAnimationRunning = (newState == QAbstractAnimation::Running); diff --git a/WebCore/platform/graphics/qt/GraphicsLayerQt.h b/WebCore/platform/graphics/qt/GraphicsLayerQt.h index 6de5a6e..f81bd3d 100644 --- a/WebCore/platform/graphics/qt/GraphicsLayerQt.h +++ b/WebCore/platform/graphics/qt/GraphicsLayerQt.h @@ -83,6 +83,7 @@ public: virtual void distributeOpacity(float); virtual float accumulatedOpacity() const; virtual void syncCompositingState(); + virtual void syncCompositingStateForThisLayerOnly(); private: OwnPtr<GraphicsLayerQtImpl> m_impl; diff --git a/WebCore/platform/graphics/qt/ImageBufferQt.cpp b/WebCore/platform/graphics/qt/ImageBufferQt.cpp index e46913c..a546def 100644 --- a/WebCore/platform/graphics/qt/ImageBufferQt.cpp +++ b/WebCore/platform/graphics/qt/ImageBufferQt.cpp @@ -234,33 +234,43 @@ void putImageData(ImageData*& source, const IntRect& sourceRect, const IntPoint& unsigned srcBytesPerRow = 4 * source->width(); - bool isPainting = data.m_painter->isActive(); - if (isPainting) - data.m_painter->end(); + QRect destRect(destx, desty, endx - destx, endy - desty); - QImage image = data.m_pixmap.toImage(); - if (multiplied == Unmultiplied) - image = image.convertToFormat(QImage::Format_ARGB32); - else - image = image.convertToFormat(QImage::Format_ARGB32_Premultiplied); + QImage::Format format = multiplied == Unmultiplied ? QImage::Format_ARGB32 : QImage::Format_ARGB32_Premultiplied; + QImage image(destRect.size(), format); unsigned char* srcRows = source->data()->data()->data() + originy * srcBytesPerRow + originx * 4; for (int y = 0; y < numRows; ++y) { - quint32* scanLine = reinterpret_cast<quint32*>(image.scanLine(y + desty)); + quint32* scanLine = reinterpret_cast<quint32*>(image.scanLine(y)); for (int x = 0; x < numColumns; x++) { // ImageData stores the pixels in RGBA while QImage is ARGB quint32 pixel = reinterpret_cast<quint32*>(srcRows + 4 * x)[0]; pixel = ((pixel << 16) & 0xff0000) | ((pixel >> 16) & 0xff) | (pixel & 0xff00ff00); - scanLine[x + destx] = pixel; + scanLine[x] = pixel; } srcRows += srcBytesPerRow; } - data.m_pixmap = QPixmap::fromImage(image); - - if (isPainting) + bool isPainting = data.m_painter->isActive(); + if (!isPainting) data.m_painter->begin(&data.m_pixmap); + else { + data.m_painter->save(); + + // putImageData() should be unaffected by painter state + data.m_painter->resetTransform(); + data.m_painter->setOpacity(1.0); + data.m_painter->setClipping(false); + } + + data.m_painter->setCompositionMode(QPainter::CompositionMode_Source); + data.m_painter->drawImage(destRect, image); + + if (!isPainting) + data.m_painter->end(); + else + data.m_painter->restore(); } void ImageBuffer::putUnmultipliedImageData(ImageData* source, const IntRect& sourceRect, const IntPoint& destPoint) diff --git a/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp b/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp index 21e670c..3c6c5aa 100644 --- a/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp +++ b/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp @@ -25,6 +25,7 @@ #include "FrameView.h" #include "GraphicsContext.h" +#include "Logging.h" #include "MIMETypeRegistry.h" #include "NotImplemented.h" #include "TimeRanges.h" diff --git a/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp b/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp index 4d7b7b0..525aaf4 100644 --- a/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp +++ b/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp @@ -77,7 +77,7 @@ MediaPlayer::SupportsType MediaPlayerPrivate::supportsType(const String& mime, c if (!mime.startsWith("audio/") && !mime.startsWith("video/")) return MediaPlayer::IsNotSupported; - if (QMediaPlayer::hasSupport(mime, QStringList(codec)) >= QtMediaServices::ProbablySupported) + if (QMediaPlayer::hasSupport(mime, QStringList(codec)) >= QtMultimediaKit::ProbablySupported) return MediaPlayer::IsSupported; return MediaPlayer::MayBeSupported; @@ -96,7 +96,7 @@ MediaPlayerPrivate::MediaPlayerPrivate(MediaPlayer* player) , m_composited(false) , m_queuedSeek(-1) { - m_videoItem->setMediaObject(m_mediaPlayer); + m_mediaPlayer->bind(m_videoItem); m_videoScene->addItem(m_videoItem); // Signal Handlers @@ -123,7 +123,7 @@ MediaPlayerPrivate::MediaPlayerPrivate(MediaPlayer* player) QMediaService* service = m_mediaPlayer->service(); if (service) { m_mediaPlayerControl = qobject_cast<QMediaPlayerControl *>( - service->control(QMediaPlayerControl_iid)); + service->requestControl(QMediaPlayerControl_iid)); } } @@ -344,8 +344,8 @@ unsigned MediaPlayerPrivate::bytesLoaded() const unsigned MediaPlayerPrivate::totalBytes() const { - if (m_mediaPlayer->availableMetaData().contains(QtMediaServices::Size)) - return m_mediaPlayer->metaData(QtMediaServices::Size).toInt(); + if (m_mediaPlayer->availableMetaData().contains(QtMultimediaKit::Size)) + return m_mediaPlayer->metaData(QtMultimediaKit::Size).toInt(); return 100; } diff --git a/WebCore/platform/graphics/skia/GradientSkia.cpp b/WebCore/platform/graphics/skia/GradientSkia.cpp index 7370a49..66a8976 100644 --- a/WebCore/platform/graphics/skia/GradientSkia.cpp +++ b/WebCore/platform/graphics/skia/GradientSkia.cpp @@ -154,18 +154,18 @@ SkShader* Gradient::platformGradient() if (m_radial) { // Since the two-point radial gradient is slower than the plain radial, // only use it if we have to. - if (m_p0 != m_p1) { - // The radii we give to Skia must be positive. If we're given a - // negative radius, ask for zero instead. - SkScalar radius0 = m_r0 >= 0.0f ? WebCoreFloatToSkScalar(m_r0) : 0; - SkScalar radius1 = m_r1 >= 0.0f ? WebCoreFloatToSkScalar(m_r1) : 0; - m_gradient = SkGradientShader::CreateTwoPointRadial(m_p0, radius0, m_p1, radius1, colors, pos, static_cast<int>(countUsed), tile); - } else { + if (m_p0 == m_p1 && m_r0 <= 0.0f) { // The radius we give to Skia must be positive (and non-zero). If // we're given a zero radius, just ask for a very small radius so // Skia will still return an object. SkScalar radius = m_r1 > 0 ? WebCoreFloatToSkScalar(m_r1) : SK_ScalarMin; m_gradient = SkGradientShader::CreateRadial(m_p1, radius, colors, pos, static_cast<int>(countUsed), tile); + } else { + // The radii we give to Skia must be positive. If we're given a + // negative radius, ask for zero instead. + SkScalar radius0 = m_r0 >= 0.0f ? WebCoreFloatToSkScalar(m_r0) : 0; + SkScalar radius1 = m_r1 >= 0.0f ? WebCoreFloatToSkScalar(m_r1) : 0; + m_gradient = SkGradientShader::CreateTwoPointRadial(m_p0, radius0, m_p1, radius1, colors, pos, static_cast<int>(countUsed), tile); } } else { SkPoint pts[2] = { m_p0, m_p1 }; diff --git a/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp b/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp index 793fe72..0c1898b 100644 --- a/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp +++ b/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp @@ -737,6 +737,8 @@ void GraphicsContext::fillRect(const FloatRect& rect) if (paintingDisabled()) return; + platformContext()->save(); + SkRect r = rect; if (!isRectSkiaSafe(getCTM(), r)) { // See the other version of fillRect below. @@ -746,6 +748,8 @@ void GraphicsContext::fillRect(const FloatRect& rect) SkPaint paint; platformContext()->setupPaintForFilling(&paint); platformContext()->canvas()->drawRect(r, paint); + + platformContext()->restore(); } void GraphicsContext::fillRect(const FloatRect& rect, const Color& color, ColorSpace colorSpace) diff --git a/WebCore/platform/graphics/skia/SkiaUtils.cpp b/WebCore/platform/graphics/skia/SkiaUtils.cpp index 377ca06..0c6b2d6 100644 --- a/WebCore/platform/graphics/skia/SkiaUtils.cpp +++ b/WebCore/platform/graphics/skia/SkiaUtils.cpp @@ -240,9 +240,7 @@ bool SkPathContainsPoint(SkPath* originalPath, const FloatPoint& point, SkPath:: GraphicsContext* scratchContext() { - static ImageBuffer* scratch = 0; - if (!scratch) - scratch = ImageBuffer::create(IntSize(1, 1)).release(); + static ImageBuffer* scratch = ImageBuffer::create(IntSize(1, 1)).leakPtr(); // We don't bother checking for failure creating the ImageBuffer, since our // ImageBuffer initializer won't fail. return scratch->context(); diff --git a/WebCore/platform/graphics/wince/GraphicsContextWince.cpp b/WebCore/platform/graphics/wince/GraphicsContextWince.cpp index 7bc6a27..5292b82 100644 --- a/WebCore/platform/graphics/wince/GraphicsContextWince.cpp +++ b/WebCore/platform/graphics/wince/GraphicsContextWince.cpp @@ -1555,10 +1555,14 @@ void GraphicsContext::clipToImageBuffer(const FloatRect&, const ImageBuffer*) void GraphicsContext::fillRect(const FloatRect& rect) { + savePlatformState(); + if (m_common->state.fillGradient) fillRect(rect, m_common->state.fillGradient.get()); else fillRect(rect, fillColor(), DeviceColorSpace); + + restorePlatformState(); } void GraphicsContext::setPlatformShadow(const FloatSize&, float, const Color&, ColorSpace) diff --git a/WebCore/platform/graphics/wx/GraphicsContextWx.cpp b/WebCore/platform/graphics/wx/GraphicsContextWx.cpp index 5968ef3..01dce9e 100644 --- a/WebCore/platform/graphics/wx/GraphicsContextWx.cpp +++ b/WebCore/platform/graphics/wx/GraphicsContextWx.cpp @@ -272,9 +272,13 @@ void GraphicsContext::fillRect(const FloatRect& rect, const Color& color, ColorS if (paintingDisabled()) return; + savePlatformState(); + m_data->context->SetPen(*wxTRANSPARENT_PEN); m_data->context->SetBrush(wxBrush(color)); m_data->context->DrawRectangle(rect.x(), rect.y(), rect.width(), rect.height()); + + restorePlatformState(); } void GraphicsContext::fillRoundedRect(const IntRect& rect, const IntSize& topLeft, const IntSize& topRight, const IntSize& bottomLeft, const IntSize& bottomRight, const Color& color, ColorSpace colorSpace) diff --git a/WebCore/platform/gtk/ClipboardUtilitiesGtk.cpp b/WebCore/platform/gtk/ClipboardUtilitiesGtk.cpp index f6dea79..9fc0e74 100644 --- a/WebCore/platform/gtk/ClipboardUtilitiesGtk.cpp +++ b/WebCore/platform/gtk/ClipboardUtilitiesGtk.cpp @@ -39,8 +39,27 @@ GdkDragAction dragOperationToGdkDragActions(DragOperation coreAction) return gdkAction; } +GdkDragAction dragOperationToSingleGdkDragAction(DragOperation coreAction) +{ + if (coreAction == DragOperationEvery || coreAction & DragOperationCopy) + return GDK_ACTION_COPY; + if (coreAction & DragOperationMove) + return GDK_ACTION_MOVE; + if (coreAction & DragOperationLink) + return GDK_ACTION_LINK; + if (coreAction & DragOperationPrivate) + return GDK_ACTION_PRIVATE; + return static_cast<GdkDragAction>(0); +} + DragOperation gdkDragActionToDragOperation(GdkDragAction gdkAction) { + // We have no good way to detect DragOperationEvery other than + // to use it when all applicable flags are on. + if (gdkAction & GDK_ACTION_COPY && gdkAction & GDK_ACTION_MOVE + && gdkAction & GDK_ACTION_LINK && gdkAction & GDK_ACTION_PRIVATE) + return DragOperationEvery; + unsigned int action = DragOperationNone; if (gdkAction & GDK_ACTION_COPY) action |= DragOperationCopy; diff --git a/WebCore/platform/gtk/ClipboardUtilitiesGtk.h b/WebCore/platform/gtk/ClipboardUtilitiesGtk.h index bdb2aec..26f6346 100644 --- a/WebCore/platform/gtk/ClipboardUtilitiesGtk.h +++ b/WebCore/platform/gtk/ClipboardUtilitiesGtk.h @@ -25,6 +25,7 @@ namespace WebCore { GdkDragAction dragOperationToGdkDragActions(DragOperation); +GdkDragAction dragOperationToSingleGdkDragAction(DragOperation); DragOperation gdkDragActionToDragOperation(GdkDragAction); } diff --git a/WebCore/platform/gtk/GtkVersioning.h b/WebCore/platform/gtk/GtkVersioning.h index 885d69f..ebb1645 100644 --- a/WebCore/platform/gtk/GtkVersioning.h +++ b/WebCore/platform/gtk/GtkVersioning.h @@ -27,6 +27,7 @@ #define gdk_visual_get_depth(visual) (visual)->depth #define gdk_visual_get_bits_per_rgb(visual) (visual)->bits_per_rgb #define gdk_drag_context_get_selected_action(context) (context)->action +#define gdk_drag_context_get_actions(context) (context)->actions #endif // GTK_CHECK_VERSION(2, 21, 2) #if !GTK_CHECK_VERSION(2, 20, 0) @@ -55,6 +56,7 @@ #define gtk_dialog_get_action_area(dialog) (dialog)->action_area #define gtk_selection_data_get_length(data) (data)->length #define gtk_selection_data_get_data(data) (data)->data +#define gtk_selection_data_get_target(data) (data)->target #define gtk_adjustment_set_page_size(adj, value) (adj)->page_size = value #endif // GTK_CHECK_VERSION(2, 14, 0) diff --git a/WebCore/platform/gtk/PasteboardHelper.cpp b/WebCore/platform/gtk/PasteboardHelper.cpp index 98cbe42..111fb4e 100644 --- a/WebCore/platform/gtk/PasteboardHelper.cpp +++ b/WebCore/platform/gtk/PasteboardHelper.cpp @@ -34,7 +34,8 @@ namespace WebCore { -static GdkAtom gdkMarkupAtom = gdk_atom_intern("text/html", FALSE); +static GdkAtom textPlainAtom = gdk_atom_intern("text/plain;charset=utf-8", FALSE); +static GdkAtom markupAtom = gdk_atom_intern("text/html", FALSE); static GdkAtom netscapeURLAtom = gdk_atom_intern("_NETSCAPE_URL", FALSE); static GdkAtom uriListAtom = gdk_atom_intern("text/uri-list", FALSE); @@ -48,13 +49,13 @@ PasteboardHelper::~PasteboardHelper() gtk_target_list_unref(m_targetList); } - void PasteboardHelper::initializeTargetList() { gtk_target_list_add_text_targets(m_targetList, getIdForTargetType(TargetTypeText)); - gtk_target_list_add(m_targetList, gdkMarkupAtom, 0, getIdForTargetType(TargetTypeMarkup)); + gtk_target_list_add(m_targetList, markupAtom, 0, getIdForTargetType(TargetTypeMarkup)); gtk_target_list_add_uri_targets(m_targetList, getIdForTargetType(TargetTypeURIList)); gtk_target_list_add(m_targetList, netscapeURLAtom, 0, getIdForTargetType(TargetTypeNetscapeURL)); + gtk_target_list_add_image_targets(m_targetList, getIdForTargetType(TargetTypeImage), TRUE); } static inline GtkWidget* widgetFromFrame(Frame* frame) @@ -102,6 +103,13 @@ static Vector<KURL> urisToKURLVector(gchar** uris) return uriList; } +static String selectionDataToUTF8String(GtkSelectionData* data) +{ + // g_strndup guards against selection data that is not null-terminated. + GOwnPtr<gchar> markupString(g_strndup(reinterpret_cast<const char*>(gtk_selection_data_get_data(data)), gtk_selection_data_get_length(data))); + return String::fromUTF8(markupString.get()); +} + void PasteboardHelper::getClipboardContents(GtkClipboard* clipboard) { DataObjectGtk* dataObject = DataObjectGtk::forClipboard(clipboard); @@ -113,11 +121,9 @@ void PasteboardHelper::getClipboardContents(GtkClipboard* clipboard) dataObject->setText(String::fromUTF8(textData.get())); } - if (gtk_clipboard_wait_is_target_available(clipboard, gdkMarkupAtom)) { - if (GtkSelectionData* data = gtk_clipboard_wait_for_contents(clipboard, gdkMarkupAtom)) { - // g_strndup guards against selection data that is not null-terminated. - GOwnPtr<gchar> markupString(g_strndup(reinterpret_cast<const char*>(gtk_selection_data_get_data(data)), gtk_selection_data_get_length(data))); - dataObject->setMarkup(String::fromUTF8(markupString.get())); + if (gtk_clipboard_wait_is_target_available(clipboard, markupAtom)) { + if (GtkSelectionData* data = gtk_clipboard_wait_for_contents(clipboard, markupAtom)) { + dataObject->setMarkup(selectionDataToUTF8String(data)); gtk_selection_data_free(data); } } @@ -141,7 +147,7 @@ void PasteboardHelper::fillSelectionData(GtkSelectionData* selectionData, guint else if (info == getIdForTargetType(TargetTypeMarkup)) { GOwnPtr<gchar> markup(g_strdup(dataObject->markup().utf8().data())); - gtk_selection_data_set(selectionData, gdkMarkupAtom, 8, + gtk_selection_data_set(selectionData, markupAtom, 8, reinterpret_cast<const guchar*>(markup.get()), strlen(markup.get()) + 1); } else if (info == getIdForTargetType(TargetTypeURIList)) { @@ -179,7 +185,7 @@ GtkTargetList* PasteboardHelper::targetListForDataObject(DataObjectGtk* dataObje gtk_target_list_add_text_targets(list, getIdForTargetType(TargetTypeText)); if (dataObject->hasMarkup()) - gtk_target_list_add(list, gdkMarkupAtom, 0, getIdForTargetType(TargetTypeMarkup)); + gtk_target_list_add(list, markupAtom, 0, getIdForTargetType(TargetTypeMarkup)); if (dataObject->hasURIList()) { gtk_target_list_add_uri_targets(list, getIdForTargetType(TargetTypeURIList)); @@ -192,6 +198,62 @@ GtkTargetList* PasteboardHelper::targetListForDataObject(DataObjectGtk* dataObje return list; } +void PasteboardHelper::fillDataObjectFromDropData(GtkSelectionData* data, guint info, DataObjectGtk* dataObject) +{ + if (!gtk_selection_data_get_data(data)) + return; + + GdkAtom target = gtk_selection_data_get_target(data); + if (target == textPlainAtom) + dataObject->setText(selectionDataToUTF8String(data)); + else if (target == markupAtom) + dataObject->setMarkup(selectionDataToUTF8String(data)); + else if (target == uriListAtom) { + gchar** uris = gtk_selection_data_get_uris(data); + if (!uris) + return; + + Vector<KURL> uriList(urisToKURLVector(uris)); + dataObject->setURIList(uriList); + g_strfreev(uris); + } else if (target == netscapeURLAtom) { + String urlWithLabel(selectionDataToUTF8String(data)); + + Vector<String> pieces; + urlWithLabel.split("\n", pieces); + + // Give preference to text/uri-list here, as it can hold more + // than one URI but still take the label if there is one. + if (!dataObject->hasURL()) { + Vector<KURL> uriList; + uriList.append(KURL(KURL(), pieces[0])); + dataObject->setURIList(uriList); + } + + if (pieces.size() > 1) + dataObject->setText(pieces[1]); + } +} + +Vector<GdkAtom> PasteboardHelper::dropAtomsForContext(GtkWidget* widget, GdkDragContext* context) +{ + // Always search for these common atoms. + Vector<GdkAtom> dropAtoms; + dropAtoms.append(textPlainAtom); + dropAtoms.append(markupAtom); + dropAtoms.append(uriListAtom); + dropAtoms.append(netscapeURLAtom); + + // For images, try to find the most applicable image type. + GRefPtr<GtkTargetList> list(gtk_target_list_new(0, 0)); + gtk_target_list_add_image_targets(list.get(), getIdForTargetType(TargetTypeImage), TRUE); + GdkAtom atom = gtk_drag_dest_find_target(widget, context, list.get()); + if (atom != GDK_NONE) + dropAtoms.append(atom); + + return dropAtoms; +} + static DataObjectGtk* settingClipboardDataObject = 0; static void getClipboardContentsCallback(GtkClipboard* clipboard, GtkSelectionData *selectionData, guint info, gpointer data) diff --git a/WebCore/platform/gtk/PasteboardHelper.h b/WebCore/platform/gtk/PasteboardHelper.h index 2d46adc..33be1a8 100644 --- a/WebCore/platform/gtk/PasteboardHelper.h +++ b/WebCore/platform/gtk/PasteboardHelper.h @@ -36,6 +36,8 @@ typedef struct _GtkClipboard GtkClipboard; typedef struct _GtkTargetList GtkTargetList; typedef struct _GtkWidget GtkWidget; typedef struct _GtkSelectionData GtkSelectionData; +typedef struct _GdkDragContext GdkDragContext; +typedef struct _GdkAtom* GdkAtom; namespace WebCore { @@ -52,6 +54,8 @@ public: GtkTargetList* targetList() const; GtkTargetList* targetListForDataObject(DataObjectGtk*); void fillSelectionData(GtkSelectionData*, guint, DataObjectGtk*); + void fillDataObjectFromDropData(GtkSelectionData*, guint, DataObjectGtk*); + Vector<GdkAtom> dropAtomsForContext(GtkWidget*, GdkDragContext*); void writeClipboardContents(GtkClipboard*, GClosure* closure = 0); void getClipboardContents(GtkClipboard*); diff --git a/WebCore/platform/gtk/ScrollViewGtk.cpp b/WebCore/platform/gtk/ScrollViewGtk.cpp index 3edc7b0..e705fe0 100644 --- a/WebCore/platform/gtk/ScrollViewGtk.cpp +++ b/WebCore/platform/gtk/ScrollViewGtk.cpp @@ -106,40 +106,7 @@ void ScrollView::setGtkAdjustments(GtkAdjustment* hadj, GtkAdjustment* vadj, boo m_horizontalAdjustment = hadj; m_verticalAdjustment = vadj; - // Reset the adjustments to a sane default - if (m_horizontalAdjustment) { - ScrollbarGtk* hScrollbar = reinterpret_cast<ScrollbarGtk*>(horizontalScrollbar()); - if (hScrollbar) - hScrollbar->attachAdjustment(m_horizontalAdjustment); - - ScrollbarGtk* vScrollbar = reinterpret_cast<ScrollbarGtk*>(verticalScrollbar()); - if (vScrollbar) - vScrollbar->attachAdjustment(m_verticalAdjustment); - - // We used to reset everything to 0 here, but when page cache - // is enabled we reuse FrameViews that are cached. Since their - // size is not going to change when being restored, (which is - // what would cause the upper limit in the adjusments to be - // set in the normal case), we make sure they are up-to-date - // here. This is needed for the parent scrolling widget to be - // able to report correct values. - - int horizontalPageStep = max(max<int>(frameRect().width() * Scrollbar::minFractionToStepWhenPaging(), frameRect().width() - Scrollbar::maxOverlapBetweenPages()), 1); - gtk_adjustment_configure(m_horizontalAdjustment, - resetValues ? 0 : scrollOffset().width(), 0, - resetValues ? 0 : contentsSize().width(), - resetValues ? 0 : Scrollbar::pixelsPerLineStep(), - resetValues ? 0 : horizontalPageStep, - resetValues ? 0 : frameRect().width()); - - int verticalPageStep = max(max<int>(frameRect().height() * Scrollbar::minFractionToStepWhenPaging(), frameRect().height() - Scrollbar::maxOverlapBetweenPages()), 1); - gtk_adjustment_configure(m_verticalAdjustment, - resetValues ? 0 : scrollOffset().height(), 0, - resetValues ? 0 : contentsSize().height(), - resetValues ? 0 : Scrollbar::pixelsPerLineStep(), - resetValues ? 0 : verticalPageStep, - resetValues ? 0 : frameRect().height()); - } else { + if (!m_horizontalAdjustment) { ScrollbarGtk* hScrollbar = reinterpret_cast<ScrollbarGtk*>(horizontalScrollbar()); if (hScrollbar) hScrollbar->detachAdjustment(); @@ -147,11 +114,44 @@ void ScrollView::setGtkAdjustments(GtkAdjustment* hadj, GtkAdjustment* vadj, boo ScrollbarGtk* vScrollbar = reinterpret_cast<ScrollbarGtk*>(verticalScrollbar()); if (vScrollbar) vScrollbar->detachAdjustment(); + + return; } - /* reconsider having a scrollbar */ - setHasVerticalScrollbar(false); - setHasHorizontalScrollbar(false); + // We may be lacking scrollbars when returning to a cached + // page, this kicks the page to recreate the scrollbars. + setHasVerticalScrollbar(true); + setHasHorizontalScrollbar(true); + + ScrollbarGtk* hScrollbar = reinterpret_cast<ScrollbarGtk*>(horizontalScrollbar()); + hScrollbar->attachAdjustment(m_horizontalAdjustment); + + ScrollbarGtk* vScrollbar = reinterpret_cast<ScrollbarGtk*>(verticalScrollbar()); + vScrollbar->attachAdjustment(m_verticalAdjustment); + + // We used to reset everything to 0 here, but when page cache + // is enabled we reuse FrameViews that are cached. Since their + // size is not going to change when being restored, (which is + // what would cause the upper limit in the adjusments to be + // set in the normal case), we make sure they are up-to-date + // here. This is needed for the parent scrolling widget to be + // able to report correct values. + + int horizontalPageStep = max(max<int>(frameRect().width() * Scrollbar::minFractionToStepWhenPaging(), frameRect().width() - Scrollbar::maxOverlapBetweenPages()), 1); + gtk_adjustment_configure(m_horizontalAdjustment, + resetValues ? 0 : scrollOffset().width(), 0, + resetValues ? 0 : contentsSize().width(), + resetValues ? 0 : Scrollbar::pixelsPerLineStep(), + resetValues ? 0 : horizontalPageStep, + resetValues ? 0 : frameRect().width()); + + int verticalPageStep = max(max<int>(frameRect().height() * Scrollbar::minFractionToStepWhenPaging(), frameRect().height() - Scrollbar::maxOverlapBetweenPages()), 1); + gtk_adjustment_configure(m_verticalAdjustment, + resetValues ? 0 : scrollOffset().height(), 0, + resetValues ? 0 : contentsSize().height(), + resetValues ? 0 : Scrollbar::pixelsPerLineStep(), + resetValues ? 0 : verticalPageStep, + resetValues ? 0 : frameRect().height()); } void ScrollView::platformAddChild(Widget* child) diff --git a/WebCore/platform/mac/PurgeableBufferMac.cpp b/WebCore/platform/mac/PurgeableBufferMac.cpp index 9902f77..ce00494 100644 --- a/WebCore/platform/mac/PurgeableBufferMac.cpp +++ b/WebCore/platform/mac/PurgeableBufferMac.cpp @@ -50,27 +50,27 @@ PurgeableBuffer::~PurgeableBuffer() vm_deallocate(mach_task_self(), reinterpret_cast<vm_address_t>(m_data), m_size); } -PurgeableBuffer* PurgeableBuffer::create(const char* data, size_t size) +PassOwnPtr<PurgeableBuffer> PurgeableBuffer::create(const char* data, size_t size) { if (size < minPurgeableBufferSize) - return 0; + return PassOwnPtr<PurgeableBuffer>(); vm_address_t buffer = 0; kern_return_t ret = vm_allocate(mach_task_self(), &buffer, size, VM_FLAGS_PURGABLE | VM_FLAGS_ANYWHERE | VM_TAG_FOR_WEBCORE_PURGEABLE_MEMORY); ASSERT(ret == KERN_SUCCESS); if (ret != KERN_SUCCESS) - return 0; + return PassOwnPtr<PurgeableBuffer>(); ret = vm_copy(mach_task_self(), reinterpret_cast<vm_address_t>(data), size, buffer); ASSERT(ret == KERN_SUCCESS); if (ret != KERN_SUCCESS) { vm_deallocate(mach_task_self(), buffer, size); - return 0; + return PassOwnPtr<PurgeableBuffer>(); } - return new PurgeableBuffer(reinterpret_cast<char*>(buffer), size); + return adoptPtr(new PurgeableBuffer(reinterpret_cast<char*>(buffer), size)); } bool PurgeableBuffer::makePurgeable(bool purgeable) diff --git a/WebCore/platform/network/ResourceErrorBase.cpp b/WebCore/platform/network/ResourceErrorBase.cpp index 97435ba..42bc0de 100644 --- a/WebCore/platform/network/ResourceErrorBase.cpp +++ b/WebCore/platform/network/ResourceErrorBase.cpp @@ -29,6 +29,8 @@ namespace WebCore { +const char* const errorDomainWebKitInternal = "WebKitInternal"; + ResourceError ResourceErrorBase::copy() const { lazyInit(); diff --git a/WebCore/platform/network/ResourceErrorBase.h b/WebCore/platform/network/ResourceErrorBase.h index 237db9e..a6b7c69 100644 --- a/WebCore/platform/network/ResourceErrorBase.h +++ b/WebCore/platform/network/ResourceErrorBase.h @@ -32,6 +32,8 @@ namespace WebCore { class ResourceError; +extern const char* const errorDomainWebKitInternal; // Used for errors that won't be exposed to clients. + class ResourceErrorBase { public: // Makes a deep copy. Useful for when you need to use a ResourceError on another thread. diff --git a/WebCore/platform/network/ResourceLoadTiming.h b/WebCore/platform/network/ResourceLoadTiming.h index 55ff181..269fad0 100644 --- a/WebCore/platform/network/ResourceLoadTiming.h +++ b/WebCore/platform/network/ResourceLoadTiming.h @@ -34,7 +34,7 @@ namespace WebCore { class ResourceLoadTiming : public RefCounted<ResourceLoadTiming> { public: - PassRefPtr<ResourceLoadTiming> create() + static PassRefPtr<ResourceLoadTiming> create() { return adoptRef(new ResourceLoadTiming); } @@ -42,33 +42,35 @@ public: PassRefPtr<ResourceLoadTiming> deepCopy() { RefPtr<ResourceLoadTiming> timing = create(); - timing->redirectStart = redirectStart; - timing->redirectEnd = redirectEnd; - timing->redirectCount = redirectCount; - timing->domainLookupStart = domainLookupStart; - timing->domainLookupEnd = domainLookupEnd; + timing->requestTime = requestTime; + timing->proxyStart = proxyStart; + timing->proxyEnd = proxyEnd; + timing->dnsStart = dnsStart; + timing->dnsEnd = dnsEnd; timing->connectStart = connectStart; timing->connectEnd = connectEnd; - timing->requestStart = requestStart; - timing->requestEnd = requestEnd; - timing->responseStart = responseStart; - timing->responseEnd = responseEnd; + timing->sendStart = sendStart; + timing->sendEnd = sendEnd; + timing->receiveHeadersEnd = receiveHeadersEnd; + timing->sslStart = sslStart; + timing->sslEnd = sslEnd; return timing.release(); } bool operator==(const ResourceLoadTiming& other) const { - return redirectStart == other.redirectStart - && redirectEnd == other.redirectEnd - && redirectCount == other.redirectCount - && domainLookupStart == other.domainLookupStart - && domainLookupEnd == other.domainLookupEnd + return requestTime == other.requestTime + && proxyStart == other.proxyStart + && proxyEnd == other.proxyEnd + && dnsStart == other.dnsStart + && dnsEnd == other.dnsEnd && connectStart == other.connectStart && connectEnd == other.connectEnd - && requestStart == other.requestStart - && requestEnd == other.requestEnd - && responseStart == other.responseStart - && responseEnd == other.responseEnd; + && sendStart == other.sendStart + && sendEnd == other.sendEnd + && receiveHeadersEnd == other.receiveHeadersEnd + && sslStart == other.sslStart + && sslEnd == other.sslEnd; } bool operator!=(const ResourceLoadTiming& other) const @@ -76,31 +78,33 @@ public: return !(*this == other); } - double redirectStart; - double redirectEnd; - unsigned short redirectCount; - double domainLookupStart; - double domainLookupEnd; - double connectStart; - double connectEnd; - double requestStart; - double requestEnd; - double responseStart; - double responseEnd; + double requestTime; + int proxyStart; + int proxyEnd; + int dnsStart; + int dnsEnd; + int connectStart; + int connectEnd; + int sendStart; + int sendEnd; + int receiveHeadersEnd; + int sslStart; + int sslEnd; private: ResourceLoadTiming() - : redirectStart(0.0) - , redirectEnd(0.0) - , redirectCount(0) - , domainLookupStart(0.0) - , domainLookupEnd(0.0) - , connectStart(0.0) - , connectEnd(0.0) - , requestStart(0.0) - , requestEnd(0.0) - , responseStart(0.0) - , responseEnd(0.0) + : requestTime(0) + , proxyStart(-1) + , proxyEnd(-1) + , dnsStart(-1) + , dnsEnd(-1) + , connectStart(-1) + , connectEnd(-1) + , sendStart(0) + , sendEnd(0) + , receiveHeadersEnd(0) + , sslStart(-1) + , sslEnd(-1) { } }; diff --git a/WebCore/platform/network/ResourceRequestBase.h b/WebCore/platform/network/ResourceRequestBase.h index 2cec4ec..1622cdd 100644 --- a/WebCore/platform/network/ResourceRequestBase.h +++ b/WebCore/platform/network/ResourceRequestBase.h @@ -132,6 +132,10 @@ namespace WebCore { bool reportUploadProgress() const { return m_reportUploadProgress; } void setReportUploadProgress(bool reportUploadProgress) { m_reportUploadProgress = reportUploadProgress; } + // Whether the timing information should be collected for the request. + bool reportLoadTiming() const { return m_reportLoadTiming; } + void setReportLoadTiming(bool reportLoadTiming) { m_reportLoadTiming = reportLoadTiming; } + // What this request is for. TargetType targetType() const { return m_targetType; } void setTargetType(TargetType type) { m_targetType = type; } @@ -142,6 +146,7 @@ namespace WebCore { : m_resourceRequestUpdated(false) , m_platformRequestUpdated(true) , m_reportUploadProgress(false) + , m_reportLoadTiming(false) , m_targetType(TargetIsSubresource) { } @@ -155,6 +160,7 @@ namespace WebCore { , m_resourceRequestUpdated(true) , m_platformRequestUpdated(false) , m_reportUploadProgress(false) + , m_reportLoadTiming(false) , m_targetType(TargetIsSubresource) { } @@ -175,6 +181,7 @@ namespace WebCore { mutable bool m_resourceRequestUpdated; mutable bool m_platformRequestUpdated; bool m_reportUploadProgress; + bool m_reportLoadTiming; TargetType m_targetType; private: diff --git a/WebCore/platform/network/ResourceResponseBase.cpp b/WebCore/platform/network/ResourceResponseBase.cpp index 607cd7f..89d31d7 100644 --- a/WebCore/platform/network/ResourceResponseBase.cpp +++ b/WebCore/platform/network/ResourceResponseBase.cpp @@ -43,6 +43,8 @@ ResourceResponseBase::ResourceResponseBase() : m_expectedContentLength(0) , m_httpStatusCode(0) , m_lastModifiedDate(0) + , m_wasCached(false) + , m_connectionID(0) , m_isNull(true) , m_haveParsedCacheControlHeader(false) , m_haveParsedAgeHeader(false) @@ -68,6 +70,8 @@ ResourceResponseBase::ResourceResponseBase(const KURL& url, const String& mimeTy , m_suggestedFilename(filename) , m_httpStatusCode(0) , m_lastModifiedDate(0) + , m_wasCached(false) + , m_connectionID(0) , m_isNull(false) , m_haveParsedCacheControlHeader(false) , m_haveParsedAgeHeader(false) @@ -455,6 +459,32 @@ time_t ResourceResponseBase::lastModifiedDate() const return m_lastModifiedDate; } +bool ResourceResponseBase::wasCached() const +{ + lazyInit(); + + return m_wasCached; +} + +void ResourceResponseBase::setWasCached(bool value) +{ + m_wasCached = value; +} + +unsigned ResourceResponseBase::connectionID() const +{ + lazyInit(); + + return m_connectionID; +} + +void ResourceResponseBase::setConnectionID(unsigned connectionID) +{ + lazyInit(); + + m_connectionID = connectionID; +} + ResourceLoadTiming* ResourceResponseBase::resourceLoadTiming() const { lazyInit(); diff --git a/WebCore/platform/network/ResourceResponseBase.h b/WebCore/platform/network/ResourceResponseBase.h index 697a84c..858a612 100644 --- a/WebCore/platform/network/ResourceResponseBase.h +++ b/WebCore/platform/network/ResourceResponseBase.h @@ -97,6 +97,12 @@ public: double expires() const; double lastModified() const; + unsigned connectionID() const; + void setConnectionID(unsigned); + + bool wasCached() const; + void setWasCached(bool); + ResourceLoadTiming* resourceLoadTiming() const; void setResourceLoadTiming(PassRefPtr<ResourceLoadTiming>); @@ -130,6 +136,8 @@ protected: String m_httpStatusText; HTTPHeaderMap m_httpHeaderFields; time_t m_lastModifiedDate; + bool m_wasCached; + unsigned m_connectionID; RefPtr<ResourceLoadTiming> m_resourceLoadTiming; bool m_isNull : 1; diff --git a/WebCore/platform/network/android/ResourceHandleAndroid.cpp b/WebCore/platform/network/android/ResourceHandleAndroid.cpp index 81b75b0..60d1eb6 100644 --- a/WebCore/platform/network/android/ResourceHandleAndroid.cpp +++ b/WebCore/platform/network/android/ResourceHandleAndroid.cpp @@ -156,6 +156,7 @@ void ResourceHandle::loadResourceSynchronously(const ResourceRequest& request, Frame* frame) { SyncLoader s(error, response, data); +<<<<<<< HEAD ResourceHandle h(request, &s, false, false); // This blocks until the load is finished. // Use the request owned by the ResourceHandle. This has had the username @@ -163,6 +164,11 @@ void ResourceHandle::loadResourceSynchronously(const ResourceRequest& request, // ResourceHandleInternal::ResourceHandleInternal(). This matches the // behaviour in the asynchronous case. ResourceLoaderAndroid::start(&h, h.getInternal()->m_request, frame->loader()->client(), false, true); +======= + RefPtr<ResourceHandle> h = adoptRef(new ResourceHandle(request, &s, false, false, false)); + // This blocks until the load is finished. + ResourceLoaderAndroid::start(h.get(), request, frame->loader()->client(), false, true); +>>>>>>> webkit.org at r63173 } } // namespace WebCore diff --git a/WebCore/platform/network/cf/ResourceHandleCFNet.cpp b/WebCore/platform/network/cf/ResourceHandleCFNet.cpp index f126d27..1139126 100644 --- a/WebCore/platform/network/cf/ResourceHandleCFNet.cpp +++ b/WebCore/platform/network/cf/ResourceHandleCFNet.cpp @@ -538,6 +538,12 @@ void ResourceHandle::receivedCredential(const AuthenticationChallenge& challenge if (challenge != d->m_currentWebChallenge) return; + // FIXME: Support empty credentials. Currently, an empty credential cannot be stored in WebCore credential storage, as that's empty value for its map. + if (credential.isEmpty()) { + receivedRequestToContinueWithoutCredential(challenge); + return; + } + if (credential.persistence() == CredentialPersistenceForSession) { // Manage per-session credentials internally, because once NSURLCredentialPersistencePerSession is used, there is no way // to ignore it for a particular request (short of removing it altogether). diff --git a/WebCore/platform/network/curl/ResourceHandleCurl.cpp b/WebCore/platform/network/curl/ResourceHandleCurl.cpp index 1fbafbd..a4c1f8e 100644 --- a/WebCore/platform/network/curl/ResourceHandleCurl.cpp +++ b/WebCore/platform/network/curl/ResourceHandleCurl.cpp @@ -190,11 +190,11 @@ bool ResourceHandle::loadsBlocked() void ResourceHandle::loadResourceSynchronously(const ResourceRequest& request, StoredCredentials storedCredentials, ResourceError& error, ResourceResponse& response, Vector<char>& data, Frame*) { WebCoreSynchronousLoader syncLoader; - ResourceHandle handle(request, &syncLoader, true, false); + RefPtr<ResourceHandle> handle = adoptRef(new ResourceHandle(request, &syncLoader, true, false)); ResourceHandleManager* manager = ResourceHandleManager::sharedInstance(); - manager->dispatchSynchronousJob(&handle); + manager->dispatchSynchronousJob(handle.get()); error = syncLoader.resourceError(); data = syncLoader.data(); diff --git a/WebCore/platform/network/mac/ResourceHandleMac.mm b/WebCore/platform/network/mac/ResourceHandleMac.mm index f14c108..9f64d4e 100644 --- a/WebCore/platform/network/mac/ResourceHandleMac.mm +++ b/WebCore/platform/network/mac/ResourceHandleMac.mm @@ -583,7 +583,8 @@ void ResourceHandle::receivedCredential(const AuthenticationChallenge& challenge ASSERT(!challenge.isNull()); if (challenge != d->m_currentWebChallenge) return; - + + // FIXME: Support empty credentials. Currently, an empty credential cannot be stored in WebCore credential storage, as that's empty value for its map. if (credential.isEmpty()) { receivedRequestToContinueWithoutCredential(challenge); return; diff --git a/WebCore/platform/network/qt/ResourceHandleQt.cpp b/WebCore/platform/network/qt/ResourceHandleQt.cpp index b35df6b..ff75a94 100644 --- a/WebCore/platform/network/qt/ResourceHandleQt.cpp +++ b/WebCore/platform/network/qt/ResourceHandleQt.cpp @@ -189,9 +189,9 @@ PassRefPtr<SharedBuffer> ResourceHandle::bufferedData() void ResourceHandle::loadResourceSynchronously(const ResourceRequest& request, StoredCredentials /*storedCredentials*/, ResourceError& error, ResourceResponse& response, Vector<char>& data, Frame* frame) { WebCoreSynchronousLoader syncLoader; - ResourceHandle handle(request, &syncLoader, true, false); + RefPtr<ResourceHandle> handle = adoptRef(new ResourceHandle(request, &syncLoader, true, false)); - ResourceHandleInternal *d = handle.getInternal(); + ResourceHandleInternal* d = handle->getInternal(); if (!(d->m_user.isEmpty() || d->m_pass.isEmpty())) { // If credentials were specified for this request, add them to the url, // so that they will be passed to QNetworkRequest. @@ -201,7 +201,7 @@ void ResourceHandle::loadResourceSynchronously(const ResourceRequest& request, S d->m_request.setURL(urlWithCredentials); } d->m_frame = static_cast<FrameLoaderClientQt*>(frame->loader()->client())->webFrame(); - d->m_job = new QNetworkReplyHandler(&handle, QNetworkReplyHandler::LoadNormal); + d->m_job = new QNetworkReplyHandler(handle.get(), QNetworkReplyHandler::LoadNormal); syncLoader.waitForCompletion(); error = syncLoader.resourceError(); diff --git a/WebCore/platform/network/soup/ResourceHandleSoup.cpp b/WebCore/platform/network/soup/ResourceHandleSoup.cpp index 15d914f..e4f2a4b 100644 --- a/WebCore/platform/network/soup/ResourceHandleSoup.cpp +++ b/WebCore/platform/network/soup/ResourceHandleSoup.cpp @@ -658,9 +658,12 @@ bool ResourceHandle::willLoadFromCache(ResourceRequest&, Frame*) void ResourceHandle::loadResourceSynchronously(const ResourceRequest& request, StoredCredentials /*storedCredentials*/, ResourceError& error, ResourceResponse& response, Vector<char>& data, Frame* frame) { WebCoreSynchronousLoader syncLoader(error, response, data); - ResourceHandle handle(request, &syncLoader, true, false); + // FIXME: we should use the ResourceHandle::create method here, + // but it makes us timeout in a couple of tests. See + // https://bugs.webkit.org/show_bug.cgi?id=41823 + RefPtr<ResourceHandle> handle = adoptRef(new ResourceHandle(request, &syncLoader, true, false)); + handle->start(frame); - handle.start(frame); syncLoader.run(); } @@ -929,4 +932,3 @@ SoupSession* ResourceHandle::defaultSession() } } - diff --git a/WebCore/platform/qt/ClipboardQt.cpp b/WebCore/platform/qt/ClipboardQt.cpp index f478e64..7d22349 100644 --- a/WebCore/platform/qt/ClipboardQt.cpp +++ b/WebCore/platform/qt/ClipboardQt.cpp @@ -50,6 +50,7 @@ #include <QList> #include <QMimeData> #include <QStringList> +#include <QTextCodec> #include <QUrl> #include <qdebug.h> @@ -62,6 +63,11 @@ static bool isTextMimeType(const String& type) return type == "text/plain" || type.startsWith("text/plain;"); } +static bool isHtmlMimeType(const String& type) +{ + return type == "text/html" || type.startsWith("text/html;"); +} + ClipboardQt::ClipboardQt(ClipboardAccessPolicy policy, const QMimeData* readableClipboard) : Clipboard(policy, true) , m_readableData(readableClipboard) @@ -135,15 +141,21 @@ String ClipboardQt::getData(const String& type, bool& success) const return String(); } + if (isHtmlMimeType(type) && m_readableData->hasHtml()) { + success = true; + return m_readableData->html(); + } + if (isTextMimeType(type) && m_readableData->hasText()) { success = true; return m_readableData->text(); } ASSERT(m_readableData); - QByteArray data = m_readableData->data(QString(type)); + QByteArray rawData = m_readableData->data(type); + QString data = QTextCodec::codecForName("UTF-16")->toUnicode(rawData); success = !data.isEmpty(); - return String(data.constData(), data.size()); + return data; } bool ClipboardQt::setData(const String& type, const String& data) @@ -156,6 +168,8 @@ bool ClipboardQt::setData(const String& type, const String& data) if (isTextMimeType(type)) m_writableData->setText(QString(data)); + else if (isHtmlMimeType(type)) + m_writableData->setHtml(QString(data)); else { QByteArray array(reinterpret_cast<const char*>(data.characters()), data.length() * 2); m_writableData->setData(QString(type), array); diff --git a/WebCore/platform/qt/PlatformKeyboardEventQt.cpp b/WebCore/platform/qt/PlatformKeyboardEventQt.cpp index 58ab2bf..6dde9c4 100644 --- a/WebCore/platform/qt/PlatformKeyboardEventQt.cpp +++ b/WebCore/platform/qt/PlatformKeyboardEventQt.cpp @@ -36,7 +36,7 @@ namespace WebCore { -static String keyIdentifierForQtKeyCode(int keyCode) +String keyIdentifierForQtKeyCode(int keyCode) { switch (keyCode) { case Qt::Key_Menu: @@ -137,7 +137,7 @@ static String keyIdentifierForQtKeyCode(int keyCode) } } -static int windowsKeyCodeForKeyEvent(unsigned int keycode, bool isKeypad = false) +int windowsKeyCodeForKeyEvent(unsigned int keycode, bool isKeypad) { // Determine wheter the event comes from the keypad if (isKeypad) { diff --git a/WebCore/platform/text/TextEncodingRegistry.cpp b/WebCore/platform/text/TextEncodingRegistry.cpp index dad0f39..6ecc36f 100644 --- a/WebCore/platform/text/TextEncodingRegistry.cpp +++ b/WebCore/platform/text/TextEncodingRegistry.cpp @@ -52,7 +52,7 @@ #include "gtk/TextCodecGtk.h" #endif #if OS(WINCE) && !PLATFORM(QT) -#include "TextCodecWince.h" +#include "TextCodecWinCE.h" #endif using namespace WTF; @@ -231,8 +231,8 @@ static void buildBaseTextCodecMaps() #endif #if OS(WINCE) && !PLATFORM(QT) - TextCodecWince::registerBaseEncodingNames(addToTextEncodingNameMap); - TextCodecWince::registerBaseCodecs(addToTextCodecMap); + TextCodecWinCE::registerBaseEncodingNames(addToTextEncodingNameMap); + TextCodecWinCE::registerBaseCodecs(addToTextCodecMap); #endif } @@ -259,8 +259,8 @@ static void extendTextCodecMaps() #endif #if OS(WINCE) && !PLATFORM(QT) - TextCodecWince::registerExtendedEncodingNames(addToTextEncodingNameMap); - TextCodecWince::registerExtendedCodecs(addToTextCodecMap); + TextCodecWinCE::registerExtendedEncodingNames(addToTextEncodingNameMap); + TextCodecWinCE::registerExtendedCodecs(addToTextCodecMap); #endif pruneBlacklistedCodecs(); diff --git a/WebCore/plugins/MimeType.cpp b/WebCore/plugins/DOMMimeType.cpp index 5faeb5f..e1fa7f1 100644 --- a/WebCore/plugins/MimeType.cpp +++ b/WebCore/plugins/DOMMimeType.cpp @@ -17,34 +17,34 @@ */ #include "config.h" -#include "MimeType.h" +#include "DOMMimeType.h" +#include "DOMPlugin.h" #include "Frame.h" #include "FrameLoaderClient.h" #include "Page.h" -#include "Plugin.h" #include "PluginData.h" #include "Settings.h" #include "StringBuilder.h" namespace WebCore { -MimeType::MimeType(PassRefPtr<PluginData> pluginData, unsigned index) +DOMMimeType::DOMMimeType(PassRefPtr<PluginData> pluginData, unsigned index) : m_pluginData(pluginData) , m_index(index) { } -MimeType::~MimeType() +DOMMimeType::~DOMMimeType() { } -const String &MimeType::type() const +const String &DOMMimeType::type() const { return mimeClassInfo().type; } -String MimeType::suffixes() const +String DOMMimeType::suffixes() const { const Vector<String>& extensions = mimeClassInfo().extensions; @@ -57,18 +57,18 @@ String MimeType::suffixes() const return builder.toString(); } -const String &MimeType::description() const +const String &DOMMimeType::description() const { return mimeClassInfo().desc; } -PassRefPtr<Plugin> MimeType::enabledPlugin() const +PassRefPtr<DOMPlugin> DOMMimeType::enabledPlugin() const { const Page* p = m_pluginData->page(); if (!p || !p->mainFrame()->loader()->subframeLoader()->allowPlugins(NotAboutToInstantiatePlugin)) return 0; - return Plugin::create(m_pluginData.get(), m_pluginData->mimePluginIndices()[m_index]); + return DOMPlugin::create(m_pluginData.get(), m_pluginData->mimePluginIndices()[m_index]); } } // namespace WebCore diff --git a/WebCore/plugins/MimeType.h b/WebCore/plugins/DOMMimeType.h index c91e0a3..a010e33 100644 --- a/WebCore/plugins/MimeType.h +++ b/WebCore/plugins/DOMMimeType.h @@ -17,8 +17,8 @@ Boston, MA 02110-1301, USA. */ -#ifndef MimeType_h -#define MimeType_h +#ifndef DOMMimeType_h +#define DOMMimeType_h #include <wtf/PassRefPtr.h> #include <wtf/RefPtr.h> @@ -28,26 +28,26 @@ namespace WebCore { - class Plugin; - class String; - - class MimeType : public RefCounted<MimeType> { - public: - static PassRefPtr<MimeType> create(PassRefPtr<PluginData> pluginData, unsigned index) { return adoptRef(new MimeType(pluginData, index)); } - ~MimeType(); - - const String &type() const; - String suffixes() const; - const String &description() const; - PassRefPtr<Plugin> enabledPlugin() const; - - private: - const MimeClassInfo& mimeClassInfo() const { return m_pluginData->mimes()[m_index]; } - - MimeType(PassRefPtr<PluginData>, unsigned index); - RefPtr<PluginData> m_pluginData; - unsigned m_index; - }; +class DOMPlugin; +class String; + +class DOMMimeType : public RefCounted<DOMMimeType> { +public: + static PassRefPtr<DOMMimeType> create(PassRefPtr<PluginData> pluginData, unsigned index) { return adoptRef(new DOMMimeType(pluginData, index)); } + ~DOMMimeType(); + + const String &type() const; + String suffixes() const; + const String &description() const; + PassRefPtr<DOMPlugin> enabledPlugin() const; + +private: + const MimeClassInfo& mimeClassInfo() const { return m_pluginData->mimes()[m_index]; } + + DOMMimeType(PassRefPtr<PluginData>, unsigned index); + RefPtr<PluginData> m_pluginData; + unsigned m_index; +}; } diff --git a/WebCore/plugins/MimeType.idl b/WebCore/plugins/DOMMimeType.idl index 9d84eeb..1d97a6b 100644 --- a/WebCore/plugins/MimeType.idl +++ b/WebCore/plugins/DOMMimeType.idl @@ -20,11 +20,11 @@ module window { - interface MimeType { + interface DOMMimeType { readonly attribute DOMString type; readonly attribute DOMString suffixes; readonly attribute DOMString description; - readonly attribute Plugin enabledPlugin; + readonly attribute DOMPlugin enabledPlugin; }; } diff --git a/WebCore/plugins/MimeTypeArray.cpp b/WebCore/plugins/DOMMimeTypeArray.cpp index 9d3ad92..f36f2a2 100644 --- a/WebCore/plugins/MimeTypeArray.cpp +++ b/WebCore/plugins/DOMMimeTypeArray.cpp @@ -18,26 +18,26 @@ */ #include "config.h" -#include "MimeTypeArray.h" +#include "DOMMimeTypeArray.h" #include "AtomicString.h" +#include "DOMPlugin.h" #include "Frame.h" #include "Page.h" -#include "Plugin.h" #include "PluginData.h" namespace WebCore { -MimeTypeArray::MimeTypeArray(Frame* frame) +DOMMimeTypeArray::DOMMimeTypeArray(Frame* frame) : m_frame(frame) { } -MimeTypeArray::~MimeTypeArray() +DOMMimeTypeArray::~DOMMimeTypeArray() { } -unsigned MimeTypeArray::length() const +unsigned DOMMimeTypeArray::length() const { PluginData* data = getPluginData(); if (!data) @@ -45,7 +45,7 @@ unsigned MimeTypeArray::length() const return data->mimes().size(); } -PassRefPtr<MimeType> MimeTypeArray::item(unsigned index) +PassRefPtr<DOMMimeType> DOMMimeTypeArray::item(unsigned index) { PluginData* data = getPluginData(); if (!data) @@ -53,10 +53,10 @@ PassRefPtr<MimeType> MimeTypeArray::item(unsigned index) const Vector<MimeClassInfo>& mimes = data->mimes(); if (index >= mimes.size()) return 0; - return MimeType::create(data, index).get(); + return DOMMimeType::create(data, index).get(); } -bool MimeTypeArray::canGetItemsForName(const AtomicString& propertyName) +bool DOMMimeTypeArray::canGetItemsForName(const AtomicString& propertyName) { PluginData *data = getPluginData(); if (!data) @@ -69,7 +69,7 @@ bool MimeTypeArray::canGetItemsForName(const AtomicString& propertyName) return false; } -PassRefPtr<MimeType> MimeTypeArray::namedItem(const AtomicString& propertyName) +PassRefPtr<DOMMimeType> DOMMimeTypeArray::namedItem(const AtomicString& propertyName) { PluginData *data = getPluginData(); if (!data) @@ -77,12 +77,12 @@ PassRefPtr<MimeType> MimeTypeArray::namedItem(const AtomicString& propertyName) const Vector<MimeClassInfo>& mimes = data->mimes(); for (unsigned i = 0; i < mimes.size(); ++i) { if (mimes[i].type == propertyName) - return MimeType::create(data, i).get(); + return DOMMimeType::create(data, i).get(); } return 0; } -PluginData* MimeTypeArray::getPluginData() const +PluginData* DOMMimeTypeArray::getPluginData() const { if (!m_frame) return 0; diff --git a/WebCore/plugins/MimeTypeArray.h b/WebCore/plugins/DOMMimeTypeArray.h index a1e3d52..2ccbfa0 100644 --- a/WebCore/plugins/MimeTypeArray.h +++ b/WebCore/plugins/DOMMimeTypeArray.h @@ -18,38 +18,38 @@ Boston, MA 02110-1301, USA. */ -#ifndef MimeTypeArray_h -#define MimeTypeArray_h +#ifndef DOMMimeTypeArray_h +#define DOMMimeTypeArray_h -#include "MimeType.h" +#include "DOMMimeType.h" #include <wtf/PassRefPtr.h> #include <wtf/RefCounted.h> #include <wtf/Vector.h> namespace WebCore { - class AtomicString; - class Frame; - class PluginData; +class AtomicString; +class Frame; +class PluginData; - class MimeTypeArray : public RefCounted<MimeTypeArray> { - public: - static PassRefPtr<MimeTypeArray> create(Frame* frame) { return adoptRef(new MimeTypeArray(frame)); } - ~MimeTypeArray(); +class DOMMimeTypeArray : public RefCounted<DOMMimeTypeArray> { +public: + static PassRefPtr<DOMMimeTypeArray> create(Frame* frame) { return adoptRef(new DOMMimeTypeArray(frame)); } + ~DOMMimeTypeArray(); - void disconnectFrame() { m_frame = 0; } + void disconnectFrame() { m_frame = 0; } - unsigned length() const; - PassRefPtr<MimeType> item(unsigned index); - bool canGetItemsForName(const AtomicString& propertyName); - PassRefPtr<MimeType> namedItem(const AtomicString& propertyName); + unsigned length() const; + PassRefPtr<DOMMimeType> item(unsigned index); + bool canGetItemsForName(const AtomicString& propertyName); + PassRefPtr<DOMMimeType> namedItem(const AtomicString& propertyName); - private: - MimeTypeArray(Frame*); - PluginData* getPluginData() const; +private: + DOMMimeTypeArray(Frame*); + PluginData* getPluginData() const; - Frame* m_frame; - }; + Frame* m_frame; +}; } // namespace WebCore diff --git a/WebCore/plugins/MimeTypeArray.idl b/WebCore/plugins/DOMMimeTypeArray.idl index ecbdc29..8b79a7e 100644 --- a/WebCore/plugins/MimeTypeArray.idl +++ b/WebCore/plugins/DOMMimeTypeArray.idl @@ -23,10 +23,10 @@ module window { interface [ HasNameGetter, HasIndexGetter - ] MimeTypeArray { + ] DOMMimeTypeArray { readonly attribute unsigned long length; - MimeType item(in unsigned long index); - MimeType namedItem(in DOMString name); + DOMMimeType item(in unsigned long index); + DOMMimeType namedItem(in DOMString name); }; } diff --git a/WebCore/plugins/Plugin.cpp b/WebCore/plugins/DOMPlugin.cpp index dcbf3f1..11ec929 100644 --- a/WebCore/plugins/Plugin.cpp +++ b/WebCore/plugins/DOMPlugin.cpp @@ -17,7 +17,7 @@ */ #include "config.h" -#include "Plugin.h" +#include "DOMPlugin.h" #include "AtomicString.h" #include "PluginData.h" @@ -25,37 +25,37 @@ namespace WebCore { -Plugin::Plugin(PluginData* pluginData, unsigned index) +DOMPlugin::DOMPlugin(PluginData* pluginData, unsigned index) : m_pluginData(pluginData) , m_index(index) { } -Plugin::~Plugin() +DOMPlugin::~DOMPlugin() { } -String Plugin::name() const +String DOMPlugin::name() const { return pluginInfo().name; } -String Plugin::filename() const +String DOMPlugin::filename() const { return pluginInfo().file; } -String Plugin::description() const +String DOMPlugin::description() const { return pluginInfo().desc; } -unsigned Plugin::length() const +unsigned DOMPlugin::length() const { return pluginInfo().mimes.size(); } -PassRefPtr<MimeType> Plugin::item(unsigned index) +PassRefPtr<DOMMimeType> DOMPlugin::item(unsigned index) { if (index >= pluginInfo().mimes.size()) return 0; @@ -65,12 +65,12 @@ PassRefPtr<MimeType> Plugin::item(unsigned index) const Vector<MimeClassInfo>& mimes = m_pluginData->mimes(); for (unsigned i = 0; i < mimes.size(); ++i) { if (mimes[i] == mime && m_pluginData->mimePluginIndices()[i] == m_index) - return MimeType::create(m_pluginData.get(), i).get(); + return DOMMimeType::create(m_pluginData.get(), i).get(); } return 0; } -bool Plugin::canGetItemsForName(const AtomicString& propertyName) +bool DOMPlugin::canGetItemsForName(const AtomicString& propertyName) { const Vector<MimeClassInfo>& mimes = m_pluginData->mimes(); for (unsigned i = 0; i < mimes.size(); ++i) @@ -79,12 +79,12 @@ bool Plugin::canGetItemsForName(const AtomicString& propertyName) return false; } -PassRefPtr<MimeType> Plugin::namedItem(const AtomicString& propertyName) +PassRefPtr<DOMMimeType> DOMPlugin::namedItem(const AtomicString& propertyName) { const Vector<MimeClassInfo>& mimes = m_pluginData->mimes(); for (unsigned i = 0; i < mimes.size(); ++i) if (mimes[i].type == propertyName) - return MimeType::create(m_pluginData.get(), i).get(); + return DOMMimeType::create(m_pluginData.get(), i).get(); return 0; } diff --git a/WebCore/plugins/Plugin.h b/WebCore/plugins/DOMPlugin.h index 668a9da..f86234a 100644 --- a/WebCore/plugins/Plugin.h +++ b/WebCore/plugins/DOMPlugin.h @@ -17,42 +17,42 @@ Boston, MA 02110-1301, USA. */ -#ifndef Plugin_h -#define Plugin_h +#ifndef DOMPlugin_h +#define DOMPlugin_h -#include "MimeType.h" +#include "DOMMimeType.h" #include <wtf/RefPtr.h> #include <wtf/RefCounted.h> namespace WebCore { - class AtomicString; - class Plugin; - class PluginData; - class String; +class AtomicString; +class Plugin; +class PluginData; +class String; - class Plugin : public RefCounted<Plugin> { - public: - static PassRefPtr<Plugin> create(PluginData* pluginData, unsigned index) { return adoptRef(new Plugin(pluginData, index)); } - ~Plugin(); +class DOMPlugin : public RefCounted<DOMPlugin> { +public: + static PassRefPtr<DOMPlugin> create(PluginData* pluginData, unsigned index) { return adoptRef(new DOMPlugin(pluginData, index)); } + ~DOMPlugin(); - String name() const; - String filename() const; - String description() const; + String name() const; + String filename() const; + String description() const; - unsigned length() const; + unsigned length() const; - PassRefPtr<MimeType> item(unsigned index); - bool canGetItemsForName(const AtomicString& propertyName); - PassRefPtr<MimeType> namedItem(const AtomicString& propertyName); + PassRefPtr<DOMMimeType> item(unsigned index); + bool canGetItemsForName(const AtomicString& propertyName); + PassRefPtr<DOMMimeType> namedItem(const AtomicString& propertyName); - private: - const PluginInfo& pluginInfo() const { return m_pluginData->plugins()[m_index]; } +private: + const PluginInfo& pluginInfo() const { return m_pluginData->plugins()[m_index]; } - Plugin(PluginData*, unsigned index); - RefPtr<PluginData> m_pluginData; - unsigned m_index; - }; + DOMPlugin(PluginData*, unsigned index); + RefPtr<PluginData> m_pluginData; + unsigned m_index; +}; } // namespace WebCore diff --git a/WebCore/plugins/Plugin.idl b/WebCore/plugins/DOMPlugin.idl index b418989..dc2b141 100644 --- a/WebCore/plugins/Plugin.idl +++ b/WebCore/plugins/DOMPlugin.idl @@ -23,13 +23,13 @@ module window { interface [ HasNameGetter, HasIndexGetter - ] Plugin { + ] DOMPlugin { readonly attribute DOMString name; readonly attribute DOMString filename; readonly attribute DOMString description; readonly attribute unsigned long length; - MimeType item(in unsigned long index); - MimeType namedItem(in DOMString name); + DOMMimeType item(in unsigned long index); + DOMMimeType namedItem(in DOMString name); }; } diff --git a/WebCore/plugins/PluginArray.cpp b/WebCore/plugins/DOMPluginArray.cpp index 038e4ad..fb11da8 100644 --- a/WebCore/plugins/PluginArray.cpp +++ b/WebCore/plugins/DOMPluginArray.cpp @@ -18,26 +18,26 @@ */ #include "config.h" -#include "PluginArray.h" +#include "DOMPluginArray.h" #include "AtomicString.h" +#include "DOMPlugin.h" #include "Frame.h" #include "Page.h" -#include "Plugin.h" #include "PluginData.h" namespace WebCore { -PluginArray::PluginArray(Frame* frame) +DOMPluginArray::DOMPluginArray(Frame* frame) : m_frame(frame) { } -PluginArray::~PluginArray() +DOMPluginArray::~DOMPluginArray() { } -unsigned PluginArray::length() const +unsigned DOMPluginArray::length() const { PluginData* data = pluginData(); if (!data) @@ -45,7 +45,7 @@ unsigned PluginArray::length() const return data->plugins().size(); } -PassRefPtr<Plugin> PluginArray::item(unsigned index) +PassRefPtr<DOMPlugin> DOMPluginArray::item(unsigned index) { PluginData* data = pluginData(); if (!data) @@ -53,10 +53,10 @@ PassRefPtr<Plugin> PluginArray::item(unsigned index) const Vector<PluginInfo>& plugins = data->plugins(); if (index >= plugins.size()) return 0; - return Plugin::create(data, index).get(); + return DOMPlugin::create(data, index).get(); } -bool PluginArray::canGetItemsForName(const AtomicString& propertyName) +bool DOMPluginArray::canGetItemsForName(const AtomicString& propertyName) { PluginData* data = pluginData(); if (!data) @@ -69,7 +69,7 @@ bool PluginArray::canGetItemsForName(const AtomicString& propertyName) return false; } -PassRefPtr<Plugin> PluginArray::namedItem(const AtomicString& propertyName) +PassRefPtr<DOMPlugin> DOMPluginArray::namedItem(const AtomicString& propertyName) { PluginData* data = pluginData(); if (!data) @@ -77,17 +77,17 @@ PassRefPtr<Plugin> PluginArray::namedItem(const AtomicString& propertyName) const Vector<PluginInfo>& plugins = data->plugins(); for (unsigned i = 0; i < plugins.size(); ++i) { if (plugins[i].name == propertyName) - return Plugin::create(data, i).get(); + return DOMPlugin::create(data, i).get(); } return 0; } -void PluginArray::refresh(bool reload) +void DOMPluginArray::refresh(bool reload) { Page::refreshPlugins(reload); } -PluginData* PluginArray::pluginData() const +PluginData* DOMPluginArray::pluginData() const { if (!m_frame) return 0; diff --git a/WebCore/plugins/PluginArray.h b/WebCore/plugins/DOMPluginArray.h index 435db50..0adb70a 100644 --- a/WebCore/plugins/PluginArray.h +++ b/WebCore/plugins/DOMPluginArray.h @@ -18,40 +18,40 @@ Boston, MA 02110-1301, USA. */ -#ifndef PluginArray_h -#define PluginArray_h +#ifndef DOMPluginArray_h +#define DOMPluginArray_h -#include "Plugin.h" +#include "DOMPlugin.h" #include <wtf/PassRefPtr.h> #include <wtf/RefCounted.h> #include <wtf/Vector.h> namespace WebCore { - class AtomicString; - class Frame; - class PluginData; +class AtomicString; +class Frame; +class PluginData; - class PluginArray : public RefCounted<PluginArray> { - public: - static PassRefPtr<PluginArray> create(Frame* frame) { return adoptRef(new PluginArray(frame)); } - ~PluginArray(); +class DOMPluginArray : public RefCounted<DOMPluginArray> { +public: + static PassRefPtr<DOMPluginArray> create(Frame* frame) { return adoptRef(new DOMPluginArray(frame)); } + ~DOMPluginArray(); - void disconnectFrame() { m_frame = 0; } + void disconnectFrame() { m_frame = 0; } - unsigned length() const; - PassRefPtr<Plugin> item(unsigned index); - bool canGetItemsForName(const AtomicString& propertyName); - PassRefPtr<Plugin> namedItem(const AtomicString& propertyName); + unsigned length() const; + PassRefPtr<DOMPlugin> item(unsigned index); + bool canGetItemsForName(const AtomicString& propertyName); + PassRefPtr<DOMPlugin> namedItem(const AtomicString& propertyName); - void refresh(bool reload); + void refresh(bool reload); - private: - PluginArray(Frame*); - PluginData* pluginData() const; +private: + DOMPluginArray(Frame*); + PluginData* pluginData() const; - Frame* m_frame; - }; + Frame* m_frame; +}; } // namespace WebCore diff --git a/WebCore/plugins/PluginArray.idl b/WebCore/plugins/DOMPluginArray.idl index d4c10ac..4c0d64c 100644 --- a/WebCore/plugins/PluginArray.idl +++ b/WebCore/plugins/DOMPluginArray.idl @@ -23,10 +23,10 @@ module window { interface [ HasNameGetter, HasIndexGetter - ] PluginArray { + ] DOMPluginArray { readonly attribute unsigned long length; - Plugin item(in unsigned long index); - Plugin namedItem(in DOMString name); + DOMPlugin item(in unsigned long index); + DOMPlugin namedItem(in DOMString name); void refresh(in boolean reload); }; diff --git a/WebCore/plugins/PluginView.cpp b/WebCore/plugins/PluginView.cpp index 3518443..2f5f342 100644 --- a/WebCore/plugins/PluginView.cpp +++ b/WebCore/plugins/PluginView.cpp @@ -304,7 +304,10 @@ PluginView::~PluginView() ASSERT(!m_lifeSupportTimer.isActive()); - instanceMap().remove(m_instance); + // If we failed to find the plug-in, we'll return early in our constructor, and + // m_instance will be 0. + if (m_instance) + instanceMap().remove(m_instance); if (m_isWaitingToStart) m_parentFrame->document()->removeMediaCanStartListener(this); @@ -881,6 +884,7 @@ PluginView::PluginView(Frame* parentFrame, const IntSize& size, PluginPackage* p , m_paramNames(0) , m_paramValues(0) , m_mimeType(mimeType) + , m_instance(0) #if defined(XP_MACOSX) , m_isWindowed(false) #else diff --git a/WebCore/rendering/InlineFlowBox.cpp b/WebCore/rendering/InlineFlowBox.cpp index c2d8549..8ac8c40 100644 --- a/WebCore/rendering/InlineFlowBox.cpp +++ b/WebCore/rendering/InlineFlowBox.cpp @@ -663,11 +663,24 @@ void InlineFlowBox::paint(PaintInfo& paintInfo, int tx, int ty) // outlines. if (renderer()->style()->visibility() == VISIBLE && renderer()->hasOutline() && !isRootInlineBox()) { RenderInline* inlineFlow = toRenderInline(renderer()); - if ((inlineFlow->continuation() || inlineFlow->isInlineElementContinuation()) && !boxModelObject()->hasSelfPaintingLayer()) { + + RenderBlock* cb = 0; + bool containingBlockPaintsContinuationOutline = inlineFlow->continuation() || inlineFlow->isInlineElementContinuation(); + if (containingBlockPaintsContinuationOutline) { + cb = renderer()->containingBlock()->containingBlock(); + + for (RenderBoxModelObject* box = boxModelObject(); box != cb; box = box->parent()->enclosingBoxModelObject()) { + if (box->hasSelfPaintingLayer()) { + containingBlockPaintsContinuationOutline = false; + break; + } + } + } + + if (containingBlockPaintsContinuationOutline) { // Add ourselves to the containing block of the entire continuation so that it can // paint us atomically. - RenderBlock* block = renderer()->containingBlock()->containingBlock(); - block->addContinuationWithOutline(toRenderInline(renderer()->node()->renderer())); + cb->addContinuationWithOutline(toRenderInline(renderer()->node()->renderer())); } else if (!inlineFlow->isInlineElementContinuation()) paintInfo.outlineObjects->add(inlineFlow); } diff --git a/WebCore/rendering/InlineFlowBox.h b/WebCore/rendering/InlineFlowBox.h index 9589c0a..b4ba59f 100644 --- a/WebCore/rendering/InlineFlowBox.h +++ b/WebCore/rendering/InlineFlowBox.h @@ -193,7 +193,7 @@ inline void InlineFlowBox::setHorizontalOverflowPositions(int leftLayoutOverflow if (!m_overflow) { if (leftLayoutOverflow == m_x && rightLayoutOverflow == m_x + m_width && leftVisualOverflow == m_x && rightVisualOverflow == m_x + m_width) return; - m_overflow.set(new RenderOverflow(IntRect(m_x, m_y, m_width, m_renderer->style(m_firstLine)->font().height()))); + m_overflow = adoptPtr(new RenderOverflow(IntRect(m_x, m_y, m_width, m_renderer->style(m_firstLine)->font().height()))); } m_overflow->setLeftLayoutOverflow(leftLayoutOverflow); @@ -207,7 +207,7 @@ inline void InlineFlowBox::setVerticalOverflowPositions(int topLayoutOverflow, i if (!m_overflow) { if (topLayoutOverflow == m_y && bottomLayoutOverflow == m_y + boxHeight && topVisualOverflow == m_y && bottomVisualOverflow == m_y + boxHeight) return; - m_overflow.set(new RenderOverflow(IntRect(m_x, m_y, m_width, boxHeight))); + m_overflow = adoptPtr(new RenderOverflow(IntRect(m_x, m_y, m_width, boxHeight))); } m_overflow->setTopLayoutOverflow(topLayoutOverflow); diff --git a/WebCore/rendering/MediaControlElements.cpp b/WebCore/rendering/MediaControlElements.cpp index d5cb187..d4eb9a9 100644 --- a/WebCore/rendering/MediaControlElements.cpp +++ b/WebCore/rendering/MediaControlElements.cpp @@ -378,6 +378,9 @@ MediaControlInputElement::MediaControlInputElement(HTMLMediaElement* mediaElemen case MEDIA_CONTROLS_VOLUME_SLIDER: m_displayType = MediaVolumeSlider; break; + case MEDIA_CONTROLS_VOLUME_SLIDER_MUTE_BUTTON: + m_displayType = MediaVolumeSliderMuteButton; + break; case MEDIA_CONTROLS_TOGGLE_CLOSED_CAPTIONS_BUTTON: m_displayType = MediaShowClosedCaptionsButton; break; @@ -475,14 +478,14 @@ void MediaControlInputElement::setDisplayType(MediaControlElementType displayTyp // ---------------------------- -inline MediaControlMuteButtonElement::MediaControlMuteButtonElement(HTMLMediaElement* mediaElement) - : MediaControlInputElement(mediaElement, MEDIA_CONTROLS_MUTE_BUTTON, "button") +inline MediaControlMuteButtonElement::MediaControlMuteButtonElement(HTMLMediaElement* mediaElement, ButtonLocation location) + : MediaControlInputElement(mediaElement, location == Controller ? MEDIA_CONTROLS_MUTE_BUTTON : MEDIA_CONTROLS_VOLUME_SLIDER_MUTE_BUTTON, "button") { } -PassRefPtr<MediaControlMuteButtonElement> MediaControlMuteButtonElement::create(HTMLMediaElement* mediaElement) +PassRefPtr<MediaControlMuteButtonElement> MediaControlMuteButtonElement::create(HTMLMediaElement* mediaElement, ButtonLocation location) { - return adoptRef(new MediaControlMuteButtonElement(mediaElement)); + return adoptRef(new MediaControlMuteButtonElement(mediaElement, location)); } void MediaControlMuteButtonElement::defaultEventHandler(Event* event) diff --git a/WebCore/rendering/MediaControlElements.h b/WebCore/rendering/MediaControlElements.h index 68c06a3..ceb0255 100644 --- a/WebCore/rendering/MediaControlElements.h +++ b/WebCore/rendering/MediaControlElements.h @@ -65,7 +65,8 @@ enum MediaControlElementType { MediaControlsPanel, MediaVolumeSliderContainer, MediaVolumeSlider, - MediaVolumeSliderThumb + MediaVolumeSliderThumb, + MediaVolumeSliderMuteButton, }; HTMLMediaElement* toParentMediaElement(RenderObject*); @@ -202,12 +203,13 @@ private: class MediaControlMuteButtonElement : public MediaControlInputElement { public: - static PassRefPtr<MediaControlMuteButtonElement> create(HTMLMediaElement*); + enum ButtonLocation { Controller, VolumeSlider }; + static PassRefPtr<MediaControlMuteButtonElement> create(HTMLMediaElement*, ButtonLocation); virtual void defaultEventHandler(Event*); private: - MediaControlMuteButtonElement(HTMLMediaElement*); + MediaControlMuteButtonElement(HTMLMediaElement*, ButtonLocation); virtual void updateDisplayType(); }; diff --git a/WebCore/rendering/RenderBlock.cpp b/WebCore/rendering/RenderBlock.cpp index dd1e8e5..c97d965 100644 --- a/WebCore/rendering/RenderBlock.cpp +++ b/WebCore/rendering/RenderBlock.cpp @@ -2128,16 +2128,6 @@ void RenderBlock::paintChildren(PaintInfo& paintInfo, int tx, int ty) return; } - // Check for page-break-inside: avoid, and it it's set, break and bail. - bool checkInsideAvoid = !childrenInline() && ((checkPageBreaks && child->style()->pageBreakInside() == PBAVOID) || (checkColumnBreaks && child->style()->columnBreakInside() == PBAVOID)); - if (checkInsideAvoid - && ty + child->y() > paintInfo.rect.y() - && ty + child->y() < paintInfo.rect.bottom() - && ty + child->y() + child->height() > paintInfo.rect.bottom()) { - view()->setBestTruncatedAt(ty + child->y(), this, true); - return; - } - if (!child->hasSelfPaintingLayer() && !child->isFloating()) child->paint(info, tx, ty); @@ -2232,8 +2222,18 @@ void RenderBlock::paintObject(PaintInfo& paintInfo, int tx, int ty) RenderInline* inlineCont = inlineElementContinuation(); if (inlineCont && inlineCont->hasOutline() && inlineCont->style()->visibility() == VISIBLE) { RenderInline* inlineRenderer = toRenderInline(inlineCont->node()->renderer()); - if (!inlineRenderer->hasSelfPaintingLayer()) - containingBlock()->addContinuationWithOutline(inlineRenderer); + RenderBlock* cb = containingBlock(); + + bool inlineEnclosedInSelfPaintingLayer = false; + for (RenderBoxModelObject* box = inlineRenderer; box != cb; box = box->parent()->enclosingBoxModelObject()) { + if (box->hasSelfPaintingLayer()) { + inlineEnclosedInSelfPaintingLayer = true; + break; + } + } + + if (!inlineEnclosedInSelfPaintingLayer) + cb->addContinuationWithOutline(inlineRenderer); else if (!inlineRenderer->firstLineBox()) inlineRenderer->paintOutline(paintInfo.context, tx - x() + inlineRenderer->containingBlock()->x(), ty - y() + inlineRenderer->containingBlock()->y()); diff --git a/WebCore/rendering/RenderBlockLineLayout.cpp b/WebCore/rendering/RenderBlockLineLayout.cpp index 1a7f983..46dfd29 100644 --- a/WebCore/rendering/RenderBlockLineLayout.cpp +++ b/WebCore/rendering/RenderBlockLineLayout.cpp @@ -1696,7 +1696,7 @@ InlineIterator RenderBlock::findNextLineBreak(InlineBidiResolver& resolver, bool // Non-zero only when kerning is enabled, in which case we measure words with their trailing // space, then subtract its width. - int wordTrailingSpaceWidth = f.typesettingFeatures() & Kerning ? f.spaceWidth() + wordSpacing : 0; + int wordTrailingSpaceWidth = f.typesettingFeatures() & Kerning ? f.width(TextRun(&space, 1)) + wordSpacing : 0; int wrapW = tmpW + inlineWidth(o, !appliedStartWidth, true); int charWidth = 0; diff --git a/WebCore/rendering/RenderBoxModelObject.cpp b/WebCore/rendering/RenderBoxModelObject.cpp index c81289b..077baeb 100644 --- a/WebCore/rendering/RenderBoxModelObject.cpp +++ b/WebCore/rendering/RenderBoxModelObject.cpp @@ -27,7 +27,7 @@ #include "RenderBoxModelObject.h" #include "GraphicsContext.h" -#include "HTMLElement.h" +#include "HTMLFrameOwnerElement.h" #include "HTMLNames.h" #include "ImageBuffer.h" #include "Path.h" diff --git a/WebCore/rendering/RenderButton.cpp b/WebCore/rendering/RenderButton.cpp index 3ecd382..8357bd4 100644 --- a/WebCore/rendering/RenderButton.cpp +++ b/WebCore/rendering/RenderButton.cpp @@ -108,11 +108,6 @@ void RenderButton::setupInnerStyle(RenderStyle* innerStyle) // safe to modify. innerStyle->setBoxFlex(1.0f); innerStyle->setBoxOrient(style()->boxOrient()); - - innerStyle->setPaddingTop(Length(theme()->buttonInternalPaddingTop(), Fixed)); - innerStyle->setPaddingRight(Length(theme()->buttonInternalPaddingRight(), Fixed)); - innerStyle->setPaddingBottom(Length(theme()->buttonInternalPaddingBottom(), Fixed)); - innerStyle->setPaddingLeft(Length(theme()->buttonInternalPaddingLeft(), Fixed)); } void RenderButton::updateFromElement() diff --git a/WebCore/rendering/RenderEmbeddedObject.cpp b/WebCore/rendering/RenderEmbeddedObject.cpp index 3d6575c..de9ca17 100644 --- a/WebCore/rendering/RenderEmbeddedObject.cpp +++ b/WebCore/rendering/RenderEmbeddedObject.cpp @@ -24,6 +24,8 @@ #include "config.h" #include "RenderEmbeddedObject.h" +#include "Chrome.h" +#include "ChromeClient.h" #include "CSSValueKeywords.h" #include "Font.h" #include "FontSelector.h" @@ -37,6 +39,7 @@ #include "HTMLParamElement.h" #include "LocalizedStrings.h" #include "MIMETypeRegistry.h" +#include "MouseEvent.h" #include "Page.h" #include "Path.h" #include "PluginWidget.h" @@ -61,13 +64,23 @@ using namespace HTMLNames; static const float replacementTextRoundedRectHeight = 18; static const float replacementTextRoundedRectLeftRightTextMargin = 6; static const float replacementTextRoundedRectOpacity = 0.20f; +static const float replacementTextPressedRoundedRectOpacity = 0.65f; static const float replacementTextRoundedRectRadius = 5; static const float replacementTextTextOpacity = 0.55f; +static const float replacementTextPressedTextOpacity = 0.65f; +static const Color& replacementTextRoundedRectPressedColor() +{ + static const Color lightGray(205, 205, 205); + return lightGray; +} + RenderEmbeddedObject::RenderEmbeddedObject(Element* element) : RenderPart(element) , m_hasFallbackContent(false) , m_showsMissingPluginIndicator(false) + , m_missingPluginIndicatorIsPressed(false) + , m_mouseDownWasInMissingPluginIndicator(false) { view()->frameView()->setIsVisuallyNonEmpty(); } @@ -356,6 +369,15 @@ void RenderEmbeddedObject::setShowsCrashedPluginIndicator() m_replacementText = crashedPluginText(); } +void RenderEmbeddedObject::setMissingPluginIndicatorIsPressed(bool pressed) +{ + if (m_missingPluginIndicatorIsPressed == pressed) + return; + + m_missingPluginIndicatorIsPressed = pressed; + repaint(); +} + void RenderEmbeddedObject::paint(PaintInfo& paintInfo, int tx, int ty) { if (!m_replacementText.isNull()) { @@ -378,8 +400,35 @@ void RenderEmbeddedObject::paintReplaced(PaintInfo& paintInfo, int tx, int ty) if (context->paintingDisabled()) return; - FloatRect pluginRect = contentBoxRect(); - pluginRect.move(tx, ty); + FloatRect contentRect; + Path path; + FloatRect replacementTextRect; + Font font; + TextRun run(""); + float textWidth; + if (!getReplacementTextGeometry(tx, ty, contentRect, path, replacementTextRect, font, run, textWidth)) + return; + + context->save(); + context->clip(contentRect); + context->beginPath(); + context->addPath(path); + context->setAlpha(m_missingPluginIndicatorIsPressed ? replacementTextPressedRoundedRectOpacity : replacementTextRoundedRectOpacity); + context->setFillColor(m_missingPluginIndicatorIsPressed ? replacementTextRoundedRectPressedColor() : Color::white, style()->colorSpace()); + context->fillPath(); + + float labelX = roundf(replacementTextRect.location().x() + (replacementTextRect.size().width() - textWidth) / 2); + float labelY = roundf(replacementTextRect.location().y() + (replacementTextRect.size().height() - font.height()) / 2 + font.ascent()); + context->setAlpha(m_missingPluginIndicatorIsPressed ? replacementTextPressedTextOpacity : replacementTextTextOpacity); + context->setFillColor(Color::black, style()->colorSpace()); + context->drawBidiText(font, run, FloatPoint(labelX, labelY)); + context->restore(); +} + +bool RenderEmbeddedObject::getReplacementTextGeometry(int tx, int ty, FloatRect& contentRect, Path& path, FloatRect& replacementTextRect, Font& font, TextRun& run, float& textWidth) +{ + contentRect = contentBoxRect(); + contentRect.move(tx, ty); FontDescription fontDescription; RenderTheme::defaultTheme()->systemFont(CSSValueWebkitSmallControl, fontDescription); @@ -387,36 +436,24 @@ void RenderEmbeddedObject::paintReplaced(PaintInfo& paintInfo, int tx, int ty) Settings* settings = document()->settings(); ASSERT(settings); if (!settings) - return; + return false; fontDescription.setRenderingMode(settings->fontRenderingMode()); fontDescription.setComputedSize(fontDescription.specifiedSize()); - Font font(fontDescription, 0, 0); + font = Font(fontDescription, 0, 0); font.update(0); - TextRun run(m_replacementText.characters(), m_replacementText.length()); + run = TextRun(m_replacementText.characters(), m_replacementText.length()); run.disableRoundingHacks(); - float textWidth = font.floatWidth(run); + textWidth = font.floatWidth(run); - FloatRect replacementTextRect; replacementTextRect.setSize(FloatSize(textWidth + replacementTextRoundedRectLeftRightTextMargin * 2, replacementTextRoundedRectHeight)); - replacementTextRect.setLocation(FloatPoint((pluginRect.size().width() / 2 - replacementTextRect.size().width() / 2) + pluginRect.location().x(), - (pluginRect.size().height() / 2 - replacementTextRect.size().height() / 2) + pluginRect.location().y())); - - Path path = Path::createRoundedRectangle(replacementTextRect, FloatSize(replacementTextRoundedRectRadius, replacementTextRoundedRectRadius)); - context->save(); - context->clip(pluginRect); - context->beginPath(); - context->addPath(path); - context->setAlpha(replacementTextRoundedRectOpacity); - context->setFillColor(Color::white, style()->colorSpace()); - context->fillPath(); + float x = (contentRect.size().width() / 2 - replacementTextRect.size().width() / 2) + contentRect.location().x(); + float y = (contentRect.size().height() / 2 - replacementTextRect.size().height() / 2) + contentRect.location().y(); + replacementTextRect.setLocation(FloatPoint(x, y)); + + path = Path::createRoundedRectangle(replacementTextRect, FloatSize(replacementTextRoundedRectRadius, replacementTextRoundedRectRadius)); - FloatPoint labelPoint(roundf(replacementTextRect.location().x() + (replacementTextRect.size().width() - textWidth) / 2), - roundf(replacementTextRect.location().y()+ (replacementTextRect.size().height() - font.height()) / 2 + font.ascent())); - context->setAlpha(replacementTextTextOpacity); - context->setFillColor(Color::black, style()->colorSpace()); - context->drawBidiText(font, run, labelPoint); - context->restore(); + return true; } void RenderEmbeddedObject::layout() @@ -455,5 +492,63 @@ void RenderEmbeddedObject::viewCleared() view->setMarginHeight(marginh); } } + +bool RenderEmbeddedObject::isInMissingPluginIndicator(MouseEvent* event) +{ + FloatRect contentRect; + Path path; + FloatRect replacementTextRect; + Font font; + TextRun run(""); + float textWidth; + if (!getReplacementTextGeometry(0, 0, contentRect, path, replacementTextRect, font, run, textWidth)) + return false; + + return path.contains(absoluteToLocal(event->absoluteLocation(), false, true)); +} + +void RenderEmbeddedObject::handleMissingPluginIndicatorEvent(Event* event) +{ + if (Page* page = document()->page()) { + if (!page->chrome()->client()->shouldMissingPluginMessageBeButton()) + return; + } + + if (!event->isMouseEvent()) + return; + + MouseEvent* mouseEvent = static_cast<MouseEvent*>(event); + HTMLPlugInElement* element = static_cast<HTMLPlugInElement*>(node()); + if (event->type() == eventNames().mousedownEvent && static_cast<MouseEvent*>(event)->button() == LeftButton) { + m_mouseDownWasInMissingPluginIndicator = isInMissingPluginIndicator(mouseEvent); + if (m_mouseDownWasInMissingPluginIndicator) { + if (Frame* frame = document()->frame()) { + frame->eventHandler()->setCapturingMouseEventsNode(element); + element->setIsCapturingMouseEvents(true); + } + setMissingPluginIndicatorIsPressed(true); + } + event->setDefaultHandled(); + } + if (event->type() == eventNames().mouseupEvent && static_cast<MouseEvent*>(event)->button() == LeftButton) { + if (m_missingPluginIndicatorIsPressed) { + if (Frame* frame = document()->frame()) { + frame->eventHandler()->setCapturingMouseEventsNode(0); + element->setIsCapturingMouseEvents(false); + } + setMissingPluginIndicatorIsPressed(false); + } + if (m_mouseDownWasInMissingPluginIndicator && isInMissingPluginIndicator(mouseEvent)) { + if (Page* page = document()->page()) + page->chrome()->client()->missingPluginButtonClicked(element); + } + m_mouseDownWasInMissingPluginIndicator = false; + event->setDefaultHandled(); + } + if (event->type() == eventNames().mousemoveEvent) { + setMissingPluginIndicatorIsPressed(m_mouseDownWasInMissingPluginIndicator && isInMissingPluginIndicator(mouseEvent)); + event->setDefaultHandled(); + } +} } diff --git a/WebCore/rendering/RenderEmbeddedObject.h b/WebCore/rendering/RenderEmbeddedObject.h index bfb7b96..0944094 100644 --- a/WebCore/rendering/RenderEmbeddedObject.h +++ b/WebCore/rendering/RenderEmbeddedObject.h @@ -27,6 +27,8 @@ namespace WebCore { +class MouseEvent; + // Renderer for embeds and objects, often, but not always, rendered via plug-ins. // For example, <embed src="foo.html"> does not invoke a plug-in. class RenderEmbeddedObject : public RenderPart { @@ -41,6 +43,8 @@ public: bool hasFallbackContent() const { return m_hasFallbackContent; } + void handleMissingPluginIndicatorEvent(Event*); + #if USE(ACCELERATED_COMPOSITING) virtual bool allowsAcceleratedCompositing() const; #endif @@ -58,10 +62,16 @@ private: virtual void layout(); virtual void viewCleared(); + + void setMissingPluginIndicatorIsPressed(bool); + bool isInMissingPluginIndicator(MouseEvent*); + bool getReplacementTextGeometry(int tx, int ty, FloatRect& contentRect, Path&, FloatRect& replacementTextRect, Font&, TextRun&, float& textWidth); String m_replacementText; bool m_hasFallbackContent; bool m_showsMissingPluginIndicator; + bool m_missingPluginIndicatorIsPressed; + bool m_mouseDownWasInMissingPluginIndicator; }; inline RenderEmbeddedObject* toRenderEmbeddedObject(RenderObject* object) diff --git a/WebCore/rendering/RenderLayer.cpp b/WebCore/rendering/RenderLayer.cpp index a672f4b..d9d2be1 100644 --- a/WebCore/rendering/RenderLayer.cpp +++ b/WebCore/rendering/RenderLayer.cpp @@ -59,6 +59,7 @@ #include "FrameView.h" #include "Gradient.h" #include "GraphicsContext.h" +#include "HTMLFrameOwnerElement.h" #include "HTMLNames.h" #include "HitTestRequest.h" #include "HitTestResult.h" diff --git a/WebCore/rendering/RenderLayerBacking.cpp b/WebCore/rendering/RenderLayerBacking.cpp index c5a7e19..ae01799 100644 --- a/WebCore/rendering/RenderLayerBacking.cpp +++ b/WebCore/rendering/RenderLayerBacking.cpp @@ -156,6 +156,14 @@ void RenderLayerBacking::updateCompositedBounds() setCompositedBounds(layerBounds); } +void RenderLayerBacking::updateAfterWidgetResize() +{ + if (renderer()->isRenderIFrame()) { + if (RenderLayerCompositor* innerCompositor = RenderLayerCompositor::iframeContentsCompositor(toRenderIFrame(renderer()))) + innerCompositor->updateContentLayerOffset(contentsBox().location()); + } +} + void RenderLayerBacking::updateAfterLayout(UpdateDepth updateDepth, bool isUpdateRoot) { RenderLayerCompositor* layerCompositor = compositor(); @@ -390,12 +398,7 @@ void RenderLayerBacking::updateGraphicsLayerGeometry() m_graphicsLayer->setContentsRect(contentsBox()); updateDrawsContent(); - - // If this is an iframe parent, update the iframe content's box - if (renderer()->isRenderIFrame()) { - if (RenderLayerCompositor* innerCompositor = RenderLayerCompositor::iframeContentsCompositor(toRenderIFrame(renderer()))) - innerCompositor->updateContentLayerOffset(contentsBox().location()); - } + updateAfterWidgetResize(); } void RenderLayerBacking::updateInternalHierarchy() @@ -965,20 +968,15 @@ void RenderLayerBacking::paintIntoLayer(RenderLayer* rootLayer, GraphicsContext* // Restore the clip. restoreClip(context, paintDirtyRect, damageRect); + + // Now walk the sorted list of children with negative z-indices. Only RenderLayers without compositing layers will paint. + m_owningLayer->paintList(m_owningLayer->negZOrderList(), rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot, 0, 0); } bool forceBlackText = paintBehavior & PaintBehaviorForceBlackText; bool selectionOnly = paintBehavior & PaintBehaviorSelectionOnly; if (shouldPaint && (paintingPhase & GraphicsLayerPaintForeground)) { - // Now walk the sorted list of children with negative z-indices. Only RenderLayers without compositing layers will paint. - // FIXME: should these be painted as background? - Vector<RenderLayer*>* negZOrderList = m_owningLayer->negZOrderList(); - if (negZOrderList) { - for (Vector<RenderLayer*>::iterator it = negZOrderList->begin(); it != negZOrderList->end(); ++it) - it[0]->paintLayer(rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot); - } - // Set up the clip used when painting our children. setClip(context, paintDirtyRect, clipRectToApply); PaintInfo paintInfo(context, clipRectToApply, @@ -1009,18 +1007,10 @@ void RenderLayerBacking::paintIntoLayer(RenderLayer* rootLayer, GraphicsContext* } // Paint any child layers that have overflow. - Vector<RenderLayer*>* normalFlowList = m_owningLayer->normalFlowList(); - if (normalFlowList) { - for (Vector<RenderLayer*>::iterator it = normalFlowList->begin(); it != normalFlowList->end(); ++it) - it[0]->paintLayer(rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot); - } + m_owningLayer->paintList(m_owningLayer->normalFlowList(), rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot, 0, 0); // Now walk the sorted list of children with positive z-indices. - Vector<RenderLayer*>* posZOrderList = m_owningLayer->posZOrderList(); - if (posZOrderList) { - for (Vector<RenderLayer*>::iterator it = posZOrderList->begin(); it != posZOrderList->end(); ++it) - it[0]->paintLayer(rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot); - } + m_owningLayer->paintList(m_owningLayer->posZOrderList(), rootLayer, context, paintDirtyRect, paintBehavior, paintingRoot, 0, 0); } if (shouldPaint && (paintingPhase & GraphicsLayerPaintMask)) { diff --git a/WebCore/rendering/RenderLayerBacking.h b/WebCore/rendering/RenderLayerBacking.h index faa553c..16c39da 100644 --- a/WebCore/rendering/RenderLayerBacking.h +++ b/WebCore/rendering/RenderLayerBacking.h @@ -110,6 +110,8 @@ public: IntRect compositedBounds() const; void setCompositedBounds(const IntRect&); void updateCompositedBounds(); + + void updateAfterWidgetResize(); FloatPoint graphicsLayerToContentsCoordinates(const GraphicsLayer*, const FloatPoint&); FloatPoint contentsToGraphicsLayerCoordinates(const GraphicsLayer*, const FloatPoint&); diff --git a/WebCore/rendering/RenderLayerCompositor.cpp b/WebCore/rendering/RenderLayerCompositor.cpp index d9a8bf1..c485acc 100644 --- a/WebCore/rendering/RenderLayerCompositor.cpp +++ b/WebCore/rendering/RenderLayerCompositor.cpp @@ -100,6 +100,7 @@ RenderLayerCompositor::RenderLayerCompositor(RenderView* renderView) , m_showDebugBorders(false) , m_showRepaintCounter(false) , m_compositingConsultsOverlap(true) + , m_compositingDependsOnGeometry(false) , m_compositing(false) , m_compositingLayersNeedRebuild(false) , m_rootLayerAttachment(RootLayerUnattached) @@ -174,7 +175,10 @@ void RenderLayerCompositor::scheduleSync() void RenderLayerCompositor::updateCompositingLayers(CompositingUpdateType updateType, RenderLayer* updateRoot) { - bool checkForHierarchyUpdate = false; + if (!m_compositingDependsOnGeometry && !m_compositing) + return; + + bool checkForHierarchyUpdate = m_compositingDependsOnGeometry; bool needGeometryUpdate = false; switch (updateType) { @@ -193,8 +197,6 @@ void RenderLayerCompositor::updateCompositingLayers(CompositingUpdateType update if (!checkForHierarchyUpdate && !needGeometryUpdate) return; - ASSERT(inCompositingMode()); - bool needHierarchyUpdate = m_compositingLayersNeedRebuild; if (!updateRoot) { // Only clear the flag if we're updating the entire hierarchy. @@ -640,7 +642,11 @@ void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* layer, O } } } - + + // If we just entered compositing mode, the root will have become composited. + if (layer->isRootLayer() && inCompositingMode()) + willBeComposited = true; + ASSERT(willBeComposited == needsToBeComposited(layer)); // If we have a software transform, and we have layers under us, we need to also @@ -675,7 +681,7 @@ void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* layer, O // If we're back at the root, and no other layers need to be composited, and the root layer itself doesn't need // to be composited, then we can drop out of compositing mode altogether. if (layer->isRootLayer() && !childState.m_subtreeIsCompositing && !requiresCompositingLayer(layer)) { - m_compositing = false; + enableCompositingMode(false); willBeComposited = false; } @@ -1065,7 +1071,7 @@ bool RenderLayerCompositor::shouldPropagateCompositingToEnclosingIFrame() const // Parent document content needs to be able to render on top of a composited iframe, so correct behavior // is to have the parent document become composited too. However, this can cause problems on platforms that // use native views for frames (like Mac), so disable that behavior on those platforms for now. - Element* ownerElement = enclosingIFrameElement(); + HTMLFrameOwnerElement* ownerElement = enclosingIFrameElement(); RenderObject* renderer = ownerElement ? ownerElement->renderer() : 0; if (!renderer || !renderer->isRenderIFrame()) return false; @@ -1093,9 +1099,9 @@ bool RenderLayerCompositor::shouldPropagateCompositingToEnclosingIFrame() const #endif } -Element* RenderLayerCompositor::enclosingIFrameElement() const +HTMLFrameOwnerElement* RenderLayerCompositor::enclosingIFrameElement() const { - if (Element* ownerElement = m_renderView->document()->ownerElement()) + if (HTMLFrameOwnerElement* ownerElement = m_renderView->document()->ownerElement()) return ownerElement->hasTagName(iframeTag) ? ownerElement : 0; return 0; @@ -1269,7 +1275,22 @@ bool RenderLayerCompositor::requiresCompositingForCanvas(RenderObject* renderer) bool RenderLayerCompositor::requiresCompositingForPlugin(RenderObject* renderer) const { - return renderer->isEmbeddedObject() && toRenderEmbeddedObject(renderer)->allowsAcceleratedCompositing(); + if (!renderer->isEmbeddedObject()) + return false; + + RenderEmbeddedObject* embedRenderer = toRenderEmbeddedObject(renderer); + if (!embedRenderer->allowsAcceleratedCompositing()) + return false; + + m_compositingDependsOnGeometry = true; + + // If we can't reliably know the size of the plugin yet, don't change compositing state. + if (renderer->needsLayout()) + return embedRenderer->hasLayer() && embedRenderer->layer()->isComposited(); + + // Don't go into compositing mode if height or width are zero, or size is 1x1. + IntRect contentBox = embedRenderer->contentBoxRect(); + return contentBox.height() * contentBox.width() > 1; } bool RenderLayerCompositor::requiresCompositingForIFrame(RenderObject* renderer) const @@ -1277,13 +1298,24 @@ bool RenderLayerCompositor::requiresCompositingForIFrame(RenderObject* renderer) if (!renderer->isRenderIFrame()) return false; - RenderIFrame* iframe = toRenderIFrame(renderer); + RenderIFrame* iframeRenderer = toRenderIFrame(renderer); - if (!iframe->requiresAcceleratedCompositing()) + if (!iframeRenderer->requiresAcceleratedCompositing()) return false; - - RenderLayerCompositor* innerCompositor = iframeContentsCompositor(iframe); - return innerCompositor->shouldPropagateCompositingToEnclosingIFrame(); + + m_compositingDependsOnGeometry = true; + + RenderLayerCompositor* innerCompositor = iframeContentsCompositor(iframeRenderer); + if (!innerCompositor->shouldPropagateCompositingToEnclosingIFrame()) + return false; + + // If we can't reliably know the size of the iframe yet, don't change compositing state. + if (renderer->needsLayout()) + return iframeRenderer->hasLayer() && iframeRenderer->layer()->isComposited(); + + // Don't go into compositing mode if height or width are zero. + IntRect contentBox = iframeRenderer->contentBoxRect(); + return contentBox.height() * contentBox.width() > 0; } bool RenderLayerCompositor::requiresCompositingForAnimation(RenderObject* renderer) const @@ -1403,7 +1435,7 @@ void RenderLayerCompositor::attachRootPlatformLayer(RootLayerAttachment attachme case RootLayerAttachedViaEnclosingIframe: { // The layer will get hooked up via RenderLayerBacking::updateGraphicsLayerConfiguration() // for the iframe's renderer in the parent document. - m_renderView->document()->ownerElement()->setNeedsStyleRecalc(SyntheticStyleChange); + scheduleNeedsStyleRecalc(m_renderView->document()->ownerElement()); break; } } @@ -1427,7 +1459,7 @@ void RenderLayerCompositor::detachRootPlatformLayer() m_rootPlatformLayer->removeFromParent(); if (Element* ownerElement = m_renderView->document()->ownerElement()) - ownerElement->setNeedsStyleRecalc(SyntheticStyleChange); + scheduleNeedsStyleRecalc(ownerElement); break; } case RootLayerAttachedViaChromeClient: { @@ -1461,6 +1493,19 @@ void RenderLayerCompositor::rootLayerAttachmentChanged() backing->updateDrawsContent(); } +static void needsStyleRecalcCallback(Node* node) +{ + node->setNeedsStyleRecalc(SyntheticStyleChange); +} + +void RenderLayerCompositor::scheduleNeedsStyleRecalc(Element* element) +{ + if (ContainerNode::postAttachCallbacksAreSuspended()) + ContainerNode::queuePostAttachCallback(needsStyleRecalcCallback, element); + else + element->setNeedsStyleRecalc(SyntheticStyleChange); +} + // IFrames are special, because we hook compositing layers together across iframe boundaries // when both parent and iframe content are composited. So when this frame becomes composited, we have // to use a synthetic style change to get the iframes into RenderLayers in order to allow them to composite. @@ -1472,7 +1517,7 @@ void RenderLayerCompositor::notifyIFramesOfCompositingChange() for (Frame* child = frame->tree()->firstChild(); child; child = child->tree()->nextSibling()) { if (child->document() && child->document()->ownerElement()) - child->document()->ownerElement()->setNeedsStyleRecalc(SyntheticStyleChange); + scheduleNeedsStyleRecalc(child->document()->ownerElement()); } } diff --git a/WebCore/rendering/RenderLayerCompositor.h b/WebCore/rendering/RenderLayerCompositor.h index 81f2058..10516ad 100644 --- a/WebCore/rendering/RenderLayerCompositor.h +++ b/WebCore/rendering/RenderLayerCompositor.h @@ -34,6 +34,7 @@ namespace WebCore { #define PROFILE_LAYER_REBUILD 0 class GraphicsLayer; +class RenderEmbeddedObject; class RenderIFrame; #if ENABLE(VIDEO) class RenderVideo; @@ -150,7 +151,7 @@ public: // their parent document. bool shouldPropagateCompositingToEnclosingIFrame() const; - Element* enclosingIFrameElement() const; + HTMLFrameOwnerElement* enclosingIFrameElement() const; static RenderLayerCompositor* iframeContentsCompositor(RenderIFrame*); // Return true if the layers changed. @@ -201,6 +202,7 @@ private: void rootLayerAttachmentChanged(); + void scheduleNeedsStyleRecalc(Element*); void notifyIFramesOfCompositingChange(); // Whether a running transition or animation enforces the need for a compositing layer. @@ -224,9 +226,15 @@ private: bool m_showDebugBorders; bool m_showRepaintCounter; bool m_compositingConsultsOverlap; + + // When true, we have to wait until layout has happened before we can decide whether to enter compositing mode, + // because only then do we know the final size of plugins and iframes. + // FIXME: once set, this is never cleared. + mutable bool m_compositingDependsOnGeometry; + bool m_compositing; bool m_compositingLayersNeedRebuild; - + RootLayerAttachment m_rootLayerAttachment; // Enclosing clipping layer for iframe content diff --git a/WebCore/rendering/RenderMedia.cpp b/WebCore/rendering/RenderMedia.cpp index ba60ed0..d7b4a99 100644 --- a/WebCore/rendering/RenderMedia.cpp +++ b/WebCore/rendering/RenderMedia.cpp @@ -33,6 +33,7 @@ #include "HTMLNames.h" #include "MediaControlElements.h" #include "MouseEvent.h" +#include "Page.h" #include "RenderTheme.h" #include <wtf/CurrentTime.h> #include <wtf/MathExtras.h> @@ -135,6 +136,8 @@ void RenderMedia::styleDidChange(StyleDifference diff, const RenderStyle* oldSty m_timeRemainingDisplay->updateStyle(); if (m_volumeSliderContainer) m_volumeSliderContainer->updateStyle(); + if (m_volumeSliderMuteButton) + m_volumeSliderMuteButton->updateStyle(); if (m_volumeSlider) m_volumeSlider->updateStyle(); } @@ -184,7 +187,7 @@ void RenderMedia::createPanel() void RenderMedia::createMuteButton() { ASSERT(!m_muteButton); - m_muteButton = MediaControlMuteButtonElement::create(mediaElement()); + m_muteButton = MediaControlMuteButtonElement::create(mediaElement(), MediaControlMuteButtonElement::Controller); m_muteButton->attachToParent(m_panel.get()); } @@ -269,6 +272,14 @@ void RenderMedia::createVolumeSlider() m_volumeSlider->attachToParent(m_volumeSliderContainer.get()); } +void RenderMedia::createVolumeSliderMuteButton() +{ + ASSERT(!m_volumeSliderMuteButton); + m_volumeSliderMuteButton = MediaControlMuteButtonElement::create(mediaElement(), MediaControlMuteButtonElement::VolumeSlider); + m_volumeSliderMuteButton->attachToParent(m_volumeSliderContainer.get()); + +} + void RenderMedia::createCurrentTimeDisplay() { ASSERT(!m_currentTimeDisplay); @@ -316,6 +327,7 @@ void RenderMedia::updateControls() m_fullscreenButton = 0; m_volumeSliderContainer = 0; m_volumeSlider = 0; + m_volumeSliderMuteButton = 0; m_controlsShadowRoot = 0; m_toggleClosedCaptionsButton = 0; } @@ -345,8 +357,10 @@ void RenderMedia::updateControls() createFullscreenButton(); createMuteButton(); createVolumeSliderContainer(); - if (m_volumeSliderContainer) + if (m_volumeSliderContainer) { createVolumeSlider(); + createVolumeSliderMuteButton(); + } m_panel->attach(); } } @@ -396,6 +410,8 @@ void RenderMedia::updateControls() m_fullscreenButton->update(); if (m_volumeSlider) m_volumeSlider->update(); + if (m_volumeSliderMuteButton) + m_volumeSliderMuteButton->update(); updateTimeDisplay(); updateControlVisibility(); @@ -499,13 +515,13 @@ void RenderMedia::updateVolumeSliderContainer(bool visible) RefPtr<RenderStyle> s = m_volumeSliderContainer->styleForElement(); int height = s->height().isPercent() ? 0 : s->height().value(); - int x = m_muteButton->renderBox()->offsetLeft(); - int y = m_muteButton->renderBox()->offsetTop() - height; - FloatPoint absPoint = m_muteButton->renderer()->localToAbsolute(FloatPoint(x, y), true, true); - if (absPoint.y() < 0) - y = m_muteButton->renderBox()->offsetTop() + m_muteButton->renderBox()->height(); - m_volumeSliderContainer->setVisible(true); + int width = s->width().isPercent() ? 0 : s->width().value(); + IntPoint offset = document()->page()->theme()->volumeSliderOffsetFromMuteButton(m_muteButton->renderer()->node(), IntSize(width, height)); + int x = offset.x() + m_muteButton->renderBox()->offsetLeft(); + int y = offset.y() + m_muteButton->renderBox()->offsetTop(); + m_volumeSliderContainer->setPosition(x, y); + m_volumeSliderContainer->setVisible(true); m_volumeSliderContainer->update(); m_volumeSlider->update(); } else if (!visible && m_volumeSliderContainer->isVisible()) { @@ -519,8 +535,15 @@ void RenderMedia::forwardEvent(Event* event) if (event->isMouseEvent() && m_controlsShadowRoot) { MouseEvent* mouseEvent = static_cast<MouseEvent*>(event); IntPoint point(mouseEvent->absoluteLocation()); + + bool defaultHandled = false; + if (m_volumeSliderMuteButton && m_volumeSliderMuteButton->hitTest(point)) { + m_volumeSliderMuteButton->defaultEventHandler(event); + defaultHandled = event->defaultHandled(); + } + bool showVolumeSlider = false; - if (m_muteButton && m_muteButton->hitTest(point)) { + if (!defaultHandled && m_muteButton && m_muteButton->hitTest(point)) { m_muteButton->defaultEventHandler(event); if (event->type() != eventNames().mouseoutEvent) showVolumeSlider = true; diff --git a/WebCore/rendering/RenderMedia.h b/WebCore/rendering/RenderMedia.h index 32d6d65..4c980b5 100644 --- a/WebCore/rendering/RenderMedia.h +++ b/WebCore/rendering/RenderMedia.h @@ -104,6 +104,7 @@ private: void createTimeline(); void createVolumeSliderContainer(); void createVolumeSlider(); + void createVolumeSliderMuteButton(); void createCurrentTimeDisplay(); void createTimeRemainingDisplay(); void createFullscreenButton(); @@ -131,6 +132,7 @@ private: RefPtr<MediaControlToggleClosedCaptionsButtonElement> m_toggleClosedCaptionsButton; RefPtr<MediaControlTimelineElement> m_timeline; RefPtr<MediaControlVolumeSliderElement> m_volumeSlider; + RefPtr<MediaControlMuteButtonElement> m_volumeSliderMuteButton; RefPtr<MediaControlFullscreenButtonElement> m_fullscreenButton; RefPtr<MediaControlTimelineContainerElement> m_timelineContainer; RefPtr<MediaControlVolumeSliderContainerElement> m_volumeSliderContainer; diff --git a/WebCore/rendering/RenderMediaControlsChromium.cpp b/WebCore/rendering/RenderMediaControlsChromium.cpp index ffd7a1e..98fdc7b 100644 --- a/WebCore/rendering/RenderMediaControlsChromium.cpp +++ b/WebCore/rendering/RenderMediaControlsChromium.cpp @@ -282,6 +282,7 @@ bool RenderMediaControlsChromium::paintMediaControlsPart(MediaControlElementType return paintMediaVolumeSliderThumb(object, paintInfo, rect); case MediaTimelineContainer: return paintMediaTimelineContainer(object, paintInfo, rect); + case MediaVolumeSliderMuteButton: case MediaFullscreenButton: case MediaSeekBackButton: case MediaSeekForwardButton: diff --git a/WebCore/rendering/RenderObject.cpp b/WebCore/rendering/RenderObject.cpp index 156df15..4ff35eb 100644 --- a/WebCore/rendering/RenderObject.cpp +++ b/WebCore/rendering/RenderObject.cpp @@ -555,6 +555,19 @@ RenderBox* RenderObject::enclosingBox() const return 0; } +RenderBoxModelObject* RenderObject::enclosingBoxModelObject() const +{ + RenderObject* curr = const_cast<RenderObject*>(this); + while (curr) { + if (curr->isBoxModelObject()) + return toRenderBoxModelObject(curr); + curr = curr->parent(); + } + + ASSERT_NOT_REACHED(); + return 0; +} + RenderBlock* RenderObject::firstLineBlock() const { return 0; @@ -1685,6 +1698,14 @@ StyleDifference RenderObject::adjustStyleDifference(StyleDifference diff, unsign else if (diff < StyleDifferenceRecompositeLayer) diff = StyleDifferenceRecompositeLayer; } + + // The answer to requiresLayer() for plugins and iframes can change outside of the style system, + // since it depends on whether we decide to composite these elements. When the layer status of + // one of these elements changes, we need to force a layout. + if (diff == StyleDifferenceEqual && style() && isBoxModelObject()) { + if (hasLayer() != toRenderBoxModelObject(this)->requiresLayer()) + diff = StyleDifferenceLayout; + } #else UNUSED_PARAM(contextSensitiveProperties); #endif diff --git a/WebCore/rendering/RenderObject.h b/WebCore/rendering/RenderObject.h index 33271df..3f78e45 100644 --- a/WebCore/rendering/RenderObject.h +++ b/WebCore/rendering/RenderObject.h @@ -166,7 +166,8 @@ public: // Convenience function for getting to the nearest enclosing box of a RenderObject. RenderBox* enclosingBox() const; - + RenderBoxModelObject* enclosingBoxModelObject() const; + virtual bool isEmpty() const { return firstChild() == 0; } #ifndef NDEBUG diff --git a/WebCore/rendering/RenderPath.cpp b/WebCore/rendering/RenderPath.cpp index 0010e3f..27d480d 100644 --- a/WebCore/rendering/RenderPath.cpp +++ b/WebCore/rendering/RenderPath.cpp @@ -100,13 +100,7 @@ void RenderPath::layout() LayoutRepainter repainter(*this, checkForRepaintDuringLayout() && selfNeedsLayout()); SVGStyledTransformableElement* element = static_cast<SVGStyledTransformableElement*>(node()); - // We need to update the Path object whenever the underlying SVGStyledTransformableElement uses relative values - // as the viewport size may have changed. It would be nice to optimize this to detect these changes, and only - // update when needed, even when using relative values. bool needsPathUpdate = m_needsPathUpdate; - if (!needsPathUpdate && element->hasRelativeLengths()) - needsPathUpdate = true; - if (needsPathUpdate) { m_path = element->toPathData(); m_needsPathUpdate = false; diff --git a/WebCore/rendering/RenderSVGContainer.cpp b/WebCore/rendering/RenderSVGContainer.cpp index 27584d9..d4ca69f 100644 --- a/WebCore/rendering/RenderSVGContainer.cpp +++ b/WebCore/rendering/RenderSVGContainer.cpp @@ -40,29 +40,24 @@ RenderSVGContainer::RenderSVGContainer(SVGStyledElement* node) { } -bool RenderSVGContainer::drawsContents() const -{ - return m_drawsContents; -} - -void RenderSVGContainer::setDrawsContents(bool drawsContents) -{ - m_drawsContents = drawsContents; -} - void RenderSVGContainer::layout() { ASSERT(needsLayout()); - ASSERT(!view()->layoutStateEnabled()); // RenderSVGRoot disables layoutState for the SVG rendering tree. - calcViewport(); // Allow RenderSVGViewportContainer to update its viewport + // RenderSVGRoot disables layoutState for the SVG rendering tree. + ASSERT(!view()->layoutStateEnabled()); + + // Allow RenderSVGViewportContainer to update its viewport. + calcViewport(); LayoutRepainter repainter(*this, checkForRepaintDuringLayout() || selfWillPaint()); - calculateLocalTransform(); // Allow RenderSVGTransformableContainer to update its transform + + // Allow RenderSVGTransformableContainer to update its transform. + calculateLocalTransform(); SVGRenderSupport::layoutChildren(this, selfNeedsLayout()); - repainter.repaintAfterLayout(); + repainter.repaintAfterLayout(); setNeedsLayout(false); } diff --git a/WebCore/rendering/RenderSVGContainer.h b/WebCore/rendering/RenderSVGContainer.h index f681e50..53f1a97 100644 --- a/WebCore/rendering/RenderSVGContainer.h +++ b/WebCore/rendering/RenderSVGContainer.h @@ -39,8 +39,8 @@ public: RenderObjectChildList* children() { return &m_children; } // <marker> uses these methods to only allow drawing children during a special marker draw time - void setDrawsContents(bool); - bool drawsContents() const; + void setDrawsContents(bool drawsContents) { m_drawsContents = drawsContents; } + bool drawsContents() const { return m_drawsContents; } virtual void paint(PaintInfo&, int parentX, int parentY); @@ -97,5 +97,3 @@ void toRenderSVGContainer(const RenderSVGContainer*); #endif // ENABLE(SVG) #endif // RenderSVGContainer_h - -// vim:ts=4:noet diff --git a/WebCore/rendering/RenderSVGResourceFilter.cpp b/WebCore/rendering/RenderSVGResourceFilter.cpp index 0062015..19a6ccb 100644 --- a/WebCore/rendering/RenderSVGResourceFilter.cpp +++ b/WebCore/rendering/RenderSVGResourceFilter.cpp @@ -219,11 +219,13 @@ bool RenderSVGResourceFilter::applyResource(RenderObject* object, RenderStyle*, sourceGraphicContext->translate(-clippedSourceRect.x(), -clippedSourceRect.y()); sourceGraphicContext->scale(scale); sourceGraphicContext->clearRect(FloatRect(FloatPoint(), paintRect.size())); - filterData->sourceGraphicBuffer.set(sourceGraphic.release()); + filterData->sourceGraphicBuffer = sourceGraphic.release(); filterData->savedContext = context; context = sourceGraphicContext; - m_filter.set(object, filterData.release()); + + ASSERT(!m_filter.contains(object)); + m_filter.set(object, filterData.leakPtr()); return true; } diff --git a/WebCore/rendering/RenderSVGResourceGradient.cpp b/WebCore/rendering/RenderSVGResourceGradient.cpp index 7ea70d2..74f5b13 100644 --- a/WebCore/rendering/RenderSVGResourceGradient.cpp +++ b/WebCore/rendering/RenderSVGResourceGradient.cpp @@ -73,17 +73,12 @@ void RenderSVGResourceGradient::invalidateClient(RenderObject* object) } #if PLATFORM(CG) -static inline AffineTransform absoluteTransformForRenderer(const RenderObject* object) +static inline AffineTransform absoluteTransformFromContext(GraphicsContext* context) { - AffineTransform absoluteTransform; - - const RenderObject* currentObject = object; - while (currentObject) { - absoluteTransform = currentObject->localToParentTransform() * absoluteTransform; - currentObject = currentObject->parent(); - } - - return absoluteTransform; + // Extract current transformation matrix used in the original context. Note that this coordinate + // system is flipped compared to SVGs internal coordinate system, done in WebKit level. Fix + // this transformation by flipping the y component. + return context->getCTM() * AffineTransform().flipY(); } static inline bool createMaskAndSwapContextForTextGradient(GraphicsContext*& context, @@ -93,7 +88,7 @@ static inline bool createMaskAndSwapContextForTextGradient(GraphicsContext*& con { const RenderObject* textRootBlock = SVGRenderSupport::findTextRootObject(object); - AffineTransform transform = absoluteTransformForRenderer(textRootBlock); + AffineTransform transform(absoluteTransformFromContext(context)); FloatRect maskAbsoluteBoundingBox = transform.mapRect(textRootBlock->repaintRectInLocalCoordinates()); IntRect maskImageRect = enclosingIntRect(maskAbsoluteBoundingBox); @@ -111,7 +106,7 @@ static inline bool createMaskAndSwapContextForTextGradient(GraphicsContext*& con maskImageContext->translate(-maskAbsoluteBoundingBox.x(), -maskAbsoluteBoundingBox.y()); maskImageContext->concatCTM(transform); - imageBuffer.set(maskImage.release()); + imageBuffer = maskImage.release(); savedContext = context; context = maskImageContext; @@ -124,7 +119,13 @@ static inline AffineTransform clipToTextMask(GraphicsContext* context, GradientData* gradientData) { const RenderObject* textRootBlock = SVGRenderSupport::findTextRootObject(object); - context->clipToImageBuffer(textRootBlock->repaintRectInLocalCoordinates(), imageBuffer.get()); + + // The mask image has been created in the device coordinate space, as the image should not be scaled. + // So the actual masking process has to be done in the device coordinate space as well. + AffineTransform transform(absoluteTransformFromContext(context)); + context->concatCTM(transform.inverse()); + context->clipToImageBuffer(transform.mapRect(textRootBlock->repaintRectInLocalCoordinates()), imageBuffer.get()); + context->concatCTM(transform); AffineTransform matrix; if (gradientData->boundingBoxMode) { diff --git a/WebCore/rendering/RenderSVGRoot.cpp b/WebCore/rendering/RenderSVGRoot.cpp index ad3303f..396df19 100644 --- a/WebCore/rendering/RenderSVGRoot.cpp +++ b/WebCore/rendering/RenderSVGRoot.cpp @@ -48,6 +48,7 @@ namespace WebCore { RenderSVGRoot::RenderSVGRoot(SVGStyledElement* node) : RenderBox(node) + , m_isLayoutSizeChanged(false) { setReplaced(true); } @@ -116,13 +117,14 @@ void RenderSVGRoot::layout() IntSize oldSize(width(), height()); calcWidth(); calcHeight(); - calcViewport(); - // RenderSVGRoot needs to take special care to propagate window size changes to the children, - // if the outermost <svg> is using relative x/y/width/height values. Hence the additonal parameters. SVGSVGElement* svg = static_cast<SVGSVGElement*>(node()); - SVGRenderSupport::layoutChildren(this, needsLayout || (svg->hasRelativeLengths() && oldSize != size())); + m_isLayoutSizeChanged = svg->hasRelativeLengths() && oldSize != size(); + + SVGRenderSupport::layoutChildren(this, needsLayout); + m_isLayoutSizeChanged = false; + repainter.repaintAfterLayout(); view()->enableLayoutState(); @@ -200,9 +202,6 @@ void RenderSVGRoot::calcViewport() { SVGSVGElement* svg = static_cast<SVGSVGElement*>(node()); - if (!selfNeedsLayout() && !svg->hasRelativeLengths()) - return; - if (!svg->hasSetContainerSize()) { // In the normal case of <svg> being stand-alone or in a CSSBoxModel object we use // RenderBox::width()/height() (which pulls data from RenderStyle) @@ -270,12 +269,17 @@ FloatRect RenderSVGRoot::strokeBoundingBox() const FloatRect RenderSVGRoot::repaintRectInLocalCoordinates() const { - // FIXME: This does not include the border but it should! FloatRect repaintRect = SVGRenderSupport::computeContainerBoundingBox(this, SVGRenderSupport::RepaintBoundingBox); style()->svgStyle()->inflateForShadow(repaintRect); + repaintRect.inflate(borderAndPaddingWidth()); return repaintRect; } +IntRect RenderSVGRoot::clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer) +{ + return SVGRenderSupport::clippedOverflowRectForRepaint(this, repaintContainer); +} + void RenderSVGRoot::computeRectForRepaint(RenderBoxModelObject* repaintContainer, IntRect& repaintRect, bool fixed) { // Apply our local transforms (except for x/y translation), then our shadow, diff --git a/WebCore/rendering/RenderSVGRoot.h b/WebCore/rendering/RenderSVGRoot.h index 48263aa..0a08ab5 100644 --- a/WebCore/rendering/RenderSVGRoot.h +++ b/WebCore/rendering/RenderSVGRoot.h @@ -40,6 +40,8 @@ public: const RenderObjectChildList* children() const { return &m_children; } RenderObjectChildList* children() { return &m_children; } + bool isLayoutSizeChanged() const { return m_isLayoutSizeChanged; } + private: virtual RenderObjectChildList* virtualChildren() { return children(); } virtual const RenderObjectChildList* virtualChildren() const { return children(); } @@ -68,6 +70,7 @@ private: virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, int x, int y, int tx, int ty, HitTestAction); + virtual IntRect clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer); virtual void computeRectForRepaint(RenderBoxModelObject* repaintContainer, IntRect& repaintRect, bool fixed); virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&) const; @@ -84,6 +87,7 @@ private: RenderObjectChildList m_children; FloatSize m_viewportSize; mutable AffineTransform m_localToParentTransform; + bool m_isLayoutSizeChanged : 1; }; inline RenderSVGRoot* toRenderSVGRoot(RenderObject* object) diff --git a/WebCore/rendering/RenderSVGViewportContainer.cpp b/WebCore/rendering/RenderSVGViewportContainer.cpp index ca735d2..f314bde 100644 --- a/WebCore/rendering/RenderSVGViewportContainer.cpp +++ b/WebCore/rendering/RenderSVGViewportContainer.cpp @@ -45,18 +45,13 @@ void RenderSVGViewportContainer::applyViewportClip(PaintInfo& paintInfo) void RenderSVGViewportContainer::calcViewport() { - SVGElement* svgelem = static_cast<SVGElement*>(node()); - if (svgelem->hasTagName(SVGNames::svgTag)) { - SVGSVGElement* svg = static_cast<SVGSVGElement*>(node()); - - if (!selfNeedsLayout() && !svg->hasRelativeLengths()) - return; - - float x = svg->x().value(svg); - float y = svg->y().value(svg); - float w = svg->width().value(svg); - float h = svg->height().value(svg); - m_viewport = FloatRect(x, y, w, h); + SVGElement* element = static_cast<SVGElement*>(node()); + if (element->hasTagName(SVGNames::svgTag)) { + SVGSVGElement* svg = static_cast<SVGSVGElement*>(element); + m_viewport = FloatRect(svg->x().value(svg) + , svg->y().value(svg) + , svg->width().value(svg) + , svg->height().value(svg)); } } diff --git a/WebCore/rendering/RenderTheme.cpp b/WebCore/rendering/RenderTheme.cpp index 2c6e9da..2147b36 100644 --- a/WebCore/rendering/RenderTheme.cpp +++ b/WebCore/rendering/RenderTheme.cpp @@ -1,7 +1,7 @@ /** * This file is part of the theme implementation for form controls in WebCore. * - * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Computer, Inc. + * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Computer, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -341,6 +341,8 @@ bool RenderTheme::paint(RenderObject* o, const PaintInfo& paintInfo, const IntRe if (o->parent()->isSlider()) return paintMediaSliderThumb(o, paintInfo, r); break; + case MediaVolumeSliderMuteButtonPart: + return paintMediaMuteButton(o, paintInfo, r); case MediaVolumeSliderContainerPart: return paintMediaVolumeSliderContainer(o, paintInfo, r); case MediaVolumeSliderPart: @@ -538,6 +540,15 @@ String RenderTheme::formatMediaControlsRemainingTime(float currentTime, float du return formatMediaControlsTime(currentTime - duration); } +IntPoint RenderTheme::volumeSliderOffsetFromMuteButton(Node* muteButton, const IntSize& size) const +{ + int y = -size.height(); + FloatPoint absPoint = muteButton->renderer()->localToAbsolute(FloatPoint(muteButton->renderBox()->offsetLeft(), y), true, true); + if (absPoint.y() < 0) + y = muteButton->renderBox()->height(); + return IntPoint(0, y); +} + #endif Color RenderTheme::activeSelectionBackgroundColor() const diff --git a/WebCore/rendering/RenderTheme.h b/WebCore/rendering/RenderTheme.h index 47217ca..1e0b54c 100644 --- a/WebCore/rendering/RenderTheme.h +++ b/WebCore/rendering/RenderTheme.h @@ -1,7 +1,7 @@ /* * This file is part of the theme implementation for form controls in WebCore. * - * Copyright (C) 2005, 2006, 2007, 2008 Apple Computer, Inc. + * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Computer, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -165,11 +165,6 @@ public: virtual int popupInternalPaddingBottom(RenderStyle*) const { return 0; } virtual bool popupOptionSupportsTextIndent() const { return false; } - virtual int buttonInternalPaddingLeft() const { return 0; } - virtual int buttonInternalPaddingRight() const { return 0; } - virtual int buttonInternalPaddingTop() const { return 0; } - virtual int buttonInternalPaddingBottom() const { return 0; } - virtual ScrollbarControlSize scrollbarControlSizeForPart(ControlPart) { return RegularScrollbar; } // Method for painting the caps lock indicator @@ -191,6 +186,9 @@ public: virtual String formatMediaControlsTime(float time) const; virtual String formatMediaControlsCurrentTime(float currentTime, float duration) const; virtual String formatMediaControlsRemainingTime(float currentTime, float duration) const; + + // Returns the media volume slider container's offset from the mute button. + virtual IntPoint volumeSliderOffsetFromMuteButton(Node*, const IntSize&) const; #endif #if ENABLE(METER_TAG) diff --git a/WebCore/rendering/RenderThemeMac.h b/WebCore/rendering/RenderThemeMac.h index 44d9189..95661b8 100644 --- a/WebCore/rendering/RenderThemeMac.h +++ b/WebCore/rendering/RenderThemeMac.h @@ -1,7 +1,7 @@ /* * This file is part of the theme implementation for form controls in WebCore. * - * Copyright (C) 2005 Apple Computer, Inc. + * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Computer, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -156,12 +156,16 @@ protected: virtual bool paintMediaControlsBackground(RenderObject*, const PaintInfo&, const IntRect&); virtual bool paintMediaCurrentTime(RenderObject*, const PaintInfo&, const IntRect&); virtual bool paintMediaTimeRemaining(RenderObject*, const PaintInfo&, const IntRect&); + virtual bool paintMediaVolumeSliderContainer(RenderObject*, const PaintInfo&, const IntRect&); + virtual bool paintMediaVolumeSliderTrack(RenderObject*, const PaintInfo&, const IntRect&); + virtual bool paintMediaVolumeSliderThumb(RenderObject*, const PaintInfo&, const IntRect&); // Media controls virtual String extraMediaControlsStyleSheet(); virtual bool shouldRenderMediaControlPart(ControlPart, Element*); virtual void adjustMediaSliderThumbSize(RenderObject*) const; + virtual IntPoint volumeSliderOffsetFromMuteButton(Node*, const IntSize&) const; #endif private: diff --git a/WebCore/rendering/RenderThemeMac.mm b/WebCore/rendering/RenderThemeMac.mm index 993bc72..bbf6906 100644 --- a/WebCore/rendering/RenderThemeMac.mm +++ b/WebCore/rendering/RenderThemeMac.mm @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. + * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -1686,14 +1686,16 @@ void RenderThemeMac::adjustSliderThumbSize(RenderObject* o) const void RenderThemeMac::adjustMediaSliderThumbSize(RenderObject* o) const { - if (o->style()->appearance() == MediaSliderThumbPart) { + ControlPart part = o->style()->appearance(); + + if (part == MediaSliderThumbPart || part == MediaVolumeSliderThumbPart) { int width = mediaSliderThumbWidth; int height = mediaSliderThumbHeight; if (mediaControllerTheme() == MediaControllerThemeQuickTime) { CGSize size; - wkMeasureMediaUIPart(MediaSliderThumb, MediaControllerThemeQuickTime, NULL, &size); + wkMeasureMediaUIPart(part == MediaSliderThumbPart ? MediaSliderThumb : MediaVolumeSliderThumb, MediaControllerThemeQuickTime, NULL, &size); width = size.width; height = size.height; } @@ -1913,13 +1915,46 @@ bool RenderThemeMac::paintMediaTimeRemaining(RenderObject* o, const PaintInfo& p return false; } +bool RenderThemeMac::paintMediaVolumeSliderContainer(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) +{ + Node* node = o->node(); + if (!node) + return false; + + LocalCurrentGraphicsContext localContext(paintInfo.context); + wkDrawMediaUIPart(MediaVolumeSliderContainer, mediaControllerTheme(), paintInfo.context->platformContext(), r, getMediaUIPartStateFlags(node)); + return false; +} + +bool RenderThemeMac::paintMediaVolumeSliderTrack(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) +{ + Node* node = o->node(); + if (!node) + return false; + + LocalCurrentGraphicsContext localContext(paintInfo.context); + wkDrawMediaUIPart(MediaVolumeSlider, mediaControllerTheme(), paintInfo.context->platformContext(), r, getMediaUIPartStateFlags(node)); + return false; +} + +bool RenderThemeMac::paintMediaVolumeSliderThumb(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) +{ + Node* node = o->node(); + if (!node) + return false; + + LocalCurrentGraphicsContext localContext(paintInfo.context); + wkDrawMediaUIPart(MediaVolumeSliderThumb, mediaControllerTheme(), paintInfo.context->platformContext(), r, getMediaUIPartStateFlags(node)); + return false; +} + String RenderThemeMac::extraMediaControlsStyleSheet() { #if PLATFORM(MAC) if (mediaControllerTheme() == MediaControllerThemeQuickTime) return String(mediaControlsQuickTimeUserAgentStyleSheet, sizeof(mediaControlsQuickTimeUserAgentStyleSheet)); - else - return String(); + + return String(); #else ASSERT_NOT_REACHED(); return String(); @@ -1928,16 +1963,38 @@ String RenderThemeMac::extraMediaControlsStyleSheet() bool RenderThemeMac::shouldRenderMediaControlPart(ControlPart part, Element* element) { - if (part == MediaToggleClosedCaptionsButtonPart) { - + switch (part) { + case MediaVolumeSliderContainerPart: + case MediaVolumeSliderPart: + case MediaVolumeSliderMuteButtonPart: + case MediaVolumeSliderThumbPart: { + HTMLMediaElement* mediaElement = static_cast<HTMLMediaElement*>(element); + return mediaControllerTheme() == MediaControllerThemeQuickTime && mediaElement->hasAudio(); + } + case MediaToggleClosedCaptionsButtonPart: // We rely on QTKit to render captions so don't enable the button unless it will be able to do so. if (!element->hasTagName(videoTag)) return false; + default: + break; } return RenderTheme::shouldRenderMediaControlPart(part, element); } +IntPoint RenderThemeMac::volumeSliderOffsetFromMuteButton(Node* muteButton, const IntSize& size) const +{ + static const int xOffset = -4; + static const int yOffset = 5; + + float zoomLevel = muteButton->renderer()->style()->effectiveZoom(); + int y = yOffset * zoomLevel + muteButton->renderBox()->offsetHeight() - size.height(); + FloatPoint absPoint = muteButton->renderer()->localToAbsolute(FloatPoint(muteButton->renderBox()->offsetLeft(), y), true, true); + if (absPoint.y() < 0) + y = muteButton->renderBox()->height(); + return IntPoint(xOffset * zoomLevel, y); +} + #endif // ENABLE(VIDEO) NSPopUpButtonCell* RenderThemeMac::popupButton() const diff --git a/WebCore/rendering/RenderThemeWin.cpp b/WebCore/rendering/RenderThemeWin.cpp index 38daf98..45965e6 100644 --- a/WebCore/rendering/RenderThemeWin.cpp +++ b/WebCore/rendering/RenderThemeWin.cpp @@ -761,26 +761,6 @@ void RenderThemeWin::adjustSliderThumbSize(RenderObject* o) const #endif } -int RenderThemeWin::buttonInternalPaddingLeft() const -{ - return 3; -} - -int RenderThemeWin::buttonInternalPaddingRight() const -{ - return 3; -} - -int RenderThemeWin::buttonInternalPaddingTop() const -{ - return 1; -} - -int RenderThemeWin::buttonInternalPaddingBottom() const -{ - return 1; -} - bool RenderThemeWin::paintSearchField(RenderObject* o, const PaintInfo& i, const IntRect& r) { return paintTextField(o, i, r); diff --git a/WebCore/rendering/RenderThemeWin.h b/WebCore/rendering/RenderThemeWin.h index 2e80032..0147900 100644 --- a/WebCore/rendering/RenderThemeWin.h +++ b/WebCore/rendering/RenderThemeWin.h @@ -94,11 +94,6 @@ public: virtual bool popupOptionSupportsTextIndent() const { return true; } - virtual int buttonInternalPaddingLeft() const; - virtual int buttonInternalPaddingRight() const; - virtual int buttonInternalPaddingTop() const; - virtual int buttonInternalPaddingBottom() const; - virtual void adjustSearchFieldStyle(CSSStyleSelector*, RenderStyle*, Element*) const; virtual bool paintSearchField(RenderObject*, const PaintInfo&, const IntRect&); diff --git a/WebCore/rendering/RenderThemeWince.cpp b/WebCore/rendering/RenderThemeWince.cpp index 4fd6de9..117601b 100644 --- a/WebCore/rendering/RenderThemeWince.cpp +++ b/WebCore/rendering/RenderThemeWince.cpp @@ -528,26 +528,6 @@ bool RenderThemeWince::paintSliderThumb(RenderObject* o, const PaintInfo& i, con return rc; } -int RenderThemeWince::buttonInternalPaddingLeft() const -{ - return 3; -} - -int RenderThemeWince::buttonInternalPaddingRight() const -{ - return 3; -} - -int RenderThemeWince::buttonInternalPaddingTop() const -{ - return 1; -} - -int RenderThemeWince::buttonInternalPaddingBottom() const -{ - return 1; -} - void RenderThemeWince::adjustSearchFieldStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const { const int padding = 1; @@ -665,4 +645,3 @@ bool RenderThemeWince::paintMediaSliderThumb(RenderObject* o, const PaintInfo& p #endif } - diff --git a/WebCore/rendering/RenderThemeWince.h b/WebCore/rendering/RenderThemeWince.h index 61a4ac5..c1b57d4 100644 --- a/WebCore/rendering/RenderThemeWince.h +++ b/WebCore/rendering/RenderThemeWince.h @@ -93,11 +93,6 @@ namespace WebCore { virtual bool popupOptionSupportsTextIndent() const { return true; } - virtual int buttonInternalPaddingLeft() const; - virtual int buttonInternalPaddingRight() const; - virtual int buttonInternalPaddingTop() const; - virtual int buttonInternalPaddingBottom() const; - virtual void adjustSearchFieldStyle(CSSStyleSelector*, RenderStyle*, Element*) const; virtual bool paintSearchField(RenderObject*, const PaintInfo&, const IntRect&); diff --git a/WebCore/rendering/RenderView.cpp b/WebCore/rendering/RenderView.cpp index eb920a2..232dd5d 100644 --- a/WebCore/rendering/RenderView.cpp +++ b/WebCore/rendering/RenderView.cpp @@ -27,6 +27,7 @@ #include "Frame.h" #include "FrameView.h" #include "GraphicsContext.h" +#include "HTMLFrameOwnerElement.h" #include "HitTestResult.h" #include "RenderLayer.h" #include "RenderSelectionInfo.h" diff --git a/WebCore/rendering/RenderWidget.cpp b/WebCore/rendering/RenderWidget.cpp index bba14e2..bebe6c8 100644 --- a/WebCore/rendering/RenderWidget.cpp +++ b/WebCore/rendering/RenderWidget.cpp @@ -32,6 +32,10 @@ #include "RenderView.h" #include "RenderWidgetProtector.h" +#if USE(ACCELERATED_COMPOSITING) +#include "RenderLayerBacking.h" +#endif + using namespace std; namespace WebCore { @@ -171,6 +175,12 @@ bool RenderWidget::setWidgetGeometry(const IntRect& frame) RenderWidgetProtector protector(this); RefPtr<Node> protectedNode(node()); m_widget->setFrameRect(frame); + +#if USE(ACCELERATED_COMPOSITING) + if (hasLayer() && layer()->isComposited()) + layer()->backing()->updateAfterWidgetResize(); +#endif + return boundsChanged; } diff --git a/WebCore/rendering/RootInlineBox.h b/WebCore/rendering/RootInlineBox.h index 86f633d..ff98f24 100644 --- a/WebCore/rendering/RootInlineBox.h +++ b/WebCore/rendering/RootInlineBox.h @@ -118,7 +118,7 @@ public: { ASSERT(!isDirty()); if (!m_floats) - m_floats.set(new Vector<RenderBox*>()); + m_floats= adoptPtr(new Vector<RenderBox*>); return *m_floats; } diff --git a/WebCore/rendering/SVGRenderSupport.cpp b/WebCore/rendering/SVGRenderSupport.cpp index a328031..0d4a42b 100644 --- a/WebCore/rendering/SVGRenderSupport.cpp +++ b/WebCore/rendering/SVGRenderSupport.cpp @@ -32,12 +32,14 @@ #include "ImageBuffer.h" #include "NodeRenderStyle.h" #include "RenderLayer.h" +#include "RenderPath.h" #include "RenderSVGContainer.h" #include "RenderSVGResource.h" #include "RenderSVGResourceClipper.h" #include "RenderSVGResourceFilter.h" #include "RenderSVGResourceMarker.h" #include "RenderSVGResourceMasker.h" +#include "RenderSVGRoot.h" #include "SVGStyledElement.h" #include "TransformState.h" #include <wtf/UnusedParam.h> @@ -230,25 +232,42 @@ FloatRect SVGRenderSupport::computeContainerBoundingBox(const RenderObject* cont return boundingBox; } +static inline RenderSVGRoot* svgRootTreeObject(RenderObject* start) +{ + while (start && !start->isSVGRoot()) + start = start->parent(); + + ASSERT(start); + ASSERT(start->isSVGRoot()); + return toRenderSVGRoot(start); +} + void SVGRenderSupport::layoutChildren(RenderObject* start, bool selfNeedsLayout) { + bool layoutSizeChanged = svgRootTreeObject(start)->isLayoutSizeChanged(); + for (RenderObject* child = start->firstChild(); child; child = child->nextSibling()) { - // Only force our kids to layout if we're being asked to relayout as a result of a parent changing - // FIXME: We should be able to skip relayout of non-relative kids when only bounds size has changed - // that's a possible future optimization using LayoutState - // http://bugs.webkit.org/show_bug.cgi?id=15391 bool needsLayout = selfNeedsLayout; - if (!needsLayout) { + + if (layoutSizeChanged) { + // When selfNeedsLayout is false and the layout size changed, we have to check whether this child uses relative lengths if (SVGElement* element = child->node()->isSVGElement() ? static_cast<SVGElement*>(child->node()) : 0) { - if (element->isStyled()) - needsLayout = static_cast<SVGStyledElement*>(element)->hasRelativeLengths(); + if (element->isStyled() && static_cast<SVGStyledElement*>(element)->hasRelativeLengths()) { + // When the layout size changed and when using relative values tell the RenderPath to update its Path object + if (child->isRenderPath()) + toRenderPath(child)->setNeedsPathUpdate(); + + needsLayout = true; + } } } - if (needsLayout) + if (needsLayout) { child->setNeedsLayout(true, false); + child->layout(); + } else + child->layoutIfNeeded(); - child->layoutIfNeeded(); ASSERT(!child->needsLayout()); } } diff --git a/WebCore/rendering/style/RenderStyle.cpp b/WebCore/rendering/style/RenderStyle.cpp index a386fc6..ce6c98e 100644 --- a/WebCore/rendering/style/RenderStyle.cpp +++ b/WebCore/rendering/style/RenderStyle.cpp @@ -586,7 +586,7 @@ void RenderStyle::setContent(PassRefPtr<StyleImage> image, bool add) ContentData* newContentData; if (reuseContent && content) { content->clear(); - newContentData = content.release(); + newContentData = content.leakPtr(); } else newContentData = new ContentData; @@ -622,7 +622,7 @@ void RenderStyle::setContent(PassRefPtr<StringImpl> s, bool add) ContentData* newContentData = 0; if (reuseContent && content) { content->clear(); - newContentData = content.release(); + newContentData = content.leakPtr(); } else newContentData = new ContentData; @@ -648,7 +648,7 @@ void RenderStyle::setContent(CounterContent* c, bool add) ContentData* newContentData = 0; if (reuseContent && content) { content->clear(); - newContentData = content.release(); + newContentData = content.leakPtr(); } else newContentData = new ContentData; @@ -732,7 +732,7 @@ void RenderStyle::setBoxShadow(ShadowData* shadowData, bool add) return; } - shadowData->setNext(rareData->m_boxShadow.release()); + shadowData->setNext(rareData->m_boxShadow.leakPtr()); rareData->m_boxShadow.set(shadowData); } diff --git a/WebCore/rendering/style/RenderStyle.h b/WebCore/rendering/style/RenderStyle.h index 748842b..782508e 100644 --- a/WebCore/rendering/style/RenderStyle.h +++ b/WebCore/rendering/style/RenderStyle.h @@ -1029,8 +1029,8 @@ public: rareNonInheritedData.access()->m_transitions.clear(); } - void inheritAnimations(const AnimationList* parent) { rareNonInheritedData.access()->m_animations.set(parent ? new AnimationList(*parent) : 0); } - void inheritTransitions(const AnimationList* parent) { rareNonInheritedData.access()->m_transitions.set(parent ? new AnimationList(*parent) : 0); } + void inheritAnimations(const AnimationList* parent) { rareNonInheritedData.access()->m_animations = parent ? adoptPtr(new AnimationList(*parent)) : PassOwnPtr<AnimationList>(); } + void inheritTransitions(const AnimationList* parent) { rareNonInheritedData.access()->m_transitions = parent ? adoptPtr(new AnimationList(*parent)) : PassOwnPtr<AnimationList>(); } void adjustAnimations(); void adjustTransitions(); diff --git a/WebCore/rendering/style/RenderStyleConstants.h b/WebCore/rendering/style/RenderStyleConstants.h index dd82433..70b128b 100644 --- a/WebCore/rendering/style/RenderStyleConstants.h +++ b/WebCore/rendering/style/RenderStyleConstants.h @@ -2,7 +2,7 @@ * Copyright (C) 2000 Lars Knoll (knoll@kde.org) * (C) 2000 Antti Koivisto (koivisto@kde.org) * (C) 2000 Dirk Mueller (mueller@kde.org) - * Copyright (C) 2003, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. + * Copyright (C) 2003, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com) * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) * @@ -70,7 +70,8 @@ enum PseudoId { NOPSEUDO, FIRST_LINE, FIRST_LETTER, BEFORE, AFTER, SELECTION, FIRST_LINE_INHERITED, SCROLLBAR, FILE_UPLOAD_BUTTON, INPUT_PLACEHOLDER, SLIDER_THUMB, SEARCH_CANCEL_BUTTON, SEARCH_DECORATION, SEARCH_RESULTS_DECORATION, SEARCH_RESULTS_BUTTON, MEDIA_CONTROLS_PANEL, MEDIA_CONTROLS_PLAY_BUTTON, MEDIA_CONTROLS_MUTE_BUTTON, MEDIA_CONTROLS_TIMELINE, MEDIA_CONTROLS_TIMELINE_CONTAINER, - MEDIA_CONTROLS_VOLUME_SLIDER, MEDIA_CONTROLS_VOLUME_SLIDER_CONTAINER, MEDIA_CONTROLS_CURRENT_TIME_DISPLAY, MEDIA_CONTROLS_TIME_REMAINING_DISPLAY, + MEDIA_CONTROLS_VOLUME_SLIDER, MEDIA_CONTROLS_VOLUME_SLIDER_CONTAINER, MEDIA_CONTROLS_VOLUME_SLIDER_MUTE_BUTTON, + MEDIA_CONTROLS_CURRENT_TIME_DISPLAY, MEDIA_CONTROLS_TIME_REMAINING_DISPLAY, MEDIA_CONTROLS_SEEK_BACK_BUTTON, MEDIA_CONTROLS_SEEK_FORWARD_BUTTON, MEDIA_CONTROLS_FULLSCREEN_BUTTON, MEDIA_CONTROLS_REWIND_BUTTON, MEDIA_CONTROLS_RETURN_TO_REALTIME_BUTTON, MEDIA_CONTROLS_TOGGLE_CLOSED_CAPTIONS_BUTTON, MEDIA_CONTROLS_STATUS_DISPLAY, SCROLLBAR_THUMB, SCROLLBAR_BUTTON, SCROLLBAR_TRACK, SCROLLBAR_TRACK_PIECE, SCROLLBAR_CORNER, RESIZER, diff --git a/WebCore/rendering/style/SVGRenderStyleDefs.h b/WebCore/rendering/style/SVGRenderStyleDefs.h index 207cefa..5173894 100644 --- a/WebCore/rendering/style/SVGRenderStyleDefs.h +++ b/WebCore/rendering/style/SVGRenderStyleDefs.h @@ -29,10 +29,12 @@ #define SVGRenderStyleDefs_h #if ENABLE(SVG) + #include "Color.h" #include "PlatformString.h" #include "ShadowData.h" #include <wtf/OwnPtr.h> +#include <wtf/PassOwnPtr.h> #include <wtf/RefCounted.h> #include <wtf/RefPtr.h> @@ -67,8 +69,8 @@ #define SVG_RS_DEFINE_ATTRIBUTE_DATAREF_WITH_INITIAL_OWNPTR(Data, Group, Variable, Type, Name, Initial) \ Data* Name() const { return Group->Variable.get(); } \ - void set##Type(Data* obj) { \ - Group.access()->Variable.set(obj); \ + void set##Type(PassOwnPtr<Data> obj) { \ + Group.access()->Variable = obj; \ } \ static Data* initial##Type() { return Initial; } @@ -300,4 +302,5 @@ namespace WebCore { } // namespace WebCore #endif // ENABLE(SVG) + #endif // SVGRenderStyleDefs_h diff --git a/WebCore/storage/IDBAny.cpp b/WebCore/storage/IDBAny.cpp index 73b0d74..9a18980 100644 --- a/WebCore/storage/IDBAny.cpp +++ b/WebCore/storage/IDBAny.cpp @@ -62,6 +62,12 @@ PassRefPtr<IDBIndexRequest> IDBAny::idbIndexRequest() return m_idbIndexRequest; } +PassRefPtr<IDBKey> IDBAny::idbKey() +{ + ASSERT(m_type == IDBKeyType); + return m_idbKey; +} + PassRefPtr<IDBObjectStoreRequest> IDBAny::idbObjectStoreRequest() { ASSERT(m_type == IDBObjectStoreRequestType); @@ -100,6 +106,13 @@ void IDBAny::set(PassRefPtr<IDBIndexRequest> value) m_idbIndexRequest = value; } +void IDBAny::set(PassRefPtr<IDBKey> value) +{ + ASSERT(m_type == UndefinedType); + m_type = IDBKeyType; + m_idbKey = value; +} + void IDBAny::set(PassRefPtr<IDBObjectStoreRequest> value) { ASSERT(m_type == UndefinedType); diff --git a/WebCore/storage/IDBAny.h b/WebCore/storage/IDBAny.h index a734d13..ff2d6b9 100644 --- a/WebCore/storage/IDBAny.h +++ b/WebCore/storage/IDBAny.h @@ -36,6 +36,7 @@ namespace WebCore { class IDBDatabaseRequest; class IDBIndexRequest; +class IDBKey; class IDBObjectStoreRequest; class IndexedDatabaseRequest; class SerializedScriptValue; @@ -50,6 +51,7 @@ public: NullType, IDBDatabaseRequestType, IDBIndexRequestType, + IDBKeyType, IDBObjectStoreRequestType, IndexedDatabaseRequestType, SerializedScriptValueType @@ -59,6 +61,7 @@ public: // Use type() to figure out which one of these you're allowed to call. PassRefPtr<IDBDatabaseRequest> idbDatabaseRequest(); PassRefPtr<IDBIndexRequest> idbIndexRequest(); + PassRefPtr<IDBKey> idbKey(); PassRefPtr<IDBObjectStoreRequest> idbObjectStoreRequest(); PassRefPtr<IndexedDatabaseRequest> indexedDatabaseRequest(); PassRefPtr<SerializedScriptValue> serializedScriptValue(); @@ -67,6 +70,7 @@ public: void set(); // For "null". void set(PassRefPtr<IDBDatabaseRequest>); void set(PassRefPtr<IDBIndexRequest>); + void set(PassRefPtr<IDBKey>); void set(PassRefPtr<IDBObjectStoreRequest>); void set(PassRefPtr<IndexedDatabaseRequest>); void set(PassRefPtr<SerializedScriptValue>); @@ -79,6 +83,7 @@ private: // Only one of the following should ever be in use at any given time. RefPtr<IDBDatabaseRequest> m_idbDatabaseRequest; RefPtr<IDBIndexRequest> m_idbIndexRequest; + RefPtr<IDBKey> m_idbKey; RefPtr<IDBObjectStoreRequest> m_idbObjectStoreRequest; RefPtr<IndexedDatabaseRequest> m_indexedDatabaseRequest; RefPtr<SerializedScriptValue> m_serializedScriptValue; diff --git a/WebCore/storage/IDBAny.idl b/WebCore/storage/IDBAny.idl index 59da1c7..19d8424 100644 --- a/WebCore/storage/IDBAny.idl +++ b/WebCore/storage/IDBAny.idl @@ -10,9 +10,6 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED diff --git a/WebCore/storage/IDBDatabaseRequest.cpp b/WebCore/storage/IDBDatabaseRequest.cpp index c620279..3168d06 100644 --- a/WebCore/storage/IDBDatabaseRequest.cpp +++ b/WebCore/storage/IDBDatabaseRequest.cpp @@ -40,6 +40,8 @@ IDBDatabaseRequest::IDBDatabaseRequest(PassRefPtr<IDBDatabase> database) : m_database(database) { m_this = IDBAny::create(); + // We pass a reference to this object before it can be adopted. + relaxAdoptionRequirement(); m_this->set(this); } diff --git a/WebCore/storage/IDBDatabaseRequest.h b/WebCore/storage/IDBDatabaseRequest.h index 6b9e107..23b1ecc 100644 --- a/WebCore/storage/IDBDatabaseRequest.h +++ b/WebCore/storage/IDBDatabaseRequest.h @@ -55,7 +55,7 @@ public: String version() const { return m_database->version(); } PassRefPtr<DOMStringList> objectStores() const { return m_database->objectStores(); } - PassRefPtr<IDBRequest> createObjectStore(ScriptExecutionContext*, const String& name, const String& keyPath = "", bool autoIncrement = false); + PassRefPtr<IDBRequest> createObjectStore(ScriptExecutionContext*, const String& name, const String& keyPath = String(), bool autoIncrement = false); PassRefPtr<IDBObjectStoreRequest> objectStore(const String& name, unsigned short mode = 0); // FIXME: Use constant rather than 0. PassRefPtr<IDBRequest> removeObjectStore(ScriptExecutionContext*, const String& name); diff --git a/WebCore/storage/IDBDatabaseRequest.idl b/WebCore/storage/IDBDatabaseRequest.idl index c018bbf..548b221 100644 --- a/WebCore/storage/IDBDatabaseRequest.idl +++ b/WebCore/storage/IDBDatabaseRequest.idl @@ -36,7 +36,7 @@ module storage { // FIXME: Add transaction. // FIXME: Add setVersion. - [CallWith=ScriptExecutionContext] IDBRequest createObjectStore(in DOMString name, in [Optional] DOMString path, in [Optional] boolean autoIncrement); + [CallWith=ScriptExecutionContext] IDBRequest createObjectStore(in DOMString name, in [Optional, ConvertNullToNullString] DOMString keyPath, in [Optional] boolean autoIncrement); // FIXME: objectStore needs to be able to raise an IDBDatabaseException. IDBObjectStoreRequest objectStore(in DOMString name, in [Optional] unsigned short mode); [CallWith=ScriptExecutionContext] IDBRequest removeObjectStore(in DOMString name); diff --git a/WebCore/storage/IDBKey.cpp b/WebCore/storage/IDBKey.cpp index 36a83a6..8ec5dfd 100644 --- a/WebCore/storage/IDBKey.cpp +++ b/WebCore/storage/IDBKey.cpp @@ -26,10 +26,10 @@ #include "config.h" #include "IDBKey.h" -#include "SerializedScriptValue.h" - #if ENABLE(INDEXED_DATABASE) +#include "SerializedScriptValue.h" + namespace WebCore { IDBKey::IDBKey() @@ -37,10 +37,6 @@ IDBKey::IDBKey() { } -IDBKey::~IDBKey() -{ -} - IDBKey::IDBKey(int32_t number) : m_type(NumberType) , m_number(number) diff --git a/WebCore/storage/IDBKey.h b/WebCore/storage/IDBKey.h index 0cd205b..a84ea6a 100644 --- a/WebCore/storage/IDBKey.h +++ b/WebCore/storage/IDBKey.h @@ -27,9 +27,7 @@ #define IDBKey_h #include "PlatformString.h" -#include <wtf/PassRefPtr.h> -#include <wtf/RefCounted.h> -#include <wtf/RefPtr.h> +#include <wtf/Forward.h> #if ENABLE(INDEXED_DATABASE) @@ -50,9 +48,9 @@ public: { return adoptRef(new IDBKey(string)); } - ~IDBKey() { } + ~IDBKey(); - // In order of the least to the most precident in terms of sort order. + // In order of the least to the highest precedent in terms of sort order. enum Type { NullType = 0, StringType, diff --git a/WebCore/storage/IDBKeyRange.h b/WebCore/storage/IDBKeyRange.h index 58c1399..4c5efe2 100644 --- a/WebCore/storage/IDBKeyRange.h +++ b/WebCore/storage/IDBKeyRange.h @@ -29,13 +29,12 @@ #if ENABLE(INDEXED_DATABASE) #include "IDBAny.h" +#include "SerializedScriptValue.h" #include <wtf/PassRefPtr.h> #include <wtf/RefCounted.h> namespace WebCore { -class SerializedScriptValue; - class IDBKeyRange : public RefCounted<IDBKeyRange> { public: // Keep in sync with what's in the .idl file. diff --git a/WebCore/storage/IDBKeyTree.h b/WebCore/storage/IDBKeyTree.h index 0e39e77..70d6f83 100644 --- a/WebCore/storage/IDBKeyTree.h +++ b/WebCore/storage/IDBKeyTree.h @@ -26,12 +26,12 @@ #ifndef IDBKeyTree_h #define IDBKeyTree_h +#if ENABLE(INDEXED_DATABASE) + #include "IDBKey.h" #include <wtf/AVLTree.h> #include <wtf/Vector.h> -#if ENABLE(INDEXED_DATABASE) - namespace WebCore { template <typename ValueType> @@ -43,9 +43,9 @@ public: } ~IDBKeyTree(); - PassRefPtr<ValueType> get(PassRefPtr<IDBKey> key); - void put(PassRefPtr<IDBKey> key, PassRefPtr<ValueType> value); - void remove(PassRefPtr<IDBKey> key); + ValueType* get(IDBKey* key); + void put(IDBKey* key, ValueType* value); + void remove(IDBKey* key); private: struct TreeNode { @@ -118,34 +118,30 @@ int IDBKeyTree<ValueType>::AVLTreeAbstractor::compare_key_key(key va, key vb) } template <typename ValueType> -PassRefPtr<ValueType> IDBKeyTree<ValueType>::get(PassRefPtr<IDBKey> prpKey) +ValueType* IDBKeyTree<ValueType>::get(IDBKey* key) { - RefPtr<IDBKey> key = prpKey; - TreeNode* node = m_tree.search(key.get()); + TreeNode* node = m_tree.search(key); if (!node) return 0; - return node->value; + return node->value.get(); } - template <typename ValueType> -void IDBKeyTree<ValueType>::put(PassRefPtr<IDBKey> prpKey, PassRefPtr<ValueType> value) +void IDBKeyTree<ValueType>::put(IDBKey* key, ValueType* value) { - RefPtr<IDBKey> key = prpKey; - TreeNode* node = m_tree.search(key.get()); + TreeNode* node = m_tree.search(key); if (!node) { node = new TreeNode(); - node->key = key.release(); + node->key = key; m_tree.insert(node); } node->value = value; } template <typename ValueType> -void IDBKeyTree<ValueType>::remove(PassRefPtr<IDBKey> prpKey) +void IDBKeyTree<ValueType>::remove(IDBKey* key) { - RefPtr<IDBKey> key = prpKey; - TreeNode* node = m_tree.remove(key.get()); + TreeNode* node = m_tree.remove(key); if (node) delete node; } diff --git a/WebCore/storage/IDBObjectStore.h b/WebCore/storage/IDBObjectStore.h index 837b65a..e78e62a 100644 --- a/WebCore/storage/IDBObjectStore.h +++ b/WebCore/storage/IDBObjectStore.h @@ -36,6 +36,8 @@ namespace WebCore { class DOMStringList; class IDBCallbacks; class IDBIndex; +class IDBKey; +class SerializedScriptValue; class IDBObjectStore : public ThreadSafeShared<IDBObjectStore> { public: @@ -45,6 +47,10 @@ public: virtual String keyPath() const = 0; virtual PassRefPtr<DOMStringList> indexNames() const = 0; + virtual void get(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks>) = 0; + virtual void put(PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key, bool addOnly, PassRefPtr<IDBCallbacks>) = 0; + virtual void remove(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks>) = 0; + virtual void createIndex(const String& name, const String& keyPath, bool unique, PassRefPtr<IDBCallbacks>) = 0; virtual PassRefPtr<IDBIndex> index(const String& name) = 0; virtual void removeIndex(const String& name, PassRefPtr<IDBCallbacks>) = 0; diff --git a/WebCore/storage/IDBObjectStoreImpl.cpp b/WebCore/storage/IDBObjectStoreImpl.cpp index b84ceb2..d678400 100755 --- a/WebCore/storage/IDBObjectStoreImpl.cpp +++ b/WebCore/storage/IDBObjectStoreImpl.cpp @@ -27,9 +27,11 @@ #include "IDBObjectStoreImpl.h" #include "DOMStringList.h" +#include "IDBBindingUtilities.h" #include "IDBCallbacks.h" #include "IDBDatabaseException.h" #include "IDBIndexImpl.h" +#include "IDBKeyTree.h" #if ENABLE(INDEXED_DATABASE) @@ -43,6 +45,7 @@ IDBObjectStoreImpl::IDBObjectStoreImpl(const String& name, const String& keyPath : m_name(name) , m_keyPath(keyPath) , m_autoIncrement(autoIncrement) + , m_tree(Tree::create()) { } @@ -54,6 +57,50 @@ PassRefPtr<DOMStringList> IDBObjectStoreImpl::indexNames() const return indexNames.release(); } +void IDBObjectStoreImpl::get(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks> callbacks) +{ + RefPtr<SerializedScriptValue> value = m_tree->get(key.get()); + if (!value) { + callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::NOT_FOUND_ERR, "Key does not exist in the object store.")); + return; + } + callbacks->onSuccess(value.get()); +} + +void IDBObjectStoreImpl::put(PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> prpKey, bool addOnly, PassRefPtr<IDBCallbacks> callbacks) +{ + RefPtr<IDBKey> key = prpKey; + + if (!m_keyPath.isNull()) { + if (key) { + callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, "A key was supplied for an objectStore that has a keyPath.")); + return; + } + ASSERT_NOT_REACHED(); + callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, "FIXME: keyPath not yet supported.")); + return; + } + + if (!key) { + callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::DATA_ERR, "No key supplied.")); + return; + } + + if (addOnly && m_tree->get(key.get())) { + callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::CONSTRAINT_ERR, "Key already exists in the object store.")); + return; + } + + m_tree->put(key.get(), value.get()); + callbacks->onSuccess(key.get()); +} + +void IDBObjectStoreImpl::remove(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks> callbacks) +{ + m_tree->remove(key.get()); + callbacks->onSuccess(); +} + void IDBObjectStoreImpl::createIndex(const String& name, const String& keyPath, bool unique, PassRefPtr<IDBCallbacks> callbacks) { if (m_indexes.contains(name)) { diff --git a/WebCore/storage/IDBObjectStoreImpl.h b/WebCore/storage/IDBObjectStoreImpl.h index 89a06db..c4d2eb8 100644 --- a/WebCore/storage/IDBObjectStoreImpl.h +++ b/WebCore/storage/IDBObjectStoreImpl.h @@ -34,18 +34,24 @@ namespace WebCore { +template <typename ValueType> class IDBKeyTree; + class IDBObjectStoreImpl : public IDBObjectStore { public: static PassRefPtr<IDBObjectStore> create(const String& name, const String& keyPath, bool autoIncrement) { return adoptRef(new IDBObjectStoreImpl(name, keyPath, autoIncrement)); } - virtual ~IDBObjectStoreImpl(); + ~IDBObjectStoreImpl(); String name() const { return m_name; } String keyPath() const { return m_keyPath; } PassRefPtr<DOMStringList> indexNames() const; + void get(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks>); + void put(PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key, bool addOnly, PassRefPtr<IDBCallbacks>); + void remove(PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks>); + void createIndex(const String& name, const String& keyPath, bool unique, PassRefPtr<IDBCallbacks>); PassRefPtr<IDBIndex> index(const String& name); void removeIndex(const String& name, PassRefPtr<IDBCallbacks>); @@ -59,6 +65,9 @@ private: typedef HashMap<String, RefPtr<IDBIndex> > IndexMap; IndexMap m_indexes; + + typedef IDBKeyTree<SerializedScriptValue> Tree; + RefPtr<Tree> m_tree; }; } // namespace WebCore diff --git a/WebCore/storage/IDBObjectStoreRequest.cpp b/WebCore/storage/IDBObjectStoreRequest.cpp index b2c36dc..fdd498b 100644 --- a/WebCore/storage/IDBObjectStoreRequest.cpp +++ b/WebCore/storage/IDBObjectStoreRequest.cpp @@ -29,6 +29,7 @@ #include "DOMStringList.h" #include "IDBAny.h" #include "IDBIndexRequest.h" +#include "IDBKey.h" #include "SerializedScriptValue.h" #include <wtf/UnusedParam.h> @@ -36,10 +37,12 @@ namespace WebCore { -IDBObjectStoreRequest::IDBObjectStoreRequest(PassRefPtr<IDBObjectStore> idbObjectStore) +IDBObjectStoreRequest::IDBObjectStoreRequest(PassRefPtr<IDBObjectStore> idbObjectStore) : m_objectStore(idbObjectStore) { m_this = IDBAny::create(); + // We pass a reference to this object before it can be adopted. + relaxAdoptionRequirement(); m_this->set(this); } @@ -58,47 +61,32 @@ PassRefPtr<DOMStringList> IDBObjectStoreRequest::indexNames() const return m_objectStore->indexNames(); } -PassRefPtr<IDBRequest> IDBObjectStoreRequest::get(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> key) +PassRefPtr<IDBRequest> IDBObjectStoreRequest::get(ScriptExecutionContext* context, PassRefPtr<IDBKey> key) { - // FIXME: implement - UNUSED_PARAM(context); - UNUSED_PARAM(key); - return 0; -} - -PassRefPtr<IDBRequest> IDBObjectStoreRequest::add(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> value, PassRefPtr<SerializedScriptValue> key) -{ - // FIXME: implement - UNUSED_PARAM(context); - UNUSED_PARAM(value); - UNUSED_PARAM(key); - return 0; + RefPtr<IDBRequest> request = IDBRequest::create(context, m_this); + m_objectStore->get(key, request); + return request; } -PassRefPtr<IDBRequest> IDBObjectStoreRequest::modify(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> value, PassRefPtr<SerializedScriptValue> key) +PassRefPtr<IDBRequest> IDBObjectStoreRequest::add(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key) { - // FIXME: implement - UNUSED_PARAM(context); - UNUSED_PARAM(value); - UNUSED_PARAM(key); - return 0; + RefPtr<IDBRequest> request = IDBRequest::create(context, m_this); + m_objectStore->put(value, key, true, request); + return request; } -PassRefPtr<IDBRequest> IDBObjectStoreRequest::addOrModify(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> value, PassRefPtr<SerializedScriptValue> key) +PassRefPtr<IDBRequest> IDBObjectStoreRequest::put(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key) { - // FIXME: implement - UNUSED_PARAM(context); - UNUSED_PARAM(value); - UNUSED_PARAM(key); - return 0; + RefPtr<IDBRequest> request = IDBRequest::create(context, m_this); + m_objectStore->put(value, key, false, request); + return request; } -PassRefPtr<IDBRequest> IDBObjectStoreRequest::remove(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> key) +PassRefPtr<IDBRequest> IDBObjectStoreRequest::remove(ScriptExecutionContext* context, PassRefPtr<IDBKey> key) { - // FIXME: implement - UNUSED_PARAM(context); - UNUSED_PARAM(key); - return 0; + RefPtr<IDBRequest> request = IDBRequest::create(context, m_this); + m_objectStore->remove(key, request); + return request; } PassRefPtr<IDBRequest> IDBObjectStoreRequest::createIndex(ScriptExecutionContext* context, const String& name, const String& keyPath, bool unique) diff --git a/WebCore/storage/IDBObjectStoreRequest.h b/WebCore/storage/IDBObjectStoreRequest.h index f1a9f5b..af752f5 100644 --- a/WebCore/storage/IDBObjectStoreRequest.h +++ b/WebCore/storage/IDBObjectStoreRequest.h @@ -40,6 +40,7 @@ namespace WebCore { class DOMStringList; class IDBAny; class IDBIndexRequest; +class IDBKey; class SerializedScriptValue; class IDBObjectStoreRequest : public RefCounted<IDBObjectStoreRequest> { @@ -54,11 +55,10 @@ public: String keyPath() const; PassRefPtr<DOMStringList> indexNames() const; - PassRefPtr<IDBRequest> get(ScriptExecutionContext*, PassRefPtr<SerializedScriptValue> key); - PassRefPtr<IDBRequest> add(ScriptExecutionContext*, PassRefPtr<SerializedScriptValue> value, PassRefPtr<SerializedScriptValue> key = 0); - PassRefPtr<IDBRequest> modify(ScriptExecutionContext*, PassRefPtr<SerializedScriptValue> value, PassRefPtr<SerializedScriptValue> key = 0); - PassRefPtr<IDBRequest> addOrModify(ScriptExecutionContext*, PassRefPtr<SerializedScriptValue> value, PassRefPtr<SerializedScriptValue> key = 0); - PassRefPtr<IDBRequest> remove(ScriptExecutionContext*, PassRefPtr<SerializedScriptValue> key); + PassRefPtr<IDBRequest> get(ScriptExecutionContext*, PassRefPtr<IDBKey> key); + PassRefPtr<IDBRequest> add(ScriptExecutionContext*, PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key = 0); + PassRefPtr<IDBRequest> put(ScriptExecutionContext*, PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key = 0); + PassRefPtr<IDBRequest> remove(ScriptExecutionContext*, PassRefPtr<IDBKey> key); PassRefPtr<IDBRequest> createIndex(ScriptExecutionContext*, const String& name, const String& keyPath, bool unique = false); PassRefPtr<IDBIndexRequest> index(const String& name); diff --git a/WebCore/storage/IDBObjectStoreRequest.idl b/WebCore/storage/IDBObjectStoreRequest.idl index 873629d..a816b73 100644 --- a/WebCore/storage/IDBObjectStoreRequest.idl +++ b/WebCore/storage/IDBObjectStoreRequest.idl @@ -28,23 +28,21 @@ module storage { interface [ Conditional=INDEXED_DATABASE ] IDBObjectStoreRequest { - [CallWith=ScriptExecutionContext] IDBRequest get(in SerializedScriptValue key); - + [CallWith=ScriptExecutionContext] IDBRequest get(in IDBKey key); // FIXME: Come to concensus re getAll. // FIXME: SerializedScriptValue raises an exception if you pass in something that can't be serialized. // We need to instead "raise" this error via an error callback. - [CallWith=ScriptExecutionContext] IDBRequest add(in SerializedScriptValue value, in [Optional] SerializedScriptValue key); - [CallWith=ScriptExecutionContext] IDBRequest modify(in SerializedScriptValue value, in [Optional] SerializedScriptValue key); - [CallWith=ScriptExecutionContext] IDBRequest addOrModify(in SerializedScriptValue value, in [Optional] SerializedScriptValue key); - [CallWith=ScriptExecutionContext] IDBRequest remove(in SerializedScriptValue key); + [CallWith=ScriptExecutionContext] IDBRequest add(in SerializedScriptValue value, in [Optional] IDBKey key); + [CallWith=ScriptExecutionContext] IDBRequest put(in SerializedScriptValue value, in [Optional] IDBKey key); + [CallWith=ScriptExecutionContext] IDBRequest remove(in IDBKey key); // FIXME: write openCursor - [CallWith=ScriptExecutionContext] IDBRequest createIndex(in DOMString name, in DOMString keyPath, in [Optional] boolean unique); + [CallWith=ScriptExecutionContext] IDBRequest createIndex(in DOMString name, in [ConvertNullToNullString] DOMString keyPath, in [Optional] boolean unique); // FIXME: This needs to raise an IDBDatabaseException on errors. IDBIndexRequest index(in DOMString name); [CallWith=ScriptExecutionContext] IDBRequest removeIndex(in DOMString name); readonly attribute DOMString name; - readonly attribute DOMString keyPath; + readonly attribute [ConvertNullStringTo=Null] DOMString keyPath; readonly attribute DOMStringList indexNames; }; } diff --git a/WebCore/storage/IDBRequest.cpp b/WebCore/storage/IDBRequest.cpp index 7ec8ee6..78dd15a 100644 --- a/WebCore/storage/IDBRequest.cpp +++ b/WebCore/storage/IDBRequest.cpp @@ -87,7 +87,8 @@ void IDBRequest::onSuccess(PassRefPtr<IDBIndex> idbIndex) void IDBRequest::onSuccess(PassRefPtr<IDBKey> idbKey) { - ASSERT_NOT_REACHED(); + onEventCommon(); + m_result->set(idbKey); } void IDBRequest::onSuccess(PassRefPtr<IDBObjectStore> idbObjectStore) diff --git a/WebCore/storage/IndexedDatabaseRequest.cpp b/WebCore/storage/IndexedDatabaseRequest.cpp index 93e052c..a25fb2b 100644 --- a/WebCore/storage/IndexedDatabaseRequest.cpp +++ b/WebCore/storage/IndexedDatabaseRequest.cpp @@ -45,6 +45,8 @@ IndexedDatabaseRequest::IndexedDatabaseRequest(IndexedDatabase* indexedDatabase) : m_indexedDatabase(indexedDatabase) { m_this = IDBAny::create(); + // We pass a reference to this object before it can be adopted. + relaxAdoptionRequirement(); m_this->set(this); } @@ -94,4 +96,3 @@ PassRefPtr<IDBKeyRange> IndexedDatabaseRequest::makeBoundKeyRange(PassRefPtr<Ser } // namespace WebCore #endif // ENABLE(INDEXED_DATABASE) - diff --git a/WebCore/storage/StorageAreaSync.cpp b/WebCore/storage/StorageAreaSync.cpp index e20f11c..f2008ab 100644 --- a/WebCore/storage/StorageAreaSync.cpp +++ b/WebCore/storage/StorageAreaSync.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008, 2009 Apple Inc. All Rights Reserved. + * Copyright (C) 2008, 2009, 2010 Apple Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -49,12 +49,7 @@ static const double StorageSyncInterval = 1.0; // much harder to starve the rest of LocalStorage and the OS's IO subsystem in general. static const int MaxiumItemsToSync = 100; -PassRefPtr<StorageAreaSync> StorageAreaSync::create(PassRefPtr<StorageSyncManager> storageSyncManager, PassRefPtr<StorageAreaImpl> storageArea, String databaseIdentifier) -{ - return adoptRef(new StorageAreaSync(storageSyncManager, storageArea, databaseIdentifier)); -} - -StorageAreaSync::StorageAreaSync(PassRefPtr<StorageSyncManager> storageSyncManager, PassRefPtr<StorageAreaImpl> storageArea, String databaseIdentifier) +inline StorageAreaSync::StorageAreaSync(PassRefPtr<StorageSyncManager> storageSyncManager, PassRefPtr<StorageAreaImpl> storageArea, const String& databaseIdentifier) : m_syncTimer(this, &StorageAreaSync::syncTimerFired) , m_itemsCleared(false) , m_finalSyncScheduled(false) @@ -70,11 +65,18 @@ StorageAreaSync::StorageAreaSync(PassRefPtr<StorageSyncManager> storageSyncManag ASSERT(isMainThread()); ASSERT(m_storageArea); ASSERT(m_syncManager); +} + +PassRefPtr<StorageAreaSync> StorageAreaSync::create(PassRefPtr<StorageSyncManager> storageSyncManager, PassRefPtr<StorageAreaImpl> storageArea, const String& databaseIdentifier) +{ + RefPtr<StorageAreaSync> area = adoptRef(new StorageAreaSync(storageSyncManager, storageArea, databaseIdentifier)); // FIXME: If it can't import, then the default WebKit behavior should be that of private browsing, - // not silently ignoring it. https://bugs.webkit.org/show_bug.cgi?id=25894 - if (!m_syncManager->scheduleImport(this)) - m_importComplete = true; + // not silently ignoring it. https://bugs.webkit.org/show_bug.cgi?id=25894 + if (!area->m_syncManager->scheduleImport(area.get())) + area->m_importComplete = true; + + return area.release(); } StorageAreaSync::~StorageAreaSync() diff --git a/WebCore/storage/StorageAreaSync.h b/WebCore/storage/StorageAreaSync.h index a26b041..94c4670 100644 --- a/WebCore/storage/StorageAreaSync.h +++ b/WebCore/storage/StorageAreaSync.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008, 2009 Apple Inc. All Rights Reserved. + * Copyright (C) 2008, 2009, 2010 Apple Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -28,7 +28,6 @@ #if ENABLE(DOM_STORAGE) -#include "PlatformString.h" #include "SQLiteDatabase.h" #include "StringHash.h" #include "Timer.h" @@ -42,7 +41,7 @@ namespace WebCore { class StorageAreaSync : public RefCounted<StorageAreaSync> { public: - static PassRefPtr<StorageAreaSync> create(PassRefPtr<StorageSyncManager> storageSyncManager, PassRefPtr<StorageAreaImpl> storageArea, String databaseIdentifier); + static PassRefPtr<StorageAreaSync> create(PassRefPtr<StorageSyncManager>, PassRefPtr<StorageAreaImpl>, const String& databaseIdentifier); ~StorageAreaSync(); void scheduleFinalSync(); @@ -52,7 +51,7 @@ namespace WebCore { void scheduleClear(); private: - StorageAreaSync(PassRefPtr<StorageSyncManager> storageSyncManager, PassRefPtr<StorageAreaImpl> storageArea, String databaseIdentifier); + StorageAreaSync(PassRefPtr<StorageSyncManager>, PassRefPtr<StorageAreaImpl>, const String& databaseIdentifier); void dispatchStorageEvent(const String& key, const String& oldValue, const String& newValue, Frame* sourceFrame); diff --git a/WebCore/svg/SVGAnimatedString.idl b/WebCore/svg/SVGAnimatedString.idl index 888c762..1531942 100644 --- a/WebCore/svg/SVGAnimatedString.idl +++ b/WebCore/svg/SVGAnimatedString.idl @@ -26,9 +26,9 @@ module svg { interface [Conditional=SVG] SVGAnimatedString { - attribute core::DOMString baseVal + attribute DOMString baseVal /*setter raises(DOMException)*/; - readonly attribute core::DOMString animVal; + readonly attribute DOMString animVal; }; } diff --git a/WebCore/svg/SVGColor.idl b/WebCore/svg/SVGColor.idl index 32a2683..f4e17ab 100644 --- a/WebCore/svg/SVGColor.idl +++ b/WebCore/svg/SVGColor.idl @@ -21,7 +21,7 @@ module svg { - interface [Conditional=SVG] SVGColor : css::CSSValue { + interface [Conditional=SVG] SVGColor : CSSValue { // Color Types const unsigned short SVG_COLORTYPE_UNKNOWN = 0; const unsigned short SVG_COLORTYPE_RGBCOLOR = 1; @@ -29,17 +29,17 @@ module svg { const unsigned short SVG_COLORTYPE_CURRENTCOLOR = 3; readonly attribute unsigned short colorType; - readonly attribute css::RGBColor rgbColor; + readonly attribute RGBColor rgbColor; /*readonly attribute SVGICCColor iccColor;*/ - void setRGBColor(in core::DOMString rgbColor) + void setRGBColor(in DOMString rgbColor) raises(SVGException); - void setRGBColorICCColor(in core::DOMString rgbColor, - in core::DOMString iccColor) + void setRGBColorICCColor(in DOMString rgbColor, + in DOMString iccColor) raises(SVGException); void setColor(in unsigned short colorType, - in core::DOMString rgbColor, - in core::DOMString iccColor) + in DOMString rgbColor, + in DOMString iccColor) raises(SVGException); }; diff --git a/WebCore/svg/SVGDocument.idl b/WebCore/svg/SVGDocument.idl index 26b70d1..812665e 100644 --- a/WebCore/svg/SVGDocument.idl +++ b/WebCore/svg/SVGDocument.idl @@ -21,12 +21,12 @@ module svg { - interface [Conditional=SVG] SVGDocument : core::Document { + interface [Conditional=SVG] SVGDocument : Document { readonly attribute SVGSVGElement rootElement; // Overwrite the one in events::DocumentEvent - events::Event createEvent(in core::DOMString eventType) - raises(core::DOMException); + Event createEvent(in DOMString eventType) + raises(DOMException); }; } diff --git a/WebCore/svg/SVGDocumentExtensions.cpp b/WebCore/svg/SVGDocumentExtensions.cpp index fc31551..bc4d6e8 100644 --- a/WebCore/svg/SVGDocumentExtensions.cpp +++ b/WebCore/svg/SVGDocumentExtensions.cpp @@ -116,6 +116,12 @@ void SVGDocumentExtensions::unpauseAnimations() bool SVGDocumentExtensions::sampleAnimationAtTime(const String& elementId, SVGSMILElement* element, double time) { +#if !ENABLE(SVG_ANIMATION) + UNUSED_PARAM(elementId); + UNUSED_PARAM(element); + UNUSED_PARAM(time); + return false; +#else ASSERT(element); SMILTimeContainer* container = element->timeContainer(); if (!container || container->isPaused()) @@ -123,6 +129,7 @@ bool SVGDocumentExtensions::sampleAnimationAtTime(const String& elementId, SVGSM container->sampleAnimationAtTime(elementId, time); return true; +#endif } // FIXME: Callers should probably use ScriptController::eventHandlerLineNumber() diff --git a/WebCore/svg/SVGFontFaceElement.cpp b/WebCore/svg/SVGFontFaceElement.cpp index 94f3bd5..cf77d5b 100644 --- a/WebCore/svg/SVGFontFaceElement.cpp +++ b/WebCore/svg/SVGFontFaceElement.cpp @@ -58,7 +58,6 @@ SVGFontFaceElement::SVGFontFaceElement(const QualifiedName& tagName, Document* d SVGFontFaceElement::~SVGFontFaceElement() { - removeFromMappedElementSheet(); } static int cssPropertyIdForSVGAttributeName(const QualifiedName& attrName) diff --git a/WebCore/svg/SVGLangSpace.idl b/WebCore/svg/SVGLangSpace.idl index 277e514..b982dc5 100644 --- a/WebCore/svg/SVGLangSpace.idl +++ b/WebCore/svg/SVGLangSpace.idl @@ -27,9 +27,9 @@ module svg { interface [Conditional=SVG, ObjCProtocol, OmitConstructor] SVGLangSpace { - attribute core::DOMString xmllang + attribute DOMString xmllang /*setter raises(DOMException)*/; - attribute core::DOMString xmlspace + attribute DOMString xmlspace /*setter raises(DOMException)*/; }; diff --git a/WebCore/svg/SVGPathSegList.cpp b/WebCore/svg/SVGPathSegList.cpp index d9d6310..e1215e5 100644 --- a/WebCore/svg/SVGPathSegList.cpp +++ b/WebCore/svg/SVGPathSegList.cpp @@ -28,6 +28,7 @@ #include "FloatConversion.h" #include "FloatPoint.h" +#include "FloatSize.h" #include "Path.h" #include "PathTraversalState.h" #include "SVGPathSegArc.h" @@ -111,6 +112,7 @@ Path SVGPathSegList::toPathData() Path pathData; int len = numberOfItems(); ExceptionCode ec = 0; + FloatPoint previousEndPoint(0, 0); for (int i = 0; i < len; ++i) { SVGPathSeg* segment = getItem(i, ec).get(); if (ec) @@ -119,21 +121,37 @@ Path SVGPathSegList::toPathData() case SVGPathSeg::PATHSEG_MOVETO_ABS: { SVGPathSegMovetoAbs* moveTo = static_cast<SVGPathSegMovetoAbs*>(segment); - pathData.moveTo(FloatPoint(moveTo->x(), moveTo->y())); + FloatPoint endPoint(moveTo->x(), moveTo->y()); + pathData.moveTo(endPoint); + previousEndPoint = endPoint; break; } case SVGPathSeg::PATHSEG_LINETO_ABS: { SVGPathSegLinetoAbs* lineTo = static_cast<SVGPathSegLinetoAbs*>(segment); - pathData.addLineTo(FloatPoint(lineTo->x(), lineTo->y())); + FloatPoint endPoint(lineTo->x(), lineTo->y()); + pathData.addLineTo(endPoint); + previousEndPoint = endPoint; break; } case SVGPathSeg::PATHSEG_CURVETO_CUBIC_ABS: { SVGPathSegCurvetoCubicAbs* curveTo = static_cast<SVGPathSegCurvetoCubicAbs*>(segment); + FloatPoint endPoint(curveTo->x(), curveTo->y()); pathData.addBezierCurveTo(FloatPoint(curveTo->x1(), curveTo->y1()), FloatPoint(curveTo->x2(), curveTo->y2()), - FloatPoint(curveTo->x(), curveTo->y())); + endPoint); + previousEndPoint = endPoint; + break; + } + case SVGPathSeg::PATHSEG_CURVETO_CUBIC_REL: + { + SVGPathSegCurvetoCubicRel* curveTo = static_cast<SVGPathSegCurvetoCubicRel*>(segment); + FloatSize endPoint(curveTo->x(), curveTo->y()); + pathData.addBezierCurveTo(previousEndPoint + FloatSize(curveTo->x1(), curveTo->y1()), + previousEndPoint + FloatSize(curveTo->x2(), curveTo->y2()), + previousEndPoint + endPoint); + previousEndPoint += endPoint; break; } case SVGPathSeg::PATHSEG_CLOSEPATH: diff --git a/WebCore/svg/SVGSVGElement.cpp b/WebCore/svg/SVGSVGElement.cpp index a719323..6d88c37 100644 --- a/WebCore/svg/SVGSVGElement.cpp +++ b/WebCore/svg/SVGSVGElement.cpp @@ -1,6 +1,6 @@ /* Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org> - 2004, 2005, 2006, 2007, 2008 Rob Buis <buis@kde.org> + 2004, 2005, 2006, 2007, 2008, 2010 Rob Buis <buis@kde.org> 2007 Apple Inc. All rights reserved. This library is free software; you can redistribute it and/or @@ -592,6 +592,27 @@ void SVGSVGElement::documentDidBecomeActive() unpauseAnimations(); } +// getElementById on SVGSVGElement is restricted to only the child subtree defined by the <svg> element. +// See http://www.w3.org/TR/SVG11/struct.html#InterfaceSVGSVGElement +Element* SVGSVGElement::getElementById(const AtomicString& id) const +{ + Element* element = document()->getElementById(id); + if (element && element->isDescendantOf(this)) + return element; + + // Fall back to traversing our subtree. Duplicate ids are allowed, the first found will + // be returned. + for (Node* node = traverseNextNode(this); node; node = node->traverseNextNode(this)) { + if (!node->isElementNode()) + continue; + + Element* element = static_cast<Element*>(node); + if (element->hasID() && element->getIdAttribute() == id) + return element; + } + return 0; +} + } #endif // ENABLE(SVG) diff --git a/WebCore/svg/SVGSVGElement.h b/WebCore/svg/SVGSVGElement.h index 88ce958..099f9a1 100644 --- a/WebCore/svg/SVGSVGElement.h +++ b/WebCore/svg/SVGSVGElement.h @@ -1,6 +1,6 @@ /* Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org> - 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org> + 2004, 2005, 2006, 2007, 2010 Rob Buis <buis@kde.org> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -129,6 +129,8 @@ namespace WebCore { bool isOutermostSVG() const; + Element* getElementById(const AtomicString&) const; + private: virtual bool selfHasRelativeLengths() const; diff --git a/WebCore/svg/SVGSVGElement.idl b/WebCore/svg/SVGSVGElement.idl index 46a17b0..0d9c344 100644 --- a/WebCore/svg/SVGSVGElement.idl +++ b/WebCore/svg/SVGSVGElement.idl @@ -1,6 +1,6 @@ /* Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org> - Copyright (C) 2004, 2005 Rob Buis <buis@kde.org> + Copyright (C) 2004, 2005, 2010 Rob Buis <buis@kde.org> Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com> Copyright (C) 2006 Apple Computer, Inc. All rights reserved. @@ -37,9 +37,9 @@ module svg { readonly attribute SVGAnimatedLength y; readonly attribute SVGAnimatedLength width; readonly attribute SVGAnimatedLength height; - attribute core::DOMString contentScriptType + attribute DOMString contentScriptType /*setter raises(DOMException)*/; - attribute core::DOMString contentStyleType + attribute DOMString contentStyleType /*setter raises(DOMException)*/; readonly attribute [Immutable] SVGRect viewport; readonly attribute float pixelUnitToMillimeterX; @@ -62,9 +62,9 @@ module svg { boolean animationsPaused(); float getCurrentTime(); void setCurrentTime(in float seconds); - core::NodeList getIntersectionList(in SVGRect rect, + NodeList getIntersectionList(in SVGRect rect, in SVGElement referenceElement); - core::NodeList getEnclosureList(in SVGRect rect, + NodeList getEnclosureList(in SVGRect rect, in SVGElement referenceElement); boolean checkIntersection(in SVGElement element, in SVGRect rect); @@ -80,6 +80,7 @@ module svg { SVGRect createSVGRect(); SVGTransform createSVGTransform(); SVGTransform createSVGTransformFromMatrix(in SVGMatrix matrix); + Element getElementById(in DOMString elementId); }; } diff --git a/WebCore/svg/SVGStringList.idl b/WebCore/svg/SVGStringList.idl index 7bdd5ed..2af03ad 100644 --- a/WebCore/svg/SVGStringList.idl +++ b/WebCore/svg/SVGStringList.idl @@ -29,19 +29,19 @@ module svg { readonly attribute unsigned long numberOfItems; void clear() - raises(core::DOMException); - core::DOMString initialize(in core::DOMString item) - raises(core::DOMException, SVGException); - core::DOMString getItem(in unsigned long index) - raises(core::DOMException); - core::DOMString insertItemBefore(in core::DOMString item, in unsigned long index) - raises(core::DOMException, SVGException); - core::DOMString replaceItem(in core::DOMString item, in unsigned long index) - raises(core::DOMException, SVGException); - core::DOMString removeItem(in unsigned long index) - raises(core::DOMException); - core::DOMString appendItem(in core::DOMString item) - raises(core::DOMException, SVGException); + raises(DOMException); + DOMString initialize(in DOMString item) + raises(DOMException, SVGException); + DOMString getItem(in unsigned long index) + raises(DOMException); + DOMString insertItemBefore(in DOMString item, in unsigned long index) + raises(DOMException, SVGException); + DOMString replaceItem(in DOMString item, in unsigned long index) + raises(DOMException, SVGException); + DOMString removeItem(in unsigned long index) + raises(DOMException); + DOMString appendItem(in DOMString item) + raises(DOMException, SVGException); }; } diff --git a/WebCore/svg/SVGStylable.idl b/WebCore/svg/SVGStylable.idl index 2da2b77..c997476 100644 --- a/WebCore/svg/SVGStylable.idl +++ b/WebCore/svg/SVGStylable.idl @@ -29,9 +29,9 @@ module svg { interface [Conditional=SVG, ObjCProtocol, OmitConstructor] SVGStylable { readonly attribute SVGAnimatedString className; - readonly attribute css::CSSStyleDeclaration style; + readonly attribute CSSStyleDeclaration style; - css::CSSValue getPresentationAttribute(in core::DOMString name); + CSSValue getPresentationAttribute(in DOMString name); }; } diff --git a/WebCore/svg/SVGStyleElement.cpp b/WebCore/svg/SVGStyleElement.cpp index d997074..48fbe69 100644 --- a/WebCore/svg/SVGStyleElement.cpp +++ b/WebCore/svg/SVGStyleElement.cpp @@ -114,7 +114,7 @@ void SVGStyleElement::removedFromDocument() void SVGStyleElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta) { SVGElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta); - StyleElement::process(this); + StyleElement::process(this, 0); } StyleSheet* SVGStyleElement::sheet() diff --git a/WebCore/svg/SVGStyleElement.idl b/WebCore/svg/SVGStyleElement.idl index e47ed1d..a93cfa6 100644 --- a/WebCore/svg/SVGStyleElement.idl +++ b/WebCore/svg/SVGStyleElement.idl @@ -28,11 +28,11 @@ module svg { interface [Conditional=SVG] SVGStyleElement : SVGElement, SVGLangSpace { - attribute core::DOMString type + attribute DOMString type setter raises(DOMException); - attribute core::DOMString media + attribute DOMString media setter raises(DOMException); - attribute core::DOMString title + attribute DOMString title setter raises(DOMException); }; diff --git a/WebCore/svg/SVGStyledElement.cpp b/WebCore/svg/SVGStyledElement.cpp index 1d7e4ec..6b55683 100644 --- a/WebCore/svg/SVGStyledElement.cpp +++ b/WebCore/svg/SVGStyledElement.cpp @@ -325,11 +325,11 @@ PassRefPtr<RenderStyle> SVGStyledElement::resolveStyle(RenderStyle* parentStyle) PassRefPtr<CSSValue> SVGStyledElement::getPresentationAttribute(const String& name) { - if (!mappedAttributes()) + if (!attributeMap()) return 0; QualifiedName attributeName(nullAtom, name, nullAtom); - Attribute* attr = mappedAttributes()->getAttributeItem(attributeName); + Attribute* attr = attributeMap()->getAttributeItem(attributeName); if (!attr || !attr->isMappedAttribute() || !attr->style()) return 0; @@ -366,10 +366,43 @@ AffineTransform SVGStyledElement::localCoordinateSpaceTransform(SVGLocatable::CT return AffineTransform(); } -void SVGStyledElement::updateRelativeLengthsInformation(bool, SVGStyledElement*) +void SVGStyledElement::updateRelativeLengthsInformation(bool hasRelativeLengths, SVGStyledElement* element) { - // FIXME: The actual code will land in a follow-up patch. - // See https://bugs.webkit.org/show_bug.cgi?id=41566 + // If we're not yet in a document, this function will be called again from insertedIntoDocument(). Do nothing now. + if (!inDocument()) + return; + + // An element wants to notify us that its own relative lengths state changed. + // Register it in the relative length map, and register us in the parent relative length map. + // Register the parent in the grandparents map, etc. Repeat procedure until the root of the SVG tree. + + if (hasRelativeLengths) + m_elementsWithRelativeLengths.add(element); + else { + if (!m_elementsWithRelativeLengths.contains(element)) { + // We were never registered. Do nothing. + return; + } + + m_elementsWithRelativeLengths.remove(element); + } + + // Find first styled parent node, and notify it that we've changed our relative length state. + Node* node = parent(); + while (node) { + if (!node->isSVGElement()) + break; + + SVGElement* element = static_cast<SVGElement*>(node); + if (!element->isStyled()) { + node = node->parent(); + continue; + } + + // Register us in the parent element map. + static_cast<SVGStyledElement*>(element)->updateRelativeLengthsInformation(hasRelativeLengths, this); + break; + } } } diff --git a/WebCore/svg/SVGStyledElement.h b/WebCore/svg/SVGStyledElement.h index d0b52db..dcfc96a 100644 --- a/WebCore/svg/SVGStyledElement.h +++ b/WebCore/svg/SVGStyledElement.h @@ -40,8 +40,7 @@ namespace WebCore { virtual String title() const; - // FIXME: The actual code will land in a follow-up patch. - bool hasRelativeLengths() const { return selfHasRelativeLengths(); } + bool hasRelativeLengths() const { return !m_elementsWithRelativeLengths.isEmpty(); } virtual bool isStyled() const { return true; } virtual bool supportsMarkers() const { return false; } @@ -81,6 +80,7 @@ namespace WebCore { virtual bool selfHasRelativeLengths() const { return false; } private: + HashSet<SVGStyledElement*> m_elementsWithRelativeLengths; DECLARE_ANIMATED_PROPERTY(SVGStyledElement, HTMLNames::classAttr, String, ClassName, className) }; diff --git a/WebCore/svg/SVGTests.idl b/WebCore/svg/SVGTests.idl index 8a5f7c2..905ba5e 100644 --- a/WebCore/svg/SVGTests.idl +++ b/WebCore/svg/SVGTests.idl @@ -31,7 +31,7 @@ module svg { readonly attribute SVGStringList requiredExtensions; readonly attribute SVGStringList systemLanguage; - boolean hasExtension(in core::DOMString extension); + boolean hasExtension(in DOMString extension); }; } diff --git a/WebCore/svg/SVGUseElement.cpp b/WebCore/svg/SVGUseElement.cpp index b90bd53..5ca560a 100644 --- a/WebCore/svg/SVGUseElement.cpp +++ b/WebCore/svg/SVGUseElement.cpp @@ -63,6 +63,7 @@ SVGUseElement::SVGUseElement(const QualifiedName& tagName, Document* doc) , m_y(LengthModeHeight) , m_width(LengthModeWidth) , m_height(LengthModeHeight) + , m_updatesBlocked(false) , m_isPendingResource(false) , m_needsShadowTreeRecreation(false) { @@ -314,13 +315,17 @@ void SVGUseElement::updateContainerOffsets() void SVGUseElement::recalcStyle(StyleChange change) { // Eventually mark shadow root element needing style recalc - if (needsStyleRecalc() && m_targetElementInstance) { + if (needsStyleRecalc() && m_targetElementInstance && !m_updatesBlocked) { if (SVGElement* shadowRoot = m_targetElementInstance->shadowTreeElement()) shadowRoot->setNeedsStyleRecalc(); } SVGStyledTransformableElement::recalcStyle(change); + // Assure that the shadow tree has not been marked for recreation, while we're building it. + if (m_updatesBlocked) + ASSERT(!m_needsShadowTreeRecreation); + bool needsStyleUpdate = !m_needsShadowTreeRecreation; if (m_needsShadowTreeRecreation) { static_cast<RenderSVGShadowTreeRootContainer*>(renderer())->markShadowTreeForRecreation(); @@ -441,6 +446,26 @@ void SVGUseElement::buildPendingResource() void SVGUseElement::buildShadowAndInstanceTree(SVGShadowTreeRootElement* shadowRoot) { + struct ShadowTreeUpdateBlocker { + ShadowTreeUpdateBlocker(SVGUseElement* currentUseElement) + : useElement(currentUseElement) + { + useElement->setUpdatesBlocked(true); + } + + ~ShadowTreeUpdateBlocker() + { + useElement->setUpdatesBlocked(false); + } + + SVGUseElement* useElement; + }; + + // When cloning the target nodes, they may decide to synchronize style and/or animated SVG attributes. + // That causes calls to SVGElementInstance::updateAllInstancesOfElement(), which mark the shadow tree for recreation. + // Solution: block any updates to the shadow tree while we're building it. + ShadowTreeUpdateBlocker blocker(this); + String id = SVGURIReference::getTarget(href()); Element* targetElement = document()->getElementById(id); if (!targetElement) { @@ -584,8 +609,8 @@ void SVGUseElement::attach() void SVGUseElement::detach() { - SVGStyledTransformableElement::detach(); m_targetElementInstance = 0; + SVGStyledTransformableElement::detach(); } static bool isDirectReference(Node* n) @@ -959,6 +984,10 @@ SVGElementInstance* SVGUseElement::instanceForShadowTreeElement(Node* element, S void SVGUseElement::invalidateShadowTree() { + // Don't mutate the shadow tree while we're building it. + if (m_updatesBlocked) + return; + m_needsShadowTreeRecreation = true; setNeedsStyleRecalc(); } diff --git a/WebCore/svg/SVGUseElement.h b/WebCore/svg/SVGUseElement.h index bfda95e..cbbcd0f 100644 --- a/WebCore/svg/SVGUseElement.h +++ b/WebCore/svg/SVGUseElement.h @@ -68,6 +68,8 @@ namespace WebCore { SVGElementInstance* instanceForShadowTreeElement(Node* element) const; void invalidateShadowTree(); + void setUpdatesBlocked(bool blocked) { m_updatesBlocked = blocked; } + private: friend class RenderSVGShadowTreeRootContainer; bool isPendingResource() const { return m_isPendingResource; } @@ -110,6 +112,7 @@ namespace WebCore { void updateContainerOffsets(); void updateContainerSizes(); + bool m_updatesBlocked; bool m_isPendingResource; bool m_needsShadowTreeRecreation; String m_resourceId; diff --git a/WebCore/svg/SVGZoomEvent.idl b/WebCore/svg/SVGZoomEvent.idl index 8327bef..ea05012 100644 --- a/WebCore/svg/SVGZoomEvent.idl +++ b/WebCore/svg/SVGZoomEvent.idl @@ -25,7 +25,7 @@ module svg { - interface [Conditional=SVG] SVGZoomEvent : events::UIEvent { + interface [Conditional=SVG] SVGZoomEvent : UIEvent { readonly attribute [Immutable] SVGRect zoomRectScreen; readonly attribute float previousScale; readonly attribute [Immutable] SVGPoint previousTranslate; diff --git a/WebCore/svg/graphics/SVGImage.cpp b/WebCore/svg/graphics/SVGImage.cpp index 8260d99..ebd7703 100644 --- a/WebCore/svg/graphics/SVGImage.cpp +++ b/WebCore/svg/graphics/SVGImage.cpp @@ -255,7 +255,7 @@ bool SVGImage::dataChanged(bool allDataReceived) // FIXME: If this SVG ends up loading itself, we might leak the world. // The comment said that the Cache code does not know about CachedImages // holding Frames and won't know to break the cycle. But - m_page.set(new Page(m_chromeClient.get(), dummyContextMenuClient, dummyEditorClient, dummyDragClient, dummyInspectorClient, 0, 0, 0)); + m_page.set(new Page(m_chromeClient.get(), dummyContextMenuClient, dummyEditorClient, dummyDragClient, dummyInspectorClient, 0, 0, 0, 0)); m_page->settings()->setMediaEnabled(false); m_page->settings()->setJavaScriptEnabled(false); m_page->settings()->setPluginsEnabled(false); diff --git a/WebCore/websockets/WebSocket.cpp b/WebCore/websockets/WebSocket.cpp index 561b821..91761fb 100644 --- a/WebCore/websockets/WebSocket.cpp +++ b/WebCore/websockets/WebSocket.cpp @@ -179,7 +179,10 @@ void WebSocket::close() return; m_state = CLOSED; m_bufferedAmountAfterClose = m_channel->bufferedAmount(); - m_channel->close(); + // didClose notification may be already queued, which we will inadvertently process while waiting for bufferedAmount() to return. + // In this case m_channel will be set to null during didClose() call, thus we need to test validness of m_channel here. + if (m_channel) + m_channel->close(); } const KURL& WebSocket::url() const diff --git a/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp b/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp index f8d1230..fd82591 100644 --- a/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp +++ b/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp @@ -300,6 +300,7 @@ bool WorkerThreadableWebSocketChannel::Bridge::send(const String& message) ASSERT(m_peer); setMethodNotCompleted(); m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocketChannel::mainThreadSend, m_peer, message)); + RefPtr<Bridge> protect(this); waitForMethodCompletion(); ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.get(); return clientWrapper && clientWrapper->sent(); @@ -321,6 +322,7 @@ unsigned long WorkerThreadableWebSocketChannel::Bridge::bufferedAmount() ASSERT(m_peer); setMethodNotCompleted(); m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocketChannel::mainThreadBufferedAmount, m_peer)); + RefPtr<Bridge> protect(this); waitForMethodCompletion(); ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.get(); if (clientWrapper) @@ -404,6 +406,8 @@ void WorkerThreadableWebSocketChannel::Bridge::setMethodNotCompleted() m_workerClientWrapper->clearSyncMethodDone(); } +// Caller of this function should hold a reference to the bridge, because this function may call WebSocket::didClose() in the end, +// which causes the bridge to get disconnected from the WebSocket and deleted if there is no other reference. void WorkerThreadableWebSocketChannel::Bridge::waitForMethodCompletion() { if (!m_workerContext) @@ -411,8 +415,8 @@ void WorkerThreadableWebSocketChannel::Bridge::waitForMethodCompletion() WorkerRunLoop& runLoop = m_workerContext->thread()->runLoop(); MessageQueueWaitResult result = MessageQueueMessageReceived; ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.get(); - while (clientWrapper && !clientWrapper->syncMethodDone() && result != MessageQueueTerminated) { - result = runLoop.runInMode(m_workerContext.get(), m_taskMode); + while (m_workerContext && clientWrapper && !clientWrapper->syncMethodDone() && result != MessageQueueTerminated) { + result = runLoop.runInMode(m_workerContext.get(), m_taskMode); // May cause this bridge to get disconnected, which makes m_workerContext become null. clientWrapper = m_workerClientWrapper.get(); } } diff --git a/WebCore/workers/DefaultSharedWorkerRepository.cpp b/WebCore/workers/DefaultSharedWorkerRepository.cpp index 8186f30..4a8e947 100644 --- a/WebCore/workers/DefaultSharedWorkerRepository.cpp +++ b/WebCore/workers/DefaultSharedWorkerRepository.cpp @@ -387,7 +387,7 @@ void DefaultSharedWorkerRepository::connectToWorker(PassRefPtr<SharedWorker> wor if (proxy->thread()) proxy->thread()->runLoop().postTask(SharedWorkerConnectTask::create(port)); else { - RefPtr<SharedWorkerScriptLoader> loader = adoptRef(new SharedWorkerScriptLoader(worker, port.release(), proxy.release())); + RefPtr<SharedWorkerScriptLoader> loader = adoptRef(new SharedWorkerScriptLoader(worker, port, proxy.release())); loader->load(url); } } diff --git a/WebCore/workers/SharedWorker.cpp b/WebCore/workers/SharedWorker.cpp index cd856ff..b25b28e 100644 --- a/WebCore/workers/SharedWorker.cpp +++ b/WebCore/workers/SharedWorker.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2009 Google Inc. All rights reserved. + * Copyright (C) 2010 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -42,22 +43,32 @@ namespace WebCore { -SharedWorker::SharedWorker(const String& url, const String& name, ScriptExecutionContext* context, ExceptionCode& ec) +inline SharedWorker::SharedWorker(ScriptExecutionContext* context) : AbstractWorker(context) { - RefPtr<MessageChannel> channel = MessageChannel::create(scriptExecutionContext()); - m_port = channel->port1(); +} + +PassRefPtr<SharedWorker> SharedWorker::create(const String& url, const String& name, ScriptExecutionContext* context, ExceptionCode& ec) +{ + RefPtr<SharedWorker> worker = adoptRef(new SharedWorker(context)); + + RefPtr<MessageChannel> channel = MessageChannel::create(context); + worker->m_port = channel->port1(); OwnPtr<MessagePortChannel> remotePort = channel->port2()->disentangle(ec); - ASSERT(!ec); + ASSERT(remotePort); + + KURL scriptURL = worker->resolveURL(url, ec); + if (scriptURL.isEmpty()) + return 0; + + SharedWorkerRepository::connect(worker.get(), remotePort.release(), scriptURL, name, ec); - KURL scriptUrl = resolveURL(url, ec); - if (ec) - return; - SharedWorkerRepository::connect(this, remotePort.release(), scriptUrl, name, ec); #if ENABLE(INSPECTOR) - if (InspectorController* inspector = scriptExecutionContext()->inspectorController()) - inspector->didCreateWorker(asID(), scriptUrl.string(), true); + if (InspectorController* inspector = context->inspectorController()) + inspector->didCreateWorker(worker->asID(), scriptURL.string(), true); #endif + + return worker.release(); } SharedWorker::~SharedWorker() diff --git a/WebCore/workers/SharedWorker.h b/WebCore/workers/SharedWorker.h index 24aa02d..07aff19 100644 --- a/WebCore/workers/SharedWorker.h +++ b/WebCore/workers/SharedWorker.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2009 Google Inc. All rights reserved. + * Copyright (C) 2010 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -33,26 +34,21 @@ #include "AbstractWorker.h" -#include <wtf/PassRefPtr.h> -#include <wtf/RefPtr.h> - #if ENABLE(SHARED_WORKERS) namespace WebCore { class SharedWorker : public AbstractWorker { public: - static PassRefPtr<SharedWorker> create(const String& url, const String& name, ScriptExecutionContext* context, ExceptionCode& ec) - { - return adoptRef(new SharedWorker(url, name, context, ec)); - } - ~SharedWorker(); - MessagePort* port() const { return m_port.get(); } + static PassRefPtr<SharedWorker> create(const String& url, const String& name, ScriptExecutionContext*, ExceptionCode&); + virtual ~SharedWorker(); - virtual SharedWorker* toSharedWorker() { return this; } + MessagePort* port() const { return m_port.get(); } private: - SharedWorker(const String& url, const String& name, ScriptExecutionContext*, ExceptionCode&); + SharedWorker(ScriptExecutionContext*); + + virtual SharedWorker* toSharedWorker() { return this; } RefPtr<MessagePort> m_port; }; diff --git a/WebCore/workers/Worker.cpp b/WebCore/workers/Worker.cpp index 53ca9ae..fda7c72 100644 --- a/WebCore/workers/Worker.cpp +++ b/WebCore/workers/Worker.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008 Apple Inc. All Rights Reserved. + * Copyright (C) 2008, 2010 Apple Inc. All Rights Reserved. * Copyright (C) 2009 Google Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without @@ -50,21 +50,32 @@ namespace WebCore { -Worker::Worker(const String& url, ScriptExecutionContext* context, ExceptionCode& ec) +inline Worker::Worker(ScriptExecutionContext* context) : AbstractWorker(context) , m_contextProxy(WorkerContextProxy::create(this)) { - KURL scriptURL = resolveURL(url, ec); - if (ec) - return; +} + +PassRefPtr<Worker> Worker::create(const String& url, ScriptExecutionContext* context, ExceptionCode& ec) +{ + RefPtr<Worker> worker = adoptRef(new Worker(context)); + + KURL scriptURL = worker->resolveURL(url, ec); + if (scriptURL.isEmpty()) + return 0; + + worker->m_scriptLoader = adoptPtr(new WorkerScriptLoader(ResourceRequestBase::TargetIsWorker)); + worker->m_scriptLoader->loadAsynchronously(context, scriptURL, DenyCrossOriginRequests, worker.get()); + + // The worker context does not exist while loading, so we must ensure that the worker object is not collected, nor are its event listeners. + worker->setPendingActivity(worker.get()); - m_scriptLoader = new WorkerScriptLoader(ResourceRequestBase::TargetIsWorker); - m_scriptLoader->loadAsynchronously(scriptExecutionContext(), scriptURL, DenyCrossOriginRequests, this); - setPendingActivity(this); // The worker context does not exist while loading, so we must ensure that the worker object is not collected, as well as its event listeners. #if ENABLE(INSPECTOR) - if (InspectorController* inspector = scriptExecutionContext()->inspectorController()) - inspector->didCreateWorker(asID(), scriptURL.string(), false); + if (InspectorController* inspector = context->inspectorController()) + inspector->didCreateWorker(worker->asID(), scriptURL.string(), false); #endif + + return worker.release(); } Worker::~Worker() diff --git a/WebCore/workers/Worker.h b/WebCore/workers/Worker.h index 6b8fa84..69ae92e 100644 --- a/WebCore/workers/Worker.h +++ b/WebCore/workers/Worker.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008 Apple Inc. All Rights Reserved. + * Copyright (C) 2008, 2010 Apple Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -53,13 +53,13 @@ namespace WebCore { class Worker : public AbstractWorker, private WorkerScriptLoaderClient { public: - static PassRefPtr<Worker> create(const String& url, ScriptExecutionContext* context, ExceptionCode& ec) { return adoptRef(new Worker(url, context, ec)); } - ~Worker(); + static PassRefPtr<Worker> create(const String& url, ScriptExecutionContext*, ExceptionCode&); + virtual ~Worker(); virtual Worker* toWorker() { return this; } - void postMessage(PassRefPtr<SerializedScriptValue>, ExceptionCode&); - void postMessage(PassRefPtr<SerializedScriptValue>, const MessagePortArray*, ExceptionCode&); + void postMessage(PassRefPtr<SerializedScriptValue> message, ExceptionCode&); + void postMessage(PassRefPtr<SerializedScriptValue> message, const MessagePortArray*, ExceptionCode&); // FIXME: remove this when we update the ObjC bindings (bug #28774). void postMessage(PassRefPtr<SerializedScriptValue> message, MessagePort*, ExceptionCode&); @@ -72,7 +72,7 @@ namespace WebCore { DEFINE_ATTRIBUTE_EVENT_LISTENER(message); private: - Worker(const String&, ScriptExecutionContext*, ExceptionCode&); + Worker(ScriptExecutionContext*); virtual void notifyFinished(); diff --git a/WebCore/workers/WorkerContext.cpp b/WebCore/workers/WorkerContext.cpp index c710ba6..36a9f94 100644 --- a/WebCore/workers/WorkerContext.cpp +++ b/WebCore/workers/WorkerContext.cpp @@ -182,7 +182,7 @@ void WorkerContext::postTask(PassOwnPtr<Task> task) thread()->runLoop().postTask(task); } -int WorkerContext::setTimeout(ScheduledAction* action, int timeout) +int WorkerContext::setTimeout(PassOwnPtr<ScheduledAction> action, int timeout) { return DOMTimer::install(scriptExecutionContext(), action, timeout, true); } @@ -192,7 +192,7 @@ void WorkerContext::clearTimeout(int timeoutId) DOMTimer::removeById(scriptExecutionContext(), timeoutId); } -int WorkerContext::setInterval(ScheduledAction* action, int timeout) +int WorkerContext::setInterval(PassOwnPtr<ScheduledAction> action, int timeout) { return DOMTimer::install(scriptExecutionContext(), action, timeout, false); } diff --git a/WebCore/workers/WorkerContext.h b/WebCore/workers/WorkerContext.h index 4091db1..56b0324 100644 --- a/WebCore/workers/WorkerContext.h +++ b/WebCore/workers/WorkerContext.h @@ -89,9 +89,9 @@ namespace WebCore { WorkerNavigator* navigator() const; // Timers - int setTimeout(ScheduledAction*, int timeout); + int setTimeout(PassOwnPtr<ScheduledAction>, int timeout); void clearTimeout(int timeoutId); - int setInterval(ScheduledAction*, int timeout); + int setInterval(PassOwnPtr<ScheduledAction>, int timeout); void clearInterval(int timeoutId); // ScriptExecutionContext diff --git a/WebCore/workers/WorkerMessagingProxy.cpp b/WebCore/workers/WorkerMessagingProxy.cpp index 2180dd4..21994cc 100644 --- a/WebCore/workers/WorkerMessagingProxy.cpp +++ b/WebCore/workers/WorkerMessagingProxy.cpp @@ -243,7 +243,7 @@ void WorkerMessagingProxy::startWorkerContext(const KURL& scriptURL, const Strin void WorkerMessagingProxy::postMessageToWorkerObject(PassRefPtr<SerializedScriptValue> message, PassOwnPtr<MessagePortChannelArray> channels) { - m_scriptExecutionContext->postTask(MessageWorkerTask::create(message, channels.release(), this)); + m_scriptExecutionContext->postTask(MessageWorkerTask::create(message, channels, this)); } void WorkerMessagingProxy::postMessageToWorkerContext(PassRefPtr<SerializedScriptValue> message, PassOwnPtr<MessagePortChannelArray> channels) @@ -253,9 +253,9 @@ void WorkerMessagingProxy::postMessageToWorkerContext(PassRefPtr<SerializedScrip if (m_workerThread) { ++m_unconfirmedMessageCount; - m_workerThread->runLoop().postTask(MessageWorkerContextTask::create(message, channels.release())); + m_workerThread->runLoop().postTask(MessageWorkerContextTask::create(message, channels)); } else - m_queuedEarlyTasks.append(MessageWorkerContextTask::create(message, channels.release())); + m_queuedEarlyTasks.append(MessageWorkerContextTask::create(message, channels)); } void WorkerMessagingProxy::postTaskForModeToWorkerContext(PassOwnPtr<ScriptExecutionContext::Task> task, const String& mode) diff --git a/WebCore/xml/XMLHttpRequest.cpp b/WebCore/xml/XMLHttpRequest.cpp index da95d32..8762bb5 100644 --- a/WebCore/xml/XMLHttpRequest.cpp +++ b/WebCore/xml/XMLHttpRequest.cpp @@ -872,6 +872,10 @@ void XMLHttpRequest::didFail(const ResourceError& error) return; } + // Network failures are already reported to Web Inspector by ResourceLoader. + if (error.domain() == errorDomainWebKitInternal) + reportUnsafeUsage(scriptExecutionContext(), "XMLHttpRequest cannot load " + error.failingURL() + ". " + error.localizedDescription()); + m_exceptionCode = XMLHttpRequestException::NETWORK_ERR; networkError(); } diff --git a/WebCore/xml/XPathEvaluator.idl b/WebCore/xml/XPathEvaluator.idl index c075b01..30df23a 100644 --- a/WebCore/xml/XPathEvaluator.idl +++ b/WebCore/xml/XPathEvaluator.idl @@ -21,7 +21,7 @@ module xpath { interface [CanBeConstructed, Conditional=XPATH] XPathEvaluator { XPathExpression createExpression(in DOMString expression, in XPathNSResolver resolver) - raises(core::DOMException); + raises(DOMException); XPathNSResolver createNSResolver(in Node nodeResolver); diff --git a/WebCore/xml/XPathFunctions.cpp b/WebCore/xml/XPathFunctions.cpp index a727680..41bf795 100644 --- a/WebCore/xml/XPathFunctions.cpp +++ b/WebCore/xml/XPathFunctions.cpp @@ -516,11 +516,13 @@ Value FunSubstring::evaluate() const if (pos > long(s.length())) return ""; - if (haveLength && pos < 1) { - len -= 1 - pos; + if (pos < 1) { + if (haveLength) { + len -= 1 - pos; + if (len < 1) + return ""; + } pos = 1; - if (len < 1) - return ""; } return s.substring(pos - 1, len); diff --git a/WebCore/xml/XSLTProcessorLibxslt.cpp b/WebCore/xml/XSLTProcessorLibxslt.cpp index 4ac9f4c..ed4303d 100644 --- a/WebCore/xml/XSLTProcessorLibxslt.cpp +++ b/WebCore/xml/XSLTProcessorLibxslt.cpp @@ -297,7 +297,7 @@ bool XSLTProcessor::transformToString(Node* sourceNode, String& mimeType, String xsltTransformContextPtr transformContext = xsltNewTransformContext(sheet, sourceDoc); registerXSLTExtensions(transformContext); - // <http://bugs.webkit.org/show_bug.cgi?id=16077>: XSLT processor <xsl:sort> algorithm only compares by code point + // <http://bugs.webkit.org/show_bug.cgi?id=16077>: XSLT processor <xsl:sort> algorithm only compares by code point. xsltSetCtxtSortFunc(transformContext, xsltUnicodeSortFunction); // This is a workaround for a bug in libxslt. |